Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /proc/thread-self/root/usr/share/jj/static/js/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : //proc/thread-self/root/usr/share/jj/static/js/app.js

/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "rainloop/v/0.0.0/static/js/";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 548);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/*!*****************************!*\
  !*** ./dev/Common/Enums.js ***!
  \*****************************/
/*! exports provided: FileType, StorageResultType, Focused, State, StateType, Capa, KeyState, FolderType, ServerFolderType, LoginSignMeTypeAsString, LoginSignMeType, ComposeType, UploadErrorCode, SetSystemFoldersNotification, ClientSideKeyName, EventKeyCode, MessageSetAction, MessageSelectAction, DesktopNotification, MessagePriority, EditorDefaultType, ServerSecure, SearchDateType, SaveSettingsStep, Layout, FilterConditionField, FilterConditionType, FiltersAction, FilterRulesType, SignedVerifyStatus, ContactPropertyType, Magics, Ports, Notification */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FileType", function() { return FileType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StorageResultType", function() { return StorageResultType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Focused", function() { return Focused; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "State", function() { return State; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StateType", function() { return StateType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Capa", function() { return Capa; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeyState", function() { return KeyState; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FolderType", function() { return FolderType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ServerFolderType", function() { return ServerFolderType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoginSignMeTypeAsString", function() { return LoginSignMeTypeAsString; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoginSignMeType", function() { return LoginSignMeType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComposeType", function() { return ComposeType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UploadErrorCode", function() { return UploadErrorCode; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SetSystemFoldersNotification", function() { return SetSystemFoldersNotification; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ClientSideKeyName", function() { return ClientSideKeyName; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventKeyCode", function() { return EventKeyCode; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MessageSetAction", function() { return MessageSetAction; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MessageSelectAction", function() { return MessageSelectAction; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DesktopNotification", function() { return DesktopNotification; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MessagePriority", function() { return MessagePriority; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EditorDefaultType", function() { return EditorDefaultType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ServerSecure", function() { return ServerSecure; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SearchDateType", function() { return SearchDateType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SaveSettingsStep", function() { return SaveSettingsStep; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Layout", function() { return Layout; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FilterConditionField", function() { return FilterConditionField; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FilterConditionType", function() { return FilterConditionType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FiltersAction", function() { return FiltersAction; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FilterRulesType", function() { return FilterRulesType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SignedVerifyStatus", function() { return SignedVerifyStatus; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContactPropertyType", function() { return ContactPropertyType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Magics", function() { return Magics; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Ports", function() { return Ports; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Notification", function() { return Notification; });
/* eslint quote-props: 0 */

/**
 * @enum {string}
 */
var FileType = {
  'Unknown': 'unknown',
  'Text': 'text',
  'Html': 'html',
  'Code': 'code',
  'Eml': 'eml',
  'WordText': 'word-text',
  'Pdf': 'pdf',
  'Image': 'image',
  'Audio': 'audio',
  'Video': 'video',
  'Sheet': 'sheet',
  'Presentation': 'presentation',
  'Certificate': 'certificate',
  'CertificateBin': 'certificate-bin',
  'Archive': 'archive'
};
/**
 * @enum {string}
 */

var StorageResultType = {
  'Success': 'success',
  'Abort': 'abort',
  'Error': 'error',
  'Unload': 'unload'
};
/**
 * @enum {string}
 */

var Focused = {
  'None': 'none',
  'MessageList': 'message-list',
  'MessageView': 'message-view',
  'FolderList': 'folder-list'
};
/**
 * @enum {number}
 */

var State = {
  'Empty': 10,
  'Login': 20,
  'Auth': 30
};
/**
 * @enum {number}
 */

var StateType = {
  'Webmail': 0,
  'Admin': 1
};
/**
 * @enum {string}
 */

var Capa = {
  'TwoFactor': 'TWO_FACTOR',
  'TwoFactorForce': 'TWO_FACTOR_FORCE',
  'OpenPGP': 'OPEN_PGP',
  'Prefetch': 'PREFETCH',
  'Gravatar': 'GRAVATAR',
  'Folders': 'FOLDERS',
  'Composer': 'COMPOSER',
  'Contacts': 'CONTACTS',
  'Reload': 'RELOAD',
  'Search': 'SEARCH',
  'SearchAdv': 'SEARCH_ADV',
  'MessageActions': 'MESSAGE_ACTIONS',
  'MessageListActions': 'MESSAGELIST_ACTIONS',
  'AttachmentsActions': 'ATTACHMENTS_ACTIONS',
  'DangerousActions': 'DANGEROUS_ACTIONS',
  'Settings': 'SETTINGS',
  'Help': 'HELP',
  'Themes': 'THEMES',
  'UserBackground': 'USER_BACKGROUND',
  'Sieve': 'SIEVE',
  'Filters': 'FILTERS',
  'AttachmentThumbnails': 'ATTACHMENT_THUMBNAILS',
  'Templates': 'TEMPLATES',
  'AutoLogout': 'AUTOLOGOUT',
  'AdditionalAccounts': 'ADDITIONAL_ACCOUNTS',
  'Identities': 'IDENTITIES'
};
/**
 * @enum {string}
 */

var KeyState = {
  'All': 'all',
  'None': 'none',
  'ContactList': 'contact-list',
  'MessageList': 'message-list',
  'FolderList': 'folder-list',
  'MessageView': 'message-view',
  'Compose': 'compose',
  'Settings': 'settings',
  'Menu': 'menu',
  'PopupComposeOpenPGP': 'compose-open-pgp',
  'PopupMessageOpenPGP': 'message-open-pgp',
  'PopupViewOpenPGP': 'view-open-pgp',
  'PopupKeyboardShortcutsHelp': 'popup-keyboard-shortcuts-help',
  'PopupAsk': 'popup-ask'
};
/**
 * @enum {number}
 */

var FolderType = {
  'Inbox': 10,
  'SentItems': 11,
  'Draft': 12,
  'Trash': 13,
  'Spam': 14,
  'Archive': 15,
  'NotSpam': 80,
  'User': 99
};
/**
 * @enum {number}
 */

var ServerFolderType = {
  'USER': 0,
  'INBOX': 1,
  'SENT': 2,
  'DRAFTS': 3,
  'JUNK': 4,
  'TRASH': 5,
  'IMPORTANT': 10,
  'FLAGGED': 11,
  'ALL': 12
};
/**
 * @enum {string}
 */

var LoginSignMeTypeAsString = {
  'DefaultOff': 'defaultoff',
  'DefaultOn': 'defaulton',
  'Unused': 'unused'
};
/**
 * @enum {number}
 */

var LoginSignMeType = {
  'DefaultOff': 0,
  'DefaultOn': 1,
  'Unused': 2
};
/**
 * @enum {string}
 */

var ComposeType = {
  'Empty': 'empty',
  'Reply': 'reply',
  'ReplyAll': 'replyall',
  'Forward': 'forward',
  'ForwardAsAttachment': 'forward-as-attachment',
  'Draft': 'draft',
  'EditAsNew': 'editasnew'
};
/**
 * @enum {number}
 */

var UploadErrorCode = {
  'Normal': 0,
  'FileIsTooBig': 1,
  'FilePartiallyUploaded': 2,
  'FileNoUploaded': 3,
  'MissingTempFolder': 4,
  'FileOnSaveingError': 5,
  'FileType': 98,
  'Unknown': 99
};
/**
 * @enum {number}
 */

var SetSystemFoldersNotification = {
  'None': 0,
  'Sent': 1,
  'Draft': 2,
  'Spam': 3,
  'Trash': 4,
  'Archive': 5
};
/**
 * @enum {number}
 */

var ClientSideKeyName = {
  'FoldersLashHash': 0,
  'MessagesInboxLastHash': 1,
  'MailBoxListSize': 2,
  'ExpandedFolders': 3,
  'FolderListSize': 4,
  'MessageListSize': 5,
  'LastReplyAction': 6,
  'LastSignMe': 7,
  'ComposeLastIdentityID': 8,
  'MessageHeaderFullInfo': 9,
  'MessageAttachmnetControls': 10
};
/**
 * @enum {number}
 */

var EventKeyCode = {
  'Backspace': 8,
  'Tab': 9,
  'Enter': 13,
  'Esc': 27,
  'PageUp': 33,
  'PageDown': 34,
  'Left': 37,
  'Right': 39,
  'Up': 38,
  'Down': 40,
  'End': 35,
  'Home': 36,
  'Space': 32,
  'Insert': 45,
  'Delete': 46,
  'A': 65,
  'S': 83
};
/**
 * @enum {number}
 */

var MessageSetAction = {
  'SetSeen': 0,
  'UnsetSeen': 1,
  'SetFlag': 2,
  'UnsetFlag': 3
};
/**
 * @enum {number}
 */

var MessageSelectAction = {
  'All': 0,
  'None': 1,
  'Invert': 2,
  'Unseen': 3,
  'Seen': 4,
  'Flagged': 5,
  'Unflagged': 6
};
/**
 * @enum {number}
 */

var DesktopNotification = {
  'Allowed': 0,
  'NotAllowed': 1,
  'Denied': 2,
  'NotSupported': 9
};
/**
 * @enum {number}
 */

var MessagePriority = {
  'Low': 5,
  'Normal': 3,
  'High': 1
};
/**
 * @enum {string}
 */

var EditorDefaultType = {
  'Html': 'Html',
  'Plain': 'Plain',
  'HtmlForced': 'HtmlForced',
  'PlainForced': 'PlainForced'
};
/**
 * @enum {number}
 */

var ServerSecure = {
  'None': 0,
  'SSL': 1,
  'TLS': 2
};
/**
 * @enum {number}
 */

var SearchDateType = {
  'All': -1,
  'Days3': 3,
  'Days7': 7,
  'Month': 30
};
/**
 * @enum {number}
 */

var SaveSettingsStep = {
  'Animate': -2,
  'Idle': -1,
  'TrueResult': 1,
  'FalseResult': 0
};
/**
 * @enum {number}
 */

var Layout = {
  'NoPreview': 0,
  'SidePreview': 1,
  'BottomPreview': 2
};
/**
 * @enum {string}
 */

var FilterConditionField = {
  'From': 'From',
  'Recipient': 'Recipient',
  'Subject': 'Subject',
  'Header': 'Header',
  'Size': 'Size'
};
/**
 * @enum {string}
 */

var FilterConditionType = {
  'Contains': 'Contains',
  'NotContains': 'NotContains',
  'EqualTo': 'EqualTo',
  'NotEqualTo': 'NotEqualTo',
  'Regex': 'Regex',
  'Over': 'Over',
  'Under': 'Under'
};
/**
 * @enum {string}
 */

var FiltersAction = {
  'None': 'None',
  'MoveTo': 'MoveTo',
  'Discard': 'Discard',
  'Vacation': 'Vacation',
  'Reject': 'Reject',
  'Forward': 'Forward'
};
/**
 * @enum {string}
 */

var FilterRulesType = {
  'All': 'All',
  'Any': 'Any'
};
/**
 * @enum {number}
 */

var SignedVerifyStatus = {
  'UnknownPublicKeys': -4,
  'UnknownPrivateKey': -3,
  'Unverified': -2,
  'Error': -1,
  'None': 0,
  'Success': 1
};
/**
 * @enum {number}
 */

var ContactPropertyType = {
  'Unknown': 0,
  'FullName': 10,
  'FirstName': 15,
  'LastName': 16,
  'MiddleName': 16,
  'Nick': 18,
  'NamePrefix': 20,
  'NameSuffix': 21,
  'Email': 30,
  'Phone': 31,
  'Web': 32,
  'Birthday': 40,
  'Facebook': 90,
  'Skype': 91,
  'GitHub': 92,
  'Note': 110,
  'Custom': 250
};
/**
 * @enum {number}
 */

var Magics = {
  'EventWhichMouseMiddle': 3,
  'ifvisibleIdle10s': 10,
  'BitLength2048': 2048,
  'BitLength1024': 1024,
  'Size350px': 350,
  'Size50px': 50,
  'Size20px': 20,
  'Size1px': 1,
  'Time30mInMin': 30,
  'Time60m': 60000 * 60,
  'Time30m': 60000 * 30,
  'Time20m': 60000 * 20,
  'Time15m': 60000 * 15,
  'Time10m': 60000 * 10,
  'Time5m': 60000 * 5,
  'Time3m': 60000 * 3,
  'Time2m': 60000 * 2,
  'Time1m': 60000,
  'Time30s': 30000,
  'Time10s': 10000,
  'Time7s': 7000,
  'Time5s': 5000,
  'Time3s': 3000,
  'Time1s': 1000,
  'Time500ms': 500,
  'Time350ms': 350,
  'Time250ms': 250,
  'Time200ms': 200,
  'Time100ms': 100,
  'Time50ms': 50,
  'Time20ms': 20,
  'Time10ms': 10,
  'Time1ms': 1
};
/**
 * @enum {number}
 */

var Ports = {
  'Imap': 143,
  'ImapSsl': 993,
  'Smtp': 25,
  'SmtpSsl': 465,
  'SmtpStartTls': 587
};
/**
 * @enum {number}
 */

var Notification = {
  'InvalidToken': 101,
  'AuthError': 102,
  'AccessError': 103,
  'ConnectionError': 104,
  'CaptchaError': 105,
  'SocialFacebookLoginAccessDisable': 106,
  'SocialTwitterLoginAccessDisable': 107,
  'SocialGoogleLoginAccessDisable': 108,
  'DomainNotAllowed': 109,
  'AccountNotAllowed': 110,
  'AccountTwoFactorAuthRequired': 120,
  'AccountTwoFactorAuthError': 121,
  'CouldNotSaveNewPassword': 130,
  'CurrentPasswordIncorrect': 131,
  'NewPasswordShort': 132,
  'NewPasswordWeak': 133,
  'NewPasswordForbidden': 134,
  'ContactsSyncError': 140,
  'CantGetMessageList': 201,
  'CantGetMessage': 202,
  'CantDeleteMessage': 203,
  'CantMoveMessage': 204,
  'CantCopyMessage': 205,
  'CantSaveMessage': 301,
  'CantSendMessage': 302,
  'InvalidRecipients': 303,
  'CantSaveFilters': 351,
  'CantGetFilters': 352,
  'FiltersAreNotCorrect': 355,
  'CantCreateFolder': 400,
  'CantRenameFolder': 401,
  'CantDeleteFolder': 402,
  'CantSubscribeFolder': 403,
  'CantUnsubscribeFolder': 404,
  'CantDeleteNonEmptyFolder': 405,
  'CantSaveSettings': 501,
  'CantSavePluginSettings': 502,
  'DomainAlreadyExists': 601,
  'CantInstallPackage': 701,
  'CantDeletePackage': 702,
  'InvalidPluginPackage': 703,
  'UnsupportedPluginPackage': 704,
  'LicensingServerIsUnavailable': 710,
  'LicensingExpired': 711,
  'LicensingBanned': 712,
  'DemoSendMessageError': 750,
  'DemoAccountError': 751,
  'AccountAlreadyExists': 801,
  'AccountDoesNotExist': 802,
  'MailServerError': 901,
  'ClientViewError': 902,
  'InvalidInputArgument': 903,
  'AjaxFalse': 950,
  'AjaxAbort': 951,
  'AjaxParse': 952,
  'AjaxTimeout': 953,
  'UnknownNotification': 999,
  'UnknownError': 999
};

/***/ }),
/* 1 */
/*!****************************!*\
  !*** ./dev/External/ko.js ***!
  \****************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.string.link.js */ 204);
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ 85);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ 119);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-interval */ 57);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 153);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var Opentip__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Opentip */ 228);
/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! pikaday */ 229);
/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(pikaday__WEBPACK_IMPORTED_MODULE_12__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Enums */ 0);















var ko = window__WEBPACK_IMPORTED_MODULE_8___default.a.ko,
    $win = $__WEBPACK_IMPORTED_MODULE_10___default()(window__WEBPACK_IMPORTED_MODULE_8___default.a),
    fDisposalTooltipHelper = function fDisposalTooltipHelper(element) {
  ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
    if (element && element.__opentip) {
      element.__opentip.deactivate();
    }
  });
};

ko.bindingHandlers.updateWidth = {
  init: function init(element, fValueAccessor) {
    var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element),
        fValue = fValueAccessor(),
        fInit = function fInit() {
      fValue($el.width());

      _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default()(function () {
        fValue($el.width());
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Magics"].Time500ms);
    };

    $win.on('resize', fInit);
    fInit();
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      $win.off('resize', fInit);
    });
  }
};
ko.bindingHandlers.editor = {
  init: function init(element, fValueAccessor) {
    var editor = null;

    var fValue = fValueAccessor(),
        HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 226).default,
        fUpdateEditorValue = function fUpdateEditorValue() {
      if (fValue && fValue.__editor) {
        fValue.__editor.setHtmlOrPlain(fValue());
      }
    },
        fUpdateKoValue = function fUpdateKoValue() {
      if (fValue && fValue.__editor) {
        fValue(fValue.__editor.getDataWithHtmlMark());
      }
    },
        fOnReady = function fOnReady() {
      fValue.__editor = editor;
      fUpdateEditorValue();
    };

    if (ko.isObservable(fValue) && HtmlEditor) {
      editor = new HtmlEditor(element, fUpdateKoValue, fOnReady, fUpdateKoValue);
      fValue.__fetchEditorValue = fUpdateKoValue;
      fValue.subscribe(fUpdateEditorValue); // ko.utils.domNodeDisposal.addDisposeCallback(element, () => {
      // });
    }
  }
};
ko.bindingHandlers.json = {
  init: function init(element, fValueAccessor) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(window__WEBPACK_IMPORTED_MODULE_8___default.a.JSON.stringify(ko.unwrap(fValueAccessor())));
  },
  update: function update(element, fValueAccessor) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(window__WEBPACK_IMPORTED_MODULE_8___default.a.JSON.stringify(ko.unwrap(fValueAccessor())));
  }
};
ko.bindingHandlers.scrollerShadows = {
  init: function init(element) {
    var limit = 8,
        $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element),
        cont = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()($el).call($el, '[data-scroller-shadows-content]')[0] || null,
        fFunc = ___WEBPACK_IMPORTED_MODULE_9___default.a.throttle(function () {
      $el.toggleClass('scroller-shadow-top', limit < cont.scrollTop).toggleClass('scroller-shadow-bottom', cont.scrollTop + limit < cont.scrollHeight - cont.clientHeight);
    }, 100);

    if (cont) {
      $__WEBPACK_IMPORTED_MODULE_10___default()(cont).on('scroll resize', fFunc);
      $win.on('resize', fFunc);
      ko.utils.domNodeDisposal.addDisposeCallback(cont, function () {
        $__WEBPACK_IMPORTED_MODULE_10___default()(cont).off();
        $win.off('resize', fFunc);
      });
    }
  }
};
ko.bindingHandlers.pikaday = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext) {
    ko.bindingHandlers.textInput.init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext);

    if (pikaday__WEBPACK_IMPORTED_MODULE_12___default.a) {
      element.__pikaday = new pikaday__WEBPACK_IMPORTED_MODULE_12___default.a({
        field: element
      });
    }
  }
};
ko.bindingHandlers.visibleAnimated = {
  init: function init(element, fValueAccessor) {
    var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element);
    $el.addClass('rl-animated-inited');

    if (ko.unwrap(fValueAccessor())) {
      $el.show();
    } else {
      $el.hide();
    }
  },
  update: function update(element, fValueAccessor) {
    var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element);

    if (ko.unwrap(fValueAccessor())) {
      $el.addClass('rl-animated-hidden').show();

      ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () {
        $el.removeClass('rl-animated-hidden');
      }, 10);
    } else {
      $el.hide().removeClass('rl-animated-hidden');
    }
  }
};
ko.bindingHandlers.tooltip = {
  init: function init(element, fValueAccessor) {
    var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element),
        fValue = fValueAccessor(),
        isMobile = 'on' === ($el.data('tooltip-mobile') || 'off'),
        isI18N = 'on' === ($el.data('tooltip-i18n') || 'on'),
        Globals = __webpack_require__(/*! Common/Globals */ 6);

    if (!Globals.bMobileDevice || isMobile) {
      var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue);
      element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"](element, {
        'style': 'rainloopTip',
        'element': element,
        'tipJoint': $el.data('tooltip-join') || 'bottom'
      });
      Globals.dropdownVisibility.subscribe(function (v) {
        if (v) {
          element.__opentip.hide();
        }
      });

      if ('' === sValue) {
        element.__opentip.hide();

        element.__opentip.deactivate();

        element.__opentip.setContent('');
      } else {
        element.__opentip.activate();
      }

      if (isI18N) {
        var Translator = __webpack_require__(/*! Common/Translator */ 9);

        element.__opentip.setContent(Translator.i18n(sValue));

        Translator.trigger.subscribe(function () {
          element.__opentip.setContent(Translator.i18n(sValue));
        });
        Globals.dropdownVisibility.subscribe(function () {
          if (element && element.__opentip) {
            element.__opentip.setContent(Translator.i18n(sValue));
          }
        });
      } else {
        element.__opentip.setContent(sValue);
      }

      $win.on('rl.tooltips.diactivate', function () {
        element.__opentip.hide();

        element.__opentip.deactivate();
      });
      $win.on('rl.tooltips.activate', function () {
        element.__opentip.activate();
      });
    }
  },
  update: function update(element, fValueAccessor) {
    var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element),
        fValue = fValueAccessor(),
        isMobile = 'on' === ($el.data('tooltip-mobile') || 'off'),
        isI18N = 'on' === ($el.data('tooltip-i18n') || 'on'),
        Globals = __webpack_require__(/*! Common/Globals */ 6);

    if ((!Globals.bMobileDevice || isMobile) && element.__opentip) {
      var sValue = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue);

      if (sValue) {
        element.__opentip.setContent(isI18N ? __webpack_require__(/*! Common/Translator */ 9).i18n(sValue) : sValue);

        element.__opentip.activate();
      } else {
        element.__opentip.hide();

        element.__opentip.deactivate();

        element.__opentip.setContent('');
      }
    }
  }
};
ko.bindingHandlers.tooltipErrorTip = {
  init: function init(element) {
    var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element);
    element.__opentip = new Opentip__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"](element, {
      style: 'rainloopErrorTip',
      hideOn: 'mouseout click',
      element: element,
      tipJoint: $el.data('tooltip-join') || 'top'
    });

    element.__opentip.deactivate();

    $__WEBPACK_IMPORTED_MODULE_10___default()(window__WEBPACK_IMPORTED_MODULE_8___default.a.document).on('click', function () {
      if (element && element.__opentip) {
        element.__opentip.hide();
      }
    });
    fDisposalTooltipHelper(element);
  },
  update: function update(element, fValueAccessor) {
    var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element),
        fValue = fValueAccessor(),
        value = !ko.isObservable(fValue) && ___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(fValue) ? fValue() : ko.unwrap(fValue),
        openTips = element.__opentip;

    if (openTips) {
      if ('' === value) {
        openTips.hide();
        openTips.deactivate();
        openTips.setContent('');
      } else {
        ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () {
          if ($el.is(':visible')) {
            openTips.setContent(value);
            openTips.activate();
            openTips.show();
          } else {
            openTips.hide();
            openTips.deactivate();
            openTips.setContent('');
          }
        }, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Magics"].Time100ms);
      }
    }
  }
};
ko.bindingHandlers.registrateBootstrapDropdown = {
  init: function init(element) {
    var Globals = __webpack_require__(/*! Common/Globals */ 6);

    if (Globals && Globals.data.aBootstrapDropdowns) {
      Globals.data.aBootstrapDropdowns.push($__WEBPACK_IMPORTED_MODULE_10___default()(element));
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).click(function () {
        __webpack_require__(/*! Common/Utils */ 2).detectDropdownVisibility();
      }); // ko.utils.domNodeDisposal.addDisposeCallback(element, () => {
      // });
    }
  }
};
ko.bindingHandlers.openDropdownTrigger = {
  update: function update(element, fValueAccessor) {
    if (ko.unwrap(fValueAccessor())) {
      var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element);

      if (!$el.hasClass('open')) {
        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()($el).call($el, '.dropdown-toggle').dropdown('toggle');
      }

      _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()($el).call($el, '.dropdown-toggle').focus();

      __webpack_require__(/*! Common/Utils */ 2).detectDropdownVisibility();

      fValueAccessor()(false);
    }
  }
};
ko.bindingHandlers.dropdownCloser = {
  init: function init(element) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).closest('.dropdown').on('click', '.e-item', function () {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).dropdown('toggle');
    });
  }
};
ko.bindingHandlers.popover = {
  init: function init(element, fValueAccessor) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).popover(ko.unwrap(fValueAccessor()));
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).popover('destroy');
    });
  }
};
ko.bindingHandlers.csstext = {};

ko.bindingHandlers.csstext.init = ko.bindingHandlers.csstext.update = function (element, fValueAccessor) {
  if (element && element.styleSheet && 'undefined' !== typeof element.styleSheet.cssText) {
    element.styleSheet.cssText = ko.unwrap(fValueAccessor());
  } else {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(ko.unwrap(fValueAccessor()));
  }
};

ko.bindingHandlers.resizecrop = {
  init: function init(element) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('resizecrop').resizecrop({
      'width': '100',
      'height': '100',
      'wrapperCSS': {
        'border-radius': '10px'
      }
    });
  },
  update: function update(element, fValueAccessor) {
    fValueAccessor()();
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).resizecrop({
      'width': '100',
      'height': '100'
    });
  }
};
ko.bindingHandlers.onKeyDown = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keydown.koOnKeyDown', function (event) {
      if (event) {
        return fValueAccessor().call(viewModel, event);
      }

      return true;
    });
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keydown.koOnKeyDown');
    });
  }
};
ko.bindingHandlers.onEnter = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keypress.koOnEnter', function (event) {
      if (event && 13 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) {
        $__WEBPACK_IMPORTED_MODULE_10___default()(element).trigger('change');
        fValueAccessor().call(viewModel);
      }
    });
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keypress.koOnEnter');
    });
  }
};
ko.bindingHandlers.onSpace = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keyup.koOnSpace', function (event) {
      if (event && 32 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) {
        fValueAccessor().call(viewModel, event);
      }
    });
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keyup.koOnSpace');
    });
  }
};
ko.bindingHandlers.onTab = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keydown.koOnTab', function (event) {
      if (event && 9 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) {
        return fValueAccessor().call(viewModel, !!event.shiftKey);
      }

      return true;
    });
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keydown.koOnTab');
    });
  }
};
ko.bindingHandlers.onEsc = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).on('keyup.koOnEsc', function (event) {
      if (event && 27 === window__WEBPACK_IMPORTED_MODULE_8___default.a.parseInt(event.keyCode, 10)) {
        $__WEBPACK_IMPORTED_MODULE_10___default()(element).trigger('change');
        fValueAccessor().call(viewModel);
      }
    });
    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('keyup.koOnEsc');
    });
  }
};
ko.bindingHandlers.clickOnTrue = {
  update: function update(element, fValueAccessor) {
    if (ko.unwrap(fValueAccessor())) {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).click();
    }
  }
};
ko.bindingHandlers.modal = {
  init: function init(element, fValueAccessor) {
    var _context;

    var Globals = __webpack_require__(/*! Common/Globals */ 6),
        Utils = __webpack_require__(/*! Common/Utils */ 2);

    _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()(_context = $__WEBPACK_IMPORTED_MODULE_10___default()(element).toggleClass('fade', !Globals.bMobileDevice).modal({
      'keyboard': false,
      'show': ko.unwrap(fValueAccessor())
    }).on('shown.koModal', Utils.windowResizeCallback)).call(_context, '.close').on('click.koModal', function () {
      fValueAccessor()(false);
    });

    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
      var _context2;

      _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()(_context2 = $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('shown.koModal')).call(_context2, '.close').off('click.koModal');
    });
  },
  update: function update(element, fValueAccessor) {
    var Globals = __webpack_require__(/*! Common/Globals */ 6);

    $__WEBPACK_IMPORTED_MODULE_10___default()(element).modal(ko.unwrap(fValueAccessor()) ? 'show' : 'hide');

    if (Globals.$html.hasClass('rl-anim')) {
      Globals.$html.addClass('rl-modal-animation');

      ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () {
        Globals.$html.removeClass('rl-modal-animation');
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Magics"].Time500ms);
    }
  }
};
ko.bindingHandlers.moment = {
  init: function init(element, fValueAccessor) {
    __webpack_require__(/*! Common/Momentor */ 61).momentToNode($__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('moment').data('moment-time', ko.unwrap(fValueAccessor())));
  },
  update: function update(element, fValueAccessor) {
    __webpack_require__(/*! Common/Momentor */ 61).momentToNode($__WEBPACK_IMPORTED_MODULE_10___default()(element).data('moment-time', ko.unwrap(fValueAccessor())));
  }
};
ko.bindingHandlers.i18nInit = {
  init: function init(element) {
    __webpack_require__(/*! Common/Translator */ 9).i18nToNodes(element);
  }
};
ko.bindingHandlers.translatorInit = {
  init: function init(element) {
    __webpack_require__(/*! Common/Translator */ 9).i18nToNodes(element);
  }
};
ko.bindingHandlers.i18nUpdate = {
  update: function update(element, fValueAccessor) {
    ko.unwrap(fValueAccessor());

    __webpack_require__(/*! Common/Translator */ 9).i18nToNodes(element);
  }
};
ko.bindingHandlers.link = {
  update: function update(element, fValueAccessor) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).attr('href', ko.unwrap(fValueAccessor()));
  }
};
ko.bindingHandlers.title = {
  update: function update(element, fValueAccessor) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).attr('title', ko.unwrap(fValueAccessor()));
  }
};
ko.bindingHandlers.textF = {
  init: function init(element, fValueAccessor) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).text(ko.unwrap(fValueAccessor()));
  }
};
ko.bindingHandlers.initDom = {
  init: function init(element, fValueAccessor) {
    fValueAccessor()(element);
  }
};
ko.bindingHandlers.initFixedTrigger = {
  init: function init(element, fValueAccessor) {
    var values = ko.unwrap(fValueAccessor()),
        $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element),
        top = values[1] || 0;
    var $container = $__WEBPACK_IMPORTED_MODULE_10___default()(values[0] || null);
    $container = $container[0] ? $container : null;

    if ($container) {
      $win.resize(function () {
        var offset = $container ? $container.offset() : null;

        if (offset && offset.top) {
          $el.css('top', offset.top + top);
        }
      });
    }
  }
};
ko.bindingHandlers.initResizeTrigger = {
  init: function init(element, fValueAccessor) {
    var values = ko.unwrap(fValueAccessor());
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).css({
      'height': values[1],
      'min-height': values[1]
    });
  },
  update: function update(oElement, fValueAccessor) {
    var Utils = __webpack_require__(/*! Common/Utils */ 2),
        Globals = __webpack_require__(/*! Common/Globals */ 6),
        values = ko.unwrap(fValueAccessor());

    var value = Utils.pInt(values[1]),
        size = 0,
        offset = $__WEBPACK_IMPORTED_MODULE_10___default()(oElement).offset().top;

    if (0 < offset) {
      offset += Utils.pInt(values[2]);
      size = Globals.$win.height() - offset;

      if (value < size) {
        value = size;
      }

      $__WEBPACK_IMPORTED_MODULE_10___default()(oElement).css({
        'height': value,
        'min-height': value
      });
    }
  }
};
ko.bindingHandlers.appendDom = {
  update: function update(element, fValueAccessor) {
    $__WEBPACK_IMPORTED_MODULE_10___default()(element).hide().empty().append(ko.unwrap(fValueAccessor())).show();
  }
};
ko.bindingHandlers.draggable = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor) {
    var Globals = __webpack_require__(/*! Common/Globals */ 6),
        Utils = __webpack_require__(/*! Common/Utils */ 2);

    if (!Globals.bMobileDevice) {
      var triggerZone = 100,
          scrollSpeed = 3,
          fAllValueFunc = fAllBindingsAccessor(),
          droppableSelector = fAllValueFunc && fAllValueFunc.droppableSelector ? fAllValueFunc.droppableSelector : '',
          conf = {
        distance: 20,
        handle: '.dragHandle',
        cursorAt: {
          top: 22,
          left: 3
        },
        refreshPositions: true,
        scroll: true,
        drag: null,
        stop: null,
        helper: null
      };

      if (droppableSelector) {
        conf.drag = function (event) {
          $__WEBPACK_IMPORTED_MODULE_10___default()(droppableSelector).each(function () {
            var $this = $__WEBPACK_IMPORTED_MODULE_10___default()(this),
                // eslint-disable-line no-invalid-this
            offset = $this.offset(),
                bottomPos = offset.top + $this.height();
            window__WEBPACK_IMPORTED_MODULE_8___default.a.clearInterval($this.data('timerScroll'));
            $this.data('timerScroll', false);

            if (event.pageX >= offset.left && event.pageX <= offset.left + $this.width()) {
              if (event.pageY >= bottomPos - triggerZone && event.pageY <= bottomPos) {
                var moveUp = function moveUp() {
                  $this.scrollTop($this.scrollTop() + scrollSpeed);
                  Utils.windowResize();
                };

                $this.data('timerScroll', _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(moveUp, 10));
                moveUp();
              }

              if (event.pageY >= offset.top && event.pageY <= offset.top + triggerZone) {
                var moveDown = function moveDown() {
                  $this.scrollTop($this.scrollTop() - scrollSpeed);
                  Utils.windowResize();
                };

                $this.data('timerScroll', _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(moveDown, 10));
                moveDown();
              }
            }
          });
        };

        conf.stop = function () {
          $__WEBPACK_IMPORTED_MODULE_10___default()(droppableSelector).each(function () {
            var $this = $__WEBPACK_IMPORTED_MODULE_10___default()(this); // eslint-disable-line no-invalid-this

            window__WEBPACK_IMPORTED_MODULE_8___default.a.clearInterval($this.data('timerScroll'));
            $this.data('timerScroll', false);
          });
        };
      }

      conf.helper = function (event) {
        return fValueAccessor()(event && event.target ? ko.dataFor(event.target) : null);
      };

      $__WEBPACK_IMPORTED_MODULE_10___default()(element).draggable(conf).on('mousedown.koDraggable', function () {
        Utils.removeInFocus();
      });
      ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
        $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('mousedown.koDraggable').draggable('destroy');
      });
    }
  }
};
ko.bindingHandlers.droppable = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor) {
    var Globals = __webpack_require__(/*! Common/Globals */ 6);

    if (!Globals.bMobileDevice) {
      var fValueFunc = fValueAccessor(),
          fAllValueFunc = fAllBindingsAccessor(),
          fOverCallback = fAllValueFunc && fAllValueFunc.droppableOver ? fAllValueFunc.droppableOver : null,
          fOutCallback = fAllValueFunc && fAllValueFunc.droppableOut ? fAllValueFunc.droppableOut : null,
          conf = {
        tolerance: 'pointer',
        hoverClass: 'droppableHover',
        drop: null,
        over: null,
        out: null
      };

      if (fValueFunc) {
        conf.drop = function (event, ui) {
          fValueFunc(event, ui);
        };

        if (fOverCallback) {
          conf.over = function (event, ui) {
            fOverCallback(event, ui);
          };
        }

        if (fOutCallback) {
          conf.out = function (event, ui) {
            fOutCallback(event, ui);
          };
        }

        $__WEBPACK_IMPORTED_MODULE_10___default()(element).droppable(conf);
        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
          $__WEBPACK_IMPORTED_MODULE_10___default()(element).droppable('destroy');
        });
      }
    }
  }
};
ko.bindingHandlers.nano = {
  init: function init(element) {
    var Globals = __webpack_require__(/*! Common/Globals */ 6),
        Settings = __webpack_require__(/*! Storage/Settings */ 5);

    if (!Globals.bDisableNanoScroll && !Settings.appSettingsGet('useNativeScrollbars')) {
      $__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('nano').nanoScroller({
        iOSNativeScrolling: false,
        preventPageScrolling: true
      });
    }
  }
};
ko.bindingHandlers.saveTrigger = {
  init: function init(element) {
    var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element);
    $el.data('save-trigger-type', $el.is('input[type=text],input[type=email],input[type=password],select,textarea') ? 'input' : 'custom');

    if ('custom' === $el.data('save-trigger-type')) {
      $el.append('&nbsp;&nbsp;' + '<i class="icon-spinner animated"></i>' + '<i class="icon-remove error"></i>' + '<i class="icon-ok success"></i>').addClass('settings-saved-trigger');
    } else {
      $el.addClass('settings-saved-trigger-input');
    }
  },
  update: function update(element, fValueAccessor) {
    var _context3, _context4, _context5, _context6;

    var value = ko.unwrap(fValueAccessor()),
        $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element);

    if ('custom' === $el.data('save-trigger-type')) {
      switch (value.toString()) {
        case '1':
          _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()($el).call($el, '.animated,.error').hide().removeClass('visible').end()).call(_context3, '.success').show().addClass('visible');

          break;

        case '0':
          _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()(_context4 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()($el).call($el, '.animated,.success').hide().removeClass('visible').end()).call(_context4, '.error').show().addClass('visible');

          break;

        case '-2':
          _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()($el).call($el, '.error,.success').hide().removeClass('visible').end()).call(_context5, '.animated').show().addClass('visible');

          break;

        default:
          _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()(_context6 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()($el).call($el, '.animated').hide().end()).call(_context6, '.error,.success').removeClass('visible');

          break;
      }
    } else {
      switch (value.toString()) {
        case '1':
          $el.addClass('success').removeClass('error');
          break;

        case '0':
          $el.addClass('error').removeClass('success');
          break;

        case '-2':
          break;

        default:
          $el.removeClass('error success');
          break;
      }
    }
  }
};
ko.bindingHandlers.emailsTags = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor) {
    var Utils = __webpack_require__(/*! Common/Utils */ 2),
        EmailModel = __webpack_require__(/*! Model/Email */ 82).default,
        $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element),
        fValue = fValueAccessor(),
        fAllBindings = fAllBindingsAccessor(),
        fAutoCompleteSource = fAllBindings.autoCompleteSource || null,
        inputDelimiters = [',', ';', '\n'],
        fFocusCallback = function fFocusCallback(value) {
      if (fValue && fValue.focused) {
        fValue.focused(!!value);
      }
    };

    $el.inputosaurus({
      parseOnBlur: true,
      allowDragAndDrop: true,
      focusCallback: fFocusCallback,
      inputDelimiters: inputDelimiters,
      autoCompleteSource: fAutoCompleteSource,
      splitHook: function splitHook(value) {
        var v = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6___default()(Utils).call(Utils, value);

        if (v && -1 < inputDelimiters.indexOf(v.substr(-1))) {
          return EmailModel.splitEmailLine(value);
        }

        return null;
      },
      parseHook: function parseHook(input) {
        return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, ___WEBPACK_IMPORTED_MODULE_9___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, input, function (inputValue) {
          var values = EmailModel.parseEmailLine(inputValue);
          return values.length ? values : inputValue;
        })), function (item) {
          return ___WEBPACK_IMPORTED_MODULE_9___default.a.isObject(item) ? [item.toLine(false), item] : [item, null];
        });
      },
      change: function change(event) {
        $el.data('EmailsTagsValue', event.target.value);
        fValue(event.target.value);
      }
    });

    if (fValue && fValue.focused && fValue.focused.subscribe) {
      fValue.focused.subscribe(function (value) {
        $el.inputosaurus(value ? 'focus' : 'blur');
      });
    }
  },
  update: function update(element, fValueAccessor) {
    var $oEl = $__WEBPACK_IMPORTED_MODULE_10___default()(element),
        fValue = fValueAccessor(),
        value = ko.unwrap(fValue);

    if ($oEl.data('EmailsTagsValue') !== value) {
      $oEl.val(value);
      $oEl.data('EmailsTagsValue', value);
      $oEl.inputosaurus('refresh');
    }
  }
};
ko.bindingHandlers.command = {
  init: function init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext) {
    var jqElement = $__WEBPACK_IMPORTED_MODULE_10___default()(element),
        command = fValueAccessor();

    if (!command || !command.isCommand) {
      throw new Error('Value should be a command');
    }

    if (!command.enabled) {
      command.enabled = ko.observable(true);
    }

    if (!command.canExecute) {
      var __realCanExecute = command.__realCanExecute;

      if (___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(__realCanExecute)) {
        command.canExecute = ko.computed(function () {
          return command.enabled() && __realCanExecute.call(viewModel, viewModel);
        });
      } else {
        command.canExecute = ko.computed(function () {
          return command.enabled() && !!__realCanExecute;
        });
      }
    }

    jqElement.addClass('command');
    ko.bindingHandlers[jqElement.is('form') ? 'submit' : 'click'].init(element, fValueAccessor, fAllBindingsAccessor, viewModel, bindingContext);
  },
  update: function update(element, fValueAccessor) {
    var jqElement = $__WEBPACK_IMPORTED_MODULE_10___default()(element),
        command = fValueAccessor();
    var result = command.enabled();
    jqElement.toggleClass('command-not-enabled', !result);

    if (result) {
      result = command.canExecute();
      jqElement.toggleClass('command-can-not-be-execute', !result);
    }

    jqElement.toggleClass('command-disabled disable disabled', !result).toggleClass('no-disabled', !!result);

    if (jqElement.is('input') || jqElement.is('button')) {
      jqElement.prop('disabled', !result);
    }
  }
}; // extenders

ko.extenders.trimmer = function (target) {
  var Utils = __webpack_require__(/*! Common/Utils */ 2),
      result = ko.computed({
    read: target,
    write: function write(newValue) {
      target(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_6___default()(Utils).call(Utils, newValue.toString()));
    }
  });

  result(target());
  return result;
};

ko.extenders.posInterer = function (target, defaultVal) {
  var Utils = __webpack_require__(/*! Common/Utils */ 2),
      result = ko.computed({
    read: target,
    write: function write(newValue) {
      var val = Utils.pInt(newValue.toString(), defaultVal);

      if (0 >= val) {
        val = defaultVal;
      }

      if (val === target() && '' + val !== '' + newValue) {
        target(val + 1);
      }

      target(val);
    }
  });

  result(target());
  return result;
};

ko.extenders.limitedList = function (target, limitedList) {
  var Utils = __webpack_require__(/*! Common/Utils */ 2),
      result = ko.computed({
    read: target,
    write: function write(newValue) {
      var currentValue = ko.unwrap(target),
          list = ko.unwrap(limitedList);

      if (Utils.isNonEmptyArray(list)) {
        if (-1 < Utils.inArray(newValue, list)) {
          target(newValue);
        } else if (-1 < Utils.inArray(currentValue, list)) {
          target(currentValue + ' ');
          target(currentValue);
        } else {
          target(list[0] + ' ');
          target(list[0]);
        }
      } else {
        target('');
      }
    }
  }).extend({
    notify: 'always'
  });

  result(target());

  if (!result.valueHasMutated) {
    result.valueHasMutated = function () {
      target.valueHasMutated();
    };
  }

  return result;
};

ko.extenders.reversible = function (target) {
  var value = target();

  target.commit = function () {
    value = target();
  };

  target.reverse = function () {
    target(value);
  };

  target.commitedValue = function () {
    return value;
  };

  return target;
};

ko.extenders.toggleSubscribe = function (target, options) {
  target.subscribe(options[1], options[0], 'beforeChange');
  target.subscribe(options[2], options[0]);
  return target;
};

ko.extenders.toggleSubscribeProperty = function (target, options) {
  var prop = options[1];

  if (prop) {
    target.subscribe(function (prev) {
      if (prev && prev[prop]) {
        prev[prop](false);
      }
    }, options[0], 'beforeChange');
    target.subscribe(function (next) {
      if (next && next[prop]) {
        next[prop](true);
      }
    }, options[0]);
  }

  return target;
};

ko.extenders.falseTimeout = function (target, option) {
  target.iFalseTimeoutTimeout = 0;
  target.subscribe(function (value) {
    if (value) {
      window__WEBPACK_IMPORTED_MODULE_8___default.a.clearTimeout(target.iFalseTimeoutTimeout);
      target.iFalseTimeoutTimeout = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default()(function () {
        target(false);
        target.iFalseTimeoutTimeout = 0;
      }, __webpack_require__(/*! Common/Utils */ 2).pInt(option));
    }
  });
  return target;
};

ko.extenders.specialThrottle = function (target, option) {
  target.iSpecialThrottleTimeoutValue = __webpack_require__(/*! Common/Utils */ 2).pInt(option);

  if (0 < target.iSpecialThrottleTimeoutValue) {
    target.iSpecialThrottleTimeout = 0;
    target.valueForRead = ko.observable(!!target()).extend({
      throttle: 10
    });
    return ko.computed({
      read: target.valueForRead,
      write: function write(bValue) {
        if (bValue) {
          target.valueForRead(bValue);
        } else {
          if (target.valueForRead()) {
            window__WEBPACK_IMPORTED_MODULE_8___default.a.clearTimeout(target.iSpecialThrottleTimeout);
            target.iSpecialThrottleTimeout = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default()(function () {
              target.valueForRead(false);
              target.iSpecialThrottleTimeout = 0;
            }, target.iSpecialThrottleTimeoutValue);
          } else {
            target.valueForRead(bValue);
          }
        }
      }
    });
  }

  return target;
};

ko.extenders.idleTrigger = function (target) {
  target.trigger = ko.observable(Common_Enums__WEBPACK_IMPORTED_MODULE_13__["SaveSettingsStep"].Idle);
  return target;
}; // functions


ko.observable.fn.idleTrigger = function () {
  return this.extend({
    'idleTrigger': true
  });
};

ko.observable.fn.validateNone = function () {
  this.hasError = ko.observable(false);
  return this;
};

ko.observable.fn.validateEmail = function () {
  var _this = this;

  this.hasError = ko.observable(false);
  this.subscribe(function (value) {
    _this.hasError('' !== value && !/^[^@\s]+@[^@\s]+$/.test(value));
  });
  this.valueHasMutated();
  return this;
};

ko.observable.fn.validateSimpleEmail = function () {
  var _this2 = this;

  this.hasError = ko.observable(false);
  this.subscribe(function (value) {
    _this2.hasError('' !== value && !/^.+@.+$/.test(value));
  });
  this.valueHasMutated();
  return this;
};

ko.observable.fn.deleteAccessHelper = function () {
  this.extend({
    falseTimeout: 3000
  }).extend({
    toggleSubscribeProperty: [this, 'deleteAccess']
  });
  return this;
};

ko.observable.fn.validateFunc = function (fFunc) {
  var _this3 = this;

  this.hasFuncError = ko.observable(false);

  if (___WEBPACK_IMPORTED_MODULE_9___default.a.isFunction(fFunc)) {
    this.subscribe(function (value) {
      _this3.hasFuncError(!fFunc(value));
    });
    this.valueHasMutated();
  }

  return this;
};

/* harmony default export */ __webpack_exports__["a"] = (ko);

/***/ }),
/* 2 */
/*!*****************************!*\
  !*** ./dev/Common/Utils.js ***!
  \*****************************/
/*! exports provided: trim, inArray, isArray, isObject, isFunc, isUnd, isNull, has, bind, noop, noopTrue, noopFalse, jassl, silentTryCatch, isNormal, isPosNumeric, pInt, pString, pBool, boolToAjax, isNonEmptyArray, encodeURIComponent, decodeURIComponent, decodeURI, encodeURI, simpleQueryParser, fakeMd5, encodeHtml, splitPlainText, timeOutAction, timeOutActionSecond, deModule, inFocus, removeInFocus, removeSelection, replySubjectAdd, roundNumber, friendlySize, log, delegateRun, killCtrlACtrlS, createCommandLegacy, convertThemeName, quoteName, microtime, timestamp, convertLangName, draggablePlace, defautOptionsAfterRender, clearBqSwitcher, previewMessage, settingsSaveHelperFunction, settingsSaveHelperSimpleFunction, settingsSaveHelperSubscribeFunction, findEmailAndLinks, htmlToPlain, plainToHtml, folderListOptionsBuilder, selectElement, detectDropdownVisibility, triggerAutocompleteInputChange, getConfigurationFromScriptTag, disposeOne, disposeObject, delegateRunOnDestroy, appendStyles, changeTheme, computedPagenatorHelper, getFileExtension, mimeContentType, isTransparent, getRealHeight, resizeAndCrop, mailToHelper, domReady, windowResize, windowResizeCallback */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "trim", function() { return trim; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inArray", function() { return inArray; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArray", function() { return isArray; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isObject", function() { return isObject; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFunc", function() { return isFunc; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isUnd", function() { return isUnd; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNull", function() { return isNull; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "has", function() { return has; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bind", function() { return bind; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return noop; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "noopTrue", function() { return noopTrue; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "noopFalse", function() { return noopFalse; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "silentTryCatch", function() { return silentTryCatch; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNormal", function() { return isNormal; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPosNumeric", function() { return isPosNumeric; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pInt", function() { return pInt; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pString", function() { return pString; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pBool", function() { return pBool; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "boolToAjax", function() { return boolToAjax; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNonEmptyArray", function() { return isNonEmptyArray; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "encodeURIComponent", function() { return encodeURIComponent; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decodeURIComponent", function() { return decodeURIComponent; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decodeURI", function() { return decodeURI; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "encodeURI", function() { return encodeURI; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "simpleQueryParser", function() { return simpleQueryParser; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fakeMd5", function() { return fakeMd5; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "encodeHtml", function() { return encodeHtml; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "splitPlainText", function() { return splitPlainText; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeOutAction", function() { return timeOutAction; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeOutActionSecond", function() { return timeOutActionSecond; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deModule", function() { return deModule; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inFocus", function() { return inFocus; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeInFocus", function() { return removeInFocus; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeSelection", function() { return removeSelection; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "replySubjectAdd", function() { return replySubjectAdd; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "roundNumber", function() { return roundNumber; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "friendlySize", function() { return friendlySize; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "log", function() { return log; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delegateRun", function() { return delegateRun; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "killCtrlACtrlS", function() { return killCtrlACtrlS; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createCommandLegacy", function() { return createCommandLegacy; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertThemeName", function() { return convertThemeName; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "quoteName", function() { return quoteName; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "microtime", function() { return microtime; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timestamp", function() { return timestamp; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertLangName", function() { return convertLangName; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draggablePlace", function() { return draggablePlace; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defautOptionsAfterRender", function() { return defautOptionsAfterRender; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clearBqSwitcher", function() { return clearBqSwitcher; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "previewMessage", function() { return previewMessage; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settingsSaveHelperFunction", function() { return settingsSaveHelperFunction; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settingsSaveHelperSimpleFunction", function() { return settingsSaveHelperSimpleFunction; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settingsSaveHelperSubscribeFunction", function() { return settingsSaveHelperSubscribeFunction; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findEmailAndLinks", function() { return findEmailAndLinks; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "htmlToPlain", function() { return htmlToPlain; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "plainToHtml", function() { return plainToHtml; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "folderListOptionsBuilder", function() { return folderListOptionsBuilder; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "selectElement", function() { return selectElement; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "detectDropdownVisibility", function() { return detectDropdownVisibility; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "triggerAutocompleteInputChange", function() { return triggerAutocompleteInputChange; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConfigurationFromScriptTag", function() { return getConfigurationFromScriptTag; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "disposeOne", function() { return disposeOne; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "disposeObject", function() { return disposeObject; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delegateRunOnDestroy", function() { return delegateRunOnDestroy; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "appendStyles", function() { return appendStyles; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "changeTheme", function() { return changeTheme; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computedPagenatorHelper", function() { return computedPagenatorHelper; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getFileExtension", function() { return getFileExtension; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mimeContentType", function() { return mimeContentType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isTransparent", function() { return isTransparent; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRealHeight", function() { return getRealHeight; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resizeAndCrop", function() { return resizeAndCrop; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mailToHelper", function() { return mailToHelper; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "domReady", function() { return domReady; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowResize", function() { return windowResize; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowResizeCallback", function() { return windowResizeCallback; });
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ 85);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ 119);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ 203);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.match.js */ 224);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.link.js */ 204);
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 153);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 175);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 122);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 227);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_14__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_16__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_17__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Autolinker */ 230);
/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(Autolinker__WEBPACK_IMPORTED_MODULE_19__);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Mime__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Common/Mime */ 231);
/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Common/Jassl */ 121);
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "jassl", function() { return Common_Jassl__WEBPACK_IMPORTED_MODULE_23__["a"]; });


























var trim = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_9___default()($__WEBPACK_IMPORTED_MODULE_16___default.a);

var inArray = $__WEBPACK_IMPORTED_MODULE_16___default.a.inArray;
var isArray = ___WEBPACK_IMPORTED_MODULE_17___default.a.isArray;
var isObject = ___WEBPACK_IMPORTED_MODULE_17___default.a.isObject;
var isFunc = ___WEBPACK_IMPORTED_MODULE_17___default.a.isFunction;
var isUnd = ___WEBPACK_IMPORTED_MODULE_17___default.a.isUndefined;
var isNull = ___WEBPACK_IMPORTED_MODULE_17___default.a.isNull;
var has = ___WEBPACK_IMPORTED_MODULE_17___default.a.has;
var bind = ___WEBPACK_IMPORTED_MODULE_17___default.a.bind;

var noop = function noop() {}; // eslint-disable-line no-empty-function


var noopTrue = function noopTrue() {
  return true;
};

var noopFalse = function noopFalse() {
  return false;
};


/**
 * @param {Function} func
 */

function silentTryCatch(func) {
  try {
    func();
  } catch (e) {} // eslint-disable-line no-empty

}
/**
 * @param {*} value
 * @returns {boolean}
 */

function isNormal(value) {
  return !isUnd(value) && !isNull(value);
}
/**
 * @param {(string|number)} value
 * @param {boolean=} includeZero = true
 * @returns {boolean}
 */

function isPosNumeric(value, includeZero) {
  if (includeZero === void 0) {
    includeZero = true;
  }

  return !isNormal(value) ? false : includeZero ? /^[0-9]*$/.test(value.toString()) : /^[1-9]+[0-9]*$/.test(value.toString());
}
/**
 * @param {*} value
 * @param {number=} defaultValur = 0
 * @returns {number}
 */

function pInt(value, defaultValur) {
  if (defaultValur === void 0) {
    defaultValur = 0;
  }

  var result = isNormal(value) && '' !== value ? window__WEBPACK_IMPORTED_MODULE_15___default.a.parseInt(value, 10) : defaultValur;
  return window__WEBPACK_IMPORTED_MODULE_15___default.a.isNaN(result) ? defaultValur : result;
}
/**
 * @param {*} value
 * @returns {string}
 */

function pString(value) {
  return isNormal(value) ? '' + value : '';
}
/**
 * @param {*} value
 * @returns {boolean}
 */

function pBool(value) {
  return !!value;
}
/**
 * @param {*} value
 * @returns {string}
 */

function boolToAjax(value) {
  return value ? '1' : '0';
}
/**
 * @param {*} values
 * @returns {boolean}
 */

function isNonEmptyArray(values) {
  return isArray(values) && 0 < values.length;
}
/**
 * @param {string} component
 * @returns {string}
 */

function encodeURIComponent(component) {
  return window__WEBPACK_IMPORTED_MODULE_15___default.a.encodeURIComponent(component);
}
/**
 * @param {string} component
 * @returns {string}
 */

function decodeURIComponent(component) {
  return window__WEBPACK_IMPORTED_MODULE_15___default.a.decodeURIComponent(component);
}
/**
 * @param {string} url
 * @returns {string}
 */

function decodeURI(url) {
  return window__WEBPACK_IMPORTED_MODULE_15___default.a.decodeURI(url);
}
/**
 * @param {string} url
 * @returns {string}
 */

function encodeURI(url) {
  return window__WEBPACK_IMPORTED_MODULE_15___default.a.encodeURI(url);
}
/**
 * @param {string} queryString
 * @returns {Object}
 */

function simpleQueryParser(queryString) {
  var index = 0,
      len = 0,
      temp = null;
  var queries = queryString.split('&'),
      params = {};

  for (len = queries.length; index < len; index++) {
    temp = queries[index].split('=');
    params[decodeURIComponent(temp[0])] = decodeURIComponent(temp[1]);
  }

  return params;
}
/**
 * @param {number=} len = 32
 * @returns {string}
 */

function fakeMd5(len) {
  if (len === void 0) {
    len = 32;
  }

  var line = '0123456789abcdefghijklmnopqrstuvwxyz',
      lineLen = line.length;
  len = pInt(len);
  var result = '';

  while (result.length < len) {
    result += line.substr(window__WEBPACK_IMPORTED_MODULE_15___default.a.Math.round(window__WEBPACK_IMPORTED_MODULE_15___default.a.Math.random() * lineLen), 1);
  }

  return result;
}
/**
 * @param {string} text
 * @returns {string}
 */

function encodeHtml(text) {
  return isNormal(text) ? ___WEBPACK_IMPORTED_MODULE_17___default.a.escape(text.toString()) : '';
}
/**
 * @param {string} text
 * @param {number=} len = 100
 * @returns {string}
 */

function splitPlainText(text, len) {
  if (len === void 0) {
    len = 100;
  }

  var prefix = '',
      subText = '',
      result = text,
      spacePos = 0,
      newLinePos = 0;

  while (result.length > len) {
    subText = result.substring(0, len);
    spacePos = subText.lastIndexOf(' ');
    newLinePos = subText.lastIndexOf('\n');

    if (-1 !== newLinePos) {
      spacePos = newLinePos;
    }

    if (-1 === spacePos) {
      spacePos = len;
    }

    prefix += subText.substring(0, spacePos) + '\n';
    result = result.substring(spacePos + 1);
  }

  return prefix + result;
}

var timeOutAction = function () {
  var timeOuts = {};
  return function (action, fFunction, timeOut) {
    timeOuts[action] = isUnd(timeOuts[action]) ? 0 : timeOuts[action];
    window__WEBPACK_IMPORTED_MODULE_15___default.a.clearTimeout(timeOuts[action]);
    timeOuts[action] = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default()(fFunction, timeOut);
  };
}();

var timeOutActionSecond = function () {
  var timeOuts = {};
  return function (action, fFunction, timeOut) {
    if (!timeOuts[action]) {
      timeOuts[action] = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default()(function () {
        fFunction();
        timeOuts[action] = 0;
      }, timeOut);
    }
  };
}();


/**
 * @param {any} m
 * @returns {any}
 */

function deModule(m) {
  return (m && m.default ? m.default : m) || '';
}
/**
 * @returns {boolean}
 */

function inFocus() {
  try {
    if (window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement) {
      if (isUnd(window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.__inFocusCache)) {
        window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.__inFocusCache = $__WEBPACK_IMPORTED_MODULE_16___default()(window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement).is('input,textarea,iframe,.cke_editable');
      }

      return !!window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.__inFocusCache;
    }
  } catch (e) {} // eslint-disable-line no-empty


  return false;
}
/**
 * @param {boolean} force
 * @returns {void}
 */

function removeInFocus(force) {
  if (window__WEBPACK_IMPORTED_MODULE_15___default.a.document && window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement && window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.blur) {
    try {
      var activeEl = $__WEBPACK_IMPORTED_MODULE_16___default()(window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement);

      if (activeEl && activeEl.is('input,textarea')) {
        window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.blur();
      } else if (force) {
        window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.blur();
      }
    } catch (e) {} // eslint-disable-line no-empty

  }
}
/**
 * @returns {void}
 */

function removeSelection() {
  try {
    if (window__WEBPACK_IMPORTED_MODULE_15___default.a && window__WEBPACK_IMPORTED_MODULE_15___default.a.getSelection) {
      var sel = window__WEBPACK_IMPORTED_MODULE_15___default.a.getSelection();

      if (sel && sel.removeAllRanges) {
        sel.removeAllRanges();
      }
    } else if (window__WEBPACK_IMPORTED_MODULE_15___default.a.document && window__WEBPACK_IMPORTED_MODULE_15___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_15___default.a.document.selection.empty) {
      window__WEBPACK_IMPORTED_MODULE_15___default.a.document.selection.empty();
    }
  } catch (e) {} // eslint-disable-line no-empty

}
/**
 * @param {string} prefix
 * @param {string} subject
 * @returns {string}
 */

function replySubjectAdd(prefix, subject) {
  prefix = trim(prefix.toUpperCase());
  subject = trim(subject.replace(/[\s]+/g, ' '));
  var drop = false,
      re = 'RE' === prefix,
      fwd = 'FWD' === prefix;
  var parts = [],
      prefixIsRe = !fwd;

  if ('' !== subject) {
    ___WEBPACK_IMPORTED_MODULE_17___default.a.each(subject.split(':'), function (part) {
      var trimmedPart = trim(part);

      if (!drop && (/^(RE|FWD)$/i.test(trimmedPart) || /^(RE|FWD)[[(][\d]+[\])]$/i.test(trimmedPart))) {
        if (!re) {
          re = !!/^RE/i.test(trimmedPart);
        }

        if (!fwd) {
          fwd = !!/^FWD/i.test(trimmedPart);
        }
      } else {
        parts.push(part);
        drop = true;
      }
    });
  }

  if (prefixIsRe) {
    re = false;
  } else {
    fwd = false;
  }

  return trim((prefixIsRe ? 'Re: ' : 'Fwd: ') + (re ? 'Re: ' : '') + (fwd ? 'Fwd: ' : '') + trim(parts.join(':')));
}
/**
 * @param {number} num
 * @param {number} dec
 * @returns {number}
 */

function roundNumber(num, dec) {
  return window__WEBPACK_IMPORTED_MODULE_15___default.a.Math.round(num * window__WEBPACK_IMPORTED_MODULE_15___default.a.Math.pow(10, dec)) / window__WEBPACK_IMPORTED_MODULE_15___default.a.Math.pow(10, dec);
}
/**
 * @param {(number|string)} sizeInBytes
 * @returns {string}
 */

function friendlySize(sizeInBytes) {
  sizeInBytes = pInt(sizeInBytes);

  switch (true) {
    case 1073741824 <= sizeInBytes:
      return roundNumber(sizeInBytes / 1073741824, 1) + 'GB';

    case 1048576 <= sizeInBytes:
      return roundNumber(sizeInBytes / 1048576, 1) + 'MB';

    case 1024 <= sizeInBytes:
      return roundNumber(sizeInBytes / 1024, 0) + 'KB';
    // no default
  }

  return sizeInBytes + 'B';
}
/**
 * @param {string} desc
 */

function log(desc) {
  if (window__WEBPACK_IMPORTED_MODULE_15___default.a.console && window__WEBPACK_IMPORTED_MODULE_15___default.a.console.log) {
    window__WEBPACK_IMPORTED_MODULE_15___default.a.console.log(desc);
  }
}
/**
 * @param {?} object
 * @param {string} methodName
 * @param {Array=} params
 * @param {number=} delay = 0
 */

function delegateRun(object, methodName, params, delay) {
  if (delay === void 0) {
    delay = 0;
  }

  if (object && object[methodName]) {
    delay = pInt(delay);
    params = isArray(params) ? params : [];

    if (0 >= delay) {
      object[methodName].apply(object, params);
    } else {
      ___WEBPACK_IMPORTED_MODULE_17___default.a.delay(function () {
        object[methodName].apply(object, params);
      }, delay);
    }
  }
}
/**
 * @param {?} event
 */

function killCtrlACtrlS(event) {
  event = event || window__WEBPACK_IMPORTED_MODULE_15___default.a.event;

  if (event && event.ctrlKey && !event.shiftKey && !event.altKey) {
    var key = event.keyCode || event.which;

    if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_21__["EventKeyCode"].S) {
      event.preventDefault();
      return;
    } else if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_21__["EventKeyCode"].A) {
      var sender = event.target || event.srcElement;

      if (sender && ('true' === '' + sender.contentEditable || sender.tagName && sender.tagName.match(/INPUT|TEXTAREA/i))) {
        return;
      }

      if (window__WEBPACK_IMPORTED_MODULE_15___default.a.getSelection) {
        window__WEBPACK_IMPORTED_MODULE_15___default.a.getSelection().removeAllRanges();
      } else if (window__WEBPACK_IMPORTED_MODULE_15___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_15___default.a.document.selection.clear) {
        window__WEBPACK_IMPORTED_MODULE_15___default.a.document.selection.clear();
      }

      event.preventDefault();
    }
  }
}
/**
 * @param {(Object|null|undefined)} context
 * @param {Function} fExecute
 * @param {(Function|boolean|null)=} fCanExecute = true
 * @returns {Function}
 */

function createCommandLegacy(context, fExecute, fCanExecute) {
  if (fCanExecute === void 0) {
    fCanExecute = true;
  }

  var fResult = null;

  var fNonEmpty = function fNonEmpty() {
    if (fResult && fResult.canExecute && fResult.canExecute()) {
      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }

      fExecute.apply(context, args);
    }

    return false;
  };

  fResult = fExecute ? fNonEmpty : noop;
  fResult.enabled = ko__WEBPACK_IMPORTED_MODULE_18__[/* default */ "a"].observable(true);
  fResult.isCommand = true;

  if (isFunc(fCanExecute)) {
    fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_18__[/* default */ "a"].computed(function () {
      return fResult && fResult.enabled() && fCanExecute.call(context);
    });
  } else {
    fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_18__[/* default */ "a"].computed(function () {
      return fResult && fResult.enabled() && !!fCanExecute;
    });
  }

  return fResult;
}
/**
 * @param {string} theme
 * @returns {string}
 */

var convertThemeName = ___WEBPACK_IMPORTED_MODULE_17___default.a.memoize(function (theme) {
  if ('@custom' === theme.substr(-7)) {
    theme = trim(theme.substring(0, theme.length - 7));
  }

  return trim(theme.replace(/[^a-zA-Z0-9]+/g, ' ').replace(/([A-Z])/g, ' $1').replace(/[\s]+/g, ' '));
});
/**
 * @param {string} name
 * @returns {string}
 */

function quoteName(name) {
  return name.replace(/["]/g, '\\"');
}
/**
 * @returns {number}
 */

function microtime() {
  return new window__WEBPACK_IMPORTED_MODULE_15___default.a.Date().getTime();
}
/**
 * @returns {number}
 */

function timestamp() {
  return window__WEBPACK_IMPORTED_MODULE_15___default.a.Math.round(microtime() / 1000);
}
/**
 *
 * @param {string} language
 * @param {boolean=} isEng = false
 * @returns {string}
 */

function convertLangName(language, isEng) {
  if (isEng === void 0) {
    isEng = false;
  }

  return __webpack_require__(/*! Common/Translator */ 9).i18n('LANGS_NAMES' + (true === isEng ? '_EN' : '') + '/LANG_' + language.toUpperCase().replace(/[^a-zA-Z0-9]+/g, '_'), null, language);
}
/**
 * @returns {object}
 */

function draggablePlace() {
  return $__WEBPACK_IMPORTED_MODULE_16___default()('<div class="draggablePlace">' + '<span class="text"></span>&nbsp;' + '<i class="icon-copy icon-white visible-on-ctrl"></i>' + '<i class="icon-mail icon-white hidden-on-ctrl"></i>' + '</div>').appendTo('#rl-hidden');
}
/**
 * @param {object} domOption
 * @param {object} item
 * @returns {void}
 */

function defautOptionsAfterRender(domItem, item) {
  if (item && !isUnd(item.disabled) && domItem) {
    $__WEBPACK_IMPORTED_MODULE_16___default()(domItem).toggleClass('disabled', item.disabled).prop('disabled', item.disabled);
  }
}
/**
 * @param {string} title
 * @param {Object} body
 * @param {boolean} isHtml
 * @param {boolean} print
 */

function clearBqSwitcher(body) {
  _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_11___default()(body).call(body, 'blockquote.rl-bq-switcher').removeClass('rl-bq-switcher hidden-bq');

  _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_11___default()(body).call(body, '.rlBlockquoteSwitcher').off('.rlBlockquoteSwitcher').remove();

  _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_11___default()(body).call(body, '[data-html-editor-font-wrapper]').removeAttr('data-html-editor-font-wrapper');
}
/**
 * @param {object} messageData
 * @param {Object} body
 * @param {boolean} isHtml
 * @param {boolean} print
 * @returns {void}
 */

function previewMessage(_ref, body, isHtml, print) {
  var title = _ref.title,
      subject = _ref.subject,
      date = _ref.date,
      fromCreds = _ref.fromCreds,
      toCreds = _ref.toCreds,
      toLabel = _ref.toLabel,
      ccClass = _ref.ccClass,
      ccCreds = _ref.ccCreds,
      ccLabel = _ref.ccLabel;
  var win = window__WEBPACK_IMPORTED_MODULE_15___default.a.open(''),
      doc = win.document,
      bodyClone = body.clone(),
      bodyClass = isHtml ? 'html' : 'plain';
  clearBqSwitcher(bodyClone);
  var html = bodyClone ? bodyClone.html() : '';
  doc.write(deModule(__webpack_require__(/*! Html/PreviewMessage.html */ 357)).replace('{{title}}', encodeHtml(title)).replace('{{subject}}', encodeHtml(subject)).replace('{{date}}', encodeHtml(date)).replace('{{fromCreds}}', encodeHtml(fromCreds)).replace('{{toCreds}}', encodeHtml(toCreds)).replace('{{toLabel}}', encodeHtml(toLabel)).replace('{{ccClass}}', encodeHtml(ccClass)).replace('{{ccCreds}}', encodeHtml(ccCreds)).replace('{{ccLabel}}', encodeHtml(ccLabel)).replace('{{bodyClass}}', bodyClass).replace('{{html}}', html));
  doc.close();

  if (print) {
    _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default()(function () {
      return win.print();
    }, 100);
  }
}
/**
 * @param {Function} fCallback
 * @param {?} koTrigger
 * @param {?} context = null
 * @param {number=} timer = 1000
 * @returns {Function}
 */

function settingsSaveHelperFunction(fCallback, koTrigger, context, timer) {
  if (context === void 0) {
    context = null;
  }

  if (timer === void 0) {
    timer = 1000;
  }

  timer = pInt(timer);
  return function (type, data, cached, requestAction, requestParameters) {
    koTrigger.call(context, data && data.Result ? Common_Enums__WEBPACK_IMPORTED_MODULE_21__["SaveSettingsStep"].TrueResult : Common_Enums__WEBPACK_IMPORTED_MODULE_21__["SaveSettingsStep"].FalseResult);

    if (fCallback) {
      fCallback.call(context, type, data, cached, requestAction, requestParameters);
    }

    ___WEBPACK_IMPORTED_MODULE_17___default.a.delay(function () {
      koTrigger.call(context, Common_Enums__WEBPACK_IMPORTED_MODULE_21__["SaveSettingsStep"].Idle);
    }, timer);
  };
}
/**
 * @param {object} koTrigger
 * @param {mixed} context
 * @returns {mixed}
 */

function settingsSaveHelperSimpleFunction(koTrigger, context) {
  return settingsSaveHelperFunction(null, koTrigger, context, 1000);
}
/**
 * @param {object} remote
 * @param {string} settingName
 * @param {string} type
 * @param {function} fTriggerFunction
 * @returns {function}
 */

function settingsSaveHelperSubscribeFunction(remote, settingName, type, fTriggerFunction) {
  return function (value) {
    if (remote) {
      switch (type) {
        case 'bool':
        case 'boolean':
          value = value ? '1' : '0';
          break;

        case 'int':
        case 'integer':
        case 'number':
          value = pInt(value);
          break;

        case 'trim':
          value = trim(value);
          break;

        default:
          value = pString(value);
          break;
      }

      var data = {};
      data[settingName] = value;

      if (remote.saveAdminConfig) {
        remote.saveAdminConfig(fTriggerFunction || null, data);
      } else if (remote.saveSettings) {
        remote.saveSettings(fTriggerFunction || null, data);
      }
    }
  };
}
/**
 * @param {string} html
 * @returns {string}
 */

function findEmailAndLinks(html) {
  return Autolinker__WEBPACK_IMPORTED_MODULE_19___default.a ? Autolinker__WEBPACK_IMPORTED_MODULE_19___default.a.link(html, {
    newWindow: true,
    stripPrefix: false,
    urls: true,
    email: true,
    mention: false,
    phone: false,
    hashtag: false,
    replaceFn: function replaceFn(match) {
      return !(match && 'url' === match.getType() && match.matchedText && 0 !== match.matchedText.indexOf('http'));
    }
  }) : html;
}
/**
 * @param {string} html
 * @returns {string}
 */

function htmlToPlain(html) {
  var pos = 0,
      limit = 0,
      iP1 = 0,
      iP2 = 0,
      iP3 = 0,
      text = '';

  var convertBlockquote = function convertBlockquote(blockquoteText) {
    blockquoteText = '> ' + trim(blockquoteText).replace(/\n/gm, '\n> ');
    return blockquoteText.replace(/(^|\n)([> ]+)/gm, function () {
      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
        args[_key2] = arguments[_key2];
      }

      return args && 2 < args.length ? args[1] + trim(args[2].replace(/[\s]/g, '')) + ' ' : '';
    });
  };

  var convertDivs = function convertDivs() {
    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
      args[_key3] = arguments[_key3];
    }

    if (args && 1 < args.length) {
      var divText = trim(args[1]);

      if (0 < divText.length) {
        divText = divText.replace(/<div[^>]*>([\s\S\r\n]*)<\/div>/gim, convertDivs);
        divText = '\n' + trim(divText) + '\n';
      }

      return divText;
    }

    return '';
  };

  var convertPre = function convertPre() {
    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
      args[_key4] = arguments[_key4];
    }

    return args && 1 < args.length ? args[1].toString().replace(/[\n]/gm, '<br />').replace(/[\r]/gm, '') : '';
  },
      fixAttibuteValue = function fixAttibuteValue() {
    for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
      args[_key5] = arguments[_key5];
    }

    return args && 1 < args.length ? '' + args[1] + ___WEBPACK_IMPORTED_MODULE_17___default.a.escape(args[2]) : '';
  },
      convertLinks = function convertLinks() {
    for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
      args[_key6] = arguments[_key6];
    }

    return args && 1 < args.length ? trim(args[1]) : '';
  };

  text = html.replace(/<p[^>]*><\/p>/gi, '').replace(/<pre[^>]*>([\s\S\r\n\t]*)<\/pre>/gim, convertPre).replace(/[\s]+/gm, ' ').replace(/((?:href|data)\s?=\s?)("[^"]+?"|'[^']+?')/gim, fixAttibuteValue).replace(/<br[^>]*>/gim, '\n').replace(/<\/h[\d]>/gi, '\n').replace(/<\/p>/gi, '\n\n').replace(/<ul[^>]*>/gim, '\n').replace(/<\/ul>/gi, '\n').replace(/<li[^>]*>/gim, ' * ').replace(/<\/li>/gi, '\n').replace(/<\/td>/gi, '\n').replace(/<\/tr>/gi, '\n').replace(/<hr[^>]*>/gim, '\n_______________________________\n\n').replace(/<div[^>]*>([\s\S\r\n]*)<\/div>/gim, convertDivs).replace(/<blockquote[^>]*>/gim, '\n__bq__start__\n').replace(/<\/blockquote>/gim, '\n__bq__end__\n').replace(/<a [^>]*>([\s\S\r\n]*?)<\/a>/gim, convertLinks).replace(/<\/div>/gi, '\n').replace(/&nbsp;/gi, ' ').replace(/&quot;/gi, '"').replace(/<[^>]*>/gm, '');
  text = Common_Globals__WEBPACK_IMPORTED_MODULE_20__["$div"].html(text).text();
  text = text.replace(/\n[ \t]+/gm, '\n').replace(/[\n]{3,}/gm, '\n\n').replace(/&gt;/gi, '>').replace(/&lt;/gi, '<').replace(/&amp;/gi, '&');
  text = splitPlainText(text);
  pos = 0;
  limit = 800;

  while (0 < limit) {
    limit -= 1;
    iP1 = text.indexOf('__bq__start__', pos);

    if (-1 < iP1) {
      iP2 = text.indexOf('__bq__start__', iP1 + 5);
      iP3 = text.indexOf('__bq__end__', iP1 + 5);

      if ((-1 === iP2 || iP3 < iP2) && iP1 < iP3) {
        text = text.substring(0, iP1) + convertBlockquote(text.substring(iP1 + 13, iP3)) + text.substring(iP3 + 11);
        pos = 0;
      } else if (-1 < iP2 && iP2 < iP3) {
        pos = iP2 - 1;
      } else {
        pos = 0;
      }
    } else {
      break;
    }
  }

  text = text.replace(/__bq__start__/gm, '').replace(/__bq__end__/gm, '');
  return text;
}
/**
 * @param {string} plain
 * @param {boolean} findEmailAndLinksInText = false
 * @returns {string}
 */

function plainToHtml(plain, findEmailAndLinksInText) {
  if (findEmailAndLinksInText === void 0) {
    findEmailAndLinksInText = false;
  }

  plain = plain.toString().replace(/\r/g, '');
  plain = plain.replace(/^>[> ]>+/gm, function (_ref2) {
    var match = _ref2[0];
    return match ? match.replace(/[ ]+/g, '') : match;
  });
  var bIn = false,
      bDo = true,
      bStart = true,
      aNextText = [],
      sLine = '',
      iIndex = 0,
      aText = plain.split('\n');

  do {
    bDo = false;
    aNextText = [];

    for (iIndex = 0; iIndex < aText.length; iIndex++) {
      sLine = aText[iIndex];
      bStart = '>' === sLine.substr(0, 1);

      if (bStart && !bIn) {
        bDo = true;
        bIn = true;
        aNextText.push('~~~blockquote~~~');
        aNextText.push(sLine.substr(1));
      } else if (!bStart && bIn) {
        if ('' !== sLine) {
          bIn = false;
          aNextText.push('~~~/blockquote~~~');
          aNextText.push(sLine);
        } else {
          aNextText.push(sLine);
        }
      } else if (bStart && bIn) {
        aNextText.push(sLine.substr(1));
      } else {
        aNextText.push(sLine);
      }
    }

    if (bIn) {
      bIn = false;
      aNextText.push('~~~/blockquote~~~');
    }

    aText = aNextText;
  } while (bDo);

  plain = aText.join('\n');
  plain = plain // .replace(/~~~\/blockquote~~~\n~~~blockquote~~~/g, '\n')
  .replace(/&/g, '&amp;').replace(/>/g, '&gt;').replace(/</g, '&lt;').replace(/~~~blockquote~~~[\s]*/g, '<blockquote>').replace(/[\s]*~~~\/blockquote~~~/g, '</blockquote>').replace(/\n/g, '<br />');
  return findEmailAndLinksInText ? findEmailAndLinks(plain) : plain;
}
window__WEBPACK_IMPORTED_MODULE_15___default.a['rainloop_Utils_htmlToPlain'] = htmlToPlain; // eslint-disable-line dot-notation

window__WEBPACK_IMPORTED_MODULE_15___default.a['rainloop_Utils_plainToHtml'] = plainToHtml; // eslint-disable-line dot-notation

/**
 * @param {Array} aSystem
 * @param {Array} aList
 * @param {Array=} aDisabled
 * @param {Array=} aHeaderLines
 * @param {?number=} iUnDeep
 * @param {Function=} fDisableCallback
 * @param {Function=} fVisibleCallback
 * @param {Function=} fRenameCallback
 * @param {boolean=} bSystem
 * @param {boolean=} bBuildUnvisible
 * @returns {Array}
 */

function folderListOptionsBuilder(aSystem, aList, aDisabled, aHeaderLines, iUnDeep, fDisableCallback, fVisibleCallback, fRenameCallback, bSystem, bBuildUnvisible) {
  var
  /**
  * @type {?FolderModel}
  */
  oItem = null,
      bSep = false,
      iIndex = 0,
      iLen = 0,
      aResult = [];
  var sDeepPrefix = "\xA0\xA0\xA0";
  bBuildUnvisible = isUnd(bBuildUnvisible) ? false : !!bBuildUnvisible;
  bSystem = !isNormal(bSystem) ? 0 < aSystem.length : bSystem;
  iUnDeep = !isNormal(iUnDeep) ? 0 : iUnDeep;
  fDisableCallback = isNormal(fDisableCallback) ? fDisableCallback : null;
  fVisibleCallback = isNormal(fVisibleCallback) ? fVisibleCallback : null;
  fRenameCallback = isNormal(fRenameCallback) ? fRenameCallback : null;

  if (!isArray(aDisabled)) {
    aDisabled = [];
  }

  if (!isArray(aHeaderLines)) {
    aHeaderLines = [];
  }

  for (iIndex = 0, iLen = aHeaderLines.length; iIndex < iLen; iIndex++) {
    aResult.push({
      id: aHeaderLines[iIndex][0],
      name: aHeaderLines[iIndex][1],
      system: false,
      seporator: false,
      disabled: false
    });
  }

  bSep = true;

  for (iIndex = 0, iLen = aSystem.length; iIndex < iLen; iIndex++) {
    oItem = aSystem[iIndex];

    if (fVisibleCallback ? fVisibleCallback(oItem) : true) {
      if (bSep && 0 < aResult.length) {
        aResult.push({
          id: '---',
          name: '---',
          system: false,
          seporator: true,
          disabled: true
        });
      }

      bSep = false;
      aResult.push({
        id: oItem.fullNameRaw,
        name: fRenameCallback ? fRenameCallback(oItem) : oItem.name(),
        system: true,
        seporator: false,
        disabled: !oItem.selectable || -1 < inArray(oItem.fullNameRaw, aDisabled) || (fDisableCallback ? fDisableCallback(oItem) : false)
      });
    }
  }

  bSep = true;

  for (iIndex = 0, iLen = aList.length; iIndex < iLen; iIndex++) {
    oItem = aList[iIndex]; // if (oItem.subScribed() || !oItem.existen || bBuildUnvisible)

    if ((oItem.subScribed() || !oItem.existen || bBuildUnvisible) && (oItem.selectable || oItem.hasSubScribedSubfolders())) {
      if (fVisibleCallback ? fVisibleCallback(oItem) : true) {
        if (Common_Enums__WEBPACK_IMPORTED_MODULE_21__["FolderType"].User === oItem.type() || !bSystem || oItem.hasSubScribedSubfolders()) {
          if (bSep && 0 < aResult.length) {
            aResult.push({
              id: '---',
              name: '---',
              system: false,
              seporator: true,
              disabled: true
            });
          }

          bSep = false;
          aResult.push({
            id: oItem.fullNameRaw,
            name: new window__WEBPACK_IMPORTED_MODULE_15___default.a.Array(oItem.deep + 1 - iUnDeep).join(sDeepPrefix) + (fRenameCallback ? fRenameCallback(oItem) : oItem.name()),
            system: false,
            seporator: false,
            disabled: !oItem.selectable || -1 < inArray(oItem.fullNameRaw, aDisabled) || (fDisableCallback ? fDisableCallback(oItem) : false)
          });
        }
      }
    }

    if (oItem.subScribed() && 0 < oItem.subFolders().length) {
      aResult = _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12___default()(aResult).call(aResult, folderListOptionsBuilder([], oItem.subFolders(), aDisabled, [], iUnDeep, fDisableCallback, fVisibleCallback, fRenameCallback, bSystem, bBuildUnvisible));
    }
  }

  return aResult;
}
/**
 * @param {object} element
 * @returns {void}
 */

function selectElement(element) {
  var sel = null,
      range = null;

  if (window__WEBPACK_IMPORTED_MODULE_15___default.a.getSelection) {
    sel = window__WEBPACK_IMPORTED_MODULE_15___default.a.getSelection();
    sel.removeAllRanges();
    range = window__WEBPACK_IMPORTED_MODULE_15___default.a.document.createRange();
    range.selectNodeContents(element);
    sel.addRange(range);
  } else if (window__WEBPACK_IMPORTED_MODULE_15___default.a.document.selection) {
    range = window__WEBPACK_IMPORTED_MODULE_15___default.a.document.body.createTextRange();
    range.moveToElementText(element);
    range.select();
  }
}
var detectDropdownVisibility = ___WEBPACK_IMPORTED_MODULE_17___default.a.debounce(function () {
  Object(Common_Globals__WEBPACK_IMPORTED_MODULE_20__["dropdownVisibility"])(!!_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_11___default()(___WEBPACK_IMPORTED_MODULE_17___default.a).call(___WEBPACK_IMPORTED_MODULE_17___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_20__["data"].aBootstrapDropdowns, function (item) {
    return item.hasClass('open');
  }));
}, 50);
/**
 * @param {boolean=} delay = false
 */

function triggerAutocompleteInputChange(delay) {
  if (delay === void 0) {
    delay = false;
  }

  var fFunc = function fFunc() {
    $__WEBPACK_IMPORTED_MODULE_16___default()('.checkAutocomplete').trigger('change');
  };

  if (delay) {
    ___WEBPACK_IMPORTED_MODULE_17___default.a.delay(fFunc, 100);
  } else {
    fFunc();
  }
}
var configurationScriptTagCache = {};
/**
 * @param {string} configuration
 * @returns {object}
 */

function getConfigurationFromScriptTag(configuration) {
  if (!configurationScriptTagCache[configuration]) {
    configurationScriptTagCache[configuration] = $__WEBPACK_IMPORTED_MODULE_16___default()('script[type="application/json"][data-configuration="' + configuration + '"]');
  }

  try {
    return JSON.parse(configurationScriptTagCache[configuration].text());
  } catch (e) {} // eslint-disable-line no-empty


  return {};
}
/**
 * @param {mixed} mPropOrValue
 * @param {mixed} value
 */

function disposeOne(propOrValue, value) {
  var disposable = value || propOrValue;

  if (disposable && 'function' === typeof disposable.dispose) {
    disposable.dispose();
  }
}
/**
 * @param {Object} object
 */

function disposeObject(object) {
  if (object) {
    if (isArray(object.disposables)) {
      ___WEBPACK_IMPORTED_MODULE_17___default.a.each(object.disposables, disposeOne);
    }

    ko__WEBPACK_IMPORTED_MODULE_18__[/* default */ "a"].utils.objectForEach(object, disposeOne);
  }
}
/**
 * @param {Object|Array} objectOrObjects
 * @returns {void}
 */

function delegateRunOnDestroy(objectOrObjects) {
  if (objectOrObjects) {
    if (isArray(objectOrObjects)) {
      ___WEBPACK_IMPORTED_MODULE_17___default.a.each(objectOrObjects, function (item) {
        delegateRunOnDestroy(item);
      });
    } else if (objectOrObjects && objectOrObjects.onDestroy) {
      objectOrObjects.onDestroy();
    }
  }
}
/**
 * @param {object} $styleTag
 * @param {string} css
 * @returns {boolean}
 */

function appendStyles($styleTag, css) {
  if ($styleTag && $styleTag[0]) {
    if ($styleTag[0].styleSheet && !isUnd($styleTag[0].styleSheet.cssText)) {
      $styleTag[0].styleSheet.cssText = css;
    } else {
      $styleTag.text(css);
    }

    return true;
  }

  return false;
}
var __themeTimer = 0,
    __themeAjax = null;
/**
 * @param {string} value
 * @param {function=} themeTrigger = noop
 * @returns {void}
 */

function changeTheme(value, themeTrigger) {
  if (themeTrigger === void 0) {
    themeTrigger = noop;
  }

  var themeLink = $__WEBPACK_IMPORTED_MODULE_16___default()('#app-theme-link'),
      clearTimer = function clearTimer() {
    __themeTimer = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default()(function () {
      return themeTrigger(Common_Enums__WEBPACK_IMPORTED_MODULE_21__["SaveSettingsStep"].Idle);
    }, 1000);
    __themeAjax = null;
  };

  var themeStyle = $__WEBPACK_IMPORTED_MODULE_16___default()('#app-theme-style'),
      url = themeLink.attr('href');

  if (!url) {
    url = themeStyle.attr('data-href');
  }

  if (url) {
    url = url.toString().replace(/\/-\/[^/]+\/-\//, '/-/' + value + '/-/');
    url = url.replace(/\/Css\/[^/]+\/User\//, '/Css/0/User/');
    url = url.replace(/\/Hash\/[^/]+\//, '/Hash/-/');

    if ('Json/' !== url.substring(url.length - 5, url.length)) {
      url += 'Json/';
    }

    window__WEBPACK_IMPORTED_MODULE_15___default.a.clearTimeout(__themeTimer);
    themeTrigger(Common_Enums__WEBPACK_IMPORTED_MODULE_21__["SaveSettingsStep"].Animate);

    if (__themeAjax && __themeAjax.abort) {
      __themeAjax.abort();
    }

    __themeAjax = $__WEBPACK_IMPORTED_MODULE_16___default.a.ajax({
      url: url,
      dataType: 'json'
    }).then(function (data) {
      if (data && isArray(data) && 2 === data.length) {
        if (themeLink && themeLink[0] && (!themeStyle || !themeStyle[0])) {
          themeStyle = $__WEBPACK_IMPORTED_MODULE_16___default()('<style id="app-theme-style"></style>');
          themeLink.after(themeStyle);
          themeLink.remove();
        }

        if (themeStyle && themeStyle[0]) {
          if (appendStyles(themeStyle, data[1])) {
            themeStyle.attr('data-href', url).attr('data-theme', data[0]);
          }
        }

        themeTrigger(Common_Enums__WEBPACK_IMPORTED_MODULE_21__["SaveSettingsStep"].TrueResult);
      }
    }).then(clearTimer, clearTimer);
  }
}
/**
 * @returns {function}
 */

function computedPagenatorHelper(koCurrentPage, koPageCount) {
  return function () {
    var currentPage = koCurrentPage(),
        pageCount = koPageCount(),
        result = [],
        fAdd = function fAdd(index, push, customName) {
      if (push === void 0) {
        push = true;
      }

      if (customName === void 0) {
        customName = '';
      }

      var data = {
        current: index === currentPage,
        name: '' === customName ? index.toString() : customName.toString(),
        custom: '' !== customName,
        title: '' === customName ? '' : index.toString(),
        value: index.toString()
      };

      if (push) {
        result.push(data);
      } else {
        result.unshift(data);
      }
    };

    var prev = 0,
        next = 0,
        limit = 2;

    if (1 < pageCount || 0 < pageCount && pageCount < currentPage) {
      if (pageCount < currentPage) {
        fAdd(pageCount);
        prev = pageCount;
        next = pageCount;
      } else {
        if (3 >= currentPage || pageCount - 2 <= currentPage) {
          limit += 2;
        }

        fAdd(currentPage);
        prev = currentPage;
        next = currentPage;
      }

      while (0 < limit) {
        prev -= 1;
        next += 1;

        if (0 < prev) {
          fAdd(prev, false);
          limit -= 1;
        }

        if (pageCount >= next) {
          fAdd(next, true);
          limit -= 1;
        } else if (0 >= prev) {
          break;
        }
      }

      if (3 === prev) {
        fAdd(2, false);
      } else if (3 < prev) {
        fAdd(Math.round((prev - 1) / 2), false, '...');
      }

      if (pageCount - 2 === next) {
        fAdd(pageCount - 1, true);
      } else if (pageCount - 2 > next) {
        fAdd(Math.round((pageCount + next) / 2), true, '...');
      } // first and last


      if (1 < prev) {
        fAdd(1, false);
      }

      if (pageCount > next) {
        fAdd(pageCount, true);
      }
    }

    return result;
  };
}
/**
 * @param {string} fileName
 * @returns {string}
 */

function getFileExtension(fileName) {
  fileName = trim(fileName).toLowerCase();
  var result = fileName.split('.').pop();
  return result === fileName ? '' : result;
}
/**
 * @param {string} fileName
 * @returns {string}
 */

function mimeContentType(fileName) {
  var ext = '',
      result = 'application/octet-stream';
  fileName = trim(fileName).toLowerCase();

  if ('winmail.dat' === fileName) {
    return 'application/ms-tnef';
  }

  ext = getFileExtension(fileName);

  if (ext && 0 < ext.length && !isUnd(Common_Mime__WEBPACK_IMPORTED_MODULE_22__[/* Mime */ "a"][ext])) {
    result = Common_Mime__WEBPACK_IMPORTED_MODULE_22__[/* Mime */ "a"][ext];
  }

  return result;
}
/**
 * @param {string} color
 * @returns {boolean}
 */

function isTransparent(color) {
  return 'rgba(0, 0, 0, 0)' === color || 'transparent' === color;
}
/**
 * @param {Object} $el
 * @returns {number}
 */

function getRealHeight($el) {
  $el.clone().show().appendTo(Common_Globals__WEBPACK_IMPORTED_MODULE_20__["$hcont"]);
  var result = Common_Globals__WEBPACK_IMPORTED_MODULE_20__["$hcont"].height();
  Common_Globals__WEBPACK_IMPORTED_MODULE_20__["$hcont"].empty();
  return result;
}
/**
 * @param {string} url
 * @param {number} value
 * @param {Function} fCallback
 */

function resizeAndCrop(url, value, fCallback) {
  var img = new window__WEBPACK_IMPORTED_MODULE_15___default.a.Image();

  img.onload = function () {
    var diff = [0, 0];
    var canvas = window__WEBPACK_IMPORTED_MODULE_15___default.a.document.createElement('canvas'),
        ctx = canvas.getContext('2d');
    canvas.width = value;
    canvas.height = value;

    if (this.width > this.height) {
      diff = [this.width - this.height, 0];
    } else {
      diff = [0, this.height - this.width];
    }

    ctx.fillStyle = '#fff';
    ctx.fillRect(0, 0, value, value);
    ctx.drawImage(this, diff[0] / 2, diff[1] / 2, this.width - diff[0], this.height - diff[1], 0, 0, value, value);
    fCallback(canvas.toDataURL('image/jpeg'));
  };

  img.src = url;
}
/**
 * @param {string} mailToUrl
 * @param {Function} PopupComposeViewModel
 * @returns {boolean}
 */

function mailToHelper(mailToUrl, PopupComposeViewModel) {
  if (mailToUrl && 'mailto:' === mailToUrl.toString().substr(0, 7).toLowerCase()) {
    if (!PopupComposeViewModel) {
      return true;
    }

    mailToUrl = mailToUrl.toString().substr(7);
    var to = [],
        cc = null,
        bcc = null,
        params = {};

    var email = mailToUrl.replace(/\?.+$/, ''),
        query = mailToUrl.replace(/^[^?]*\?/, ''),
        EmailModel = __webpack_require__(/*! Model/Email */ 82).default;

    params = simpleQueryParser(query);

    if (!isUnd(params.to)) {
      to = EmailModel.parseEmailLine(decodeURIComponent(email + ',' + params.to));
      to = _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_13___default()(___WEBPACK_IMPORTED_MODULE_17___default.a).call(___WEBPACK_IMPORTED_MODULE_17___default.a, _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_14___default()(to).call(to, function (result, value) {
        if (value) {
          if (result[value.email]) {
            if (!result[value.email].name) {
              result[value.email] = value;
            }
          } else {
            result[value.email] = value;
          }
        }

        return result;
      }, {}));
    } else {
      to = EmailModel.parseEmailLine(email);
    }

    if (!isUnd(params.cc)) {
      cc = EmailModel.parseEmailLine(decodeURIComponent(params.cc));
    }

    if (!isUnd(params.bcc)) {
      bcc = EmailModel.parseEmailLine(decodeURIComponent(params.bcc));
    }

    __webpack_require__(/*! Knoin/Knoin */ 8).showScreenPopup(PopupComposeViewModel, [Common_Enums__WEBPACK_IMPORTED_MODULE_21__["ComposeType"].Empty, null, to, cc, bcc, isUnd(params.subject) ? null : pString(decodeURIComponent(params.subject)), isUnd(params.body) ? null : plainToHtml(pString(decodeURIComponent(params.body)))]);

    return true;
  }

  return false;
}
/**
 * @param {Function} fn
 * @returns {void}
 */

function domReady(fn) {
  $__WEBPACK_IMPORTED_MODULE_16___default()(function () {
    return fn();
  }); //
  //	if ('loading' !== window.document.readyState)
  //	{
  //		fn();
  //	}
  //	else
  //	{
  //		window.document.addEventListener('DOMContentLoaded', fn);
  //	}
}
var windowResize = ___WEBPACK_IMPORTED_MODULE_17___default.a.debounce(function (timeout) {
  if (isUnd(timeout) || isNull(timeout)) {
    Common_Globals__WEBPACK_IMPORTED_MODULE_20__["$win"].resize();
  } else {
    _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default()(function () {
      Common_Globals__WEBPACK_IMPORTED_MODULE_20__["$win"].resize();
    }, timeout);
  }
}, 50);
/**
 * @returns {void}
 */

function windowResizeCallback() {
  windowResize();
}
var substr = window__WEBPACK_IMPORTED_MODULE_15___default.a.String.substr;

if ('b' !== 'ab'.substr(-1)) {
  substr = function substr(str, start, length) {
    start = 0 > start ? str.length + start : start;
    return str.substr(start, length);
  };

  window__WEBPACK_IMPORTED_MODULE_15___default.a.String.substr = substr;
}

/***/ }),
/* 3 */
/*!***************************!*\
  !*** external "window._" ***!
  \***************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window._;

/***/ }),
/* 4 */
/*!*************************!*\
  !*** external "window" ***!
  \*************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window;

/***/ }),
/* 5 */
/*!*********************************!*\
  !*** ./dev/Storage/Settings.js ***!
  \*********************************/
/*! exports provided: settingsGet, settingsSet, appSettingsGet, capa */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settingsGet", function() { return settingsGet; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settingsSet", function() { return settingsSet; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "appSettingsGet", function() { return appSettingsGet; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "capa", function() { return capa; });
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);


var SETTINGS = window__WEBPACK_IMPORTED_MODULE_0___default.a.__rlah_data() || null;
SETTINGS = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isNormal"])(SETTINGS) ? SETTINGS : {};
var APP_SETTINGS = SETTINGS.System || null;
APP_SETTINGS = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isNormal"])(APP_SETTINGS) ? APP_SETTINGS : {};
/**
 * @param {string} name
 * @returns {*}
 */

function settingsGet(name) {
  return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(SETTINGS[name]) ? null : SETTINGS[name];
}
/**
 * @param {string} name
 * @param {*} value
 */

function settingsSet(name, value) {
  SETTINGS[name] = value;
}
/**
 * @param {string} name
 * @returns {*}
 */

function appSettingsGet(name) {
  return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(APP_SETTINGS[name]) ? null : APP_SETTINGS[name];
}
/**
 * @param {string} name
 * @returns {boolean}
 */

function capa(name) {
  var values = settingsGet('Capa');
  return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(values) && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isNormal"])(name) && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["inArray"])(name, values);
}

/***/ }),
/* 6 */
/*!*******************************!*\
  !*** ./dev/Common/Globals.js ***!
  \*******************************/
/*! exports provided: $win, $doc, $html, $body, $div, $hcont, startMicrotime, dropdownVisibility, useKeyboardShortcuts, sUserAgent, bIE, bChrome, bSafari, bMobileDevice, bDisableNanoScroll, bAnimationSupported, bXMLHttpRequestSupported, bIsHttps, htmlEditorDefaultConfig, htmlEditorLangsMap, bAllowPdfPreview, VIEW_MODELS, moveAction, leftPanelDisabled, leftPanelType, leftPanelWidth, popupVisibilityNames, popupVisibility, keyScopeReal, keyScopeFake, keyScope, data */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$win", function() { return $win; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$doc", function() { return $doc; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$html", function() { return $html; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$body", function() { return $body; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$div", function() { return $div; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$hcont", function() { return $hcont; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startMicrotime", function() { return startMicrotime; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dropdownVisibility", function() { return dropdownVisibility; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useKeyboardShortcuts", function() { return useKeyboardShortcuts; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sUserAgent", function() { return sUserAgent; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bIE", function() { return bIE; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bChrome", function() { return bChrome; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bSafari", function() { return bSafari; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bMobileDevice", function() { return bMobileDevice; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bDisableNanoScroll", function() { return bDisableNanoScroll; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bAnimationSupported", function() { return bAnimationSupported; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bXMLHttpRequestSupported", function() { return bXMLHttpRequestSupported; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bIsHttps", function() { return bIsHttps; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "htmlEditorDefaultConfig", function() { return htmlEditorDefaultConfig; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "htmlEditorLangsMap", function() { return htmlEditorLangsMap; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bAllowPdfPreview", function() { return bAllowPdfPreview; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VIEW_MODELS", function() { return VIEW_MODELS; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "moveAction", function() { return moveAction; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "leftPanelDisabled", function() { return leftPanelDisabled; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "leftPanelType", function() { return leftPanelType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "leftPanelWidth", function() { return leftPanelWidth; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "popupVisibilityNames", function() { return popupVisibilityNames; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "popupVisibility", function() { return popupVisibility; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyScopeReal", function() { return keyScopeReal; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyScopeFake", function() { return keyScopeFake; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyScope", function() { return keyScope; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "data", function() { return data; });
/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.filter.js */ 314);
/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Enums */ 0);








var $win = $__WEBPACK_IMPORTED_MODULE_4___default()(window__WEBPACK_IMPORTED_MODULE_2___default.a);
$win.__sizes = [0, 0];

var $doc = $__WEBPACK_IMPORTED_MODULE_4___default()(window__WEBPACK_IMPORTED_MODULE_2___default.a.document);
var $html = $__WEBPACK_IMPORTED_MODULE_4___default()('html');
var $body = $__WEBPACK_IMPORTED_MODULE_4___default()('body');
var $div = $__WEBPACK_IMPORTED_MODULE_4___default()('<div></div>');
var $hcont = $__WEBPACK_IMPORTED_MODULE_4___default()('<div></div>');
$hcont.attr('area', 'hidden').css({
  position: 'absolute',
  left: -5000
}).appendTo($body);
var startMicrotime = new window__WEBPACK_IMPORTED_MODULE_2___default.a.Date().getTime();
/**
 * @type {?}
 */

var dropdownVisibility = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false).extend({
  rateLimit: 0
});
/**
 * @type {boolean}
 */

var useKeyboardShortcuts = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(true);
/**
 * @type {string}
 */

var sUserAgent = 'navigator' in window__WEBPACK_IMPORTED_MODULE_2___default.a && 'userAgent' in window__WEBPACK_IMPORTED_MODULE_2___default.a.navigator && window__WEBPACK_IMPORTED_MODULE_2___default.a.navigator.userAgent.toLowerCase() || '';
/**
 * @type {boolean}
 */

var bIE = -1 < sUserAgent.indexOf('msie');
/**
 * @type {boolean}
 */

var bChrome = -1 < sUserAgent.indexOf('chrome');
/**
 * @type {boolean}
 */

var bSafari = !bChrome && -1 < sUserAgent.indexOf('safari');
/**
 * @type {boolean}
 */

var bMobileDevice = /android/i.test(sUserAgent) || /iphone/i.test(sUserAgent) || /ipod/i.test(sUserAgent) || /ipad/i.test(sUserAgent) || /blackberry/i.test(sUserAgent);
/**
 * @type {boolean}
 */

var bDisableNanoScroll = bMobileDevice;
/**
 * @type {boolean}
 */

var bAnimationSupported = !bMobileDevice && $html.hasClass('csstransitions') && $html.hasClass('cssanimations');
/**
 * @type {boolean}
 */

var bXMLHttpRequestSupported = !!window__WEBPACK_IMPORTED_MODULE_2___default.a.XMLHttpRequest;
/**
 * @type {boolean}
 */

var bIsHttps = window__WEBPACK_IMPORTED_MODULE_2___default.a.document && window__WEBPACK_IMPORTED_MODULE_2___default.a.document.location ? 'https:' === window__WEBPACK_IMPORTED_MODULE_2___default.a.document.location.protocol : false;
/**
 * @type {Object}
 */

var htmlEditorDefaultConfig = {
  'title': false,
  'stylesSet': false,
  'customConfig': '',
  'contentsCss': '',
  'toolbarGroups': [{
    name: 'spec'
  }, {
    name: 'styles'
  }, {
    name: 'basicstyles',
    groups: ['basicstyles', 'cleanup', 'bidi']
  }, {
    name: 'colors'
  }, bMobileDevice ? {} : {
    name: 'paragraph',
    groups: ['list', 'indent', 'blocks', 'align']
  }, {
    name: 'links'
  }, {
    name: 'insert'
  }, {
    name: 'document',
    groups: ['mode', 'document', 'doctools']
  }, {
    name: 'others'
  }],
  'removePlugins': 'liststyle',
  'removeButtons': 'Format,Undo,Redo,Cut,Copy,Paste,Anchor,Strike,Subscript,Superscript,Image,SelectAll,Source',
  'removeDialogTabs': 'link:advanced;link:target;image:advanced;images:advanced',
  'extraPlugins': 'plain,signature',
  'allowedContent': true,
  'extraAllowedContent': true,
  'fillEmptyBlocks': false,
  'ignoreEmptyParagraph': true,
  'disableNativeSpellChecker': false,
  'colorButton_enableAutomatic': false,
  'colorButton_enableMore': true,
  'font_defaultLabel': 'Arial',
  'fontSize_defaultLabel': '13',
  'fontSize_sizes': '10/10px;12/12px;13/13px;14/14px;16/16px;18/18px;20/20px;24/24px;28/28px;36/36px;48/48px'
};
/**
 * @type {Object}
 */

var htmlEditorLangsMap = {
  'ar_sa': 'ar-sa',
  'bg_bg': 'bg',
  'cs_CZ': 'cs',
  'de_de': 'de',
  'el_gr': 'el',
  'es_es': 'es',
  'et_ee': 'et',
  'fr_fr': 'fr',
  'hu_hu': 'hu',
  'is_is': 'is',
  'it_it': 'it',
  'ja_jp': 'ja',
  'ko_kr': 'ko',
  'lt_lt': 'lt',
  'lv_lv': 'lv',
  'fa_ir': 'fa',
  'nb_no': 'nb',
  'nl_nl': 'nl',
  'pl_pl': 'pl',
  'pt_br': 'pt-br',
  'pt_pt': 'pt',
  'ro_ro': 'ro',
  'ru_ru': 'ru',
  'sk_sk': 'sk',
  'sl_si': 'sl',
  'sv_se': 'sv',
  'tr_tr': 'tr',
  'uk_ua': 'uk',
  'zh_cn': 'zh-cn',
  'zh_tw': 'zh'
};
/**
 * @type {boolean}
 */

var bAllowPdfPreview = !bMobileDevice;

if (bAllowPdfPreview && window__WEBPACK_IMPORTED_MODULE_2___default.a.navigator && window__WEBPACK_IMPORTED_MODULE_2___default.a.navigator.mimeTypes) {
  bAllowPdfPreview = !!_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_3___default.a).call(___WEBPACK_IMPORTED_MODULE_3___default.a, window__WEBPACK_IMPORTED_MODULE_2___default.a.navigator.mimeTypes, function (type) {
    return type && 'application/pdf' === type.type;
  });

  if (!bAllowPdfPreview) {
    bAllowPdfPreview = 'undefined' !== typeof window__WEBPACK_IMPORTED_MODULE_2___default.a.navigator.mimeTypes['application/pdf'];
  }
}


var VIEW_MODELS = {
  settings: [],
  'settings-removed': [],
  'settings-disabled': []
};
var moveAction = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
var leftPanelDisabled = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
var leftPanelType = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable('');
var leftPanelWidth = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(0);
leftPanelDisabled.subscribe(function (value) {
  if (value && moveAction()) {
    moveAction(false);
  }
});
moveAction.subscribe(function (value) {
  if (value && leftPanelDisabled()) {
    leftPanelDisabled(false);
  }
}); // popups

var popupVisibilityNames = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observableArray([]);
var popupVisibility = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].computed(function () {
  return 0 < popupVisibilityNames().length;
});
popupVisibility.subscribe(function (bValue) {
  $html.toggleClass('rl-modal', bValue);
}); // keys

var keyScopeReal = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].All);
var keyScopeFake = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].All);
var keyScope = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].computed({
  read: function read() {
    return keyScopeFake();
  },
  write: function write(value) {
    if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].Menu !== value) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].Compose === value) {
        // disableKeyFilter
        key__WEBPACK_IMPORTED_MODULE_5___default.a.filter = function () {
          return useKeyboardShortcuts();
        };
      } else {
        // restoreKeyFilter
        key__WEBPACK_IMPORTED_MODULE_5___default.a.filter = function (event) {
          if (useKeyboardShortcuts()) {
            var el = event.target || event.srcElement,
                tagName = el ? el.tagName.toUpperCase() : '';
            return !('INPUT' === tagName || 'SELECT' === tagName || 'TEXTAREA' === tagName || el && 'DIV' === tagName && ('editorHtmlArea' === el.className || 'true' === '' + el.contentEditable));
          }

          return false;
        };
      }

      keyScopeFake(value);

      if (dropdownVisibility()) {
        value = Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].Menu;
      }
    }

    keyScopeReal(value);
  }
});
keyScopeReal.subscribe(function (value) {
  //	window.console.log('keyScope=' + sValue); // DEBUG
  key__WEBPACK_IMPORTED_MODULE_5___default.a.setScope(value);
});
dropdownVisibility.subscribe(function (value) {
  if (value) {
    keyScope(Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].Menu);
  } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["KeyState"].Menu === key__WEBPACK_IMPORTED_MODULE_5___default.a.getScope()) {
    keyScope(keyScopeFake());
  }
});
/**
 * @type {*}
 */

var data = {
  __APP__: null,
  iAjaxErrorCount: 0,
  iTokenErrorCount: 0,
  aBootstrapDropdowns: [],
  iMessageBodyCacheCount: 0,
  bUnload: false
};

/***/ }),
/* 7 */
/*!********************************!*\
  !*** external "window.jQuery" ***!
  \********************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.jQuery;

/***/ }),
/* 8 */
/*!****************************!*\
  !*** ./dev/Knoin/Knoin.js ***!
  \****************************/
/*! exports provided: ViewType, hideLoading, createCommand, addSettingsViewModel, removeSettingsViewModel, disableSettingsViewModel, routeOff, routeOn, screen, getScreenPopup, hideScreenPopup, vmRunHook, buildViewModel, showScreenPopup, warmUpScreenPopup, isPopupVisible, screenOnRoute, startScreens, setHash, commandDecorator, command, viewDecorator, view, viewModel, popupDecorator, popup, settingsMenuKeysHandler */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewType", function() { return ViewType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hideLoading", function() { return hideLoading; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createCommand", function() { return createCommand; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addSettingsViewModel", function() { return addSettingsViewModel; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeSettingsViewModel", function() { return removeSettingsViewModel; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "disableSettingsViewModel", function() { return disableSettingsViewModel; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "routeOff", function() { return routeOff; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "routeOn", function() { return routeOn; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "screen", function() { return screen; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getScreenPopup", function() { return getScreenPopup; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hideScreenPopup", function() { return hideScreenPopup; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "vmRunHook", function() { return vmRunHook; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildViewModel", function() { return buildViewModel; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "showScreenPopup", function() { return showScreenPopup; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "warmUpScreenPopup", function() { return warmUpScreenPopup; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPopupVisible", function() { return isPopupVisible; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "screenOnRoute", function() { return screenOnRoute; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startScreens", function() { return startScreens; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHash", function() { return setHash; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "commandDecorator", function() { return commandDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "command", function() { return commandDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "viewDecorator", function() { return viewDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "view", function() { return viewDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "viewModel", function() { return viewDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "popupDecorator", function() { return popupDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "popup", function() { return popupDecorator; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settingsMenuKeysHandler", function() { return settingsMenuKeysHandler; });
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.match.js */ 224);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var hasher__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! hasher */ 63);
/* harmony import */ var hasher__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(hasher__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! crossroads */ 176);
/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(crossroads__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Plugins */ 36);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Utils */ 2);













var currentScreen = null,
    defaultScreenName = '';
var SCREENS = {};
var ViewType = {
  Popup: 'Popups',
  Left: 'Left',
  Right: 'Right',
  Center: 'Center'
};
/**
 * @returns {void}
 */

function hideLoading() {
  $__WEBPACK_IMPORTED_MODULE_5___default()('#rl-content').addClass('rl-content-show');
  $__WEBPACK_IMPORTED_MODULE_5___default()('#rl-loading').hide().remove();
}
/**
 * @param {Function} fExecute
 * @param {(Function|boolean|null)=} fCanExecute = true
 * @returns {Function}
 */

function createCommand(fExecute, fCanExecute) {
  if (fCanExecute === void 0) {
    fCanExecute = true;
  }

  return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["createCommandLegacy"])(null, fExecute, fCanExecute);
}
/**
 * @param {Function} SettingsViewModelClass
 * @param {string} template
 * @param {string} labelName
 * @param {string} route
 * @param {boolean=} isDefault = false
 * @returns {void}
 */

function addSettingsViewModel(SettingsViewModelClass, template, labelName, route, isDefault) {
  if (isDefault === void 0) {
    isDefault = false;
  }

  SettingsViewModelClass.__rlSettingsData = {
    Label: labelName,
    Template: template,
    Route: route,
    IsDefault: !!isDefault
  };
  Common_Globals__WEBPACK_IMPORTED_MODULE_11__["VIEW_MODELS"].settings.push(SettingsViewModelClass);
}
/**
 * @param {Function} SettingsViewModelClass
 * @returns {void}
 */

function removeSettingsViewModel(SettingsViewModelClass) {
  Common_Globals__WEBPACK_IMPORTED_MODULE_11__["VIEW_MODELS"]['settings-removed'].push(SettingsViewModelClass);
}
/**
 * @param {Function} SettingsViewModelClass
 * @returns {void}
 */

function disableSettingsViewModel(SettingsViewModelClass) {
  Common_Globals__WEBPACK_IMPORTED_MODULE_11__["VIEW_MODELS"]['settings-disabled'].push(SettingsViewModelClass);
}
/**
 * @returns {void}
 */

function routeOff() {
  hasher__WEBPACK_IMPORTED_MODULE_7___default.a.changed.active = false;
}
/**
 * @returns {void}
 */

function routeOn() {
  hasher__WEBPACK_IMPORTED_MODULE_7___default.a.changed.active = true;
}
/**
 * @param {string} screenName
 * @returns {?Object}
 */

function screen(screenName) {
  return '' !== screenName && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["isUnd"])(SCREENS[screenName]) ? SCREENS[screenName] : null;
}
/**
 * @param {Function} ViewModelClassToShow
 * @returns {Function|null}
 */

function getScreenPopup(PopuViewModelClass) {
  var result = null;

  if (PopuViewModelClass) {
    result = PopuViewModelClass;

    if (PopuViewModelClass.default) {
      result = PopuViewModelClass.default;
    }
  }

  return result;
}
/**
 * @param {Function} ViewModelClassToHide
 * @returns {void}
 */

function hideScreenPopup(ViewModelClassToHide) {
  var ModalView = getScreenPopup(ViewModelClassToHide);

  if (ModalView && ModalView.__vm && ModalView.__dom) {
    ModalView.__vm.modalVisibility(false);
  }
}
/**
 * @param {string} hookName
 * @param {Function} ViewModelClass
 * @param {mixed=} params = null
 */

function vmRunHook(hookName, ViewModelClass, params) {
  if (params === void 0) {
    params = null;
  }

  ___WEBPACK_IMPORTED_MODULE_4___default.a.each(ViewModelClass.__names, function (name) {
    Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_10__[/* runHook */ "f"])(hookName, [name, ViewModelClass.__vm, params]);
  });
}
/**
 * @param {Function} ViewModelClass
 * @param {Object=} vmScreen
 * @returns {*}
 */

function buildViewModel(ViewModelClass, vmScreen) {
  if (ViewModelClass && !ViewModelClass.__builded) {
    var vmDom = null;
    var vm = new ViewModelClass(vmScreen),
        position = ViewModelClass.__type || '',
        vmPlace = position ? $__WEBPACK_IMPORTED_MODULE_5___default()('#rl-content #rl-' + position.toLowerCase()) : null;
    ViewModelClass.__builded = true;
    ViewModelClass.__vm = vm;
    vm.onShowTrigger = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
    vm.onHideTrigger = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
    vm.viewModelName = ViewModelClass.__name;
    vm.viewModelNames = ViewModelClass.__names;
    vm.viewModelTemplateID = ViewModelClass.__templateID;
    vm.viewModelPosition = ViewModelClass.__type;

    if (vmPlace && 1 === vmPlace.length) {
      vmDom = $__WEBPACK_IMPORTED_MODULE_5___default()('<div></div>').addClass('rl-view-model').addClass('RL-' + vm.viewModelTemplateID).hide();
      vmDom.appendTo(vmPlace);
      vm.viewModelDom = vmDom;
      ViewModelClass.__dom = vmDom;

      if (ViewType.Popup === position) {
        vm.cancelCommand = vm.closeCommand = createCommand(function () {
          hideScreenPopup(ViewModelClass);
        });
        vm.modalVisibility.subscribe(function (value) {
          if (value) {
            vm.viewModelDom.show();
            vm.storeAndSetKeyScope();
            Common_Globals__WEBPACK_IMPORTED_MODULE_11__["popupVisibilityNames"].push(vm.viewModelName);
            vm.viewModelDom.css('z-index', 3000 + Object(Common_Globals__WEBPACK_IMPORTED_MODULE_11__["popupVisibilityNames"])().length + 10);

            if (vm.onShowTrigger) {
              vm.onShowTrigger(!vm.onShowTrigger());
            }

            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(vm, 'onShowWithDelay', [], 500);
          } else {
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(vm, 'onHide');
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(vm, 'onHideWithDelay', [], 500);

            if (vm.onHideTrigger) {
              vm.onHideTrigger(!vm.onHideTrigger());
            }

            vm.restoreKeyScope();
            vmRunHook('view-model-on-hide', ViewModelClass);
            Common_Globals__WEBPACK_IMPORTED_MODULE_11__["popupVisibilityNames"].remove(vm.viewModelName);
            vm.viewModelDom.css('z-index', 2000);

            ___WEBPACK_IMPORTED_MODULE_4___default.a.delay(function () {
              return vm.viewModelDom.hide();
            }, 300);
          }
        });
      }

      vmRunHook('view-model-pre-build', ViewModelClass, vmDom);
      ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].applyBindingAccessorsToNode(vmDom[0], {
        translatorInit: true,
        template: function template() {
          return {
            name: vm.viewModelTemplateID
          };
        }
      }, vm);
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(vm, 'onBuild', [vmDom]);

      if (vm && ViewType.Popup === position) {
        vm.registerPopupKeyDown();
      }

      vmRunHook('view-model-post-build', ViewModelClass, vmDom);
    } else {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["log"])('Cannot find view model position: ' + position);
    }
  }

  return ViewModelClass ? ViewModelClass.__vm : null;
}
/**
 * @param {Function} ViewModelClassToShow
 * @param {Array=} params
 * @returns {void}
 */

function showScreenPopup(ViewModelClassToShow, params) {
  if (params === void 0) {
    params = [];
  }

  var ModalView = getScreenPopup(ViewModelClassToShow);

  if (ModalView) {
    buildViewModel(ModalView);

    if (ModalView.__vm && ModalView.__dom) {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ModalView.__vm, 'onBeforeShow', params || []);

      ModalView.__vm.modalVisibility(true);

      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ModalView.__vm, 'onShow', params || []);
      vmRunHook('view-model-on-show', ModalView, params || []);
    }
  }
}
/**
 * @param {Function} ViewModelClassToShow
 * @returns {void}
 */

function warmUpScreenPopup(ViewModelClassToShow) {
  var ModalView = getScreenPopup(ViewModelClassToShow);

  if (ModalView) {
    buildViewModel(ModalView);

    if (ModalView.__vm && ModalView.__dom) {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ModalView.__vm, 'onWarmUp');
    }
  }
}
/**
 * @param {Function} ViewModelClassToShow
 * @returns {boolean}
 */

function isPopupVisible(ViewModelClassToShow) {
  var ModalView = getScreenPopup(ViewModelClassToShow);
  return ModalView && ModalView.__vm ? ModalView.__vm.modalVisibility() : false;
}
/**
 * @param {string} screenName
 * @param {string} subPart
 * @returns {void}
 */

function screenOnRoute(screenName, subPart) {
  var vmScreen = null,
      isSameScreen = false,
      cross = null;

  if ('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["pString"])(screenName)) {
    screenName = defaultScreenName;
  }

  if ('' !== screenName) {
    vmScreen = screen(screenName);

    if (!vmScreen) {
      vmScreen = screen(defaultScreenName);

      if (vmScreen) {
        subPart = screenName + '/' + subPart;
        screenName = defaultScreenName;
      }
    }

    if (vmScreen && vmScreen.__started) {
      isSameScreen = currentScreen && vmScreen === currentScreen;

      if (!vmScreen.__builded) {
        vmScreen.__builded = true;

        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["isNonEmptyArray"])(vmScreen.viewModels())) {
          ___WEBPACK_IMPORTED_MODULE_4___default.a.each(vmScreen.viewModels(), function (ViewModelClass) {
            buildViewModel(ViewModelClass, vmScreen);
          });
        }

        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(vmScreen, 'onBuild');
      }

      ___WEBPACK_IMPORTED_MODULE_4___default.a.defer(function () {
        // hide screen
        if (currentScreen && !isSameScreen) {
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(currentScreen, 'onHide');
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(currentScreen, 'onHideWithDelay', [], 500);

          if (currentScreen.onHideTrigger) {
            currentScreen.onHideTrigger(!currentScreen.onHideTrigger());
          }

          if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["isNonEmptyArray"])(currentScreen.viewModels())) {
            ___WEBPACK_IMPORTED_MODULE_4___default.a.each(currentScreen.viewModels(), function (ViewModelClass) {
              if (ViewModelClass.__vm && ViewModelClass.__dom && ViewType.Popup !== ViewModelClass.__vm.viewModelPosition) {
                ViewModelClass.__dom.hide();

                ViewModelClass.__vm.viewModelVisibility(false);

                Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ViewModelClass.__vm, 'onHide');
                Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ViewModelClass.__vm, 'onHideWithDelay', [], 500);

                if (ViewModelClass.__vm.onHideTrigger) {
                  ViewModelClass.__vm.onHideTrigger(!ViewModelClass.__vm.onHideTrigger());
                }
              }
            });
          }
        } // --


        currentScreen = vmScreen; // show screen

        if (currentScreen && !isSameScreen) {
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(currentScreen, 'onShow');

          if (currentScreen.onShowTrigger) {
            currentScreen.onShowTrigger(!currentScreen.onShowTrigger());
          }

          Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_10__[/* runHook */ "f"])('screen-on-show', [currentScreen.screenName(), currentScreen]);

          if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["isNonEmptyArray"])(currentScreen.viewModels())) {
            ___WEBPACK_IMPORTED_MODULE_4___default.a.each(currentScreen.viewModels(), function (ViewModelClass) {
              if (ViewModelClass.__vm && ViewModelClass.__dom && ViewType.Popup !== ViewModelClass.__vm.viewModelPosition) {
                Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ViewModelClass.__vm, 'onBeforeShow');

                ViewModelClass.__dom.show();

                ViewModelClass.__vm.viewModelVisibility(true);

                Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ViewModelClass.__vm, 'onShow');

                if (ViewModelClass.__vm.onShowTrigger) {
                  ViewModelClass.__vm.onShowTrigger(!ViewModelClass.__vm.onShowTrigger());
                }

                Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(ViewModelClass.__vm, 'onShowWithDelay', [], 200);
                vmRunHook('view-model-on-show', ViewModelClass);
              }
            });
          }
        } // --


        cross = vmScreen && vmScreen.__cross ? vmScreen.__cross() : null;

        if (cross) {
          cross.parse(subPart);
        }
      });
    }
  }
}
/**
 * @param {Array} screensClasses
 * @returns {void}
 */

function startScreens(screensClasses) {
  ___WEBPACK_IMPORTED_MODULE_4___default.a.each(screensClasses, function (CScreen) {
    if (CScreen) {
      var vmScreen = new CScreen(),
          screenName = vmScreen ? vmScreen.screenName() : '';

      if (vmScreen && '' !== screenName) {
        if ('' === defaultScreenName) {
          defaultScreenName = screenName;
        }

        SCREENS[screenName] = vmScreen;
      }
    }
  });

  ___WEBPACK_IMPORTED_MODULE_4___default.a.each(SCREENS, function (vmScreen) {
    if (vmScreen && !vmScreen.__started && vmScreen.__start) {
      vmScreen.__started = true;

      vmScreen.__start();

      Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_10__[/* runHook */ "f"])('screen-pre-start', [vmScreen.screenName(), vmScreen]);
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["delegateRun"])(vmScreen, 'onStart');
      Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_10__[/* runHook */ "f"])('screen-post-start', [vmScreen.screenName(), vmScreen]);
    }
  });

  var cross = crossroads__WEBPACK_IMPORTED_MODULE_8___default.a.create();
  cross.addRoute(/^([a-zA-Z0-9-]*)\/?(.*)$/, screenOnRoute);
  hasher__WEBPACK_IMPORTED_MODULE_7___default.a.initialized.add(cross.parse, cross);
  hasher__WEBPACK_IMPORTED_MODULE_7___default.a.changed.add(cross.parse, cross);
  hasher__WEBPACK_IMPORTED_MODULE_7___default.a.init();

  ___WEBPACK_IMPORTED_MODULE_4___default.a.delay(function () {
    return Common_Globals__WEBPACK_IMPORTED_MODULE_11__["$html"].removeClass('rl-started-trigger').addClass('rl-started');
  }, 100);

  ___WEBPACK_IMPORTED_MODULE_4___default.a.delay(function () {
    return Common_Globals__WEBPACK_IMPORTED_MODULE_11__["$html"].addClass('rl-started-delay');
  }, 200);
}
/**
 * @param {string} sHash
 * @param {boolean=} silence = false
 * @param {boolean=} replace = false
 * @returns {void}
 */

function setHash(hash, silence, replace) {
  if (silence === void 0) {
    silence = false;
  }

  if (replace === void 0) {
    replace = false;
  }

  hash = '#' === hash.substr(0, 1) ? hash.substr(1) : hash;
  hash = '/' === hash.substr(0, 1) ? hash.substr(1) : hash;
  var cmd = replace ? 'replaceHash' : 'setHash';

  if (silence) {
    hasher__WEBPACK_IMPORTED_MODULE_7___default.a.changed.active = false;
    hasher__WEBPACK_IMPORTED_MODULE_7___default.a[cmd](hash);
    hasher__WEBPACK_IMPORTED_MODULE_7___default.a.changed.active = true;
  } else {
    hasher__WEBPACK_IMPORTED_MODULE_7___default.a.changed.active = true;
    hasher__WEBPACK_IMPORTED_MODULE_7___default.a[cmd](hash);
    hasher__WEBPACK_IMPORTED_MODULE_7___default.a.setHash(hash);
  }
}
/**
 * @param {Object} params
 * @returns {Function}
 */

function viewDecorator(_ref) {
  var name = _ref.name,
      type = _ref.type,
      templateID = _ref.templateID;
  return function (target) {
    if (target) {
      if (name) {
        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["isArray"])(name)) {
          target.__names = name;
        } else {
          target.__names = [name];
        }

        target.__name = target.__names[0];
      }

      if (type) {
        target.__type = type;
      }

      if (templateID) {
        target.__templateID = templateID;
      }
    }
  };
}
/**
 * @param {Object} params
 * @returns {Function}
 */


function popupDecorator(_ref2) {
  var name = _ref2.name,
      templateID = _ref2.templateID;
  return viewDecorator({
    name: name,
    type: ViewType.Popup,
    templateID: templateID
  });
}
/**
 * @param {Function} canExecute
 * @returns {Function}
 */


function commandDecorator(canExecute) {
  if (canExecute === void 0) {
    canExecute = true;
  }

  return function (target, key, descriptor) {
    if (!key || !key.match(/Command$/)) {
      throw new Error("name \"" + key + "\" should end with Command suffix");
    }

    var value = descriptor.value || descriptor.initializer(),
        normCanExecute = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_12__["isFunc"])(canExecute) ? canExecute : function () {
      return !!canExecute;
    };

    descriptor.value = function () {
      if (normCanExecute.call(this, this)) {
        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
          args[_key] = arguments[_key];
        }

        value.apply(this, args);
      }

      return false;
    };

    descriptor.value.__realCanExecute = normCanExecute;
    descriptor.value.isCommand = true;
    return descriptor;
  };
}
/**
 * @param {miced} $items
 * @returns {Function}
 */


function settingsMenuKeysHandler($items) {
  return ___WEBPACK_IMPORTED_MODULE_4___default.a.throttle(function (event, handler) {
    var up = handler && 'up' === handler.shortcut;

    if (event && $items.length) {
      var index = $items.index(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default()($items).call($items, '.selected'));

      if (up && 0 < index) {
        index -= 1;
      } else if (!up && index < $items.length - 1) {
        index += 1;
      }

      var resultHash = $items.eq(index).attr('href');

      if (resultHash) {
        setHash(resultHash, false, true);
      }
    }
  }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time200ms);
}



/***/ }),
/* 9 */
/*!**********************************!*\
  !*** ./dev/Common/Translator.js ***!
  \**********************************/
/*! exports provided: trigger, i18n, i18nToNodes, initNotificationLanguage, initOnStartOrLangChange, getNotification, getNotificationFromResponse, getUploadErrorDescByCode, reload */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "trigger", function() { return trigger; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i18n", function() { return i18n; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i18nToNodes", function() { return i18nToNodes; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initNotificationLanguage", function() { return initNotificationLanguage; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initOnStartOrLangChange", function() { return initOnStartOrLangChange; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNotification", function() { return getNotification; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNotificationFromResponse", function() { return getNotificationFromResponse; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUploadErrorDescByCode", function() { return getUploadErrorDescByCode; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reload", function() { return reload; });
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ 62);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ 151);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Momentor__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Momentor */ 61);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Links */ 15);













var I18N_DATA = window__WEBPACK_IMPORTED_MODULE_4___default.a.rainloopI18N || {};
var I18N_NOTIFICATION_DATA = {};
var I18N_NOTIFICATION_MAP = [[Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].InvalidToken, 'NOTIFICATIONS/INVALID_TOKEN'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].InvalidToken, 'NOTIFICATIONS/INVALID_TOKEN'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AuthError, 'NOTIFICATIONS/AUTH_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AccessError, 'NOTIFICATIONS/ACCESS_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].ConnectionError, 'NOTIFICATIONS/CONNECTION_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CaptchaError, 'NOTIFICATIONS/CAPTCHA_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].SocialFacebookLoginAccessDisable, 'NOTIFICATIONS/SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].SocialTwitterLoginAccessDisable, 'NOTIFICATIONS/SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].SocialGoogleLoginAccessDisable, 'NOTIFICATIONS/SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].DomainNotAllowed, 'NOTIFICATIONS/DOMAIN_NOT_ALLOWED'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AccountNotAllowed, 'NOTIFICATIONS/ACCOUNT_NOT_ALLOWED'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AccountTwoFactorAuthRequired, 'NOTIFICATIONS/ACCOUNT_TWO_FACTOR_AUTH_REQUIRED'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AccountTwoFactorAuthError, 'NOTIFICATIONS/ACCOUNT_TWO_FACTOR_AUTH_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CouldNotSaveNewPassword, 'NOTIFICATIONS/COULD_NOT_SAVE_NEW_PASSWORD'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CurrentPasswordIncorrect, 'NOTIFICATIONS/CURRENT_PASSWORD_INCORRECT'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].NewPasswordShort, 'NOTIFICATIONS/NEW_PASSWORD_SHORT'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].NewPasswordWeak, 'NOTIFICATIONS/NEW_PASSWORD_WEAK'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].NewPasswordForbidden, 'NOTIFICATIONS/NEW_PASSWORD_FORBIDDENT'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].ContactsSyncError, 'NOTIFICATIONS/CONTACTS_SYNC_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantGetMessageList, 'NOTIFICATIONS/CANT_GET_MESSAGE_LIST'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantGetMessage, 'NOTIFICATIONS/CANT_GET_MESSAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantDeleteMessage, 'NOTIFICATIONS/CANT_DELETE_MESSAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantMoveMessage, 'NOTIFICATIONS/CANT_MOVE_MESSAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantCopyMessage, 'NOTIFICATIONS/CANT_MOVE_MESSAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantSaveMessage, 'NOTIFICATIONS/CANT_SAVE_MESSAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantSendMessage, 'NOTIFICATIONS/CANT_SEND_MESSAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].InvalidRecipients, 'NOTIFICATIONS/INVALID_RECIPIENTS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantSaveFilters, 'NOTIFICATIONS/CANT_SAVE_FILTERS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantGetFilters, 'NOTIFICATIONS/CANT_GET_FILTERS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].FiltersAreNotCorrect, 'NOTIFICATIONS/FILTERS_ARE_NOT_CORRECT'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantCreateFolder, 'NOTIFICATIONS/CANT_CREATE_FOLDER'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantRenameFolder, 'NOTIFICATIONS/CANT_RENAME_FOLDER'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantDeleteFolder, 'NOTIFICATIONS/CANT_DELETE_FOLDER'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantDeleteNonEmptyFolder, 'NOTIFICATIONS/CANT_DELETE_NON_EMPTY_FOLDER'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantSubscribeFolder, 'NOTIFICATIONS/CANT_SUBSCRIBE_FOLDER'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantUnsubscribeFolder, 'NOTIFICATIONS/CANT_UNSUBSCRIBE_FOLDER'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantSaveSettings, 'NOTIFICATIONS/CANT_SAVE_SETTINGS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantSavePluginSettings, 'NOTIFICATIONS/CANT_SAVE_PLUGIN_SETTINGS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].DomainAlreadyExists, 'NOTIFICATIONS/DOMAIN_ALREADY_EXISTS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantInstallPackage, 'NOTIFICATIONS/CANT_INSTALL_PACKAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].CantDeletePackage, 'NOTIFICATIONS/CANT_DELETE_PACKAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].InvalidPluginPackage, 'NOTIFICATIONS/INVALID_PLUGIN_PACKAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].UnsupportedPluginPackage, 'NOTIFICATIONS/UNSUPPORTED_PLUGIN_PACKAGE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].LicensingServerIsUnavailable, 'NOTIFICATIONS/LICENSING_SERVER_IS_UNAVAILABLE'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].LicensingExpired, 'NOTIFICATIONS/LICENSING_EXPIRED'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].LicensingBanned, 'NOTIFICATIONS/LICENSING_BANNED'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].DemoSendMessageError, 'NOTIFICATIONS/DEMO_SEND_MESSAGE_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].DemoAccountError, 'NOTIFICATIONS/DEMO_ACCOUNT_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AccountAlreadyExists, 'NOTIFICATIONS/ACCOUNT_ALREADY_EXISTS'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].AccountDoesNotExist, 'NOTIFICATIONS/ACCOUNT_DOES_NOT_EXIST'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].MailServerError, 'NOTIFICATIONS/MAIL_SERVER_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].InvalidInputArgument, 'NOTIFICATIONS/INVALID_INPUT_ARGUMENT'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].UnknownNotification, 'NOTIFICATIONS/UNKNOWN_ERROR'], [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].UnknownError, 'NOTIFICATIONS/UNKNOWN_ERROR']];
var trigger = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
/**
 * @param {string} key
 * @param {Object=} valueList
 * @param {string=} defaulValue
 * @returns {string}
 */

function i18n(key, valueList, defaulValue) {
  var valueName = '',
      result = I18N_DATA[key];

  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(result)) {
    result = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(defaulValue) ? key : defaulValue;
  }

  if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(valueList) && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isNull"])(valueList)) {
    for (valueName in valueList) {
      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["has"])(valueList, valueName)) {
        result = result.replace('%' + valueName + '%', valueList[valueName]);
      }
    }
  }

  return result;
}

var i18nToNode = function i18nToNode(element) {
  var $el = $__WEBPACK_IMPORTED_MODULE_6___default()(element),
      key = $el.data('i18n');

  if (key) {
    if ('[' === key.substr(0, 1)) {
      switch (key.substr(0, 6)) {
        case '[html]':
          $el.html(i18n(key.substr(6)));
          break;

        case '[place':
          $el.attr('placeholder', i18n(key.substr(13)));
          break;

        case '[title':
          $el.attr('title', i18n(key.substr(7)));
          break;
        // no default
      }
    } else {
      $el.text(i18n(key));
    }
  }
};
/**
 * @param {Object} elements
 * @param {boolean=} animate = false
 */


function i18nToNodes(elements, animate) {
  if (animate === void 0) {
    animate = false;
  }

  ___WEBPACK_IMPORTED_MODULE_5___default.a.defer(function () {
    $__WEBPACK_IMPORTED_MODULE_6___default()('[data-i18n]', elements).each(function (index, item) {
      i18nToNode(item);
    });

    if (animate && Common_Globals__WEBPACK_IMPORTED_MODULE_10__["bAnimationSupported"]) {
      $__WEBPACK_IMPORTED_MODULE_6___default()('.i18n-animation[data-i18n]', elements).letterfx({
        'fx': 'fall fade',
        'backwards': false,
        'timing': 50,
        'fx_duration': '50ms',
        'letter_end': 'restore',
        'element_end': 'restore'
      });
    }
  });
}

var reloadData = function reloadData() {
  if (window__WEBPACK_IMPORTED_MODULE_4___default.a.rainloopI18N) {
    I18N_DATA = window__WEBPACK_IMPORTED_MODULE_4___default.a.rainloopI18N || {};
    i18nToNodes(window__WEBPACK_IMPORTED_MODULE_4___default.a.document, true);
    Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_11__["reload"])();
    trigger(!trigger());
  }

  window__WEBPACK_IMPORTED_MODULE_4___default.a.rainloopI18N = null;
};
/**
 * @returns {void}
 */


function initNotificationLanguage() {
  I18N_NOTIFICATION_MAP.forEach(function (item) {
    I18N_NOTIFICATION_DATA[item[0]] = i18n(item[1]);
  });
}
/**
 * @param {Function} startCallback
 * @param {Function=} langCallback = null
 */

function initOnStartOrLangChange(startCallback, langCallback) {
  if (langCallback === void 0) {
    langCallback = null;
  }

  if (startCallback) {
    startCallback();
  }

  if (langCallback) {
    trigger.subscribe(function () {
      if (startCallback) {
        startCallback();
      }

      if (langCallback) {
        langCallback();
      }
    });
  } else if (startCallback) {
    trigger.subscribe(startCallback);
  }
}
/**
 * @param {number} code
 * @param {*=} message = ''
 * @param {*=} defCode = null
 * @returns {string}
 */

function getNotification(code, message, defCode) {
  if (message === void 0) {
    message = '';
  }

  if (defCode === void 0) {
    defCode = null;
  }

  code = window__WEBPACK_IMPORTED_MODULE_4___default.a.parseInt(code, 10) || 0;

  if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].ClientViewError === code && message) {
    return message;
  }

  defCode = defCode ? window__WEBPACK_IMPORTED_MODULE_4___default.a.parseInt(defCode, 10) || 0 : 0;
  return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(I18N_NOTIFICATION_DATA[code]) ? defCode && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(I18N_NOTIFICATION_DATA[defCode]) ? I18N_NOTIFICATION_DATA[defCode] : '' : I18N_NOTIFICATION_DATA[code];
}
/**
 * @param {object} response
 * @param {number} defCode = Notification.UnknownNotification
 * @returns {string}
 */

function getNotificationFromResponse(response, defCode) {
  if (defCode === void 0) {
    defCode = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Notification"].UnknownNotification;
  }

  return response && response.ErrorCode ? getNotification(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["pInt"])(response.ErrorCode), response.ErrorMessage || '') : getNotification(defCode);
}
/**
 * @param {*} code
 * @returns {string}
 */

function getUploadErrorDescByCode(code) {
  var result = '';

  switch (window__WEBPACK_IMPORTED_MODULE_4___default.a.parseInt(code, 10) || 0) {
    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["UploadErrorCode"].FileIsTooBig:
      result = i18n('UPLOAD/ERROR_FILE_IS_TOO_BIG');
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["UploadErrorCode"].FilePartiallyUploaded:
      result = i18n('UPLOAD/ERROR_FILE_PARTIALLY_UPLOADED');
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["UploadErrorCode"].FileNoUploaded:
      result = i18n('UPLOAD/ERROR_NO_FILE_UPLOADED');
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["UploadErrorCode"].MissingTempFolder:
      result = i18n('UPLOAD/ERROR_MISSING_TEMP_FOLDER');
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["UploadErrorCode"].FileOnSaveingError:
      result = i18n('UPLOAD/ERROR_ON_SAVING_FILE');
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["UploadErrorCode"].FileType:
      result = i18n('UPLOAD/ERROR_FILE_TYPE');
      break;

    default:
      result = i18n('UPLOAD/ERROR_UNKNOWN');
      break;
  }

  return result;
}
/**
 * @param {boolean} admin
 * @param {string} language
 */

function reload(admin, language) {
  var start = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["microtime"])();
  Common_Globals__WEBPACK_IMPORTED_MODULE_10__["$html"].addClass('rl-changing-language');
  return new _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default.a(function (resolve, reject) {
    $__WEBPACK_IMPORTED_MODULE_6___default.a.ajax({
      url: Object(Common_Links__WEBPACK_IMPORTED_MODULE_12__[/* langLink */ "n"])(language, admin),
      dataType: 'script',
      cache: true
    }).then(function () {
      ___WEBPACK_IMPORTED_MODULE_5___default.a.delay(function () {
        reloadData();
        var isRtl = -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["inArray"])((language || '').toLowerCase(), ['ar', 'ar_sa', 'he', 'he_he', 'ur', 'ur_ir']);
        Common_Globals__WEBPACK_IMPORTED_MODULE_10__["$html"].removeClass('rl-changing-language').removeClass('rl-rtl rl-ltr') // .attr('dir', isRtl ? 'rtl' : 'ltr')
        .addClass(isRtl ? 'rl-rtl' : 'rl-ltr');
        resolve();
      }, 500 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["microtime"])() - start ? 1 : 500);
    }, function () {
      Common_Globals__WEBPACK_IMPORTED_MODULE_10__["$html"].removeClass('rl-changing-language');
      window__WEBPACK_IMPORTED_MODULE_4___default.a.rainloopI18N = null;
      reject();
    });
  });
} // init section

Common_Globals__WEBPACK_IMPORTED_MODULE_10__["$html"].addClass('rl-' + (Common_Globals__WEBPACK_IMPORTED_MODULE_10__["$html"].attr('dir') || 'ltr'));

/***/ }),
/* 10 */
/*!**************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/inheritsLoose.js ***!
  \**************************************************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _inheritsLoose; });
/* harmony import */ var _babel_runtime_corejs3_core_js_object_create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/object/create */ 293);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_create__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_object_create__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./setPrototypeOf.js */ 294);


function _inheritsLoose(subClass, superClass) {
  subClass.prototype = _babel_runtime_corejs3_core_js_object_create__WEBPACK_IMPORTED_MODULE_0___default()(superClass.prototype);
  subClass.prototype.constructor = subClass;
  Object(_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(subClass, superClass);
}

/***/ }),
/* 11 */
/*!***********************************!*\
  !*** ./dev/Stores/User/Folder.js ***!
  \***********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Common_Momentor__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Momentor */ 61);











var FolderUserStore = /*#__PURE__*/function () {
  function FolderUserStore() {
    this.displaySpecSetting = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(true);
    this.sentFolder = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    this.draftFolder = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    this.spamFolder = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    this.trashFolder = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    this.archiveFolder = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    this.namespace = '';
    this.folderList = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observableArray([]);
    this.folderList.optimized = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    this.folderList.error = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    this.foldersLoading = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    this.foldersCreating = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    this.foldersDeleting = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    this.foldersRenaming = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    this.foldersInboxUnreadCount = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(0);
    this.currentFolder = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(null).extend({
      toggleSubscribeProperty: [this, 'selected']
    });
    this.sieveAllowFileintoInbox = !!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["settingsGet"])('SieveAllowFileintoInbox');
    this.computers();
    this.subscribers();
  }

  var _proto = FolderUserStore.prototype;

  _proto.computers = function computers() {
    var _this = this;

    this.draftFolderNotEnabled = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return '' === _this.draftFolder() || Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* UNUSED_OPTION_VALUE */ "r"] === _this.draftFolder();
    });
    this.foldersListWithSingleInboxRootFolder = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return !_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_3___default.a).call(___WEBPACK_IMPORTED_MODULE_3___default.a, _this.folderList(), function (folder) {
        return folder && !folder.isSystemFolder() && folder.visible();
      });
    });
    this.currentFolderFullNameRaw = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return _this.currentFolder() ? _this.currentFolder().fullNameRaw : '';
    });
    this.currentFolderFullName = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return _this.currentFolder() ? _this.currentFolder().fullName : '';
    });
    this.currentFolderFullNameHash = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return _this.currentFolder() ? _this.currentFolder().fullNameHash : '';
    });
    this.foldersChanging = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      var loading = _this.foldersLoading(),
          creating = _this.foldersCreating(),
          deleting = _this.foldersDeleting(),
          renaming = _this.foldersRenaming();

      return loading || creating || deleting || renaming;
    });
    this.folderListSystemNames = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      var list = [Object(Common_Cache__WEBPACK_IMPORTED_MODULE_8__[/* getFolderInboxName */ "h"])()],
          folders = _this.folderList(),
          sentFolder = _this.sentFolder(),
          draftFolder = _this.draftFolder(),
          spamFolder = _this.spamFolder(),
          trashFolder = _this.trashFolder(),
          archiveFolder = _this.archiveFolder();

      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["isArray"])(folders) && 0 < folders.length) {
        if ('' !== sentFolder && Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* UNUSED_OPTION_VALUE */ "r"] !== sentFolder) {
          list.push(sentFolder);
        }

        if ('' !== draftFolder && Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* UNUSED_OPTION_VALUE */ "r"] !== draftFolder) {
          list.push(draftFolder);
        }

        if ('' !== spamFolder && Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* UNUSED_OPTION_VALUE */ "r"] !== spamFolder) {
          list.push(spamFolder);
        }

        if ('' !== trashFolder && Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* UNUSED_OPTION_VALUE */ "r"] !== trashFolder) {
          list.push(trashFolder);
        }

        if ('' !== archiveFolder && Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* UNUSED_OPTION_VALUE */ "r"] !== archiveFolder) {
          list.push(archiveFolder);
        }
      }

      return list;
    });
    this.folderListSystem = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return ___WEBPACK_IMPORTED_MODULE_3___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_3___default.a).call(___WEBPACK_IMPORTED_MODULE_3___default.a, _this.folderListSystemNames(), function (name) {
        return Object(Common_Cache__WEBPACK_IMPORTED_MODULE_8__[/* getFolderFromCacheList */ "e"])(name);
      }));
    });
    this.folderMenuForMove = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["folderListOptionsBuilder"])(_this.folderListSystem(), _this.folderList(), [_this.currentFolderFullNameRaw()], null, null, null, null, function (item) {
        return item ? item.localName() : '';
      });
    });
    this.folderMenuForFilters = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["folderListOptionsBuilder"])(_this.folderListSystem(), _this.folderList(), [_this.sieveAllowFileintoInbox ? '' : 'INBOX'], [['', '']], null, null, null, function (item) {
        return item ? item.localName() : '';
      });
    });
  };

  _proto.subscribers = function subscribers() {
    var fRemoveSystemFolderType = function fRemoveSystemFolderType(observable) {
      return function () {
        var folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_8__[/* getFolderFromCacheList */ "e"])(observable());

        if (folder) {
          folder.type(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["FolderType"].User);
        }
      };
    };

    var fSetSystemFolderType = function fSetSystemFolderType(type) {
      return function (value) {
        var folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_8__[/* getFolderFromCacheList */ "e"])(value);

        if (folder) {
          folder.type(type);
        }
      };
    };

    this.sentFolder.subscribe(fRemoveSystemFolderType(this.sentFolder), this, 'beforeChange');
    this.draftFolder.subscribe(fRemoveSystemFolderType(this.draftFolder), this, 'beforeChange');
    this.spamFolder.subscribe(fRemoveSystemFolderType(this.spamFolder), this, 'beforeChange');
    this.trashFolder.subscribe(fRemoveSystemFolderType(this.trashFolder), this, 'beforeChange');
    this.archiveFolder.subscribe(fRemoveSystemFolderType(this.archiveFolder), this, 'beforeChange');
    this.sentFolder.subscribe(fSetSystemFolderType(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["FolderType"].SentItems), this);
    this.draftFolder.subscribe(fSetSystemFolderType(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["FolderType"].Draft), this);
    this.spamFolder.subscribe(fSetSystemFolderType(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["FolderType"].Spam), this);
    this.trashFolder.subscribe(fSetSystemFolderType(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["FolderType"].Trash), this);
    this.archiveFolder.subscribe(fSetSystemFolderType(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["FolderType"].Archive), this);
  }
  /**
   * @returns {Array}
   */
  ;

  _proto.getNextFolderNames = function getNextFolderNames() {
    var result = [],
        limit = 5,
        utc = Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_9__["momentNowUnix"])(),
        timeout = utc - 60 * 5,
        timeouts = [],
        inboxFolderName = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_8__[/* getFolderInboxName */ "h"])(),
        fSearchFunction = function fSearchFunction(list) {
      ___WEBPACK_IMPORTED_MODULE_3___default.a.each(list, function (folder) {
        if (folder && inboxFolderName !== folder.fullNameRaw && folder.selectable && folder.existen && timeout > folder.interval && (folder.isSystemFolder() || folder.subScribed() && folder.checkable())) {
          timeouts.push([folder.interval, folder.fullNameRaw]);
        }

        if (folder && 0 < folder.subFolders().length) {
          fSearchFunction(folder.subFolders());
        }
      });
    };

    fSearchFunction(this.folderList());
    timeouts.sort(function (a, b) {
      if (a[0] < b[0]) {
        return -1;
      } else if (a[0] > b[0]) {
        return 1;
      }

      return 0;
    });

    _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_3___default.a).call(___WEBPACK_IMPORTED_MODULE_3___default.a, timeouts, function (aItem) {
      var folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_8__[/* getFolderFromCacheList */ "e"])(aItem[1]);

      if (folder) {
        folder.interval = utc;
        result.push(aItem[1]);
      }

      return limit <= result.length;
    });

    return ___WEBPACK_IMPORTED_MODULE_3___default.a.uniq(result);
  };

  return FolderUserStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new FolderUserStore());

/***/ }),
/* 12 */
/*!*****************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/find.js ***!
  \*****************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/find */ 333);

/***/ }),
/* 13 */
/*!************************************!*\
  !*** ./dev/Stores/User/Message.js ***!
  \************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ 85);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ 119);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Momentor__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Common/Momentor */ 61);
/* harmony import */ var Helper_Message__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Helper/Message */ 64);
/* harmony import */ var Model_Message__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Model/Message */ 320);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Stores/User/Account */ 46);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Stores/User/Pgp */ 41);
/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Stores/User/Settings */ 35);
/* harmony import */ var Stores_User_Notification__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Stores/User/Notification */ 124);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
































var MessageUserStore = /*#__PURE__*/function () {
  function MessageUserStore() {
    this.staticMessage = new Model_Message__WEBPACK_IMPORTED_MODULE_21__[/* MessageModel */ "a"]();
    this.messageList = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observableArray([]).extend({
      rateLimit: 0
    });
    this.messageListCount = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(0);
    this.messageListSearch = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    this.messageListThreadUid = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    this.messageListPage = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(1);
    this.messageListPageBeforeThread = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(1);
    this.messageListError = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    this.messageListEndFolder = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    this.messageListEndSearch = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    this.messageListEndThreadUid = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    this.messageListEndPage = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(1);
    this.messageListLoading = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    this.messageListIsNotCompleted = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    this.messageListCompleteLoadingThrottle = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false).extend({
      throttle: 200
    });
    this.messageListCompleteLoadingThrottleForAnimation = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false).extend({
      specialThrottle: 700
    });
    this.messageListDisableAutoSelect = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false).extend({
      falseTimeout: 500
    });
    this.selectorMessageSelected = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(null);
    this.selectorMessageFocused = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(null); // message viewer

    this.message = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(null);
    this.message.viewTrigger = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    this.messageError = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    this.messageCurrentLoading = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    this.messageLoadingThrottle = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false).extend({
      throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Time50ms
    });
    this.messageFullScreenMode = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    this.messagesBodiesDom = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(null);
    this.messageActiveDom = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(null);
    this.computers();
    this.subscribers();
    this.onMessageResponse = ___WEBPACK_IMPORTED_MODULE_9___default.a.bind(this.onMessageResponse, this);
    this.purgeMessageBodyCacheThrottle = ___WEBPACK_IMPORTED_MODULE_9___default.a.throttle(this.purgeMessageBodyCache, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Time30s);
  }

  var _proto = MessageUserStore.prototype;

  _proto.computers = function computers() {
    var _this = this;

    this.messageLoading = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed(function () {
      return _this.messageCurrentLoading();
    });
    this.messageListEndHash = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed(function () {
      return _this.messageListEndFolder() + '|' + _this.messageListEndSearch() + '|' + _this.messageListEndThreadUid() + '|' + _this.messageListEndPage();
    });
    this.messageListPageCount = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed(function () {
      var page = window__WEBPACK_IMPORTED_MODULE_8___default.a.Math.ceil(_this.messageListCount() / Stores_User_Settings__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].messagesPerPage());
      return 0 >= page ? 1 : page;
    });
    this.mainMessageListSearch = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed({
      read: this.messageListSearch,
      write: function write(value) {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_22__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_17__[/* mailBox */ "o"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].currentFolderFullNameHash(), 1, Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["trim"])(value.toString()), _this.messageListThreadUid()));
      }
    });
    this.messageListCompleteLoading = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed(function () {
      var one = _this.messageListLoading(),
          two = _this.messageListIsNotCompleted();

      return one || two;
    });
    this.isMessageSelected = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed(function () {
      return null !== _this.message();
    });
    this.messageListChecked = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, _this.messageList(), function (item) {
        return item.checked();
      });
    }).extend({
      rateLimit: 0
    });
    this.hasCheckedMessages = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed(function () {
      return 0 < _this.messageListChecked().length;
    }).extend({
      rateLimit: 0
    });
    this.messageListCheckedOrSelected = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed(function () {
      var checked = _this.messageListChecked(),
          selectedMessage = _this.selectorMessageSelected(),
          focusedMessage = _this.selectorMessageFocused();

      if (checked.length) {
        return ___WEBPACK_IMPORTED_MODULE_9___default.a.union(checked, selectedMessage ? [selectedMessage] : []);
      } else if (selectedMessage) {
        return [selectedMessage];
      }

      return focusedMessage ? [focusedMessage] : [];
    });
    this.messageListCheckedOrSelectedUidsWithSubMails = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed(function () {
      var result = [];

      ___WEBPACK_IMPORTED_MODULE_9___default.a.each(_this.messageListCheckedOrSelected(), function (message) {
        if (message) {
          result.push(message.uid);

          if (1 < message.threadsLen()) {
            result = ___WEBPACK_IMPORTED_MODULE_9___default.a.union(result, message.threads());
          }
        }
      });

      return result;
    });
  };

  _proto.subscribers = function subscribers() {
    var _this2 = this;

    this.messageListCompleteLoading.subscribe(function (value) {
      value = !!value;

      _this2.messageListCompleteLoadingThrottle(value);

      _this2.messageListCompleteLoadingThrottleForAnimation(value);
    });
    this.messageList.subscribe(___WEBPACK_IMPORTED_MODULE_9___default.a.debounce(function (list) {
      ___WEBPACK_IMPORTED_MODULE_9___default.a.each(list, function (item) {
        if (item && item.newForAnimation()) {
          item.newForAnimation(false);
        }
      });
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Time500ms));
    this.message.subscribe(function (message) {
      if (message) {
        if (Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Layout"].NoPreview === Stores_User_Settings__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].layout()) {
          Stores_User_App__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Focused"].MessageView);
        }
      } else {
        Stores_User_App__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Focused"].MessageList);

        _this2.messageFullScreenMode(false);

        _this2.hideMessageBodies();
      }
    });
    this.messageLoading.subscribe(function (value) {
      _this2.messageLoadingThrottle(value);
    });
    this.messagesBodiesDom.subscribe(function (dom) {
      if (dom && !(dom instanceof $__WEBPACK_IMPORTED_MODULE_11___default.a)) {
        _this2.messagesBodiesDom($__WEBPACK_IMPORTED_MODULE_11___default()(dom));
      }
    });
    this.messageListEndFolder.subscribe(function (folder) {
      var message = _this2.message();

      if (message && folder && folder !== message.folderFullNameRaw) {
        _this2.message(null);
      }
    });
  };

  _proto.purgeMessageBodyCache = function purgeMessageBodyCache() {
    var count = 0;
    var end = Common_Globals__WEBPACK_IMPORTED_MODULE_16__["data"].iMessageBodyCacheCount - Common_Consts__WEBPACK_IMPORTED_MODULE_15__[/* MESSAGE_BODY_CACHE_LIMIT */ "k"];

    if (0 < end) {
      var messagesDom = this.messagesBodiesDom();

      if (messagesDom) {
        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(messagesDom).call(messagesDom, '.rl-cache-class').each(function () {
          var item = $__WEBPACK_IMPORTED_MODULE_11___default()(this); // eslint-disable-line no-invalid-this

          if (end > item.data('rl-cache-count')) {
            item.addClass('rl-cache-purge');
            count += 1;
          }
        });

        if (0 < count) {
          ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () {
            return _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(messagesDom).call(messagesDom, '.rl-cache-purge').remove();
          }, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Time350ms);
        }
      }
    }
  };

  _proto.initUidNextAndNewMessages = function initUidNextAndNewMessages(folder, uidNext, newMessages) {
    if (Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* getFolderInboxName */ "h"])() === folder && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(uidNext) && '' !== uidNext) {
      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isArray"])(newMessages) && 0 < newMessages.length) {
        ___WEBPACK_IMPORTED_MODULE_9___default.a.each(newMessages, function (item) {
          Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* addNewMessageCache */ "a"])(folder, item.Uid);
        });

        Stores_User_Notification__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].playSoundNotification();
        var len = newMessages.length;

        if (3 < len) {
          Stores_User_Notification__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].displayDesktopNotification(Object(Common_Links__WEBPACK_IMPORTED_MODULE_17__[/* notificationMailIcon */ "r"])(), Stores_User_Account__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].email(), Object(Common_Translator__WEBPACK_IMPORTED_MODULE_18__["i18n"])('MESSAGE_LIST/NEW_MESSAGE_NOTIFICATION', {
            'COUNT': len
          }), {
            'Folder': '',
            'Uid': ''
          });
        } else {
          ___WEBPACK_IMPORTED_MODULE_9___default.a.each(newMessages, function (item) {
            Stores_User_Notification__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].displayDesktopNotification(Object(Common_Links__WEBPACK_IMPORTED_MODULE_17__[/* notificationMailIcon */ "r"])(), Helper_Message__WEBPACK_IMPORTED_MODULE_20__[/* emailArrayToString */ "b"](Helper_Message__WEBPACK_IMPORTED_MODULE_20__[/* emailArrayFromJson */ "a"](item.From), false), item.Subject, {
              'Folder': item.Folder,
              'Uid': item.Uid
            });
          });
        }
      }

      Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* setFolderUidNext */ "s"])(folder, uidNext);
    }
  };

  _proto.hideMessageBodies = function hideMessageBodies() {
    var messagesDom = this.messagesBodiesDom();

    if (messagesDom) {
      _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(messagesDom).call(messagesDom, '.b-text-part').hide();
    }
  }
  /**
   * @param {string} fromFolderFullNameRaw
   * @param {Array} uidForRemove
   * @param {string=} toFolderFullNameRaw = ''
   * @param {boolean=} copy = false
   */
  ;

  _proto.removeMessagesFromList = function removeMessagesFromList(fromFolderFullNameRaw, uidForRemove, toFolderFullNameRaw, copy) {
    var _this3 = this;

    if (toFolderFullNameRaw === void 0) {
      toFolderFullNameRaw = '';
    }

    if (copy === void 0) {
      copy = false;
    }

    uidForRemove = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, uidForRemove, function (mValue) {
      return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(mValue);
    });
    var unseenCount = 0,
        messageList = this.messageList(),
        currentMessage = this.message();
    var trashFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].trashFolder(),
        spamFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].spamFolder(),
        fromFolder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* getFolderFromCacheList */ "e"])(fromFolderFullNameRaw),
        toFolder = '' === toFolderFullNameRaw ? null : Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* getFolderFromCacheList */ "e"])(toFolderFullNameRaw || ''),
        currentFolderFullNameRaw = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].currentFolderFullNameRaw(),
        messages = currentFolderFullNameRaw === fromFolderFullNameRaw ? _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, messageList, function (item) {
      return item && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["inArray"])(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(item.uid), uidForRemove);
    }) : [];

    ___WEBPACK_IMPORTED_MODULE_9___default.a.each(messages, function (item) {
      if (item && item.unseen()) {
        unseenCount += 1;
      }
    });

    if (fromFolder && !copy) {
      fromFolder.messageCountAll(0 <= fromFolder.messageCountAll() - uidForRemove.length ? fromFolder.messageCountAll() - uidForRemove.length : 0);

      if (0 < unseenCount) {
        fromFolder.messageCountUnread(0 <= fromFolder.messageCountUnread() - unseenCount ? fromFolder.messageCountUnread() - unseenCount : 0);
      }
    }

    if (toFolder) {
      if (trashFolder === toFolder.fullNameRaw || spamFolder === toFolder.fullNameRaw) {
        unseenCount = 0;
      }

      toFolder.messageCountAll(toFolder.messageCountAll() + uidForRemove.length);

      if (0 < unseenCount) {
        toFolder.messageCountUnread(toFolder.messageCountUnread() + unseenCount);
      }

      toFolder.actionBlink(true);
    }

    if (0 < messages.length) {
      if (copy) {
        ___WEBPACK_IMPORTED_MODULE_9___default.a.each(messages, function (item) {
          item.checked(false);
        });
      } else {
        this.messageListIsNotCompleted(true);

        ___WEBPACK_IMPORTED_MODULE_9___default.a.each(messages, function (item) {
          if (currentMessage && currentMessage.hash === item.hash) {
            currentMessage = null;

            _this3.message(null);
          }

          item.deleted(true);
        });

        ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () {
          ___WEBPACK_IMPORTED_MODULE_9___default.a.each(messages, function (item) {
            _this3.messageList.remove(item);
          });
        }, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Time350ms);
      }
    }

    if ('' !== fromFolderFullNameRaw) {
      Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* setFolderHash */ "q"])(fromFolderFullNameRaw, '');
    }

    if ('' !== toFolderFullNameRaw) {
      Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* setFolderHash */ "q"])(toFolderFullNameRaw, '');
    }

    if ('' !== this.messageListThreadUid()) {
      messageList = this.messageList();

      if (messageList && 0 < messageList.length && !!_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, messageList, function (item) {
        return !!(item && item.deleted() && item.uid === _this3.messageListThreadUid());
      })) {
        var message = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, messageList, function (item) {
          return item && !item.deleted();
        });

        if (message && this.messageListThreadUid() !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(message.uid)) {
          this.messageListThreadUid(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(message.uid));
          Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_22__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_17__[/* mailBox */ "o"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].currentFolderFullNameHash(), this.messageListPage(), this.messageListSearch(), this.messageListThreadUid()), true, true);
        } else if (!message) {
          if (1 < this.messageListPage()) {
            this.messageListPage(this.messageListPage() - 1);
            Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_22__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_17__[/* mailBox */ "o"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].currentFolderFullNameHash(), this.messageListPage(), this.messageListSearch(), this.messageListThreadUid()), true, true);
          } else {
            this.messageListThreadUid('');
            Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_22__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_17__[/* mailBox */ "o"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].currentFolderFullNameHash(), this.messageListPageBeforeThread(), this.messageListSearch()), true, true);
          }
        }
      }
    }
  }
  /**
   * @param {Object} messageTextBody
   */
  ;

  _proto.initBlockquoteSwitcher = function initBlockquoteSwitcher(messageTextBody) {
    if (messageTextBody) {
      var _context;

      var $oList = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_0___default()(_context = $__WEBPACK_IMPORTED_MODULE_11___default()('blockquote:not(.rl-bq-switcher)', messageTextBody)).call(_context, function () {
        return 0 === $__WEBPACK_IMPORTED_MODULE_11___default()(this).parent().closest('blockquote', messageTextBody).length; // eslint-disable-line no-invalid-this
      });

      if ($oList && 0 < $oList.length) {
        $oList.each(function () {
          var $this = $__WEBPACK_IMPORTED_MODULE_11___default()(this); // eslint-disable-line no-invalid-this

          var h = $this.height();

          if (0 === h) {
            h = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["getRealHeight"])($this);
          }

          if ('' !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["trim"])($this.text()) && (0 === h || 100 < h)) {
            $this.addClass('rl-bq-switcher hidden-bq');
            $__WEBPACK_IMPORTED_MODULE_11___default()('<span class="rlBlockquoteSwitcher"><i class="icon-ellipsis" /></span>').insertBefore($this).on('click.rlBlockquoteSwitcher', function () {
              $this.toggleClass('hidden-bq');
              Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["windowResize"])();
            }).after('<br />').before('<br />');
          }
        });
      }
    }
  }
  /**
   * @param {Object} messageTextBody
   * @param {Object} message
   */
  ;

  _proto.initOpenPgpControls = function initOpenPgpControls(messageTextBody, message) {
    if (messageTextBody && _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(messageTextBody)) {
      _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(messageTextBody).call(messageTextBody, '.b-plain-openpgp:not(.inited)').each(function () {
        Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"].initMessageBodyControls($__WEBPACK_IMPORTED_MODULE_11___default()(this), message); // eslint-disable-line no-invalid-this
      });
    }
  };

  _proto.setMessage = function setMessage(data, cached) {
    var isNew = false,
        body = null,
        id = '',
        plain = '',
        resultHtml = '',
        pgpSigned = false,
        messagesDom = this.messagesBodiesDom(),
        selectedMessage = this.selectorMessageSelected(),
        message = this.message();

    if (data && message && data.Result && 'Object/Message' === data.Result['@Object'] && message.folderFullNameRaw === data.Result.Folder) {
      var threads = message.threads();

      if (message.uid !== data.Result.Uid && 1 < threads.length && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["inArray"])(data.Result.Uid, threads)) {
        message = Model_Message__WEBPACK_IMPORTED_MODULE_21__[/* MessageModel */ "a"].newInstanceFromJson(data.Result);

        if (message) {
          message.threads(threads);
          Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* initMessageFlagsFromCache */ "n"])(message);
          this.message(this.staticMessage.populateByMessageListItem(message));
          message = this.message();
          isNew = true;
        }
      }

      if (message && message.uid === data.Result.Uid) {
        this.messageError('');
        message.initUpdateByMessageJson(data.Result);
        Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* addRequestedMessage */ "b"])(message.folderFullNameRaw, message.uid);

        if (!cached) {
          message.initFlagsByJson(data.Result);
        }

        messagesDom = messagesDom && messagesDom[0] ? messagesDom : null;

        if (messagesDom) {
          id = 'rl-mgs-' + message.hash.replace(/[^a-zA-Z0-9]/g, '');

          var textBody = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(messagesDom).call(messagesDom, '#' + id);

          if (!textBody || !textBody[0]) {
            var isHtml = false;

            if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.Html) && '' !== data.Result.Html) {
              isHtml = true;
              resultHtml = data.Result.Html.toString();
            } else if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.Plain) && '' !== data.Result.Plain) {
              isHtml = false;
              resultHtml = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["plainToHtml"])(data.Result.Plain.toString(), false);

              if ((message.isPgpSigned() || message.isPgpEncrypted()) && Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"].capaOpenPGP()) {
                plain = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(data.Result.Plain);
                var isPgpEncrypted = /---BEGIN PGP MESSAGE---/.test(plain);

                if (!isPgpEncrypted) {
                  pgpSigned = /-----BEGIN PGP SIGNED MESSAGE-----/.test(plain) && /-----BEGIN PGP SIGNATURE-----/.test(plain);
                }

                Common_Globals__WEBPACK_IMPORTED_MODULE_16__["$div"].empty();

                if (pgpSigned && message.isPgpSigned()) {
                  resultHtml = Common_Globals__WEBPACK_IMPORTED_MODULE_16__["$div"].append($__WEBPACK_IMPORTED_MODULE_11___default()('<pre class="b-plain-openpgp signed"></pre>').text(plain)).html();
                } else if (isPgpEncrypted && message.isPgpEncrypted()) {
                  resultHtml = Common_Globals__WEBPACK_IMPORTED_MODULE_16__["$div"].append($__WEBPACK_IMPORTED_MODULE_11___default()('<pre class="b-plain-openpgp encrypted"></pre>').text(plain)).html();
                } else {
                  resultHtml = '<pre>' + resultHtml + '</pre>';
                }

                Common_Globals__WEBPACK_IMPORTED_MODULE_16__["$div"].empty();
                message.isPgpSigned(pgpSigned);
                message.isPgpEncrypted(isPgpEncrypted);
              } else {
                resultHtml = '<pre>' + resultHtml + '</pre>';
              }
            } else {
              isHtml = false;
              resultHtml = '<pre>' + resultHtml + '</pre>';
            }

            Common_Globals__WEBPACK_IMPORTED_MODULE_16__["data"].iMessageBodyCacheCount += 1;
            body = $__WEBPACK_IMPORTED_MODULE_11___default()('<div id="' + id + '" ></div>').hide().addClass('rl-cache-class');
            body.data('rl-cache-count', Common_Globals__WEBPACK_IMPORTED_MODULE_16__["data"].iMessageBodyCacheCount);
            body.html(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["findEmailAndLinks"])(resultHtml)).addClass('b-text-part ' + (isHtml ? 'html' : 'plain'));
            message.isHtml(!!isHtml);
            message.hasImages(!!data.Result.HasExternals);
            message.body = body;

            if (message.body) {
              messagesDom.append(message.body);
            }

            message.storeDataInDom();

            if (data.Result.HasInternals) {
              message.showInternalImages(true);
            }

            if (message.hasImages() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].showImages()) {
              message.showExternalImages(true);
            }

            this.purgeMessageBodyCacheThrottle();
          } else {
            message.body = textBody;

            if (message.body) {
              Common_Globals__WEBPACK_IMPORTED_MODULE_16__["data"].iMessageBodyCacheCount += 1;
              message.body.data('rl-cache-count', Common_Globals__WEBPACK_IMPORTED_MODULE_16__["data"].iMessageBodyCacheCount);
              message.fetchDataFromDom();
            }
          }

          this.messageActiveDom(message.body);
          this.hideMessageBodies();

          if (body) {
            this.initOpenPgpControls(body, message);
            this.initBlockquoteSwitcher(body);
          }

          message.body.show();
        }

        Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* initMessageFlagsFromCache */ "n"])(message);

        if (message.unseen() || message.hasUnseenSubMessage()) {
          Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_29__[/* getApp */ "a"])().messageListAction(message.folderFullNameRaw, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["MessageSetAction"].SetSeen, [message]);
        }

        if (isNew) {
          message = this.message();

          if (selectedMessage && message && (message.folderFullNameRaw !== selectedMessage.folderFullNameRaw || message.uid !== selectedMessage.uid)) {
            this.selectorMessageSelected(null);

            if (1 === this.messageList().length) {
              this.selectorMessageFocused(null);
            }
          } else if (!selectedMessage && message) {
            selectedMessage = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, this.messageList(), function (subMessage) {
              return subMessage && subMessage.folderFullNameRaw === message.folderFullNameRaw && subMessage.uid === message.uid;
            });

            if (selectedMessage) {
              this.selectorMessageSelected(selectedMessage);
              this.selectorMessageFocused(selectedMessage);
            }
          }
        }

        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["windowResize"])();
      }
    }
  };

  _proto.selectMessage = function selectMessage(oMessage) {
    if (oMessage) {
      this.message(this.staticMessage.populateByMessageListItem(oMessage));
      this.populateMessageBody(this.message());
    } else {
      this.message(null);
    }
  };

  _proto.selectMessageByFolderAndUid = function selectMessageByFolderAndUid(sFolder, sUid) {
    if (sFolder && sUid) {
      this.message(this.staticMessage.populateByMessageListItem(null));
      this.message().folderFullNameRaw = sFolder;
      this.message().uid = sUid;
      this.populateMessageBody(this.message());
    } else {
      this.message(null);
    }
  };

  _proto.populateMessageBody = function populateMessageBody(oMessage) {
    if (oMessage) {
      if (Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_30__[/* default */ "a"].message(this.onMessageResponse, oMessage.folderFullNameRaw, oMessage.uid)) {
        this.messageCurrentLoading(true);
      }
    }
  }
  /**
   * @param {string} sResult
   * @param {AjaxJsonDefaultResponse} oData
   * @param {boolean} bCached
   */
  ;

  _proto.onMessageResponse = function onMessageResponse(sResult, oData, bCached) {
    this.hideMessageBodies();
    this.messageCurrentLoading(false);

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_12__["StorageResultType"].Success === sResult && oData && oData.Result) {
      this.setMessage(oData, bCached);
    } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_12__["StorageResultType"].Unload === sResult) {
      this.message(null);
      this.messageError('');
    } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_12__["StorageResultType"].Abort !== sResult) {
      this.message(null);
      this.messageError(oData && oData.ErrorCode ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_18__["getNotification"])(oData.ErrorCode) : Object(Common_Translator__WEBPACK_IMPORTED_MODULE_18__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Notification"].UnknownError));
    }
  }
  /**
   * @param {Array} list
   * @returns {string}
   */
  ;

  _proto.calculateMessageListHash = function calculateMessageListHash(list) {
    return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, list, function (message) {
      return '' + message.hash + '_' + message.threadsLen() + '_' + message.flagHash();
    }).join('|');
  };

  _proto.setMessageList = function setMessageList(data, cached) {
    if (data && data.Result && 'Collection/MessageCollection' === data.Result['@Object'] && data.Result['@Collection'] && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isArray"])(data.Result['@Collection'])) {
      var newCount = 0,
          unreadCountChange = false;
      var list = [],
          utc = Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_19__["momentNowUnix"])(),
          iCount = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(data.Result.MessageResultCount),
          iOffset = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(data.Result.Offset);
      var folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* getFolderFromCacheList */ "e"])(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.Folder) ? data.Result.Folder : '');

      if (folder && !cached) {
        folder.interval = utc;
        Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* setFolderHash */ "q"])(data.Result.Folder, data.Result.FolderHash);

        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.MessageCount)) {
          folder.messageCountAll(data.Result.MessageCount);
        }

        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.MessageUnseenCount)) {
          if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(folder.messageCountUnread()) !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(data.Result.MessageUnseenCount)) {
            unreadCountChange = true;
          }

          folder.messageCountUnread(data.Result.MessageUnseenCount);
        }

        this.initUidNextAndNewMessages(folder.fullNameRaw, data.Result.UidNext, data.Result.NewMessages);
      }

      if (unreadCountChange && folder) {
        Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* clearMessageFlagsFromCacheByFolder */ "c"])(folder.fullNameRaw);
      }

      ___WEBPACK_IMPORTED_MODULE_9___default.a.each(data.Result['@Collection'], function (jsonMessage) {
        if (jsonMessage && 'Object/Message' === jsonMessage['@Object']) {
          var message = Model_Message__WEBPACK_IMPORTED_MODULE_21__[/* MessageModel */ "a"].newInstanceFromJson(jsonMessage);

          if (message) {
            if (Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* hasNewMessageAndRemoveFromCache */ "l"])(message.folderFullNameRaw, message.uid) && 5 >= newCount) {
              newCount += 1;
              message.newForAnimation(true);
            }

            message.deleted(false);

            if (cached) {
              Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* initMessageFlagsFromCache */ "n"])(message);
            } else {
              Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* storeMessageFlagsToCache */ "u"])(message);
            }

            list.push(message);
          }
        }
      });

      this.messageListCount(iCount);
      this.messageListSearch(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.Search) ? data.Result.Search : '');
      this.messageListPage(window__WEBPACK_IMPORTED_MODULE_8___default.a.Math.ceil(iOffset / Stores_User_Settings__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].messagesPerPage() + 1));
      this.messageListThreadUid(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.ThreadUid) ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(data.Result.ThreadUid) : '');
      this.messageListEndFolder(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.Folder) ? data.Result.Folder : '');
      this.messageListEndSearch(this.messageListSearch());
      this.messageListEndThreadUid(this.messageListThreadUid());
      this.messageListEndPage(this.messageListPage());
      this.messageListDisableAutoSelect(true);
      this.messageList(list);
      this.messageListIsNotCompleted(false);
      Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* clearNewMessageCache */ "d"])();

      if (folder && (cached || unreadCountChange || Stores_User_Settings__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].useThreads())) {
        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_29__[/* getApp */ "a"])().folderInformation(folder.fullNameRaw, list);
      }
    } else {
      this.messageListCount(0);
      this.messageList([]);
      this.messageListError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_18__["getNotification"])(data && data.ErrorCode ? data.ErrorCode : Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Notification"].CantGetMessageList));
    }
  };

  return MessageUserStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new MessageUserStore());

/***/ }),
/* 14 */
/*!*****************************!*\
  !*** ./dev/Common/Cache.js ***!
  \*****************************/
/*! exports provided: clear, getUserPic, getMessageKey, addRequestedMessage, hasRequestedMessage, addNewMessageCache, hasNewMessageAndRemoveFromCache, clearNewMessageCache, getFolderInboxName, getFolderFullNameRaw, setFolderFullNameRaw, getFolderHash, setFolderHash, getFolderUidNext, setFolderUidNext, getFolderFromCacheList, setFolderToCacheList, removeFolderFromCacheList, getMessageFlagsFromCache, setMessageFlagsToCache, clearMessageFlagsFromCacheByFolder, initMessageFlagsFromCache, storeMessageFlagsToCache, storeMessageFlagsToCacheByFolderAndUid, storeMessageFlagsToCacheBySetAction */
/*! exports used: addNewMessageCache, addRequestedMessage, clearMessageFlagsFromCacheByFolder, clearNewMessageCache, getFolderFromCacheList, getFolderFullNameRaw, getFolderHash, getFolderInboxName, getFolderUidNext, getMessageFlagsFromCache, getUserPic, hasNewMessageAndRemoveFromCache, hasRequestedMessage, initMessageFlagsFromCache, removeFolderFromCacheList, setFolderFullNameRaw, setFolderHash, setFolderToCacheList, setFolderUidNext, setMessageFlagsToCache, storeMessageFlagsToCache, storeMessageFlagsToCacheByFolderAndUid, storeMessageFlagsToCacheBySetAction */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* unused harmony export clear */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return getUserPic; });
/* unused harmony export getMessageKey */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return addRequestedMessage; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return hasRequestedMessage; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return addNewMessageCache; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return hasNewMessageAndRemoveFromCache; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return clearNewMessageCache; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return getFolderInboxName; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return getFolderFullNameRaw; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return setFolderFullNameRaw; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return getFolderHash; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return setFolderHash; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return getFolderUidNext; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return setFolderUidNext; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return getFolderFromCacheList; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return setFolderToCacheList; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return removeFolderFromCacheList; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return getMessageFlagsFromCache; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return setMessageFlagsToCache; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return clearMessageFlagsFromCacheByFolder; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return initMessageFlagsFromCache; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return storeMessageFlagsToCache; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return storeMessageFlagsToCacheByFolderAndUid; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return storeMessageFlagsToCacheBySetAction; });
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Storage/Settings */ 5);






var FOLDERS_CACHE = {},
    FOLDERS_NAME_CACHE = {},
    FOLDERS_HASH_CACHE = {},
    FOLDERS_UID_NEXT_CACHE = {},
    MESSAGE_FLAGS_CACHE = {},
    NEW_MESSAGE_CACHE = {},
    inboxFolderName = '';
var REQUESTED_MESSAGE_CACHE = {},
    capaGravatar = Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Capa"].Gravatar);
/**
 * @returns {void}
 */

function clear() {
  FOLDERS_CACHE = {};
  FOLDERS_NAME_CACHE = {};
  FOLDERS_HASH_CACHE = {};
  FOLDERS_UID_NEXT_CACHE = {};
  MESSAGE_FLAGS_CACHE = {};
}
/**
 * @param {string} email
 * @param {Function} callback
 * @returns {string}
 */

function getUserPic(email, callback) {
  email = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(email);
  callback(capaGravatar && '' !== email ? Common_Links__WEBPACK_IMPORTED_MODULE_4__[/* avatarLink */ "h"](email) : '', email);
}
/**
 * @param {string} folderFullNameRaw
 * @param {string} uid
 * @returns {string}
 */

function getMessageKey(folderFullNameRaw, uid) {
  return folderFullNameRaw + "#" + uid;
}
/**
 * @param {string} folder
 * @param {string} uid
 */

function addRequestedMessage(folder, uid) {
  REQUESTED_MESSAGE_CACHE[getMessageKey(folder, uid)] = true;
}
/**
 * @param {string} folder
 * @param {string} uid
 * @returns {boolean}
 */

function hasRequestedMessage(folder, uid) {
  return true === REQUESTED_MESSAGE_CACHE[getMessageKey(folder, uid)];
}
/**
 * @param {string} folderFullNameRaw
 * @param {string} uid
 */

function addNewMessageCache(folderFullNameRaw, uid) {
  NEW_MESSAGE_CACHE[getMessageKey(folderFullNameRaw, uid)] = true;
}
/**
 * @param {string} folderFullNameRaw
 * @param {string} uid
 */

function hasNewMessageAndRemoveFromCache(folderFullNameRaw, uid) {
  if (NEW_MESSAGE_CACHE[getMessageKey(folderFullNameRaw, uid)]) {
    NEW_MESSAGE_CACHE[getMessageKey(folderFullNameRaw, uid)] = null;
    return true;
  }

  return false;
}
/**
 * @returns {void}
 */

function clearNewMessageCache() {
  NEW_MESSAGE_CACHE = {};
}
/**
 * @returns {string}
 */

function getFolderInboxName() {
  return '' === inboxFolderName ? 'INBOX' : inboxFolderName;
}
/**
 * @param {string} folderHash
 * @returns {string}
 */

function getFolderFullNameRaw(folderHash) {
  return '' !== folderHash && FOLDERS_NAME_CACHE[folderHash] ? FOLDERS_NAME_CACHE[folderHash] : '';
}
/**
 * @param {string} folderHash
 * @param {string} folderFullNameRaw
 */

function setFolderFullNameRaw(folderHash, folderFullNameRaw) {
  FOLDERS_NAME_CACHE[folderHash] = folderFullNameRaw;

  if ('INBOX' === folderFullNameRaw || '' === inboxFolderName) {
    inboxFolderName = folderFullNameRaw;
  }
}
/**
 * @param {string} folderFullNameRaw
 * @returns {string}
 */

function getFolderHash(folderFullNameRaw) {
  return '' !== folderFullNameRaw && FOLDERS_HASH_CACHE[folderFullNameRaw] ? FOLDERS_HASH_CACHE[folderFullNameRaw] : '';
}
/**
 * @param {string} folderFullNameRaw
 * @param {string} folderHash
 */

function setFolderHash(folderFullNameRaw, folderHash) {
  if ('' !== folderFullNameRaw) {
    FOLDERS_HASH_CACHE[folderFullNameRaw] = folderHash;
  }
}
/**
 * @param {string} folderFullNameRaw
 * @returns {string}
 */

function getFolderUidNext(folderFullNameRaw) {
  return '' !== folderFullNameRaw && FOLDERS_UID_NEXT_CACHE[folderFullNameRaw] ? FOLDERS_UID_NEXT_CACHE[folderFullNameRaw] : '';
}
/**
 * @param {string} folderFullNameRaw
 * @param {string} uidNext
 */

function setFolderUidNext(folderFullNameRaw, uidNext) {
  FOLDERS_UID_NEXT_CACHE[folderFullNameRaw] = uidNext;
}
/**
 * @param {string} folderFullNameRaw
 * @returns {?FolderModel}
 */

function getFolderFromCacheList(folderFullNameRaw) {
  return '' !== folderFullNameRaw && FOLDERS_CACHE[folderFullNameRaw] ? FOLDERS_CACHE[folderFullNameRaw] : null;
}
/**
 * @param {string} folderFullNameRaw
 * @param {?FolderModel} folder
 */

function setFolderToCacheList(folderFullNameRaw, folder) {
  FOLDERS_CACHE[folderFullNameRaw] = folder;
}
/**
 * @param {string} folderFullNameRaw
 */

function removeFolderFromCacheList(folderFullNameRaw) {
  setFolderToCacheList(folderFullNameRaw, null);
}
/**
 * @param {string} folderFullName
 * @param {string} uid
 * @returns {?Array}
 */

function getMessageFlagsFromCache(folderFullName, uid) {
  return MESSAGE_FLAGS_CACHE[folderFullName] && MESSAGE_FLAGS_CACHE[folderFullName][uid] ? MESSAGE_FLAGS_CACHE[folderFullName][uid] : null;
}
/**
 * @param {string} folderFullName
 * @param {string} uid
 * @param {Array} flagsCache
 */

function setMessageFlagsToCache(folderFullName, uid, flagsCache) {
  if (!MESSAGE_FLAGS_CACHE[folderFullName]) {
    MESSAGE_FLAGS_CACHE[folderFullName] = {};
  }

  MESSAGE_FLAGS_CACHE[folderFullName][uid] = flagsCache;
}
/**
 * @param {string} folderFullName
 */

function clearMessageFlagsFromCacheByFolder(folderFullName) {
  MESSAGE_FLAGS_CACHE[folderFullName] = {};
}
/**
 * @param {(MessageModel|null)} message
 */

function initMessageFlagsFromCache(message) {
  if (message) {
    var uid = message.uid,
        flags = getMessageFlagsFromCache(message.folderFullNameRaw, uid);

    if (flags && 0 < flags.length) {
      message.flagged(!!flags[1]);

      if (!message.isSimpleMessage) {
        message.unseen(!!flags[0]);
        message.answered(!!flags[2]);
        message.forwarded(!!flags[3]);
        message.isReadReceipt(!!flags[4]);
        message.deletedMark(!!flags[5]);
      }
    }

    if (0 < message.threads().length) {
      var unseenSubUid = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_1___default.a).call(___WEBPACK_IMPORTED_MODULE_1___default.a, message.threads(), function (sSubUid) {
        if (uid !== sSubUid) {
          var subFlags = getMessageFlagsFromCache(message.folderFullNameRaw, sSubUid);
          return subFlags && 0 < subFlags.length && !!subFlags[0];
        }

        return false;
      });

      var flaggedSubUid = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_1___default.a).call(___WEBPACK_IMPORTED_MODULE_1___default.a, message.threads(), function (sSubUid) {
        if (uid !== sSubUid) {
          var subFlags = getMessageFlagsFromCache(message.folderFullNameRaw, sSubUid);
          return subFlags && 0 < subFlags.length && !!subFlags[1];
        }

        return false;
      });

      message.hasUnseenSubMessage(unseenSubUid && 0 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pInt"])(unseenSubUid));
      message.hasFlaggedSubMessage(flaggedSubUid && 0 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pInt"])(flaggedSubUid));
    }
  }
}
/**
 * @param {(MessageModel|null)} message
 */

function storeMessageFlagsToCache(message) {
  if (message) {
    setMessageFlagsToCache(message.folderFullNameRaw, message.uid, [message.unseen(), message.flagged(), message.answered(), message.forwarded(), message.isReadReceipt(), message.deletedMark()]);
  }
}
/**
 * @param {string} folder
 * @param {string} uid
 * @param {Array} flags
 */

function storeMessageFlagsToCacheByFolderAndUid(folder, uid, flags) {
  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isArray"])(flags) && 0 < flags.length) {
    setMessageFlagsToCache(folder, uid, flags);
  }
}
/**
 * @param {string} folder
 * @param {string} uid
 * @param {number} setAction
 */

function storeMessageFlagsToCacheBySetAction(folder, uid, setAction) {
  var unread = 0;
  var flags = getMessageFlagsFromCache(folder, uid);

  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isArray"])(flags) && 0 < flags.length) {
    if (flags[0]) {
      unread = 1;
    }

    switch (setAction) {
      case Common_Enums__WEBPACK_IMPORTED_MODULE_2__["MessageSetAction"].SetSeen:
        flags[0] = false;
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_2__["MessageSetAction"].UnsetSeen:
        flags[0] = true;
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_2__["MessageSetAction"].SetFlag:
        flags[1] = true;
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_2__["MessageSetAction"].UnsetFlag:
        flags[1] = false;
        break;
      // no default
    }

    setMessageFlagsToCache(folder, uid, flags);
  }

  return unread;
}

/***/ }),
/* 15 */
/*!*****************************!*\
  !*** ./dev/Common/Links.js ***!
  \*****************************/
/*! exports provided: populateAuthSuffix, subQueryPrefix, root, rootAdmin, rootUser, attachmentRaw, attachmentDownload, attachmentPreview, attachmentThumbnailPreview, attachmentPreviewAsPlain, attachmentFramed, serverRequest, upload, uploadContacts, uploadBackground, append, change, ajax, messageViewLink, messageDownloadLink, avatarLink, publicLink, userBackground, phpInfo, langLink, exportContactsVcf, exportContactsCsv, socialGoogle, socialTwitter, socialFacebook, staticPrefix, emptyContactPic, sound, notificationMailIcon, openPgpJs, openPgpWorkerJs, openPgpWorkerPath, themePreviewLink, inbox, settings, about, admin, mailBox */
/*! exports used: ajax, append, attachmentDownload, attachmentFramed, attachmentPreview, attachmentPreviewAsPlain, attachmentThumbnailPreview, avatarLink, change, emptyContactPic, exportContactsCsv, exportContactsVcf, inbox, langLink, mailBox, messageDownloadLink, messageViewLink, notificationMailIcon, openPgpJs, openPgpWorkerJs, phpInfo, populateAuthSuffix, root, rootAdmin, rootUser, settings, socialFacebook, socialGoogle, socialTwitter, sound, subQueryPrefix, themePreviewLink, upload, uploadBackground, uploadContacts, userBackground */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return populateAuthSuffix; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return subQueryPrefix; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return root; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return rootAdmin; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return rootUser; });
/* unused harmony export attachmentRaw */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return attachmentDownload; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return attachmentPreview; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return attachmentThumbnailPreview; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return attachmentPreviewAsPlain; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return attachmentFramed; });
/* unused harmony export serverRequest */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return upload; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return uploadContacts; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return uploadBackground; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return append; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return change; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ajax; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return messageViewLink; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return messageDownloadLink; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return avatarLink; });
/* unused harmony export publicLink */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return userBackground; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return phpInfo; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return langLink; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return exportContactsVcf; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return exportContactsCsv; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return socialGoogle; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return socialTwitter; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return socialFacebook; });
/* unused harmony export staticPrefix */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return emptyContactPic; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return sound; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return notificationMailIcon; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return openPgpJs; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return openPgpWorkerJs; });
/* unused harmony export openPgpWorkerPath */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return themePreviewLink; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return inbox; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return settings; });
/* unused harmony export about */
/* unused harmony export admin */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return mailBox; });
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Storage/Settings */ 5);





var ROOT = './',
    HASH_PREFIX = '#/',
    SERVER_PREFIX = './?',
    SUB_QUERY_PREFIX = '&q[]=',
    VERSION = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["appSettingsGet"]('version'),
    WEB_PREFIX = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["appSettingsGet"]('webPath') || '',
    VERSION_PREFIX = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["appSettingsGet"]('webVersionPath') || 'rainloop/v/' + VERSION + '/',
    STATIC_PREFIX = VERSION_PREFIX + 'static/',
    ADMIN_HOST_USE = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["appSettingsGet"]('adminHostUse'),
    ADMIN_PATH = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["appSettingsGet"]('adminPath') || 'admin';
var AUTH_PREFIX = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["settingsGet"]('AuthAccountHash') || '0';
/**
 * @returns {void}
 */

function populateAuthSuffix() {
  AUTH_PREFIX = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["settingsGet"]('AuthAccountHash') || '0';
}
/**
 * @returns {string}
 */

function subQueryPrefix() {
  return SUB_QUERY_PREFIX;
}
/**
 * @param {string=} startupUrl
 * @returns {string}
 */

function root(startupUrl) {
  if (startupUrl === void 0) {
    startupUrl = '';
  }

  return HASH_PREFIX + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pString"])(startupUrl);
}
/**
 * @returns {string}
 */

function rootAdmin() {
  return ADMIN_HOST_USE ? ROOT : SERVER_PREFIX + ADMIN_PATH;
}
/**
 * @returns {string}
 */

function rootUser() {
  return ROOT;
}
/**
 * @param {string} type
 * @param {string} download
 * @param {string=} customSpecSuffix
 * @returns {string}
 */

function attachmentRaw(type, download, customSpecSuffix) {
  customSpecSuffix = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isUnd"])(customSpecSuffix) ? AUTH_PREFIX : customSpecSuffix;
  return SERVER_PREFIX + '/Raw/' + SUB_QUERY_PREFIX + '/' + customSpecSuffix + '/' + type + '/' + SUB_QUERY_PREFIX + '/' + download;
}
/**
 * @param {string} download
 * @param {string=} customSpecSuffix
 * @returns {string}
 */

function attachmentDownload(download, customSpecSuffix) {
  return attachmentRaw('Download', download, customSpecSuffix);
}
/**
 * @param {string} download
 * @param {string=} customSpecSuffix
 * @returns {string}
 */

function attachmentPreview(download, customSpecSuffix) {
  return attachmentRaw('View', download, customSpecSuffix);
}
/**
 * @param {string} download
 * @param {string=} customSpecSuffix
 * @returns {string}
 */

function attachmentThumbnailPreview(download, customSpecSuffix) {
  return attachmentRaw('ViewThumbnail', download, customSpecSuffix);
}
/**
 * @param {string} download
 * @param {string=} customSpecSuffix
 * @returns {string}
 */

function attachmentPreviewAsPlain(download, customSpecSuffix) {
  return attachmentRaw('ViewAsPlain', download, customSpecSuffix);
}
/**
 * @param {string} download
 * @param {string=} customSpecSuffix
 * @returns {string}
 */

function attachmentFramed(download, customSpecSuffix) {
  return attachmentRaw('FramedView', download, customSpecSuffix);
}
/**
 * @param {string} type
 * @returns {string}
 */

function serverRequest(type) {
  return SERVER_PREFIX + '/' + type + '/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/';
}
/**
 * @returns {string}
 */

function upload() {
  return serverRequest('Upload');
}
/**
 * @returns {string}
 */

function uploadContacts() {
  return serverRequest('UploadContacts');
}
/**
 * @returns {string}
 */

function uploadBackground() {
  return serverRequest('UploadBackground');
}
/**
 * @returns {string}
 */

function append() {
  return serverRequest('Append');
}
/**
 * @param {string} email
 * @returns {string}
 */

function change(email) {
  return serverRequest('Change') + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["encodeURIComponent"])(email) + '/';
}
/**
 * @param {string} add
 * @returns {string}
 */

function ajax(add) {
  return serverRequest('Ajax') + add;
}
/**
 * @param {string} requestHash
 * @returns {string}
 */

function messageViewLink(requestHash) {
  return SERVER_PREFIX + '/Raw/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/ViewAsPlain/' + SUB_QUERY_PREFIX + '/' + requestHash;
}
/**
 * @param {string} requestHash
 * @returns {string}
 */

function messageDownloadLink(requestHash) {
  return SERVER_PREFIX + '/Raw/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/Download/' + SUB_QUERY_PREFIX + '/' + requestHash;
}
/**
 * @param {string} email
 * @returns {string}
 */

function avatarLink(email) {
  return SERVER_PREFIX + '/Raw/0/Avatar/' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["encodeURIComponent"])(email) + '/';
}
/**
 * @param {string} hash
 * @returns {string}
 */

function publicLink(hash) {
  return SERVER_PREFIX + '/Raw/0/Public/' + hash + '/';
}
/**
 * @param {string} hash
 * @returns {string}
 */

function userBackground(hash) {
  return SERVER_PREFIX + '/Raw/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/UserBackground/' + SUB_QUERY_PREFIX + '/' + hash;
}
/**
 * @returns {string}
 */

function phpInfo() {
  return SERVER_PREFIX + '/Info';
}
/**
 * @param {string} lang
 * @param {boolean} isAdmin
 * @returns {string}
 */

function langLink(lang, isAdmin) {
  return SERVER_PREFIX + '/Lang/0/' + (isAdmin ? 'Admin' : 'App') + '/' + window__WEBPACK_IMPORTED_MODULE_2___default.a.encodeURI(lang) + '/' + VERSION + '/';
}
/**
 * @returns {string}
 */

function exportContactsVcf() {
  return SERVER_PREFIX + '/Raw/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/ContactsVcf/';
}
/**
 * @returns {string}
 */

function exportContactsCsv() {
  return SERVER_PREFIX + '/Raw/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/ContactsCsv/';
}
/**
 * @param {boolean} xauth = false
 * @returns {string}
 */

function socialGoogle(xauth) {
  if (xauth === void 0) {
    xauth = false;
  }

  return SERVER_PREFIX + 'SocialGoogle' + ('' !== AUTH_PREFIX ? '/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/' : '') + (xauth ? '&xauth=1' : '');
}
/**
 * @returns {string}
 */

function socialTwitter() {
  return SERVER_PREFIX + 'SocialTwitter' + ('' !== AUTH_PREFIX ? '/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/' : '');
}
/**
 * @returns {string}
 */

function socialFacebook() {
  return SERVER_PREFIX + 'SocialFacebook' + ('' !== AUTH_PREFIX ? '/' + SUB_QUERY_PREFIX + '/' + AUTH_PREFIX + '/' : '');
}
/**
 * @param {string} path
 * @returns {string}
 */

function staticPrefix(path) {
  return STATIC_PREFIX + path;
}
/**
 * @returns {string}
 */

function emptyContactPic() {
  return staticPrefix('css/images/empty-contact.png');
}
/**
 * @param {string} fileName
 * @returns {string}
 */

function sound(fileName) {
  return staticPrefix('sounds/' + fileName);
}
/**
 * @returns {string}
 */

function notificationMailIcon() {
  return staticPrefix('css/images/icom-message-notification.png');
}
/**
 * @returns {string}
 */

function openPgpJs() {
  return staticPrefix('js/min/openpgp.min.js');
}
/**
 * @returns {string}
 */

function openPgpWorkerJs() {
  return staticPrefix('js/min/openpgp.worker.min.js');
}
/**
 * @returns {string}
 */

function openPgpWorkerPath() {
  return staticPrefix('js/min/');
}
/**
 * @param {string} theme
 * @returns {string}
 */

function themePreviewLink(theme) {
  var prefix = VERSION_PREFIX;

  if ('@custom' === theme.substr(-7)) {
    theme = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(theme.substring(0, theme.length - 7));
    prefix = WEB_PREFIX;
  }

  return prefix + 'themes/' + window__WEBPACK_IMPORTED_MODULE_2___default.a.encodeURI(theme) + '/images/preview.png';
}
/**
 * @param {string} inboxFolderName = 'INBOX'
 * @returns {string}
 */

function inbox(inboxFolderName) {
  if (inboxFolderName === void 0) {
    inboxFolderName = 'INBOX';
  }

  return HASH_PREFIX + 'mailbox/' + inboxFolderName;
}
/**
 * @param {string=} screenName = ''
 * @returns {string}
 */

function settings(screenName) {
  if (screenName === void 0) {
    screenName = '';
  }

  return HASH_PREFIX + 'settings' + (screenName ? '/' + screenName : '');
}
/**
 * @returns {string}
 */

function about() {
  return HASH_PREFIX + 'about';
}
/**
 * @param {string} screenName
 * @returns {string}
 */

function admin(screenName) {
  var result = HASH_PREFIX;

  switch (screenName) {
    case 'AdminDomains':
      result += 'domains';
      break;

    case 'AdminSecurity':
      result += 'security';
      break;

    case 'AdminLicensing':
      result += 'licensing';
      break;
    // no default
  }

  return result;
}
/**
 * @param {string} folder
 * @param {number=} page = 1
 * @param {string=} search = ''
 * @param {string=} threadUid = ''
 * @returns {string}
 */

function mailBox(folder, page, search, threadUid) {
  if (page === void 0) {
    page = 1;
  }

  if (search === void 0) {
    search = '';
  }

  if (threadUid === void 0) {
    threadUid = '';
  }

  page = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isNormal"])(page) ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pInt"])(page) : 1;
  search = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pString"])(search);
  var result = HASH_PREFIX + 'mailbox/';

  if ('' !== folder) {
    var resultThreadUid = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pInt"])(threadUid);
    result += window__WEBPACK_IMPORTED_MODULE_2___default.a.encodeURI(folder) + (0 < resultThreadUid ? '~' + resultThreadUid : '');
  }

  if (1 < page) {
    result = result.replace(/[/]+$/, '');
    result += '/p' + page;
  }

  if ('' !== search) {
    result = result.replace(/[/]+$/, '');
    result += '/' + window__WEBPACK_IMPORTED_MODULE_2___default.a.encodeURI(search);
  }

  return result;
}

/***/ }),
/* 16 */
/*!*********************************!*\
  !*** ./dev/Remote/User/Ajax.js ***!
  \*********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Base64__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Base64 */ 405);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/User/Settings */ 35);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Remote/AbstractAjax */ 303);















var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(RemoteUserAjax, _AbstractAjaxRemote);

  function RemoteUserAjax() {
    var _this;

    _this = _AbstractAjaxRemote.call(this) || this;
    _this.oRequests = {};
    return _this;
  }
  /**
   * @param {?Function} fCallback
   */


  var _proto = RemoteUserAjax.prototype;

  _proto.folders = function folders(fCallback) {
    this.defaultRequest(fCallback, 'Folders', {
      'SentFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('SentFolder'),
      'DraftFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('DraftFolder'),
      'SpamFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('SpamFolder'),
      'TrashFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('TrashFolder'),
      'ArchiveFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('ArchiveFolder')
    }, null, '', ['Folders']);
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sEmail
   * @param {string} sLogin
   * @param {string} sPassword
   * @param {boolean} bSignMe
   * @param {string=} sLanguage
   * @param {string=} sAdditionalCode
   * @param {boolean=} bAdditionalCodeSignMe
   */
  ;

  _proto.login = function login(fCallback, sEmail, sLogin, sPassword, bSignMe, sLanguage, sAdditionalCode, bAdditionalCodeSignMe) {
    this.defaultRequest(fCallback, 'Login', {
      'Email': sEmail,
      'Login': sLogin,
      'Password': sPassword,
      'Language': sLanguage || '',
      'AdditionalCode': sAdditionalCode || '',
      'AdditionalCodeSignMe': bAdditionalCodeSignMe ? '1' : '0',
      'SignMe': bSignMe ? '1' : '0'
    });
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.getTwoFactor = function getTwoFactor(fCallback) {
    this.defaultRequest(fCallback, 'GetTwoFactorInfo');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.createTwoFactor = function createTwoFactor(fCallback) {
    this.defaultRequest(fCallback, 'CreateTwoFactorSecret');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.clearTwoFactor = function clearTwoFactor(fCallback) {
    this.defaultRequest(fCallback, 'ClearTwoFactorInfo');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.showTwoFactorSecret = function showTwoFactorSecret(fCallback) {
    this.defaultRequest(fCallback, 'ShowTwoFactorSecret');
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sCode
   */
  ;

  _proto.testTwoFactor = function testTwoFactor(fCallback, sCode) {
    this.defaultRequest(fCallback, 'TestTwoFactorInfo', {
      'Code': sCode
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {boolean} bEnable
   */
  ;

  _proto.enableTwoFactor = function enableTwoFactor(fCallback, bEnable) {
    this.defaultRequest(fCallback, 'EnableTwoFactor', {
      'Enable': bEnable ? '1' : '0'
    });
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.clearTwoFactorInfo = function clearTwoFactorInfo(fCallback) {
    this.defaultRequest(fCallback, 'ClearTwoFactorInfo');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.contactsSync = function contactsSync(fCallback) {
    this.defaultRequest(fCallback, 'ContactsSync', null, Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* CONTACTS_SYNC_AJAX_TIMEOUT */ "d"]);
  }
  /**
   * @param {?Function} fCallback
   * @param {boolean} bEnable
   * @param {string} sUrl
   * @param {string} sUser
   * @param {string} sPassword
   */
  ;

  _proto.saveContactsSyncData = function saveContactsSyncData(fCallback, bEnable, sUrl, sUser, sPassword) {
    this.defaultRequest(fCallback, 'SaveContactsSyncData', {
      'Enable': bEnable ? '1' : '0',
      'Url': sUrl,
      'User': sUser,
      'Password': sPassword
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sEmail
   * @param {string} sPassword
   * @param {boolean=} bNew
   */
  ;

  _proto.accountSetup = function accountSetup(fCallback, sEmail, sPassword, bNew) {
    if (bNew === void 0) {
      bNew = true;
    }

    this.defaultRequest(fCallback, 'AccountSetup', {
      'Email': sEmail,
      'Password': sPassword,
      'New': bNew ? '1' : '0'
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sEmailToDelete
   */
  ;

  _proto.accountDelete = function accountDelete(fCallback, sEmailToDelete) {
    this.defaultRequest(fCallback, 'AccountDelete', {
      'EmailToDelete': sEmailToDelete
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {Array} aAccounts
   * @param {Array} aIdentities
   */
  ;

  _proto.accountsAndIdentitiesSortOrder = function accountsAndIdentitiesSortOrder(fCallback, aAccounts, aIdentities) {
    this.defaultRequest(fCallback, 'AccountsAndIdentitiesSortOrder', {
      'Accounts': aAccounts,
      'Identities': aIdentities
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sId
   * @param {string} sEmail
   * @param {string} sName
   * @param {string} sReplyTo
   * @param {string} sBcc
   * @param {string} sSignature
   * @param {boolean} bSignatureInsertBefore
   */
  ;

  _proto.identityUpdate = function identityUpdate(fCallback, sId, sEmail, sName, sReplyTo, sBcc, sSignature, bSignatureInsertBefore) {
    this.defaultRequest(fCallback, 'IdentityUpdate', {
      'Id': sId,
      'Email': sEmail,
      'Name': sName,
      'ReplyTo': sReplyTo,
      'Bcc': sBcc,
      'Signature': sSignature,
      'SignatureInsertBefore': bSignatureInsertBefore ? '1' : '0'
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sIdToDelete
   */
  ;

  _proto.identityDelete = function identityDelete(fCallback, sIdToDelete) {
    this.defaultRequest(fCallback, 'IdentityDelete', {
      'IdToDelete': sIdToDelete
    });
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.accountsAndIdentities = function accountsAndIdentities(fCallback) {
    this.defaultRequest(fCallback, 'AccountsAndIdentities');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.accountsCounts = function accountsCounts(fCallback) {
    this.defaultRequest(fCallback, 'AccountsCounts');
  }
  /**
   * @param {?Function} fCallback
   * @param {Array} filters
   * @param {string} raw
   * @param {boolean} isRawIsActive
   */
  ;

  _proto.filtersSave = function filtersSave(fCallback, filters, raw, isRawIsActive) {
    this.defaultRequest(fCallback, 'FiltersSave', {
      'Raw': raw,
      'RawIsActive': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(isRawIsActive),
      'Filters': _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_3___default.a).call(___WEBPACK_IMPORTED_MODULE_3___default.a, filters, function (item) {
        return item.toJson();
      })
    });
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.filtersGet = function filtersGet(fCallback) {
    this.defaultRequest(fCallback, 'Filters', {});
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.templates = function templates(fCallback) {
    this.defaultRequest(fCallback, 'Templates', {});
  }
  /**
   * @param {Function} fCallback
   * @param {string} sID
   */
  ;

  _proto.templateGetById = function templateGetById(fCallback, sID) {
    this.defaultRequest(fCallback, 'TemplateGetByID', {
      'ID': sID
    });
  }
  /**
   * @param {Function} fCallback
   * @param {string} sID
   */
  ;

  _proto.templateDelete = function templateDelete(fCallback, sID) {
    this.defaultRequest(fCallback, 'TemplateDelete', {
      'IdToDelete': sID
    });
  }
  /**
   * @param {Function} fCallback
   * @param {string} sID
   * @param {string} sName
   * @param {string} sBody
   */
  ;

  _proto.templateSetup = function templateSetup(fCallback, sID, sName, sBody) {
    this.defaultRequest(fCallback, 'TemplateSetup', {
      'ID': sID,
      'Name': sName,
      'Body': sBody
    });
  }
  /**
   * @param {Function} fCallback
   * @param {string} sFolderFullNameRaw
   * @param {number=} iOffset = 0
   * @param {number=} iLimit = 20
   * @param {string=} sSearch = ''
   * @param {string=} sThreadUid = ''
   * @param {boolean=} bSilent = false
   */
  ;

  _proto.messageList = function messageList(fCallback, sFolderFullNameRaw, iOffset, iLimit, sSearch, sThreadUid, bSilent) {
    if (iOffset === void 0) {
      iOffset = 0;
    }

    if (iLimit === void 0) {
      iLimit = 20;
    }

    if (sSearch === void 0) {
      sSearch = '';
    }

    if (sThreadUid === void 0) {
      sThreadUid = '';
    }

    if (bSilent === void 0) {
      bSilent = false;
    }

    sFolderFullNameRaw = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pString"])(sFolderFullNameRaw);
    var folderHash = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getFolderHash */ "g"])(sFolderFullNameRaw),
        useThreads = Stores_User_App__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].threadsAllowed() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].useThreads(),
        inboxUidNext = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getFolderInboxName */ "h"])() === sFolderFullNameRaw ? Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getFolderUidNext */ "i"])(sFolderFullNameRaw) : '';

    if ('' !== folderHash && ('' === sSearch || -1 === sSearch.indexOf('is:'))) {
      return this.defaultRequest(fCallback, 'MessageList', {}, '' === sSearch ? Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* DEFAULT_AJAX_TIMEOUT */ "g"] : Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* SEARCH_AJAX_TIMEOUT */ "m"], 'MessageList/' + Object(Common_Links__WEBPACK_IMPORTED_MODULE_7__[/* subQueryPrefix */ "E"])() + '/' + Common_Base64__WEBPACK_IMPORTED_MODULE_8__[/* urlsafe_encode */ "a"]([sFolderFullNameRaw, iOffset, iLimit, sSearch, Stores_User_App__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].projectHash(), folderHash, inboxUidNext, useThreads ? '1' : '0', useThreads ? sThreadUid : ''].join(String.fromCharCode(0))), bSilent ? [] : ['MessageList']);
    }

    return this.defaultRequest(fCallback, 'MessageList', {
      Folder: sFolderFullNameRaw,
      Offset: iOffset,
      Limit: iLimit,
      Search: sSearch,
      UidNext: inboxUidNext,
      UseThreads: useThreads ? '1' : '0',
      ThreadUid: useThreads ? sThreadUid : ''
    }, '' === sSearch ? Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* DEFAULT_AJAX_TIMEOUT */ "g"] : Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* SEARCH_AJAX_TIMEOUT */ "m"], '', bSilent ? [] : ['MessageList']);
  }
  /**
   * @param {?Function} fCallback
   * @param {Array} aDownloads
   */
  ;

  _proto.messageUploadAttachments = function messageUploadAttachments(fCallback, aDownloads) {
    this.defaultRequest(fCallback, 'MessageUploadAttachments', {
      'Attachments': aDownloads
    }, 999000);
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sFolderFullNameRaw
   * @param {number} iUid
   * @returns {boolean}
   */
  ;

  _proto.message = function message(fCallback, sFolderFullNameRaw, iUid) {
    sFolderFullNameRaw = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pString"])(sFolderFullNameRaw);
    iUid = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pInt"])(iUid);

    if (Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getFolderFromCacheList */ "e"])(sFolderFullNameRaw) && 0 < iUid) {
      this.defaultRequest(fCallback, 'Message', {}, null, 'Message/' + Object(Common_Links__WEBPACK_IMPORTED_MODULE_7__[/* subQueryPrefix */ "E"])() + '/' + Common_Base64__WEBPACK_IMPORTED_MODULE_8__[/* urlsafe_encode */ "a"]([sFolderFullNameRaw, iUid, Stores_User_App__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].projectHash(), Stores_User_App__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].threadsAllowed() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].useThreads() ? '1' : '0'].join(String.fromCharCode(0))), ['Message']);
      return true;
    }

    return false;
  }
  /**
   * @param {?Function} fCallback
   * @param {Array} aExternals
   */
  ;

  _proto.composeUploadExternals = function composeUploadExternals(fCallback, aExternals) {
    this.defaultRequest(fCallback, 'ComposeUploadExternals', {
      'Externals': aExternals
    }, 999000);
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sUrl
   * @param {string} sAccessToken
   */
  ;

  _proto.composeUploadDrive = function composeUploadDrive(fCallback, sUrl, sAccessToken) {
    this.defaultRequest(fCallback, 'ComposeUploadDrive', {
      'AccessToken': sAccessToken,
      'Url': sUrl
    }, 999000);
  }
  /**
   * @param {?Function} fCallback
   * @param {string} folder
   * @param {Array=} list = []
   */
  ;

  _proto.folderInformation = function folderInformation(fCallback, folder, list) {
    if (list === void 0) {
      list = [];
    }

    var request = true;
    var uids = [];

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isArray"])(list) && 0 < list.length) {
      request = false;

      ___WEBPACK_IMPORTED_MODULE_3___default.a.each(list, function (messageListItem) {
        if (!Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getMessageFlagsFromCache */ "j"])(messageListItem.folderFullNameRaw, messageListItem.uid)) {
          uids.push(messageListItem.uid);
        }

        if (0 < messageListItem.threads().length) {
          ___WEBPACK_IMPORTED_MODULE_3___default.a.each(messageListItem.threads(), function (uid) {
            if (!Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getMessageFlagsFromCache */ "j"])(messageListItem.folderFullNameRaw, uid)) {
              uids.push(uid);
            }
          });
        }
      });

      if (0 < uids.length) {
        request = true;
      }
    }

    if (request) {
      this.defaultRequest(fCallback, 'FolderInformation', {
        'Folder': folder,
        'FlagsUids': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isArray"])(uids) ? uids.join(',') : '',
        'UidNext': Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getFolderInboxName */ "h"])() === folder ? Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getFolderUidNext */ "i"])(folder) : ''
      });
    } else if (Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].useThreads()) {
      Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_12__[/* getApp */ "a"])().reloadFlagsCurrentMessageListAndMessageFromCache();
    }
  }
  /**
   * @param {?Function} fCallback
   * @param {Array} aFolders
   */
  ;

  _proto.folderInformationMultiply = function folderInformationMultiply(fCallback, aFolders) {
    this.defaultRequest(fCallback, 'FolderInformationMultiply', {
      'Folders': aFolders
    });
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.logout = function logout(fCallback) {
    this.defaultRequest(fCallback, 'Logout');
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sFolderFullNameRaw
   * @param {Array} aUids
   * @param {boolean} bSetFlagged
   */
  ;

  _proto.messageSetFlagged = function messageSetFlagged(fCallback, sFolderFullNameRaw, aUids, bSetFlagged) {
    this.defaultRequest(fCallback, 'MessageSetFlagged', {
      'Folder': sFolderFullNameRaw,
      'Uids': aUids.join(','),
      'SetAction': bSetFlagged ? '1' : '0'
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sFolderFullNameRaw
   * @param {Array} aUids
   * @param {boolean} bSetSeen
   */
  ;

  _proto.messageSetSeen = function messageSetSeen(fCallback, sFolderFullNameRaw, aUids, bSetSeen) {
    this.defaultRequest(fCallback, 'MessageSetSeen', {
      'Folder': sFolderFullNameRaw,
      'Uids': aUids.join(','),
      'SetAction': bSetSeen ? '1' : '0'
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sFolderFullNameRaw
   * @param {boolean} bSetSeen
   * @param {Array} aThreadUids = null
   */
  ;

  _proto.messageSetSeenToAll = function messageSetSeenToAll(fCallback, sFolderFullNameRaw, bSetSeen, aThreadUids) {
    if (aThreadUids === void 0) {
      aThreadUids = null;
    }

    this.defaultRequest(fCallback, 'MessageSetSeenToAll', {
      'Folder': sFolderFullNameRaw,
      'SetAction': bSetSeen ? '1' : '0',
      'ThreadUids': aThreadUids ? aThreadUids.join(',') : ''
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sIdentityID
   * @param {string} sMessageFolder
   * @param {string} sMessageUid
   * @param {string} sDraftFolder
   * @param {string} sTo
   * @param {string} sCc
   * @param {string} sBcc
   * @param {string} sReplyTo
   * @param {string} sSubject
   * @param {boolean} bTextIsHtml
   * @param {string} sText
   * @param {Array} aAttachments
   * @param {(Array|null)} aDraftInfo
   * @param {string} sInReplyTo
   * @param {string} sReferences
   * @param {boolean} bMarkAsImportant
   */
  ;

  _proto.saveMessage = function saveMessage(fCallback, sIdentityID, sMessageFolder, sMessageUid, sDraftFolder, sTo, sCc, sBcc, sReplyTo, sSubject, bTextIsHtml, sText, aAttachments, aDraftInfo, sInReplyTo, sReferences, bMarkAsImportant) {
    this.defaultRequest(fCallback, 'SaveMessage', {
      'IdentityID': sIdentityID,
      'MessageFolder': sMessageFolder,
      'MessageUid': sMessageUid,
      'DraftFolder': sDraftFolder,
      'To': sTo,
      'Cc': sCc,
      'Bcc': sBcc,
      'ReplyTo': sReplyTo,
      'Subject': sSubject,
      'TextIsHtml': bTextIsHtml ? '1' : '0',
      'Text': sText,
      'DraftInfo': aDraftInfo,
      'InReplyTo': sInReplyTo,
      'References': sReferences,
      'MarkAsImportant': bMarkAsImportant ? '1' : '0',
      'Attachments': aAttachments
    }, Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* SAVE_MESSAGE_AJAX_TIMEOUT */ "l"]);
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sMessageFolder
   * @param {string} sMessageUid
   * @param {string} sReadReceipt
   * @param {string} sSubject
   * @param {string} sText
   */
  ;

  _proto.sendReadReceiptMessage = function sendReadReceiptMessage(fCallback, sMessageFolder, sMessageUid, sReadReceipt, sSubject, sText) {
    this.defaultRequest(fCallback, 'SendReadReceiptMessage', {
      'MessageFolder': sMessageFolder,
      'MessageUid': sMessageUid,
      'ReadReceipt': sReadReceipt,
      'Subject': sSubject,
      'Text': sText
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sIdentityID
   * @param {string} sMessageFolder
   * @param {string} sMessageUid
   * @param {string} sSentFolder
   * @param {string} sTo
   * @param {string} sCc
   * @param {string} sBcc
   * @param {string} sReplyTo
   * @param {string} sSubject
   * @param {boolean} bTextIsHtml
   * @param {string} sText
   * @param {Array} aAttachments
   * @param {(Array|null)} aDraftInfo
   * @param {string} sInReplyTo
   * @param {string} sReferences
   * @param {boolean} bRequestDsn
   * @param {boolean} bRequestReadReceipt
   * @param {boolean} bMarkAsImportant
   */
  ;

  _proto.sendMessage = function sendMessage(fCallback, sIdentityID, sMessageFolder, sMessageUid, sSentFolder, sTo, sCc, sBcc, sReplyTo, sSubject, bTextIsHtml, sText, aAttachments, aDraftInfo, sInReplyTo, sReferences, bRequestDsn, bRequestReadReceipt, bMarkAsImportant) {
    this.defaultRequest(fCallback, 'SendMessage', {
      'IdentityID': sIdentityID,
      'MessageFolder': sMessageFolder,
      'MessageUid': sMessageUid,
      'SentFolder': sSentFolder,
      'To': sTo,
      'Cc': sCc,
      'Bcc': sBcc,
      'ReplyTo': sReplyTo,
      'Subject': sSubject,
      'TextIsHtml': bTextIsHtml ? '1' : '0',
      'Text': sText,
      'DraftInfo': aDraftInfo,
      'InReplyTo': sInReplyTo,
      'References': sReferences,
      'Dsn': bRequestDsn ? '1' : '0',
      'ReadReceiptRequest': bRequestReadReceipt ? '1' : '0',
      'MarkAsImportant': bMarkAsImportant ? '1' : '0',
      'Attachments': aAttachments
    }, Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* SEND_MESSAGE_AJAX_TIMEOUT */ "n"]);
  }
  /**
   * @param {?Function} fCallback
   * @param {Object} oData
   */
  ;

  _proto.saveSystemFolders = function saveSystemFolders(fCallback, oData) {
    this.defaultRequest(fCallback, 'SystemFoldersUpdate', oData);
  }
  /**
   * @param {?Function} fCallback
   * @param {Object} oData
   */
  ;

  _proto.saveSettings = function saveSettings(fCallback, oData) {
    this.defaultRequest(fCallback, 'SettingsUpdate', oData);
  }
  /**
   * @param {string} key
   * @param {?Function} valueFn
   * @param {?Function} fn
   */
  ;

  _proto.saveSettingsHelper = function saveSettingsHelper(key, valueFn, fn) {
    var _this2 = this;

    return function (value) {
      var _this2$saveSettings;

      _this2.saveSettings(fn || null, (_this2$saveSettings = {}, _this2$saveSettings[key] = valueFn ? valueFn(value) : value, _this2$saveSettings));
    };
  }
  /**
   * @param {?Function} fCallback
   * @param {string} prevPassword
   * @param {string} newPassword
   */
  ;

  _proto.changePassword = function changePassword(fCallback, prevPassword, newPassword) {
    this.defaultRequest(fCallback, 'ChangePassword', {
      'PrevPassword': prevPassword,
      'NewPassword': newPassword
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sFolderFullNameRaw
   */
  ;

  _proto.folderClear = function folderClear(fCallback, sFolderFullNameRaw) {
    this.defaultRequest(fCallback, 'FolderClear', {
      'Folder': sFolderFullNameRaw
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sFolderFullNameRaw
   * @param {boolean} bSubscribe
   */
  ;

  _proto.folderSetSubscribe = function folderSetSubscribe(fCallback, sFolderFullNameRaw, bSubscribe) {
    this.defaultRequest(fCallback, 'FolderSubscribe', {
      'Folder': sFolderFullNameRaw,
      'Subscribe': bSubscribe ? '1' : '0'
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sFolderFullNameRaw
   * @param {boolean} bCheckable
   */
  ;

  _proto.folderSetCheckable = function folderSetCheckable(fCallback, sFolderFullNameRaw, bCheckable) {
    this.defaultRequest(fCallback, 'FolderCheckable', {
      'Folder': sFolderFullNameRaw,
      'Checkable': bCheckable ? '1' : '0'
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sFolder
   * @param {string} sToFolder
   * @param {Array} aUids
   * @param {string=} sLearning
   * @param {boolean=} bMarkAsRead
   */
  ;

  _proto.messagesMove = function messagesMove(fCallback, sFolder, sToFolder, aUids, sLearning, bMarkAsRead) {
    this.defaultRequest(fCallback, 'MessageMove', {
      'FromFolder': sFolder,
      'ToFolder': sToFolder,
      'Uids': aUids.join(','),
      'MarkAsRead': bMarkAsRead ? '1' : '0',
      'Learning': sLearning || ''
    }, null, '', ['MessageList']);
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sFolder
   * @param {string} sToFolder
   * @param {Array} aUids
   */
  ;

  _proto.messagesCopy = function messagesCopy(fCallback, sFolder, sToFolder, aUids) {
    this.defaultRequest(fCallback, 'MessageCopy', {
      'FromFolder': sFolder,
      'ToFolder': sToFolder,
      'Uids': aUids.join(',')
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sFolder
   * @param {Array} aUids
   */
  ;

  _proto.messagesDelete = function messagesDelete(fCallback, sFolder, aUids) {
    this.defaultRequest(fCallback, 'MessageDelete', {
      'Folder': sFolder,
      'Uids': aUids.join(',')
    }, null, '', ['MessageList']);
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.appDelayStart = function appDelayStart(fCallback) {
    this.defaultRequest(fCallback, 'AppDelayStart');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.quota = function quota(fCallback) {
    this.defaultRequest(fCallback, 'Quota');
  }
  /**
   * @param {?Function} fCallback
   * @param {number} iOffset
   * @param {number} iLimit
   * @param {string} sSearch
   */
  ;

  _proto.contacts = function contacts(fCallback, iOffset, iLimit, sSearch) {
    this.defaultRequest(fCallback, 'Contacts', {
      'Offset': iOffset,
      'Limit': iLimit,
      'Search': sSearch
    }, null, '', ['Contacts']);
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sRequestUid
   * @param {string} sUid
   * @param {Array} aProperties
   */
  ;

  _proto.contactSave = function contactSave(fCallback, sRequestUid, sUid, aProperties) {
    this.defaultRequest(fCallback, 'ContactSave', {
      'RequestUid': sRequestUid,
      'Uid': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["trim"])(sUid),
      'Properties': aProperties
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {Array} aUids
   */
  ;

  _proto.contactsDelete = function contactsDelete(fCallback, aUids) {
    this.defaultRequest(fCallback, 'ContactsDelete', {
      'Uids': aUids.join(',')
    });
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sQuery
   * @param {number} iPage
   */
  ;

  _proto.suggestions = function suggestions(fCallback, sQuery, iPage) {
    this.defaultRequest(fCallback, 'Suggestions', {
      'Query': sQuery,
      'Page': iPage
    }, null, '', ['Suggestions']);
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.clearUserBackground = function clearUserBackground(fCallback) {
    this.defaultRequest(fCallback, 'ClearUserBackground');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.facebookUser = function facebookUser(fCallback) {
    this.defaultRequest(fCallback, 'SocialFacebookUserInformation');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.facebookDisconnect = function facebookDisconnect(fCallback) {
    this.defaultRequest(fCallback, 'SocialFacebookDisconnect');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.twitterUser = function twitterUser(fCallback) {
    this.defaultRequest(fCallback, 'SocialTwitterUserInformation');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.twitterDisconnect = function twitterDisconnect(fCallback) {
    this.defaultRequest(fCallback, 'SocialTwitterDisconnect');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.googleUser = function googleUser(fCallback) {
    this.defaultRequest(fCallback, 'SocialGoogleUserInformation');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.googleDisconnect = function googleDisconnect(fCallback) {
    this.defaultRequest(fCallback, 'SocialGoogleDisconnect');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.socialUsers = function socialUsers(fCallback) {
    this.defaultRequest(fCallback, 'SocialUsers');
  };

  return RemoteUserAjax;
}(Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_13__[/* AbstractAjaxRemote */ "a"]);

/* harmony default export */ __webpack_exports__["a"] = (new RemoteUserAjax());

/***/ }),
/* 17 */
/*!****************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js ***!
  \****************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 348);

/***/ }),
/* 18 */,
/* 19 */
/*!*************************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor.js ***!
  \*************************************************************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _applyDecoratedDescriptor; });
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/instance/for-each */ 297);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/object/keys */ 298);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_keys__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_object_keys__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/instance/reduce */ 299);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/instance/reverse */ 300);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_slice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/instance/slice */ 301);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_slice__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_slice__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/object/define-property */ 302);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_5__);






function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
  var _context, _context2, _context3;

  var desc = {};

  _babel_runtime_corejs3_core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default()(_context = _babel_runtime_corejs3_core_js_object_keys__WEBPACK_IMPORTED_MODULE_1___default()(descriptor)).call(_context, function (key) {
    desc[key] = descriptor[key];
  });

  desc.enumerable = !!desc.enumerable;
  desc.configurable = !!desc.configurable;

  if ('value' in desc || desc.initializer) {
    desc.writable = true;
  }

  desc = _babel_runtime_corejs3_core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_2___default()(_context2 = _babel_runtime_corejs3_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_3___default()(_context3 = _babel_runtime_corejs3_core_js_instance_slice__WEBPACK_IMPORTED_MODULE_4___default()(decorators).call(decorators)).call(_context3)).call(_context2, function (desc, decorator) {
    return decorator(target, property, desc) || desc;
  }, desc);

  if (context && desc.initializer !== void 0) {
    desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
    desc.initializer = undefined;
  }

  if (desc.initializer === void 0) {
    _babel_runtime_corejs3_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_5___default()(target, property, desc);

    desc = null;
  }

  return desc;
}

/***/ }),
/* 20 */
/*!**************************************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js ***!
  \**************************************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-property-descriptor */ 389);

/***/ }),
/* 21 */
/*!*****************************!*\
  !*** external "window.key" ***!
  \*****************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.key;

/***/ }),
/* 22 */
/*!*********************************!*\
  !*** ./dev/Helper/Apps/User.js ***!
  \*********************************/
/*! exports provided: getApp */
/*! exports used: getApp */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getApp; });
/**
 * @returns {AppUser}
 */
function getApp() {
  return __webpack_require__(/*! App/User */ 402).default;
}

/***/ }),
/* 23 */
/*!******************************!*\
  !*** ./dev/Common/Events.js ***!
  \******************************/
/*! exports provided: sub, pub */
/*! exports used: pub, sub */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return sub; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return pub; });
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Plugins */ 36);



var SUBS = {};
/**
 * @param {string|Object} name
 * @param {Function} func
 * @param {Object=} context
 */

function sub(name, func, context) {
  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isObject"])(name)) {
    context = func || null;
    func = null;

    ___WEBPACK_IMPORTED_MODULE_0___default.a.each(name, function (subFunc, subName) {
      sub(subName, subFunc, context);
    });
  } else {
    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(SUBS[name])) {
      SUBS[name] = [];
    }

    SUBS[name].push([func, context]);
  }
}
/**
 * @param {string} name
 * @param {Array=} args
 */

function pub(name, args) {
  Common_Plugins__WEBPACK_IMPORTED_MODULE_2__[/* runHook */ "f"]('rl-pub', [name, args]);

  if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(SUBS[name])) {
    ___WEBPACK_IMPORTED_MODULE_0___default.a.each(SUBS[name], function (items) {
      if (items[0]) {
        items[0].apply(items[1] || null, args || []);
      }
    });
  }
}

/***/ }),
/* 24 */
/*!******************************!*\
  !*** ./dev/Common/Consts.js ***!
  \******************************/
/*! exports provided: MESSAGES_PER_PAGE, MESSAGES_PER_PAGE_VALUES, CONTACTS_PER_PAGE, DEFAULT_AJAX_TIMEOUT, SEARCH_AJAX_TIMEOUT, SEND_MESSAGE_AJAX_TIMEOUT, SAVE_MESSAGE_AJAX_TIMEOUT, CONTACTS_SYNC_AJAX_TIMEOUT, UNUSED_OPTION_VALUE, CLIENT_SIDE_STORAGE_INDEX_NAME, IMAP_DEFAULT_PORT, IMAP_DEFAULT_SECURE_PORT, SMTP_DEFAULT_PORT, SMTP_DEFAULT_SECURE_PORT, SIEVE_DEFAULT_PORT, MESSAGE_BODY_CACHE_LIMIT, AJAX_ERROR_LIMIT, TOKEN_ERROR_LIMIT, RAINLOOP_TRIAL_KEY, DATA_IMAGE_USER_DOT_PIC, DATA_IMAGE_TRANSP_PIC, DATA_IMAGE_LAZY_PLACEHOLDER_PIC */
/*! exports used: AJAX_ERROR_LIMIT, CLIENT_SIDE_STORAGE_INDEX_NAME, CONTACTS_PER_PAGE, CONTACTS_SYNC_AJAX_TIMEOUT, DATA_IMAGE_LAZY_PLACEHOLDER_PIC, DATA_IMAGE_USER_DOT_PIC, DEFAULT_AJAX_TIMEOUT, IMAP_DEFAULT_PORT, MESSAGES_PER_PAGE, MESSAGES_PER_PAGE_VALUES, MESSAGE_BODY_CACHE_LIMIT, SAVE_MESSAGE_AJAX_TIMEOUT, SEARCH_AJAX_TIMEOUT, SEND_MESSAGE_AJAX_TIMEOUT, SIEVE_DEFAULT_PORT, SMTP_DEFAULT_PORT, TOKEN_ERROR_LIMIT, UNUSED_OPTION_VALUE */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return MESSAGES_PER_PAGE; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return MESSAGES_PER_PAGE_VALUES; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return CONTACTS_PER_PAGE; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return DEFAULT_AJAX_TIMEOUT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return SEARCH_AJAX_TIMEOUT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return SEND_MESSAGE_AJAX_TIMEOUT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return SAVE_MESSAGE_AJAX_TIMEOUT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return CONTACTS_SYNC_AJAX_TIMEOUT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return UNUSED_OPTION_VALUE; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return CLIENT_SIDE_STORAGE_INDEX_NAME; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return IMAP_DEFAULT_PORT; });
/* unused harmony export IMAP_DEFAULT_SECURE_PORT */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return SMTP_DEFAULT_PORT; });
/* unused harmony export SMTP_DEFAULT_SECURE_PORT */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return SIEVE_DEFAULT_PORT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return MESSAGE_BODY_CACHE_LIMIT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AJAX_ERROR_LIMIT; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return TOKEN_ERROR_LIMIT; });
/* unused harmony export RAINLOOP_TRIAL_KEY */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return DATA_IMAGE_USER_DOT_PIC; });
/* unused harmony export DATA_IMAGE_TRANSP_PIC */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return DATA_IMAGE_LAZY_PLACEHOLDER_PIC; });
var MESSAGES_PER_PAGE = 20;
var MESSAGES_PER_PAGE_VALUES = [10, 20, 30, 50, 100];
var CONTACTS_PER_PAGE = 50;
var DEFAULT_AJAX_TIMEOUT = 30000;
var SEARCH_AJAX_TIMEOUT = 300000;
var SEND_MESSAGE_AJAX_TIMEOUT = 300000;
var SAVE_MESSAGE_AJAX_TIMEOUT = 200000;
var CONTACTS_SYNC_AJAX_TIMEOUT = 200000;
var UNUSED_OPTION_VALUE = '__UNUSE__';
var CLIENT_SIDE_STORAGE_INDEX_NAME = 'rlcsc';
var IMAP_DEFAULT_PORT = 143;
var IMAP_DEFAULT_SECURE_PORT = 993;
var SMTP_DEFAULT_PORT = 25;
var SMTP_DEFAULT_SECURE_PORT = 465;
var SIEVE_DEFAULT_PORT = 4190;
var MESSAGE_BODY_CACHE_LIMIT = 15;
var AJAX_ERROR_LIMIT = 7;
var TOKEN_ERROR_LIMIT = 10;
var RAINLOOP_TRIAL_KEY = 'RAINLOOP-TRIAL-KEY';
/* eslint max-len: 0 */

var DATA_IMAGE_USER_DOT_PIC = 'data:image/png;base64,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';
var DATA_IMAGE_TRANSP_PIC = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2NkAAIAAAoAAggA9GkAAAAASUVORK5CYII=';
var DATA_IMAGE_LAZY_PLACEHOLDER_PIC = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC';

/***/ }),
/* 25 */
/*!***************************************!*\
  !*** ./dev/Knoin/AbstractViewNext.js ***!
  \***************************************/
/*! exports provided: AbstractViewNext */
/*! exports used: AbstractViewNext */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractViewNext; });
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Globals */ 6);




var AbstractViewNext = /*#__PURE__*/function () {
  function AbstractViewNext() {
    this.bDisabeCloseOnEsc = false;
    this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_2__["KeyState"].None;
    this.sCurrentKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_2__["KeyState"].None;
    this.viewModelVisibility = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.modalVisibility = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
      rateLimit: 0
    });
    this.viewModelName = '';
    this.viewModelNames = [];
    this.viewModelDom = null;
  }

  var _proto = AbstractViewNext.prototype;

  /**
   * @returns {void}
   */
  _proto.storeAndSetKeyScope = function storeAndSetKeyScope() {
    this.sCurrentKeyScope = Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["keyScope"])();
    Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["keyScope"])(this.sDefaultKeyScope);
  }
  /**
   * @returns {void}
   */
  ;

  _proto.restoreKeyScope = function restoreKeyScope() {
    Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["keyScope"])(this.sCurrentKeyScope);
  }
  /**
   * @returns {void}
   */
  ;

  _proto.registerPopupKeyDown = function registerPopupKeyDown() {
    var _this = this;

    Common_Globals__WEBPACK_IMPORTED_MODULE_3__["$win"].on('keydown', function (event) {
      if (event && _this.modalVisibility && _this.modalVisibility()) {
        if (!_this.bDisabeCloseOnEsc && Common_Enums__WEBPACK_IMPORTED_MODULE_2__["EventKeyCode"].Esc === event.keyCode) {
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["delegateRun"])(_this, 'cancelCommand');
          return false;
        } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_2__["EventKeyCode"].Backspace === event.keyCode && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["inFocus"])()) {
          return false;
        }
      }

      return true;
    });
  };

  _proto.cancelCommand = function cancelCommand() {} // eslint-disable-line no-empty-function
  ;

  _proto.closeCommand = function closeCommand() {} // eslint-disable-line no-empty-function
  ;

  return AbstractViewNext;
}();

/***/ }),
/* 26 */
/*!******************************!*\
  !*** ./dev/Stores/Social.js ***!
  \******************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Storage/Settings */ 5);





var SocialStore = /*#__PURE__*/function () {
  function SocialStore() {
    var _this = this;

    this.google = {};
    this.twitter = {};
    this.facebook = {};
    this.dropbox = {}; // Google

    this.google.enabled = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.google.clientID = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.google.clientSecret = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.google.apiKey = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.google.loading = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.google.userName = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.google.loggined = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return '' !== _this.google.userName();
    });
    this.google.capa = {};
    this.google.capa.auth = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.google.capa.authGmail = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.google.capa.drive = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.google.capa.preview = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.google.require = {};
    this.google.require.clientSettings = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return _this.google.enabled() && (_this.google.capa.auth() || _this.google.capa.authGmail() || _this.google.capa.drive());
    });
    this.google.require.apiKeySettings = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return _this.google.enabled() && _this.google.capa.drive();
    }); // Facebook

    this.facebook.enabled = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.facebook.appID = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.facebook.appSecret = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.facebook.loading = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.facebook.userName = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.facebook.supported = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.facebook.loggined = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return '' !== _this.facebook.userName();
    }); // Twitter

    this.twitter.enabled = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.twitter.consumerKey = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.twitter.consumerSecret = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.twitter.loading = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.twitter.userName = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.twitter.loggined = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return '' !== _this.twitter.userName();
    }); // Dropbox

    this.dropbox.enabled = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    this.dropbox.apiKey = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
  }

  var _proto = SocialStore.prototype;

  _proto.populate = function populate() {
    this.google.enabled(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowGoogleSocial'));
    this.google.clientID(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('GoogleClientID'));
    this.google.clientSecret(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('GoogleClientSecret'));
    this.google.apiKey(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('GoogleApiKey'));
    this.google.capa.auth(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowGoogleSocialAuth'));
    this.google.capa.authGmail(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowGoogleSocialAuthGmail'));
    this.google.capa.drive(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowGoogleSocialDrive'));
    this.google.capa.preview(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowGoogleSocialPreview'));
    this.facebook.enabled(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowFacebookSocial'));
    this.facebook.appID(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('FacebookAppID'));
    this.facebook.appSecret(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('FacebookAppSecret'));
    this.facebook.supported(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('SupportedFacebookSocial'));
    this.twitter.enabled = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowTwitterSocial'));
    this.twitter.consumerKey = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('TwitterConsumerKey'));
    this.twitter.consumerSecret = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('TwitterConsumerSecret'));
    this.dropbox.enabled(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('AllowDropboxSocial'));
    this.dropbox.apiKey(Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('DropboxApiKey'));
  };

  _proto.appendDropbox = function appendDropbox() {
    if (!window__WEBPACK_IMPORTED_MODULE_0___default.a.Dropbox && this.dropbox.enabled() && this.dropbox.apiKey()) {
      if (!window__WEBPACK_IMPORTED_MODULE_0___default.a.document.getElementById('dropboxjs')) {
        var script = window__WEBPACK_IMPORTED_MODULE_0___default.a.document.createElement('script');
        script.type = 'text/javascript';
        script.src = 'https://www.dropbox.com/static/api/2/dropins.js';
        $__WEBPACK_IMPORTED_MODULE_2___default()(script).attr('id', 'dropboxjs').attr('data-app-key', this.dropbox.apiKey());
        window__WEBPACK_IMPORTED_MODULE_0___default.a.document.body.appendChild(script);
      }
    }
  };

  return SocialStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new SocialStore());

/***/ }),
/* 27 */
/*!********************************!*\
  !*** ./dev/Stores/User/App.js ***!
  \********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_AbstractApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/AbstractApp */ 296);








var AppUserStore = /*#__PURE__*/function (_AbstractAppStore) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AppUserStore, _AbstractAppStore);

  function AppUserStore() {
    var _this;

    _this = _AbstractAppStore.call(this) || this;
    _this.currentAudio = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    _this.focusedState = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Focused"].None);
    var isMobile = Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["appSettingsGet"]('mobile');

    _this.focusedState.subscribe(function (value) {
      switch (value) {
        case Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Focused"].MessageList:
          Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["keyScope"])(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["KeyState"].MessageList);

          if (isMobile) {
            Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["leftPanelDisabled"])(true);
          }

          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Focused"].MessageView:
          Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["keyScope"])(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["KeyState"].MessageView);

          if (isMobile) {
            Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["leftPanelDisabled"])(true);
          }

          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Focused"].FolderList:
          Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["keyScope"])(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["KeyState"].FolderList);

          if (isMobile) {
            Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["leftPanelDisabled"])(false);
          }

          break;

        default:
          break;
      }
    });

    _this.projectHash = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    _this.threadsAllowed = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    _this.composeInEdit = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    _this.contactsAutosave = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    _this.useLocalProxyForExternalImages = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    _this.contactsIsAllowed = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    _this.attachmentsActions = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observableArray([]);
    _this.devEmail = '';
    _this.devPassword = '';
    return _this;
  }

  var _proto = AppUserStore.prototype;

  _proto.populate = function populate() {
    _AbstractAppStore.prototype.populate.call(this);

    this.projectHash(Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["settingsGet"]('ProjectHash'));
    this.contactsAutosave(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["settingsGet"]('ContactsAutosave'));
    this.useLocalProxyForExternalImages(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["settingsGet"]('UseLocalProxyForExternalImages'));
    this.contactsIsAllowed(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["settingsGet"]('ContactsIsAllowed'));
    var attachmentsActions = Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["appSettingsGet"]('attachmentsActions');
    this.attachmentsActions(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isNonEmptyArray"])(attachmentsActions) ? attachmentsActions : []);
    this.devEmail = Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["settingsGet"]('DevEmail');
    this.devPassword = Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["settingsGet"]('DevPassword');
  };

  return AppUserStore;
}(Stores_AbstractApp__WEBPACK_IMPORTED_MODULE_6__[/* AbstractAppStore */ "a"]);

/* harmony default export */ __webpack_exports__["a"] = (new AppUserStore());

/***/ }),
/* 28 */
/*!*******************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js ***!
  \*******************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ 358);

/***/ }),
/* 29 */
/*!**********************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/assertThisInitialized.js ***!
  \**********************************************************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _assertThisInitialized; });
function _assertThisInitialized(self) {
  if (self === void 0) {
    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  }

  return self;
}

/***/ }),
/* 30 */
/*!**************************************************!*\
  !*** ./node_modules/core-js/internals/global.js ***!
  \**************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(global) {var check = function (it) {
  return it && it.Math == Math && it;
};

// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
module.exports =
  // eslint-disable-next-line es/no-global-this -- safe
  check(typeof globalThis == 'object' && globalThis) ||
  check(typeof window == 'object' && window) ||
  // eslint-disable-next-line no-restricted-globals -- safe
  check(typeof self == 'object' && self) ||
  check(typeof global == 'object' && global) ||
  // eslint-disable-next-line no-new-func -- fallback
  (function () { return this; })() || Function('return this')();

/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 126)))

/***/ }),
/* 31 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/internals/global.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(global) {var check = function (it) {
  return it && it.Math == Math && it;
};

// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
module.exports =
  // eslint-disable-next-line no-undef
  check(typeof globalThis == 'object' && globalThis) ||
  check(typeof window == 'object' && window) ||
  check(typeof self == 'object' && self) ||
  check(typeof global == 'object' && global) ||
  // eslint-disable-next-line no-new-func
  (function () { return this; })() || Function('return this')();

/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 126)))

/***/ }),
/* 32 */
/*!***********************************!*\
  !*** ./dev/Component/Abstract.js ***!
  \***********************************/
/*! exports provided: AbstractComponent, componentExportHelper */
/*! exports used: AbstractComponent, componentExportHelper */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractComponent; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return componentExportHelper; });
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ 151);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9);






var AbstractComponent = /*#__PURE__*/function () {
  function AbstractComponent() {
    this.disposable = [];
  }

  var _proto = AbstractComponent.prototype;

  _proto.dispose = function dispose() {
    this.disposable.forEach(function (funcToDispose) {
      if (funcToDispose && funcToDispose.dispose) {
        funcToDispose.dispose();
      }
    });
  };

  return AbstractComponent;
}();
/**
 * @param {*} ClassObject
 * @param {string} templateID = ''
 * @returns {Object}
 */


var componentExportHelper = function componentExportHelper(ClassObject, templateID) {
  if (templateID === void 0) {
    templateID = '';
  }

  return {
    template: templateID ? {
      element: templateID
    } : '<b></b>',
    viewModel: {
      createViewModel: function createViewModel(params, componentInfo) {
        params = params || {};
        params.element = null;

        if (componentInfo && componentInfo.element) {
          params.component = componentInfo;
          params.element = $__WEBPACK_IMPORTED_MODULE_1___default()(componentInfo.element);
          Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18nToNodes"])(params.element);

          if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isUnd"])(params.inline) && ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].unwrap(params.inline)) {
            params.element.css('display', 'inline-block');
          }
        }

        return new ClassObject(params);
      }
    }
  };
};



/***/ }),
/* 33 */
/*!***************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/set-timeout.js ***!
  \***************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/set-timeout */ 248);

/***/ }),
/* 34 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/internals/export.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var global = __webpack_require__(/*! ../internals/global */ 31);
var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 157).f;
var isForced = __webpack_require__(/*! ../internals/is-forced */ 187);
var path = __webpack_require__(/*! ../internals/path */ 51);
var bind = __webpack_require__(/*! ../internals/function-bind-context */ 116);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var has = __webpack_require__(/*! ../internals/has */ 54);

var wrapConstructor = function (NativeConstructor) {
  var Wrapper = function (a, b, c) {
    if (this instanceof NativeConstructor) {
      switch (arguments.length) {
        case 0: return new NativeConstructor();
        case 1: return new NativeConstructor(a);
        case 2: return new NativeConstructor(a, b);
      } return new NativeConstructor(a, b, c);
    } return NativeConstructor.apply(this, arguments);
  };
  Wrapper.prototype = NativeConstructor.prototype;
  return Wrapper;
};

/*
  options.target      - name of the target object
  options.global      - target is the global object
  options.stat        - export as static methods of target
  options.proto       - export as prototype methods of target
  options.real        - real prototype method for the `pure` version
  options.forced      - export even if the native feature is available
  options.bind        - bind methods to the target, required for the `pure` version
  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version
  options.unsafe      - use the simple assignment of property instead of delete + defineProperty
  options.sham        - add a flag to not completely full polyfills
  options.enumerable  - export as enumerable property
  options.noTargetGet - prevent calling a getter on target
*/
module.exports = function (options, source) {
  var TARGET = options.target;
  var GLOBAL = options.global;
  var STATIC = options.stat;
  var PROTO = options.proto;

  var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;

  var target = GLOBAL ? path : path[TARGET] || (path[TARGET] = {});
  var targetPrototype = target.prototype;

  var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;
  var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;

  for (key in source) {
    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
    // contains in native
    USE_NATIVE = !FORCED && nativeSource && has(nativeSource, key);

    targetProperty = target[key];

    if (USE_NATIVE) if (options.noTargetGet) {
      descriptor = getOwnPropertyDescriptor(nativeSource, key);
      nativeProperty = descriptor && descriptor.value;
    } else nativeProperty = nativeSource[key];

    // export native or implementation
    sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];

    if (USE_NATIVE && typeof targetProperty === typeof sourceProperty) continue;

    // bind timers to global for call from export context
    if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);
    // wrap global constructors for prevent changs in this version
    else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);
    // make static versions for prototype methods
    else if (PROTO && typeof sourceProperty == 'function') resultProperty = bind(Function.call, sourceProperty);
    // default case
    else resultProperty = sourceProperty;

    // add a flag to not completely full polyfills
    if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {
      createNonEnumerableProperty(resultProperty, 'sham', true);
    }

    target[key] = resultProperty;

    if (PROTO) {
      VIRTUAL_PROTOTYPE = TARGET + 'Prototype';
      if (!has(path, VIRTUAL_PROTOTYPE)) {
        createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});
      }
      // export virtual prototype methods
      path[VIRTUAL_PROTOTYPE][key] = sourceProperty;
      // export real prototype methods
      if (options.real && targetPrototype && !targetPrototype[key]) {
        createNonEnumerableProperty(targetPrototype, key, sourceProperty);
      }
    }
  }
};


/***/ }),
/* 35 */
/*!*************************************!*\
  !*** ./dev/Stores/User/Settings.js ***!
  \*************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Events */ 23);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Storage/Settings */ 5);










var SettingsUserStore = /*#__PURE__*/function () {
  function SettingsUserStore() {
    this.iAutoLogoutTimer = 0;
    this.layout = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].SidePreview).extend({
      limitedList: [Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].SidePreview, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].BottomPreview, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].NoPreview]
    });
    this.editorDefaultType = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["EditorDefaultType"].Html).extend({
      limitedList: [Common_Enums__WEBPACK_IMPORTED_MODULE_4__["EditorDefaultType"].Html, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["EditorDefaultType"].Plain, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["EditorDefaultType"].HtmlForced, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["EditorDefaultType"].PlainForced]
    });
    this.messagesPerPage = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* MESSAGES_PER_PAGE */ "i"]).extend({
      limitedList: Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* MESSAGES_PER_PAGE_VALUES */ "j"]
    });
    this.showImages = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    this.useCheckboxesInList = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(true);
    this.allowDraftAutosave = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(true);
    this.useThreads = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    this.replySameFolder = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    this.autoLogout = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time30mInMin);
    this.computers();
    this.subscribers();
  }

  var _proto = SettingsUserStore.prototype;

  _proto.computers = function computers() {
    var _this = this;

    this.usePreviewPane = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].NoPreview !== _this.layout();
    });
  };

  _proto.subscribers = function subscribers() {
    this.layout.subscribe(function (value) {
      Common_Globals__WEBPACK_IMPORTED_MODULE_5__["$html"].toggleClass('rl-no-preview-pane', Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].NoPreview === value);
      Common_Globals__WEBPACK_IMPORTED_MODULE_5__["$html"].toggleClass('rl-side-preview-pane', Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].SidePreview === value);
      Common_Globals__WEBPACK_IMPORTED_MODULE_5__["$html"].toggleClass('rl-bottom-preview-pane', Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Layout"].BottomPreview === value);
      Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* pub */ "a"]('layout', [value]);
    });
  };

  _proto.populate = function populate() {
    var _this2 = this;

    this.layout(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["pInt"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('Layout')));
    this.editorDefaultType(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('EditorDefaultType'));
    this.autoLogout(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["pInt"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('AutoLogout')));
    this.messagesPerPage(Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('MPP'));
    this.showImages(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('ShowImages'));
    this.useCheckboxesInList(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('UseCheckboxesInList'));
    this.allowDraftAutosave(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('AllowDraftAutosave'));
    this.useThreads(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('UseThreads'));
    this.replySameFolder(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('ReplySameFolder'));
    Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* sub */ "b"]('rl.auto-logout-refresh', function () {
      window__WEBPACK_IMPORTED_MODULE_1___default.a.clearTimeout(_this2.iAutoLogoutTimer);

      if (0 < _this2.autoLogout() && !Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('AccountSignMe')) {
        _this2.iAutoLogoutTimer = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0___default()(function () {
          Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* pub */ "a"]('rl.auto-logout');
        }, _this2.autoLogout() * Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time1m);
      }
    });
    Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* pub */ "a"]('rl.auto-logout-refresh');
  };

  return SettingsUserStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new SettingsUserStore());

/***/ }),
/* 36 */
/*!*******************************!*\
  !*** ./dev/Common/Plugins.js ***!
  \*******************************/
/*! exports provided: addHook, runHook, mainSettingsGet, remoteRequest, addSettingsViewModel, addSettingsViewModelForAdmin, runSettingsViewModelHooks, settingsGet */
/*! exports used: addHook, addSettingsViewModel, addSettingsViewModelForAdmin, mainSettingsGet, remoteRequest, runHook, runSettingsViewModelHooks, settingsGet */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return addHook; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return runHook; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return mainSettingsGet; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return remoteRequest; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return addSettingsViewModel; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return addSettingsViewModelForAdmin; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return runSettingsViewModelHooks; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return settingsGet; });
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Storage/Settings */ 5);




var SIMPLE_HOOKS = {},
    USER_VIEW_MODELS_HOOKS = [],
    ADMIN_VIEW_MODELS_HOOKS = [];
/**
 * @param {string} name
 * @param {Function} callback
 */

function addHook(name, callback) {
  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isFunc"])(callback)) {
    if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(SIMPLE_HOOKS[name])) {
      SIMPLE_HOOKS[name] = [];
    }

    SIMPLE_HOOKS[name].push(callback);
  }
}
/**
 * @param {string} name
 * @param {Array=} args = []
 */

function runHook(name, args) {
  if (args === void 0) {
    args = [];
  }

  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(SIMPLE_HOOKS[name])) {
    ___WEBPACK_IMPORTED_MODULE_0___default.a.each(SIMPLE_HOOKS[name], function (callback) {
      callback.apply(void 0, args);
    });
  }
}
/**
 * @param {string} name
 * @returns {?}
 */

function mainSettingsGet(name) {
  return Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"](name);
}
/**
 * @param {Function} callback
 * @param {string} action
 * @param {Object=} parameters
 * @param {?number=} timeout
 */

function remoteRequest(callback, action, parameters, timeout) {
  if (Common_Globals__WEBPACK_IMPORTED_MODULE_2__["data"].__APP__) {
    Common_Globals__WEBPACK_IMPORTED_MODULE_2__["data"].__APP__.remote().defaultRequest(callback, 'Plugin' + action, parameters, timeout);
  }
}
/**
 * @param {Function} SettingsViewModelClass
 * @param {string} labelName
 * @param {string} template
 * @param {string} route
 */

function addSettingsViewModel(SettingsViewModelClass, template, labelName, route) {
  USER_VIEW_MODELS_HOOKS.push([SettingsViewModelClass, template, labelName, route]);
}
/**
 * @param {Function} SettingsViewModelClass
 * @param {string} labelName
 * @param {string} template
 * @param {string} route
 */

function addSettingsViewModelForAdmin(SettingsViewModelClass, template, labelName, route) {
  ADMIN_VIEW_MODELS_HOOKS.push([SettingsViewModelClass, template, labelName, route]);
}
/**
 * @param {boolean} admin
 */

function runSettingsViewModelHooks(admin) {
  var Knoin = __webpack_require__(/*! Knoin/Knoin */ 8);

  ___WEBPACK_IMPORTED_MODULE_0___default.a.each(admin ? ADMIN_VIEW_MODELS_HOOKS : USER_VIEW_MODELS_HOOKS, function (view) {
    Knoin.addSettingsViewModel(view[0], view[1], view[2], view[3]);
  });
}
/**
 * @param {string} pluginSection
 * @param {string} name
 * @returns {?}
 */

function settingsGet(pluginSection, name) {
  var plugins = Storage_Settings__WEBPACK_IMPORTED_MODULE_3__["settingsGet"]('Plugins');
  plugins = plugins && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(plugins[pluginSection]) ? plugins[pluginSection] : null;
  return plugins ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(plugins[name]) ? null : plugins[name] : null;
}

/***/ }),
/* 37 */
/*!*************************************************!*\
  !*** ./node_modules/core-js/internals/fails.js ***!
  \*************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return !!exec();
  } catch (error) {
    return true;
  }
};


/***/ }),
/* 38 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/well-known-symbol.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var shared = __webpack_require__(/*! ../internals/shared */ 188);
var has = __webpack_require__(/*! ../internals/has */ 54);
var uid = __webpack_require__(/*! ../internals/uid */ 189);
var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 192);
var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 261);

var WellKnownSymbolsStore = shared('wks');
var Symbol = global.Symbol;
var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;

module.exports = function (name) {
  if (!has(WellKnownSymbolsStore, name)) {
    if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];
    else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
  } return WellKnownSymbolsStore[name];
};


/***/ }),
/* 39 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/well-known-symbol.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var shared = __webpack_require__(/*! ../internals/shared */ 104);
var has = __webpack_require__(/*! ../internals/has */ 44);
var uid = __webpack_require__(/*! ../internals/uid */ 136);
var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 137);
var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 213);

var WellKnownSymbolsStore = shared('wks');
var Symbol = global.Symbol;
var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;

module.exports = function (name) {
  if (!has(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {
    if (NATIVE_SYMBOL && has(Symbol, name)) {
      WellKnownSymbolsStore[name] = Symbol[name];
    } else {
      WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
    }
  } return WellKnownSymbolsStore[name];
};


/***/ }),
/* 40 */,
/* 41 */
/*!********************************!*\
  !*** ./dev/Stores/User/Pgp.js ***!
  \********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/User/Account */ 46);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/Knoin */ 8);












var PgpUserStore = /*#__PURE__*/function () {
  function PgpUserStore() {
    var _this = this;

    this.capaOpenPGP = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    this.openpgp = null;
    this.openpgpkeys = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observableArray([]);
    this.openpgpKeyring = null;
    this.openpgpkeysPublic = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, _this.openpgpkeys(), function (item) {
        return !!(item && !item.isPrivate);
      });
    });
    this.openpgpkeysPrivate = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, _this.openpgpkeys(), function (item) {
        return !!(item && item.isPrivate);
      });
    });
  }
  /**
   * @returns {boolean}
   */


  var _proto = PgpUserStore.prototype;

  _proto.isSupported = function isSupported() {
    return !!this.openpgp;
  };

  _proto.findKeyByHex = function findKeyByHex(keys, hash) {
    return _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, keys, function (item) {
      return hash && item && (hash === item.id || -1 < item.ids.indexOf(hash));
    });
  };

  _proto.findPublicKeyByHex = function findPublicKeyByHex(hash) {
    return this.findKeyByHex(this.openpgpkeysPublic(), hash);
  };

  _proto.findPrivateKeyByHex = function findPrivateKeyByHex(hash) {
    return this.findKeyByHex(this.openpgpkeysPrivate(), hash);
  };

  _proto.findPublicKeysByEmail = function findPublicKeysByEmail(email) {
    return ___WEBPACK_IMPORTED_MODULE_5___default.a.compact(___WEBPACK_IMPORTED_MODULE_5___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, this.openpgpkeysPublic(), function (item) {
      var key = item && -1 < item.emails.indexOf(email) ? item : null;
      return key ? key.getNativeKeys() : [null];
    }), true));
  };

  _proto.findPublicKeysBySigningKeyIds = function findPublicKeysBySigningKeyIds(signingKeyIds) {
    var _this2 = this;

    return ___WEBPACK_IMPORTED_MODULE_5___default.a.compact(___WEBPACK_IMPORTED_MODULE_5___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, signingKeyIds, function (id) {
      var key = id && id.toHex ? _this2.findPublicKeyByHex(id.toHex()) : null;
      return key ? key.getNativeKeys() : [null];
    }), true));
  };

  _proto.findPrivateKeysByEncryptionKeyIds = function findPrivateKeysByEncryptionKeyIds(encryptionKeyIds, recipients, returnWrapKeys) {
    var _this3 = this;

    var result = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isArray"])(encryptionKeyIds) ? ___WEBPACK_IMPORTED_MODULE_5___default.a.compact(___WEBPACK_IMPORTED_MODULE_5___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, encryptionKeyIds, function (id) {
      var key = id && id.toHex ? _this3.findPrivateKeyByHex(id.toHex()) : null;
      return key ? returnWrapKeys ? [key] : key.getNativeKeys() : [null];
    }), true)) : [];

    if (0 === result.length && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNonEmptyArray"])(recipients)) {
      result = ___WEBPACK_IMPORTED_MODULE_5___default.a.uniq(___WEBPACK_IMPORTED_MODULE_5___default.a.compact(___WEBPACK_IMPORTED_MODULE_5___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, recipients, function (sEmail) {
        var keys = sEmail ? _this3.findAllPrivateKeysByEmailNotNative(sEmail) : null;
        return keys ? returnWrapKeys ? keys : ___WEBPACK_IMPORTED_MODULE_5___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, keys, function (key) {
          return key.getNativeKeys();
        }), true) : [null];
      }), true)), function (key) {
        return key.id;
      });
    }

    return result;
  }
  /**
   * @param {string} email
   * @returns {?}
   */
  ;

  _proto.findPublicKeyByEmailNotNative = function findPublicKeyByEmailNotNative(email) {
    return _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, this.openpgpkeysPublic(), function (item) {
      return item && -1 < item.emails.indexOf(email);
    }) || null;
  }
  /**
   * @param {string} email
   * @returns {?}
   */
  ;

  _proto.findPrivateKeyByEmailNotNative = function findPrivateKeyByEmailNotNative(email) {
    return _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, this.openpgpkeysPrivate(), function (item) {
      return item && -1 < item.emails.indexOf(email);
    }) || null;
  }
  /**
   * @param {string} email
   * @returns {?}
   */
  ;

  _proto.findAllPublicKeysByEmailNotNative = function findAllPublicKeysByEmailNotNative(email) {
    return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, this.openpgpkeysPublic(), function (item) {
      return item && -1 < item.emails.indexOf(email);
    }) || null;
  }
  /**
   * @param {string} email
   * @returns {?}
   */
  ;

  _proto.findAllPrivateKeysByEmailNotNative = function findAllPrivateKeysByEmailNotNative(email) {
    return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, this.openpgpkeysPrivate(), function (item) {
      return item && -1 < item.emails.indexOf(email);
    }) || null;
  }
  /**
   * @param {string} email
   * @param {string=} password
   * @returns {?}
   */
  ;

  _proto.findPrivateKeyByEmail = function findPrivateKeyByEmail(email, password) {
    var privateKey = null;

    var key = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, this.openpgpkeysPrivate(), function (item) {
      return item && -1 < item.emails.indexOf(email);
    });

    if (key) {
      try {
        privateKey = key.getNativeKeys()[0] || null;

        if (privateKey) {
          privateKey.decrypt(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["pString"])(password));
        }
      } catch (e) {
        privateKey = null;
      }
    }

    return privateKey;
  }
  /**
   * @param {string=} password
   * @returns {?}
   */
  ;

  _proto.findSelfPrivateKey = function findSelfPrivateKey(password) {
    return this.findPrivateKeyByEmail(Stores_User_Account__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].email(), password);
  };

  _proto.decryptMessage = function decryptMessage(message, recipients, fCallback) {
    var _this4 = this;

    if (message && message.getEncryptionKeyIds) {
      var privateKeys = this.findPrivateKeysByEncryptionKeyIds(message.getEncryptionKeyIds(), recipients, true);

      if (privateKeys && 0 < privateKeys.length) {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/MessageOpenPgp */ 549), [function (decryptedKey) {
          if (decryptedKey) {
            message.decrypt(decryptedKey).then(function (decryptedMessage) {
              var privateKey = null;

              if (decryptedMessage) {
                privateKey = _this4.findPrivateKeyByHex(decryptedKey.primaryKey.keyid.toHex());

                if (privateKey) {
                  _this4.verifyMessage(decryptedMessage, function (oValidKey, aSigningKeyIds) {
                    fCallback(privateKey, decryptedMessage, oValidKey || null, aSigningKeyIds || null);
                  });
                } else {
                  fCallback(privateKey, decryptedMessage);
                }
              } else {
                fCallback(privateKey, decryptedMessage);
              }
            }, function () {
              fCallback(null, null);
            });
          } else {
            fCallback(null, null);
          }
        }, privateKeys]);
        return false;
      }
    }

    fCallback(null, null);
    return false;
  };

  _proto.verifyMessage = function verifyMessage(message, fCallback) {
    if (message && message.getSigningKeyIds) {
      var signingKeyIds = message.getSigningKeyIds();

      if (signingKeyIds && 0 < signingKeyIds.length) {
        var publicKeys = this.findPublicKeysBySigningKeyIds(signingKeyIds);

        if (publicKeys && 0 < publicKeys.length) {
          try {
            var result = message.verify(publicKeys),
                valid = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, ___WEBPACK_IMPORTED_MODULE_5___default.a.isArray(result) ? result : [], function (item) {
              return item && item.valid && item.keyid;
            });

            if (valid && valid.keyid && valid.keyid && valid.keyid.toHex) {
              fCallback(this.findPublicKeyByHex(valid.keyid.toHex()));
              return true;
            }
          } catch (e) {
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["log"])(e);
          }
        }

        fCallback(null, signingKeyIds);
        return false;
      }
    }

    fCallback(null);
    return false;
  };

  _proto.controlsHelper = function controlsHelper(dom, verControl, success, title, text) {
    if (success) {
      dom.removeClass('error').addClass('success').attr('title', title);
      verControl.removeClass('error').addClass('success').attr('title', title);
    } else {
      dom.removeClass('success').addClass('error').attr('title', title);
      verControl.removeClass('success').addClass('error').attr('title', title);
    }

    if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isUnd"])(text)) {
      dom.text(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(text));
    }
  };

  PgpUserStore.domControlEncryptedClickHelper = function domControlEncryptedClickHelper(store, dom, armoredMessage, recipients) {
    return function () {
      var message = null;
      var $this = $__WEBPACK_IMPORTED_MODULE_6___default()(this); // eslint-disable-line no-invalid-this

      if ($this.hasClass('success')) {
        return false;
      }

      try {
        message = store.openpgp.message.readArmored(armoredMessage);
      } catch (e) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["log"])(e);
      }

      if (message && message.getText && message.verify && message.decrypt) {
        store.decryptMessage(message, recipients, function (validPrivateKey, decryptedMessage, validPublicKey, signingKeyIds) {
          if (decryptedMessage) {
            if (validPublicKey) {
              store.controlsHelper(dom, $this, true, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/GOOD_SIGNATURE', {
                'USER': validPublicKey.user + ' (' + validPublicKey.id + ')'
              }), decryptedMessage.getText());
            } else if (validPrivateKey) {
              var keyIds = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNonEmptyArray"])(signingKeyIds) ? signingKeyIds : null,
                  additional = keyIds ? ___WEBPACK_IMPORTED_MODULE_5___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, keyIds, function (item) {
                return item && item.toHex ? item.toHex() : null;
              })).join(', ') : '';
              store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE') + (additional ? ' (' + additional + ')' : ''), decryptedMessage.getText());
            } else {
              store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
            }
          } else {
            store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
          }
        });
        return false;
      }

      store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
      return false;
    };
  };

  PgpUserStore.domControlSignedClickHelper = function domControlSignedClickHelper(store, dom, armoredMessage) {
    return function () {
      var message = null;
      var $this = $__WEBPACK_IMPORTED_MODULE_6___default()(this); // eslint-disable-line no-invalid-this

      if ($this.hasClass('success') || $this.hasClass('error')) {
        return false;
      }

      try {
        message = store.openpgp.cleartext.readArmored(armoredMessage);
      } catch (e) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["log"])(e);
      }

      if (message && message.getText && message.verify) {
        store.verifyMessage(message, function (validKey, signingKeyIds) {
          if (validKey) {
            store.controlsHelper(dom, $this, true, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/GOOD_SIGNATURE', {
              'USER': validKey.user + ' (' + validKey.id + ')'
            }), message.getText());
          } else {
            var keyIds = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNonEmptyArray"])(signingKeyIds) ? signingKeyIds : null,
                additional = keyIds ? ___WEBPACK_IMPORTED_MODULE_5___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, keyIds, function (item) {
              return item && item.toHex ? item.toHex() : null;
            })).join(', ') : '';
            store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE') + (additional ? ' (' + additional + ')' : ''));
          }
        });
        return false;
      }

      store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
      return false;
    };
  }
  /**
   * @param {*} dom
   * @param {MessageModel} rainLoopMessage
   */
  ;

  _proto.initMessageBodyControls = function initMessageBodyControls(dom, rainLoopMessage) {
    if (dom && !dom.hasClass('inited')) {
      dom.addClass('inited');
      var encrypted = dom.hasClass('encrypted'),
          signed = dom.hasClass('signed'),
          recipients = rainLoopMessage ? rainLoopMessage.getEmails(['from', 'to', 'cc']) : [];
      var verControl = null;

      if (encrypted || signed) {
        var domText = dom.text();
        dom.data('openpgp-original', domText);

        if (encrypted) {
          verControl = $__WEBPACK_IMPORTED_MODULE_6___default()('<div class="b-openpgp-control"><i class="icon-lock"></i></div>').attr('title', Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('MESSAGE/PGP_ENCRYPTED_MESSAGE_DESC')).on('click', PgpUserStore.domControlEncryptedClickHelper(this, dom, domText, recipients));
        } else if (signed) {
          verControl = $__WEBPACK_IMPORTED_MODULE_6___default()('<div class="b-openpgp-control"><i class="icon-lock"></i></div>').attr('title', Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('MESSAGE/PGP_SIGNED_MESSAGE_DESC')).on('click', PgpUserStore.domControlSignedClickHelper(this, dom, domText));
        }

        if (verControl) {
          dom.before(verControl).before('<div></div>');
        }
      }
    }
  };

  return PgpUserStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new PgpUserStore());

/***/ }),
/* 42 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/an-object.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 49);

module.exports = function (it) {
  if (!isObject(it)) {
    throw TypeError(String(it) + ' is not an object');
  } return it;
};


/***/ }),
/* 43 */
/*!******************************************************!*\
  !*** ./node_modules/core-js-pure/internals/fails.js ***!
  \******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return !!exec();
  } catch (error) {
    return true;
  }
};


/***/ }),
/* 44 */
/*!***********************************************!*\
  !*** ./node_modules/core-js/internals/has.js ***!
  \***********************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toObject = __webpack_require__(/*! ../internals/to-object */ 89);

var hasOwnProperty = {}.hasOwnProperty;

module.exports = function hasOwn(it, key) {
  return hasOwnProperty.call(toObject(it), key);
};


/***/ }),
/* 45 */
/*!********************************************************!*\
  !*** ./node_modules/core-js/modules/es.regexp.exec.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 65);
var exec = __webpack_require__(/*! ../internals/regexp-exec */ 162);

// `RegExp.prototype.exec` method
// https://tc39.es/ecma262/#sec-regexp.prototype.exec
$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {
  exec: exec
});


/***/ }),
/* 46 */
/*!************************************!*\
  !*** ./dev/Stores/User/Account.js ***!
  \************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Storage/Settings */ 5);






var AccountUserStore = /*#__PURE__*/function () {
  function AccountUserStore() {
    this.email = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.parentEmail = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.signature = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    this.accounts = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observableArray([]);
    this.accounts.loading = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false).extend({
      throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_3__["Magics"].Time100ms
    });
    this.computers();
  }

  var _proto = AccountUserStore.prototype;

  _proto.computers = function computers() {
    var _this = this;

    this.accountsEmails = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return ___WEBPACK_IMPORTED_MODULE_2___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, _this.accounts(), function (item) {
        return item ? item.email : null;
      }));
    });
    this.accountsUnreadCount = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return 0;
    }); // this.accountsUnreadCount = ko.computed(() => {
    // 	let result = 0;
    // 	_.each(this.accounts(), (item) => {
    // 		if (item)
    // 		{
    // 			result += item.count();
    // 		}
    // 	});
    // 	return result;
    // });
  };

  _proto.populate = function populate() {
    this.email(Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["settingsGet"]('Email'));
    this.parentEmail(Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["settingsGet"]('ParentEmail'));
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isRootAccount = function isRootAccount() {
    return '' === this.parentEmail();
  };

  return AccountUserStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new AccountUserStore());

/***/ }),
/* 47 */
/*!**************************************************************************!*\
  !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***!
  \**************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 55);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 66);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 95);

module.exports = DESCRIPTORS ? function (object, key, value) {
  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};


/***/ }),
/* 48 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/modules/es.function.name.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 55);
var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 66).f;

var FunctionPrototype = Function.prototype;
var FunctionPrototypeToString = FunctionPrototype.toString;
var nameRE = /^\s*function ([^ (]*)/;
var NAME = 'name';

// Function instances `.name` property
// https://tc39.es/ecma262/#sec-function-instances-name
if (DESCRIPTORS && !(NAME in FunctionPrototype)) {
  defineProperty(FunctionPrototype, NAME, {
    configurable: true,
    get: function () {
      try {
        return FunctionPrototypeToString.call(this).match(nameRE)[1];
      } catch (error) {
        return '';
      }
    }
  });
}


/***/ }),
/* 49 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/is-object.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function (it) {
  return typeof it === 'object' ? it !== null : typeof it === 'function';
};


/***/ }),
/* 50 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/is-object.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function (it) {
  return typeof it === 'object' ? it !== null : typeof it === 'function';
};


/***/ }),
/* 51 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js-pure/internals/path.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 52 */
/*!*******************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/create-non-enumerable-property.js ***!
  \*******************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 81);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90);

module.exports = DESCRIPTORS ? function (object, key, value) {
  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};


/***/ }),
/* 53 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/descriptors.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);

// Detect IE8's incomplete defineProperty implementation
module.exports = !fails(function () {
  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
});


/***/ }),
/* 54 */
/*!****************************************************!*\
  !*** ./node_modules/core-js-pure/internals/has.js ***!
  \****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

var hasOwnProperty = {}.hasOwnProperty;

module.exports = function (it, key) {
  return hasOwnProperty.call(it, key);
};


/***/ }),
/* 55 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/descriptors.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 37);

// Detect IE8's incomplete defineProperty implementation
module.exports = !fails(function () {
  // eslint-disable-next-line es/no-object-defineproperty -- required for testing
  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
});


/***/ }),
/* 56 */
/*!********************************************************************!*\
  !*** ./node_modules/core-js/internals/require-object-coercible.js ***!
  \********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// `RequireObjectCoercible` abstract operation
// https://tc39.es/ecma262/#sec-requireobjectcoercible
module.exports = function (it) {
  if (it == undefined) throw TypeError("Can't call method on " + it);
  return it;
};


/***/ }),
/* 57 */
/*!****************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/set-interval.js ***!
  \****************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/set-interval */ 283);

/***/ }),
/* 58 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/an-object.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 50);

module.exports = function (it) {
  if (!isObject(it)) {
    throw TypeError(String(it) + ' is not an object');
  } return it;
};


/***/ }),
/* 59 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js/modules/es.string.replace.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 149);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var toLength = __webpack_require__(/*! ../internals/to-length */ 84);
var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);
var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 171);
var getSubstitution = __webpack_require__(/*! ../internals/get-substitution */ 282);
var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 150);

var max = Math.max;
var min = Math.min;

var maybeToString = function (it) {
  return it === undefined ? it : String(it);
};

// @@replace logic
fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {
  var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;
  var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;
  var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';

  return [
    // `String.prototype.replace` method
    // https://tc39.es/ecma262/#sec-string.prototype.replace
    function replace(searchValue, replaceValue) {
      var O = requireObjectCoercible(this);
      var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];
      return replacer !== undefined
        ? replacer.call(searchValue, O, replaceValue)
        : nativeReplace.call(String(O), searchValue, replaceValue);
    },
    // `RegExp.prototype[@@replace]` method
    // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
    function (regexp, replaceValue) {
      if (
        (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||
        (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)
      ) {
        var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);
        if (res.done) return res.value;
      }

      var rx = anObject(regexp);
      var S = String(this);

      var functionalReplace = typeof replaceValue === 'function';
      if (!functionalReplace) replaceValue = String(replaceValue);

      var global = rx.global;
      if (global) {
        var fullUnicode = rx.unicode;
        rx.lastIndex = 0;
      }
      var results = [];
      while (true) {
        var result = regExpExec(rx, S);
        if (result === null) break;

        results.push(result);
        if (!global) break;

        var matchStr = String(result[0]);
        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
      }

      var accumulatedResult = '';
      var nextSourcePosition = 0;
      for (var i = 0; i < results.length; i++) {
        result = results[i];

        var matched = String(result[0]);
        var position = max(min(toInteger(result.index), S.length), 0);
        var captures = [];
        // NOTE: This is equivalent to
        //   captures = result.slice(1).map(maybeToString)
        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
        // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));
        var namedCaptures = result.groups;
        if (functionalReplace) {
          var replacerArgs = [matched].concat(captures, position, S);
          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
          var replacement = String(replaceValue.apply(undefined, replacerArgs));
        } else {
          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
        }
        if (position >= nextSourcePosition) {
          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;
          nextSourcePosition = position + matched.length;
        }
      }
      return accumulatedResult + S.slice(nextSourcePosition);
    }
  ];
});


/***/ }),
/* 60 */
/*!*******************************!*\
  !*** ./dev/Storage/Client.js ***!
  \*******************************/
/*! exports provided: set, get */
/*! exports used: get, set */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return set; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return get; });
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var Common_ClientStorageDriver_Cookie__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/ClientStorageDriver/Cookie */ 438);
/* harmony import */ var Common_ClientStorageDriver_LocalStorage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/ClientStorageDriver/LocalStorage */ 439);





var SupportedStorageDriver = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_1___default.a).call(___WEBPACK_IMPORTED_MODULE_1___default.a, [Common_ClientStorageDriver_LocalStorage__WEBPACK_IMPORTED_MODULE_3__[/* LocalStorageDriver */ "a"], Common_ClientStorageDriver_Cookie__WEBPACK_IMPORTED_MODULE_2__[/* CookieDriver */ "a"]], function (StorageDriver) {
  return StorageDriver && StorageDriver.supported();
});

var driver = SupportedStorageDriver ? new SupportedStorageDriver() : null;
/**
 * @param {number} key
 * @param {*} data
 * @returns {boolean}
 */

function set(key, data) {
  return driver ? driver.set('p' + key, data) : false;
}
/**
 * @param {number} key
 * @returns {*}
 */

function get(key) {
  return driver ? driver.get('p' + key) : null;
}

/***/ }),
/* 61 */
/*!********************************!*\
  !*** ./dev/Common/Momentor.js ***!
  \********************************/
/*! exports provided: momentNow, momentNowUnix, searchSubtractFormatDateHelper, format, momentToNode, reload */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "momentNow", function() { return momentNow; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "momentNowUnix", function() { return momentNowUnix; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "searchSubtractFormatDateHelper", function() { return searchSubtractFormatDateHelper; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "format", function() { return format; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "momentToNode", function() { return momentToNode; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reload", function() { return reload; });
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! moment */ 100);
/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9);





var _moment = null;
var _momentNow = 0;

var updateMomentNow = ___WEBPACK_IMPORTED_MODULE_1___default.a.debounce(function () {
  _moment = moment__WEBPACK_IMPORTED_MODULE_3___default()();
}, 500, true);

var updateMomentNowUnix = ___WEBPACK_IMPORTED_MODULE_1___default.a.debounce(function () {
  _momentNow = moment__WEBPACK_IMPORTED_MODULE_3___default()().unix();
}, 500, true);
/**
 * @returns {moment}
 */


function momentNow() {
  updateMomentNow();
  return _moment || moment__WEBPACK_IMPORTED_MODULE_3___default()();
}
/**
 * @returns {number}
 */

function momentNowUnix() {
  updateMomentNowUnix();
  return _momentNow || 0;
}
/**
 * @param {number} date
 * @returns {string}
 */

function searchSubtractFormatDateHelper(date) {
  return momentNow().clone().subtract(date, 'days').format('YYYY.MM.DD');
}
/**
 * @param {Object} m
 * @returns {string}
 */

function formatCustomShortDate(m) {
  var now = momentNow();

  if (m && now) {
    switch (true) {
      case 4 >= now.diff(m, 'hours'):
        return m.fromNow();

      case now.format('L') === m.format('L'):
        return Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('MESSAGE_LIST/TODAY_AT', {
          TIME: m.format('LT')
        });

      case now.clone().subtract(1, 'days').format('L') === m.format('L'):
        return Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('MESSAGE_LIST/YESTERDAY_AT', {
          TIME: m.format('LT')
        });

      case now.year() === m.year():
        return m.format('D MMM.');
      // no default
    }
  }

  return m ? m.format('LL') : '';
}
/**
 * @param {number} timeStampInUTC
 * @param {string} formatStr
 * @returns {string}
 */


function format(timeStampInUTC, formatStr) {
  var m = null,
      result = '';
  var now = momentNowUnix();
  timeStampInUTC = 0 < timeStampInUTC ? timeStampInUTC : 0 === timeStampInUTC ? now : 0;
  timeStampInUTC = now < timeStampInUTC ? now : timeStampInUTC;
  m = 0 < timeStampInUTC ? moment__WEBPACK_IMPORTED_MODULE_3___default.a.unix(timeStampInUTC) : null;

  if (m && 1970 === m.year()) {
    m = null;
  }

  if (m) {
    switch (formatStr) {
      case 'FROMNOW':
        result = m.fromNow();
        break;

      case 'SHORT':
        result = formatCustomShortDate(m);
        break;

      case 'FULL':
        result = m.format('LLL');
        break;

      default:
        result = m.format(formatStr);
        break;
    }
  }

  return result;
}
/**
 * @param {Object} element
 * @returns {void}
 */

function momentToNode(element) {
  var key = '',
      time = 0;
  var $el = $__WEBPACK_IMPORTED_MODULE_2___default()(element);
  time = $el.data('moment-time');

  if (time) {
    key = $el.data('moment-format');

    if (key) {
      $el.text(format(time, key));
    }

    key = $el.data('moment-format-title');

    if (key) {
      $el.attr('title', format(time, key));
    }
  }
}
/**
 * @returns {void}
 */

function reload() {
  ___WEBPACK_IMPORTED_MODULE_1___default.a.defer(function () {
    $__WEBPACK_IMPORTED_MODULE_2___default()('.moment', window__WEBPACK_IMPORTED_MODULE_0___default.a.document).each(function (index, item) {
      momentToNode(item);
    });
  });
}

/***/ }),
/* 62 */
/*!***********************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/promise */ 251);

/***/ }),
/* 63 */
/*!********************************!*\
  !*** external "window.hasher" ***!
  \********************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.hasher;

/***/ }),
/* 64 */
/*!*******************************!*\
  !*** ./dev/Helper/Message.js ***!
  \*******************************/
/*! exports provided: emailArrayToString, emailArrayToStringClear, emailArrayFromJson, replyHelper */
/*! exports used: emailArrayFromJson, emailArrayToString, emailArrayToStringClear, replyHelper */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return emailArrayToString; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return emailArrayToStringClear; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return emailArrayFromJson; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return replyHelper; });
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Model/Email */ 82);




/**
 * @param {Array.<EmailModel>} emails
 * @param {boolean=} friendlyView = false
 * @param {boolean=} wrapWithLink = false
 * @returns {string}
 */

function emailArrayToString(emails, friendlyView, wrapWithLink) {
  if (friendlyView === void 0) {
    friendlyView = false;
  }

  if (wrapWithLink === void 0) {
    wrapWithLink = false;
  }

  var index = 0,
      len = 0;
  var result = [];

  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isNonEmptyArray"])(emails)) {
    for (len = emails.length; index < len; index++) {
      result.push(emails[index].toLine(friendlyView, wrapWithLink));
    }
  }

  return result.join(', ');
}
/**
 * @param {Array.<EmailModel>} emails
 * @returns {string}
 */

function emailArrayToStringClear(emails) {
  var index = 0,
      len = 0;
  var result = [];

  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isNonEmptyArray"])(emails)) {
    for (len = emails.length; index < len; index++) {
      if (emails[index] && emails[index].email && '' !== emails[index].name) {
        result.push(emails[index].email);
      }
    }
  }

  return result.join(', ');
}
/**
 * @param {?Array} json
 * @returns {Array.<EmailModel>}
 */

function emailArrayFromJson(json) {
  var index = 0,
      len = 0,
      email = null;
  var result = [];

  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isNonEmptyArray"])(json)) {
    for (index = 0, len = json.length; index < len; index++) {
      email = Model_Email__WEBPACK_IMPORTED_MODULE_3__["EmailModel"].newInstanceFromJson(json[index]);

      if (email) {
        result.push(email);
      }
    }
  }

  return result;
}
/**
 * @param {Array.<EmailModel>} inputEmails
 * @param {Object} unic
 * @param {Array} localEmails
 */

function replyHelper(inputEmails, unic, localEmails) {
  if (inputEmails && 0 < inputEmails.length) {
    var index = 0;
    var len = inputEmails.length;

    for (; index < len; index++) {
      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(unic[inputEmails[index].email])) {
        unic[inputEmails[index].email] = true;
        localEmails.push(inputEmails[index]);
      }
    }
  }
}

/***/ }),
/* 65 */
/*!**************************************************!*\
  !*** ./node_modules/core-js/internals/export.js ***!
  \**************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 127).f;
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);
var redefine = __webpack_require__(/*! ../internals/redefine */ 69);
var setGlobal = __webpack_require__(/*! ../internals/set-global */ 96);
var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 209);
var isForced = __webpack_require__(/*! ../internals/is-forced */ 182);

/*
  options.target      - name of the target object
  options.global      - target is the global object
  options.stat        - export as static methods of target
  options.proto       - export as prototype methods of target
  options.real        - real prototype method for the `pure` version
  options.forced      - export even if the native feature is available
  options.bind        - bind methods to the target, required for the `pure` version
  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version
  options.unsafe      - use the simple assignment of property instead of delete + defineProperty
  options.sham        - add a flag to not completely full polyfills
  options.enumerable  - export as enumerable property
  options.noTargetGet - prevent calling a getter on target
*/
module.exports = function (options, source) {
  var TARGET = options.target;
  var GLOBAL = options.global;
  var STATIC = options.stat;
  var FORCED, target, key, targetProperty, sourceProperty, descriptor;
  if (GLOBAL) {
    target = global;
  } else if (STATIC) {
    target = global[TARGET] || setGlobal(TARGET, {});
  } else {
    target = (global[TARGET] || {}).prototype;
  }
  if (target) for (key in source) {
    sourceProperty = source[key];
    if (options.noTargetGet) {
      descriptor = getOwnPropertyDescriptor(target, key);
      targetProperty = descriptor && descriptor.value;
    } else targetProperty = target[key];
    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
    // contained in target
    if (!FORCED && targetProperty !== undefined) {
      if (typeof sourceProperty === typeof targetProperty) continue;
      copyConstructorProperties(sourceProperty, targetProperty);
    }
    // add a flag to not completely full polyfills
    if (options.sham || (targetProperty && targetProperty.sham)) {
      createNonEnumerableProperty(sourceProperty, 'sham', true);
    }
    // extend global
    redefine(target, key, sourceProperty, options);
  }
};


/***/ }),
/* 66 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js/internals/object-define-property.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 55);
var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 134);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 133);

// eslint-disable-next-line es/no-object-defineproperty -- safe
var $defineProperty = Object.defineProperty;

// `Object.defineProperty` method
// https://tc39.es/ecma262/#sec-object.defineproperty
exports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPrimitive(P, true);
  anObject(Attributes);
  if (IE8_DOM_DEFINE) try {
    return $defineProperty(O, P, Attributes);
  } catch (error) { /* empty */ }
  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');
  if ('value' in Attributes) O[P] = Attributes.value;
  return O;
};


/***/ }),
/* 67 */
/*!************************************!*\
  !*** ./dev/Knoin/AbstractModel.js ***!
  \************************************/
/*! exports provided: AbstractModel */
/*! exports used: AbstractModel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractModel; });
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ 151);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);


var AbstractModel = /*#__PURE__*/function () {
  /**
   * @param {string} modelName = ''
   */
  function AbstractModel(modelName) {
    if (modelName === void 0) {
      modelName = '';
    }

    this.sModelName = '';
    this.disposables = [];
    this.sModelName = modelName || '';
  }

  var _proto = AbstractModel.prototype;

  _proto.regDisposables = function regDisposables(value) {
    var _this = this;

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(value)) {
      value.forEach(function (item) {
        _this.disposables.push(item);
      });
    } else if (value) {
      this.disposables.push(value);
    }
  };

  _proto.onDestroy = function onDestroy() {
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["disposeObject"])(this);
  };

  return AbstractModel;
}();

/***/ }),
/* 68 */,
/* 69 */
/*!****************************************************!*\
  !*** ./node_modules/core-js/internals/redefine.js ***!
  \****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);
var has = __webpack_require__(/*! ../internals/has */ 44);
var setGlobal = __webpack_require__(/*! ../internals/set-global */ 96);
var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 129);
var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 130);

var getInternalState = InternalStateModule.get;
var enforceInternalState = InternalStateModule.enforce;
var TEMPLATE = String(String).split('String');

(module.exports = function (O, key, value, options) {
  var unsafe = options ? !!options.unsafe : false;
  var simple = options ? !!options.enumerable : false;
  var noTargetGet = options ? !!options.noTargetGet : false;
  var state;
  if (typeof value == 'function') {
    if (typeof key == 'string' && !has(value, 'name')) {
      createNonEnumerableProperty(value, 'name', key);
    }
    state = enforceInternalState(value);
    if (!state.source) {
      state.source = TEMPLATE.join(typeof key == 'string' ? key : '');
    }
  }
  if (O === global) {
    if (simple) O[key] = value;
    else setGlobal(key, value);
    return;
  } else if (!unsafe) {
    delete O[key];
  } else if (!noTargetGet && O[key]) {
    simple = true;
  }
  if (simple) O[key] = value;
  else createNonEnumerableProperty(O, key, value);
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, 'toString', function toString() {
  return typeof this == 'function' && getInternalState(this).source || inspectSource(this);
});


/***/ }),
/* 70 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/a-function.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function (it) {
  if (typeof it != 'function') {
    throw TypeError(String(it) + ' is not a function');
  } return it;
};


/***/ }),
/* 71 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/entry-virtual.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(/*! ../internals/path */ 51);

module.exports = function (CONSTRUCTOR) {
  return path[CONSTRUCTOR + 'Prototype'];
};


/***/ }),
/* 72 */
/*!********************************!*\
  !*** ./dev/Stores/Language.js ***!
  \********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Storage/Settings */ 5);




var LanguageStore = /*#__PURE__*/function () {
  function LanguageStore() {
    this.languages = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]);
    this.languagesAdmin = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]);
    this.language = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('').extend({
      limitedList: this.languages
    }).extend({
      reversible: true
    });
    this.languageAdmin = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('').extend({
      limitedList: this.languagesAdmin
    }).extend({
      reversible: true
    });
    this.userLanguage = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
    this.userLanguageAdmin = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
  }

  var _proto = LanguageStore.prototype;

  _proto.populate = function populate() {
    var aLanguages = Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["appSettingsGet"]('languages'),
        aLanguagesAdmin = Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["appSettingsGet"]('languagesAdmin');
    this.languages(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(aLanguages) ? aLanguages : []);
    this.languagesAdmin(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(aLanguagesAdmin) ? aLanguagesAdmin : []);
    this.language(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('Language'));
    this.languageAdmin(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('LanguageAdmin'));
    this.userLanguage(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('UserLanguage'));
    this.userLanguageAdmin(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('UserLanguageAdmin'));
  };

  return LanguageStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new LanguageStore());

/***/ }),
/* 73 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/to-indexed-object.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

// toObject with fallback for non-array-like ES3 strings
var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 128);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);

module.exports = function (it) {
  return IndexedObject(requireObjectCoercible(it));
};


/***/ }),
/* 74 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/classof-raw.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

var toString = {}.toString;

module.exports = function (it) {
  return toString.call(it).slice(8, -1);
};


/***/ }),
/* 75 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/get-built-in.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(/*! ../internals/path */ 51);
var global = __webpack_require__(/*! ../internals/global */ 31);

var aFunction = function (variable) {
  return typeof variable == 'function' ? variable : undefined;
};

module.exports = function (namespace, method) {
  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])
    : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];
};


/***/ }),
/* 76 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/iterators.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 77 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js/modules/es.array.join.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 65);
var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 128);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 73);
var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 284);

var nativeJoin = [].join;

var ES3_STRINGS = IndexedObject != Object;
var STRICT_METHOD = arrayMethodIsStrict('join', ',');

// `Array.prototype.join` method
// https://tc39.es/ecma262/#sec-array.prototype.join
$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {
  join: function join(separator) {
    return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);
  }
});


/***/ }),
/* 78 */
/*!********************************************************!*\
  !*** ./node_modules/core-js/internals/get-built-in.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var path = __webpack_require__(/*! ../internals/path */ 165);
var global = __webpack_require__(/*! ../internals/global */ 30);

var aFunction = function (variable) {
  return typeof variable == 'function' ? variable : undefined;
};

module.exports = function (namespace, method) {
  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])
    : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];
};


/***/ }),
/* 79 */
/*!******************************************************!*\
  !*** ./node_modules/core-js/internals/to-integer.js ***!
  \******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

var ceil = Math.ceil;
var floor = Math.floor;

// `ToInteger` abstract operation
// https://tc39.es/ecma262/#sec-tointeger
module.exports = function (argument) {
  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
};


/***/ }),
/* 80 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/to-indexed-object.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

// toObject with fallback for non-array-like ES3 strings
var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 170);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 115);

module.exports = function (it) {
  return IndexedObject(requireObjectCoercible(it));
};


/***/ }),
/* 81 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-define-property.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 186);
var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 158);

var nativeDefineProperty = Object.defineProperty;

// `Object.defineProperty` method
// https://tc39.es/ecma262/#sec-object.defineproperty
exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPrimitive(P, true);
  anObject(Attributes);
  if (IE8_DOM_DEFINE) try {
    return nativeDefineProperty(O, P, Attributes);
  } catch (error) { /* empty */ }
  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');
  if ('value' in Attributes) O[P] = Attributes.value;
  return O;
};


/***/ }),
/* 82 */
/*!****************************!*\
  !*** ./dev/Model/Email.js ***!
  \****************************/
/*! exports provided: EmailModel, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EmailModel", function() { return EmailModel; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return EmailModel; });
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.search.js */ 315);
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ 151);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! emailjs-addressparser */ 178);
/* harmony import */ var emailjs_addressparser__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(emailjs_addressparser__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Utils */ 2);










var EmailModel = /*#__PURE__*/function () {
  /**
   * @param {string=} email = ''
   * @param {string=} name = ''
   * @param {string=} dkimStatus = 'none'
   * @param {string=} dkimValue = ''
   */
  function EmailModel(email, name, dkimStatus, dkimValue) {
    if (email === void 0) {
      email = '';
    }

    if (name === void 0) {
      name = '';
    }

    if (dkimStatus === void 0) {
      dkimStatus = 'none';
    }

    if (dkimValue === void 0) {
      dkimValue = '';
    }

    this.email = '';
    this.name = '';
    this.dkimStatus = '';
    this.dkimValue = '';
    this.email = email;
    this.name = name;
    this.dkimStatus = dkimStatus;
    this.dkimValue = dkimValue;
    this.clearDuplicateName();
  }
  /**
   * @static
   * @param {AjaxJsonEmail} json
   * @returns {?EmailModel}
   */


  EmailModel.newInstanceFromJson = function newInstanceFromJson(json) {
    var email = new EmailModel();
    return email.initByJson(json) ? email : null;
  }
  /**
   * @returns {void}
   */
  ;

  var _proto = EmailModel.prototype;

  _proto.clear = function clear() {
    this.email = '';
    this.name = '';
    this.dkimStatus = 'none';
    this.dkimValue = '';
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.validate = function validate() {
    return '' !== this.name || '' !== this.email;
  }
  /**
   * @param {boolean} withoutName = false
   * @returns {string}
   */
  ;

  _proto.hash = function hash(withoutName) {
    if (withoutName === void 0) {
      withoutName = false;
    }

    return '#' + (withoutName ? '' : this.name) + '#' + this.email + '#';
  }
  /**
   * @returns {void}
   */
  ;

  _proto.clearDuplicateName = function clearDuplicateName() {
    if (this.name === this.email) {
      this.name = '';
    }
  }
  /**
   * @param {string} query
   * @returns {boolean}
   */
  ;

  _proto.search = function search(query) {
    return -1 < (this.name + ' ' + this.email).toLowerCase().indexOf(query.toLowerCase());
  }
  /**
   * @param {AjaxJsonEmail} oJsonEmail
   * @returns {boolean}
   */
  ;

  _proto.initByJson = function initByJson(json) {
    var result = false;

    if (json && 'Object/Email' === json['@Object']) {
      this.name = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(json.Name);
      this.email = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(json.Email);
      this.dkimStatus = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(json.DkimStatus || '');
      this.dkimValue = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(json.DkimValue || '');
      result = '' !== this.email;
      this.clearDuplicateName();
    }

    return result;
  }
  /**
   * @param {boolean} friendlyView
   * @param {boolean=} wrapWithLink = false
   * @param {boolean=} useEncodeHtml = false
   * @returns {string}
   */
  ;

  _proto.toLine = function toLine(friendlyView, wrapWithLink, useEncodeHtml) {
    if (wrapWithLink === void 0) {
      wrapWithLink = false;
    }

    if (useEncodeHtml === void 0) {
      useEncodeHtml = false;
    }

    var result = '';

    if ('' !== this.email) {
      if (friendlyView && '' !== this.name) {
        result = wrapWithLink ? '<a href="mailto:' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(this.email) + '?to=' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])('"' + this.name + '" <' + this.email + '>') + '" target="_blank" tabindex="-1">' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(this.name) + '</a>' : useEncodeHtml ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(this.name) : this.name; // result = wrapWithLink ? '<a href="mailto:' + encodeHtml('"' + this.name + '" <' + this.email + '>') +
        // 	'" target="_blank" tabindex="-1">' + encodeHtml(this.name) + '</a>' : (useEncodeHtml ? encodeHtml(this.name) : this.name);
      } else {
        result = this.email;

        if ('' !== this.name) {
          if (wrapWithLink) {
            result = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])('"' + this.name + '" <') + '<a href="mailto:' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(this.email) + '?to=' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])('"' + this.name + '" <' + this.email + '>') + '" target="_blank" tabindex="-1">' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(result) + '</a>' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])('>'); // result = encodeHtml('"' + this.name + '" <') + '<a href="mailto:' +
            // 	encodeHtml('"' + this.name + '" <' + this.email + '>') +
            // 	'" target="_blank" tabindex="-1">' +
            // 	encodeHtml(result) +
            // 	'</a>' +
            // 	encodeHtml('>');
          } else {
            result = '"' + this.name + '" <' + result + '>';

            if (useEncodeHtml) {
              result = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(result);
            }
          }
        } else if (wrapWithLink) {
          result = '<a href="mailto:' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(this.email) + '" target="_blank" tabindex="-1">' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["encodeHtml"])(this.email) + '</a>';
        }
      }
    }

    return result;
  };

  EmailModel.splitEmailLine = function splitEmailLine(line) {
    var parsedResult = emailjs_addressparser__WEBPACK_IMPORTED_MODULE_7___default()(line);

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNonEmptyArray"])(parsedResult)) {
      var result = [];
      var exists = false;
      parsedResult.forEach(function (item) {
        var address = item.address ? new EmailModel(item.address.replace(/^[<]+(.*)[>]+$/g, '$1'), item.name || '') : null;

        if (address && address.email) {
          exists = true;
        }

        result.push(address ? address.toLine(false) : item.name);
      });
      return exists ? result : null;
    }

    return null;
  };

  EmailModel.parseEmailLine = function parseEmailLine(line) {
    var parsedResult = emailjs_addressparser__WEBPACK_IMPORTED_MODULE_7___default()(line);

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNonEmptyArray"])(parsedResult)) {
      return ___WEBPACK_IMPORTED_MODULE_6___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, parsedResult, function (item) {
        return item.address ? new EmailModel(item.address.replace(/^[<]+(.*)[>]+$/g, '$1'), item.name || '') : null;
      }));
    }

    return [];
  }
  /**
   * @param {string} emailAddress
   * @returns {boolean}
   */
  ;

  _proto.parse = function parse(emailAddress) {
    emailAddress = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(emailAddress);

    if ('' === emailAddress) {
      return false;
    }

    var result = emailjs_addressparser__WEBPACK_IMPORTED_MODULE_7___default()(emailAddress);

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNonEmptyArray"])(result) && result[0]) {
      this.name = result[0].name || '';
      this.email = result[0].address || '';
      this.clearDuplicateName();
      return true;
    }

    return false;
  };

  return EmailModel;
}();



/***/ }),
/* 83 */
/*!*****************************!*\
  !*** ./dev/Common/Audio.js ***!
  \*****************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Events */ 23);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2);








var Audio = /*#__PURE__*/function () {
  function Audio() {
    var _this = this;

    this.notificator = null;
    this.player = null;
    this.supported = false;
    this.supportedMp3 = false;
    this.supportedOgg = false;
    this.supportedWav = false;
    this.supportedNotification = false;
    this.player = this.createNewObject();
    this.supported = !Common_Globals__WEBPACK_IMPORTED_MODULE_3__["bMobileDevice"] && !Common_Globals__WEBPACK_IMPORTED_MODULE_3__["bSafari"] && !!this.player && !!this.player.play;

    if (this.supported && this.player && this.player.canPlayType) {
      this.supportedMp3 = '' !== this.player.canPlayType('audio/mpeg;').replace(/no/, '');
      this.supportedWav = '' !== this.player.canPlayType('audio/wav; codecs="1"').replace(/no/, '');
      this.supportedOgg = '' !== this.player.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, '');
      this.supportedNotification = this.supported && this.supportedMp3;
    }

    if (!this.player || !this.supportedMp3 && !this.supportedOgg && !this.supportedWav) {
      this.supported = false;
      this.supportedMp3 = false;
      this.supportedOgg = false;
      this.supportedWav = false;
      this.supportedNotification = false;
    }

    if (this.supported && this.player) {
      var stopFn = function stopFn() {
        return _this.stop();
      };

      this.player.addEventListener('ended', stopFn);
      this.player.addEventListener('error', stopFn);
      Common_Events__WEBPACK_IMPORTED_MODULE_5__[/* sub */ "b"]('audio.api.stop', stopFn);
    }
  }

  var _proto = Audio.prototype;

  _proto.createNewObject = function createNewObject() {
    try {
      var player = window__WEBPACK_IMPORTED_MODULE_2___default.a.Audio ? new window__WEBPACK_IMPORTED_MODULE_2___default.a.Audio() : null;

      if (player && player.canPlayType && player.pause && player.play) {
        player.preload = 'none';
        player.loop = false;
        player.autoplay = false;
        player.muted = false;
      }

      return player;
    } catch (e) {} // eslint-disable-line no-empty


    return null;
  };

  _proto.paused = function paused() {
    return this.supported ? !!this.player.paused : true;
  };

  _proto.stop = function stop() {
    if (this.supported && this.player.pause) {
      this.player.pause();
    }

    Common_Events__WEBPACK_IMPORTED_MODULE_5__[/* pub */ "a"]('audio.stop');
  };

  _proto.pause = function pause() {
    this.stop();
  };

  _proto.clearName = function clearName(name, ext) {
    if (name === void 0) {
      name = '';
    }

    if (ext === void 0) {
      ext = '';
    }

    name = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["trim"])(name);

    if (ext && '.' + ext === name.toLowerCase().substr((ext.length + 1) * -1)) {
      name = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["trim"])(name.substr(0, name.length - 4));
    }

    return '' === name ? 'audio' : name;
  };

  _proto.playMp3 = function playMp3(url, name) {
    if (this.supported && this.supportedMp3) {
      this.player.src = url;
      this.player.play();
      Common_Events__WEBPACK_IMPORTED_MODULE_5__[/* pub */ "a"]('audio.start', [this.clearName(name, 'mp3'), 'mp3']);
    }
  };

  _proto.playOgg = function playOgg(url, name) {
    if (this.supported && this.supportedOgg) {
      this.player.src = url;
      this.player.play();
      name = this.clearName(name, 'oga');
      name = this.clearName(name, 'ogg');
      Common_Events__WEBPACK_IMPORTED_MODULE_5__[/* pub */ "a"]('audio.start', [name, 'ogg']);
    }
  };

  _proto.playWav = function playWav(url, name) {
    if (this.supported && this.supportedWav) {
      this.player.src = url;
      this.player.play();
      Common_Events__WEBPACK_IMPORTED_MODULE_5__[/* pub */ "a"]('audio.start', [this.clearName(name, 'wav'), 'wav']);
    }
  };

  _proto.playNotification = function playNotification() {
    if (this.supported && this.supportedMp3) {
      if (!this.notificator) {
        this.notificator = this.createNewObject();
        this.notificator.src = Common_Links__WEBPACK_IMPORTED_MODULE_4__[/* sound */ "D"]('new-mail.mp3');
      }

      if (this.notificator && this.notificator.play) {
        this.notificator.play();
      }
    }
  };

  return Audio;
}();

/* harmony default export */ __webpack_exports__["a"] = (new Audio());

/***/ }),
/* 84 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/to-length.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79);

var min = Math.min;

// `ToLength` abstract operation
// https://tc39.es/ecma262/#sec-tolength
module.exports = function (argument) {
  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
};


/***/ }),
/* 85 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js/modules/es.object.to-string.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 99);
var redefine = __webpack_require__(/*! ../internals/redefine */ 69);
var toString = __webpack_require__(/*! ../internals/object-to-string */ 216);

// `Object.prototype.toString` method
// https://tc39.es/ecma262/#sec-object.prototype.tostring
if (!TO_STRING_TAG_SUPPORT) {
  redefine(Object.prototype, 'toString', toString, { unsafe: true });
}


/***/ }),
/* 86 */
/*!********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/is-pure.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = true;


/***/ }),
/* 87 */
/*!****************************************!*\
  !*** ./dev/Component/AbstractInput.js ***!
  \****************************************/
/*! exports provided: AbstractInput, default */
/*! exports used: AbstractInput */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractInput; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Component/Abstract */ 32);








var AbstractInput = /*#__PURE__*/function (_AbstractComponent) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(AbstractInput, _AbstractComponent);

  /**
   * @param {Object} params
   */
  function AbstractInput(params) {
    var _this;

    _this = _AbstractComponent.call(this) || this;
    _this.value = params.value || '';
    _this.size = params.size || 0;
    _this.label = params.label || '';
    _this.preLabel = params.preLabel || '';
    _this.enable = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isUnd"])(params.enable) ? true : params.enable;
    _this.trigger = params.trigger && params.trigger.subscribe ? params.trigger : null;
    _this.placeholder = params.placeholder || '';
    _this.labeled = !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isUnd"])(params.label);
    _this.preLabeled = !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isUnd"])(params.preLabel);
    _this.triggered = !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isUnd"])(params.trigger) && !!_this.trigger;
    _this.classForTrigger = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    _this.className = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      var size = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].unwrap(_this.size),
          suffixValue = _this.trigger ? ' ' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["trim"])('settings-saved-trigger-input ' + _this.classForTrigger()) : '';
      return (0 < size ? 'span' + size : '') + suffixValue;
    });

    if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isUnd"])(params.width) && params.element) {
      var _context;

      _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context = params.element).call(_context, 'input,select,textarea').css('width', params.width);
    }

    _this.disposable.push(_this.className);

    if (_this.trigger) {
      _this.setTriggerState(_this.trigger());

      _this.disposable.push(_this.trigger.subscribe(_this.setTriggerState, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this)));
    }

    return _this;
  }

  var _proto = AbstractInput.prototype;

  _proto.setTriggerState = function setTriggerState(value) {
    switch (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pInt"])(value)) {
      case Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].TrueResult:
        this.classForTrigger('success');
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].FalseResult:
        this.classForTrigger('error');
        break;

      default:
        this.classForTrigger('');
        break;
    }
  };

  return AbstractInput;
}(Component_Abstract__WEBPACK_IMPORTED_MODULE_6__[/* AbstractComponent */ "a"]);



/***/ }),
/* 88 */,
/* 89 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/to-object.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);

// `ToObject` abstract operation
// https://tc39.es/ecma262/#sec-toobject
module.exports = function (argument) {
  return Object(requireObjectCoercible(argument));
};


/***/ }),
/* 90 */
/*!***************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/create-property-descriptor.js ***!
  \***************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function (bitmap, value) {
  return {
    enumerable: !(bitmap & 1),
    configurable: !(bitmap & 2),
    writable: !(bitmap & 4),
    value: value
  };
};


/***/ }),
/* 91 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/to-length.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(/*! ../internals/to-integer */ 142);

var min = Math.min;

// `ToLength` abstract operation
// https://tc39.es/ecma262/#sec-tolength
module.exports = function (argument) {
  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
};


/***/ }),
/* 92 */
/*!********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/classof.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 144);
var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 114);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');
// ES3 wrong here
var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';

// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
  try {
    return it[key];
  } catch (error) { /* empty */ }
};

// getting tag from ES6+ `Object.prototype.toString`
module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
  var O, tag, result;
  return it === undefined ? 'Undefined' : it === null ? 'Null'
    // @@toStringTag case
    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag
    // builtinTag case
    : CORRECT_ARGUMENTS ? classofRaw(O)
    // ES3 arguments fallback
    : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;
};


/***/ }),
/* 93 */
/*!***********************************!*\
  !*** ./dev/Promises/User/Ajax.js ***!
  \***********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Promises_User_Populator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Promises/User/Populator */ 406);
/* harmony import */ var Promises_AbstractAjax__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Promises/AbstractAjax */ 441);






var UserAjaxUserPromises = /*#__PURE__*/function (_AbstractAjaxPromises) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(UserAjaxUserPromises, _AbstractAjaxPromises);

  function UserAjaxUserPromises() {
    var _this;

    _this = _AbstractAjaxPromises.call(this) || this;
    _this.foldersTimeout = 0;
    return _this;
  }

  var _proto = UserAjaxUserPromises.prototype;

  _proto.foldersReload = function foldersReload(fTrigger) {
    return this.abort('Folders').postRequest('Folders', fTrigger).then(function (data) {
      Promises_User_Populator__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].foldersList(data.Result);
      Promises_User_Populator__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].foldersAdditionalParameters(data.Result);
      return true;
    });
  };

  _proto.foldersReloadWithTimeout = function foldersReloadWithTimeout(fTrigger) {
    var _this2 = this;

    this.setTrigger(fTrigger, true);
    window__WEBPACK_IMPORTED_MODULE_2___default.a.clearTimeout(this.foldersTimeout);
    this.foldersTimeout = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_1___default()(function () {
      _this2.foldersReload(fTrigger);
    }, 500);
  };

  _proto.folderDelete = function folderDelete(sFolderFullNameRaw, fTrigger) {
    return this.postRequest('FolderDelete', fTrigger, {
      'Folder': sFolderFullNameRaw
    });
  };

  _proto.folderCreate = function folderCreate(sNewFolderName, sParentName, fTrigger) {
    return this.postRequest('FolderCreate', fTrigger, {
      'Folder': sNewFolderName,
      'Parent': sParentName
    });
  };

  _proto.folderRename = function folderRename(sPrevFolderFullNameRaw, sNewFolderName, fTrigger) {
    return this.postRequest('FolderRename', fTrigger, {
      'Folder': sPrevFolderFullNameRaw,
      'NewFolderName': sNewFolderName
    });
  };

  _proto.attachmentsActions = function attachmentsActions(sAction, aHashes, fTrigger) {
    return this.postRequest('AttachmentsActions', fTrigger, {
      'Do': sAction,
      'Hashes': aHashes
    });
  };

  _proto.welcomeClose = function welcomeClose() {
    return this.postRequest('WelcomeClose');
  };

  return UserAjaxUserPromises;
}(Promises_AbstractAjax__WEBPACK_IMPORTED_MODULE_4__[/* AbstractAjaxPromises */ "a"]);

/* harmony default export */ __webpack_exports__["a"] = (new UserAjaxUserPromises());

/***/ }),
/* 94 */,
/* 95 */
/*!**********************************************************************!*\
  !*** ./node_modules/core-js/internals/create-property-descriptor.js ***!
  \**********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function (bitmap, value) {
  return {
    enumerable: !(bitmap & 1),
    configurable: !(bitmap & 2),
    writable: !(bitmap & 4),
    value: value
  };
};


/***/ }),
/* 96 */
/*!******************************************************!*\
  !*** ./node_modules/core-js/internals/set-global.js ***!
  \******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);

module.exports = function (key, value) {
  try {
    createNonEnumerableProperty(global, key, value);
  } catch (error) {
    global[key] = value;
  } return value;
};


/***/ }),
/* 97 */
/*!********************************************************!*\
  !*** ./node_modules/core-js/internals/shared-store.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var setGlobal = __webpack_require__(/*! ../internals/set-global */ 96);

var SHARED = '__core-js_shared__';
var store = global[SHARED] || setGlobal(SHARED, {});

module.exports = store;


/***/ }),
/* 98 */
/*!***************************************************!*\
  !*** ./node_modules/core-js/internals/is-pure.js ***!
  \***************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = false;


/***/ }),
/* 99 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js/internals/to-string-tag-support.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var test = {};

test[TO_STRING_TAG] = 'z';

module.exports = String(test) === '[object z]';


/***/ }),
/* 100 */
/*!********************************!*\
  !*** external "window.moment" ***!
  \********************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = window.moment;

/***/ }),
/* 101 */
/*!************************************!*\
  !*** external "window.progressJs" ***!
  \************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.progressJs;

/***/ }),
/* 102 */
/*!*************************************!*\
  !*** ./dev/Stores/User/Identity.js ***!
  \*************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);




var IdentityUserStore = function IdentityUserStore() {
  var _this = this;

  this.identities = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observableArray([]);
  this.identities.loading = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false).extend({
    throttle: 100
  });
  this.identitiesIDS = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
    return ___WEBPACK_IMPORTED_MODULE_1___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_1___default.a).call(___WEBPACK_IMPORTED_MODULE_1___default.a, _this.identities(), function (item) {
      return item ? item.id : null;
    }));
  });
};

/* harmony default export */ __webpack_exports__["a"] = (new IdentityUserStore());

/***/ }),
/* 103 */
/*!************************************!*\
  !*** ./dev/Stores/User/Contact.js ***!
  \************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Storage/Settings */ 5);




var ContactUserStore = /*#__PURE__*/function () {
  function ContactUserStore() {
    this.contacts = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]);
    this.contacts.loading = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
      throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Magics"].Time200ms
    });
    this.contacts.importing = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
      throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Magics"].Time200ms
    });
    this.contacts.syncing = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
      throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Magics"].Time200ms
    });
    this.contacts.exportingVcf = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
      throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Magics"].Time200ms
    });
    this.contacts.exportingCsv = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
      throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Magics"].Time200ms
    });
    this.allowContactsSync = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.enableContactsSync = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false);
    this.contactsSyncUrl = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
    this.contactsSyncUser = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
    this.contactsSyncPass = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
  }

  var _proto = ContactUserStore.prototype;

  _proto.populate = function populate() {
    this.allowContactsSync(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('ContactsSyncIsAllowed'));
    this.enableContactsSync(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('EnableContactsSync'));
    this.contactsSyncUrl(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('ContactsSyncUrl'));
    this.contactsSyncUser(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('ContactsSyncUser'));
    this.contactsSyncPass(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('ContactsSyncPassword'));
  };

  return ContactUserStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new ContactUserStore());

/***/ }),
/* 104 */
/*!**************************************************!*\
  !*** ./node_modules/core-js/internals/shared.js ***!
  \**************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 98);
var store = __webpack_require__(/*! ../internals/shared-store */ 97);

(module.exports = function (key, value) {
  return store[key] || (store[key] = value !== undefined ? value : {});
})('versions', []).push({
  version: '3.12.0',
  mode: IS_PURE ? 'pure' : 'global',
  copyright: '© 2021 Denis Pushkarev (zloirock.ru)'
});


/***/ }),
/* 105 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/hidden-keys.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 106 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/engine-user-agent.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 75);

module.exports = getBuiltIn('navigator', 'userAgent') || '';


/***/ }),
/* 107 */
/*!********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/iterate.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 260);
var toLength = __webpack_require__(/*! ../internals/to-length */ 91);
var bind = __webpack_require__(/*! ../internals/function-bind-context */ 116);
var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 262);
var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ 263);

var Result = function (stopped, result) {
  this.stopped = stopped;
  this.result = result;
};

module.exports = function (iterable, unboundFunction, options) {
  var that = options && options.that;
  var AS_ENTRIES = !!(options && options.AS_ENTRIES);
  var IS_ITERATOR = !!(options && options.IS_ITERATOR);
  var INTERRUPTED = !!(options && options.INTERRUPTED);
  var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);
  var iterator, iterFn, index, length, result, next, step;

  var stop = function (condition) {
    if (iterator) iteratorClose(iterator);
    return new Result(true, condition);
  };

  var callFn = function (value) {
    if (AS_ENTRIES) {
      anObject(value);
      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
    } return INTERRUPTED ? fn(value, stop) : fn(value);
  };

  if (IS_ITERATOR) {
    iterator = iterable;
  } else {
    iterFn = getIteratorMethod(iterable);
    if (typeof iterFn != 'function') throw TypeError('Target is not iterable');
    // optimisation for array iterators
    if (isArrayIteratorMethod(iterFn)) {
      for (index = 0, length = toLength(iterable.length); length > index; index++) {
        result = callFn(iterable[index]);
        if (result && result instanceof Result) return result;
      } return new Result(false);
    }
    iterator = iterFn.call(iterable);
  }

  next = iterator.next;
  while (!(step = next.call(iterator)).done) {
    try {
      result = callFn(step.value);
    } catch (error) {
      iteratorClose(iterator);
      throw error;
    }
    if (typeof result == 'object' && result && result instanceof Result) return result;
  } return new Result(false);
};


/***/ }),
/* 108 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/redefine.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);

module.exports = function (target, key, value, options) {
  if (options && options.enumerable) target[key] = value;
  else createNonEnumerableProperty(target, key, value);
};


/***/ }),
/* 109 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/new-promise-capability.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);

var PromiseCapability = function (C) {
  var resolve, reject;
  this.promise = new C(function ($$resolve, $$reject) {
    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
    resolve = $$resolve;
    reject = $$reject;
  });
  this.resolve = aFunction(resolve);
  this.reject = aFunction(reject);
};

// 25.4.1.5 NewPromiseCapability(C)
module.exports.f = function (C) {
  return new PromiseCapability(C);
};


/***/ }),
/* 110 */,
/* 111 */
/*!******************************************************!*\
  !*** ./node_modules/core-js/internals/shared-key.js ***!
  \******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var shared = __webpack_require__(/*! ../internals/shared */ 104);
var uid = __webpack_require__(/*! ../internals/uid */ 136);

var keys = shared('keys');

module.exports = function (key) {
  return keys[key] || (keys[key] = uid(key));
};


/***/ }),
/* 112 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/enum-bug-keys.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// IE8- don't enum bug keys
module.exports = [
  'constructor',
  'hasOwnProperty',
  'isPrototypeOf',
  'propertyIsEnumerable',
  'toLocaleString',
  'toString',
  'valueOf'
];


/***/ }),
/* 113 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/iterators.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 114 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/classof-raw.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

var toString = {}.toString;

module.exports = function (it) {
  return toString.call(it).slice(8, -1);
};


/***/ }),
/* 115 */
/*!*************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/require-object-coercible.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// `RequireObjectCoercible` abstract operation
// https://tc39.es/ecma262/#sec-requireobjectcoercible
module.exports = function (it) {
  if (it == undefined) throw TypeError("Can't call method on " + it);
  return it;
};


/***/ }),
/* 116 */
/*!**********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/function-bind-context.js ***!
  \**********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);

// optional / simple context binding
module.exports = function (fn, that, length) {
  aFunction(fn);
  if (that === undefined) return fn;
  switch (length) {
    case 0: return function () {
      return fn.call(that);
    };
    case 1: return function (a) {
      return fn.call(that, a);
    };
    case 2: return function (a, b) {
      return fn.call(that, a, b);
    };
    case 3: return function (a, b, c) {
      return fn.call(that, a, b, c);
    };
  }
  return function (/* ...args */) {
    return fn.apply(that, arguments);
  };
};


/***/ }),
/* 117 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/to-object.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 115);

// `ToObject` abstract operation
// https://tc39.es/ecma262/#sec-toobject
module.exports = function (argument) {
  return Object(requireObjectCoercible(argument));
};


/***/ }),
/* 118 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/engine-is-node.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var classof = __webpack_require__(/*! ../internals/classof-raw */ 114);
var global = __webpack_require__(/*! ../internals/global */ 31);

module.exports = classof(global.process) == 'process';


/***/ }),
/* 119 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js/modules/es.regexp.to-string.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var redefine = __webpack_require__(/*! ../internals/redefine */ 69);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var fails = __webpack_require__(/*! ../internals/fails */ 37);
var flags = __webpack_require__(/*! ../internals/regexp-flags */ 202);

var TO_STRING = 'toString';
var RegExpPrototype = RegExp.prototype;
var nativeToString = RegExpPrototype[TO_STRING];

var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });
// FF44- RegExp#toString has a wrong name
var INCORRECT_NAME = nativeToString.name != TO_STRING;

// `RegExp.prototype.toString` method
// https://tc39.es/ecma262/#sec-regexp.prototype.tostring
if (NOT_GENERIC || INCORRECT_NAME) {
  redefine(RegExp.prototype, TO_STRING, function toString() {
    var R = anObject(this);
    var p = String(R.source);
    var rf = R.flags;
    var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);
    return '/' + p + '/' + f;
  }, { unsafe: true });
}


/***/ }),
/* 120 */
/*!****************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-method-uses-to-length.js ***!
  \****************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var fails = __webpack_require__(/*! ../internals/fails */ 43);
var has = __webpack_require__(/*! ../internals/has */ 54);

var defineProperty = Object.defineProperty;
var cache = {};

var thrower = function (it) { throw it; };

module.exports = function (METHOD_NAME, options) {
  if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];
  if (!options) options = {};
  var method = [][METHOD_NAME];
  var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;
  var argument0 = has(options, 0) ? options[0] : thrower;
  var argument1 = has(options, 1) ? options[1] : undefined;

  return cache[METHOD_NAME] = !!method && !fails(function () {
    if (ACCESSORS && !DESCRIPTORS) return true;
    var O = { length: -1 };

    if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });
    else O[1] = 1;

    method.call(O, argument0, argument1);
  });
};


/***/ }),
/* 121 */
/*!*****************************!*\
  !*** ./dev/Common/Jassl.js ***!
  \*****************************/
/*! exports provided: jassl */
/*! exports used: jassl */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return jassl; });
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ 62);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_1__);

 // let rainloopCaches = window.caches && window.caches.open ? window.caches : null;

/**
 * @param {src} src
 * @param {boolean} async = false
 * @returns {Promise}
 */

function jassl(src, async) {
  if (async === void 0) {
    async = false;
  }

  if (!_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default.a || !_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default.a.all) {
    throw new Error('Promises are not available your environment.');
  }

  if (!src) {
    throw new Error('src should not be empty.');
  }

  return new _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_0___default.a(function (resolve, reject) {
    var element = window__WEBPACK_IMPORTED_MODULE_1___default.a.document.createElement('script');

    element.onload = function () {
      resolve(src);
    };

    element.onerror = function () {
      reject(new Error(src));
    };

    element.async = true === async;
    element.src = src;
    window__WEBPACK_IMPORTED_MODULE_1___default.a.document.body.appendChild(element);
  })
  /* .then((s) => {
  const found = s && rainloopCaches ? s.match(/rainloop\/v\/([^\/]+)\/static\//) : null;
  if (found && found[1])
  {
  rainloopCaches.open('rainloop-offline-' + found[1]).then(
  (cache) => cache.add(s)
  ).catch(() => {
  rainloopCaches = null;
  });
  }
  return s;
  })*/
  ;
}

/***/ }),
/* 122 */
/*!*******************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/values.js ***!
  \*******************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/values */ 341);

/***/ }),
/* 123 */
/*!*****************************!*\
  !*** ./dev/Stores/Theme.js ***!
  \*****************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Storage/Settings */ 5);




var ThemeStore = /*#__PURE__*/function () {
  function ThemeStore() {
    this.themes = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]);
    this.themeBackgroundName = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
    this.themeBackgroundHash = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
    this.theme = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('').extend({
      limitedList: this.themes
    });
  }

  var _proto = ThemeStore.prototype;

  _proto.populate = function populate() {
    var themes = Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["appSettingsGet"]('themes');
    this.themes(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isArray"])(themes) ? themes : []);
    this.theme(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('Theme'));
    this.themeBackgroundName(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('UserBackgroundName'));
    this.themeBackgroundHash(Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('UserBackgroundHash'));
  };

  return ThemeStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new ThemeStore());

/***/ }),
/* 124 */
/*!*****************************************!*\
  !*** ./dev/Stores/User/Notification.js ***!
  \*****************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Events */ 23);
/* harmony import */ var Common_Audio__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Audio */ 83);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Storage/Settings */ 5);








var NotificationUserStore = /*#__PURE__*/function () {
  function NotificationUserStore() {
    var _this = this;

    this.enableSoundNotification = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    this.soundNotificationIsSupported = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    this.allowDesktopNotification = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    this.desktopNotificationPermissions = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      _this.allowDesktopNotification();

      var result = Common_Enums__WEBPACK_IMPORTED_MODULE_3__["DesktopNotification"].NotSupported;

      var NotificationClass = _this.notificationClass();

      if (NotificationClass && NotificationClass.permission) {
        switch (NotificationClass.permission.toLowerCase()) {
          case 'granted':
            result = Common_Enums__WEBPACK_IMPORTED_MODULE_3__["DesktopNotification"].Allowed;
            break;

          case 'denied':
            result = Common_Enums__WEBPACK_IMPORTED_MODULE_3__["DesktopNotification"].Denied;
            break;

          case 'default':
            result = Common_Enums__WEBPACK_IMPORTED_MODULE_3__["DesktopNotification"].NotAllowed;
            break;
          // no default
        }
      } else if (window__WEBPACK_IMPORTED_MODULE_1___default.a.webkitNotifications && window__WEBPACK_IMPORTED_MODULE_1___default.a.webkitNotifications.checkPermission) {
        result = window__WEBPACK_IMPORTED_MODULE_1___default.a.webkitNotifications.checkPermission();
      }

      return result;
    }).extend({
      notify: 'always'
    });
    this.enableDesktopNotification = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed({
      read: function read() {
        return _this.allowDesktopNotification() && Common_Enums__WEBPACK_IMPORTED_MODULE_3__["DesktopNotification"].Allowed === _this.desktopNotificationPermissions();
      },
      write: function write(value) {
        if (value) {
          var NotificationClass = _this.notificationClass(),
              permission = _this.desktopNotificationPermissions();

          if (NotificationClass && Common_Enums__WEBPACK_IMPORTED_MODULE_3__["DesktopNotification"].Allowed === permission) {
            _this.allowDesktopNotification(true);
          } else if (NotificationClass && Common_Enums__WEBPACK_IMPORTED_MODULE_3__["DesktopNotification"].NotAllowed === permission) {
            NotificationClass.requestPermission(function () {
              _this.allowDesktopNotification.valueHasMutated();

              if (Common_Enums__WEBPACK_IMPORTED_MODULE_3__["DesktopNotification"].Allowed === _this.desktopNotificationPermissions()) {
                if (_this.allowDesktopNotification()) {
                  _this.allowDesktopNotification.valueHasMutated();
                } else {
                  _this.allowDesktopNotification(true);
                }
              } else {
                if (_this.allowDesktopNotification()) {
                  _this.allowDesktopNotification(false);
                } else {
                  _this.allowDesktopNotification.valueHasMutated();
                }
              }
            });
          } else {
            _this.allowDesktopNotification(false);
          }
        } else {
          _this.allowDesktopNotification(false);
        }
      }
    }).extend({
      notify: 'always'
    });

    if (!this.enableDesktopNotification.valueHasMutated) {
      this.enableDesktopNotification.valueHasMutated = function () {
        _this.allowDesktopNotification.valueHasMutated();
      };
    }

    this.computers();
    this.initNotificationPlayer();
  }

  var _proto = NotificationUserStore.prototype;

  _proto.computers = function computers() {
    var _this2 = this;

    this.isDesktopNotificationSupported = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return Common_Enums__WEBPACK_IMPORTED_MODULE_3__["DesktopNotification"].NotSupported !== _this2.desktopNotificationPermissions();
    });
    this.isDesktopNotificationDenied = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return Common_Enums__WEBPACK_IMPORTED_MODULE_3__["DesktopNotification"].NotSupported === _this2.desktopNotificationPermissions() || Common_Enums__WEBPACK_IMPORTED_MODULE_3__["DesktopNotification"].Denied === _this2.desktopNotificationPermissions();
    });
  };

  _proto.initNotificationPlayer = function initNotificationPlayer() {
    if (Common_Audio__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"] && Common_Audio__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].supportedNotification) {
      this.soundNotificationIsSupported(true);
    } else {
      this.enableSoundNotification(false);
      this.soundNotificationIsSupported(false);
    }
  };

  _proto.playSoundNotification = function playSoundNotification(skipSetting) {
    if (Common_Audio__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"] && Common_Audio__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].supportedNotification && (skipSetting ? true : this.enableSoundNotification())) {
      Common_Audio__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].playNotification();
    }
  };

  _proto.displayDesktopNotification = function displayDesktopNotification(imageSrc, title, text, nessageData) {
    if (this.enableDesktopNotification()) {
      var NotificationClass = this.notificationClass(),
          notification = NotificationClass ? new NotificationClass(title, {
        body: text,
        icon: imageSrc
      }) : null;

      if (notification) {
        if (notification.show) {
          notification.show();
        }

        if (nessageData) {
          notification.onclick = function () {
            window__WEBPACK_IMPORTED_MODULE_1___default.a.focus();

            if (nessageData.Folder && nessageData.Uid) {
              Common_Events__WEBPACK_IMPORTED_MODULE_4__[/* pub */ "a"]('mailbox.message.show', [nessageData.Folder, nessageData.Uid]);
            }
          };
        }

        _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0___default()(function (localNotifications) {
          return function () {
            if (localNotifications.cancel) {
              localNotifications.cancel();
            } else if (localNotifications.close) {
              localNotifications.close();
            }
          };
        }(notification), Common_Enums__WEBPACK_IMPORTED_MODULE_3__["Magics"].Time7s);
      }
    }
  };

  _proto.populate = function populate() {
    this.enableSoundNotification(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('SoundNotification'));
    this.enableDesktopNotification(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('DesktopNotifications'));
  }
  /**
   * @returns {*|null}
   */
  ;

  _proto.notificationClass = function notificationClass() {
    return window__WEBPACK_IMPORTED_MODULE_1___default.a.Notification && window__WEBPACK_IMPORTED_MODULE_1___default.a.Notification.requestPermission ? window__WEBPACK_IMPORTED_MODULE_1___default.a.Notification : null;
  };

  return NotificationUserStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new NotificationUserStore());

/***/ }),
/* 125 */,
/* 126 */
/*!***********************************!*\
  !*** (webpack)/buildin/global.js ***!
  \***********************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

var g;

// This works in non-strict mode
g = (function() {
	return this;
})();

try {
	// This works if eval is allowed (see CSP)
	g = g || new Function("return this")();
} catch (e) {
	// This works if the window reference is available
	if (typeof window === "object") g = window;
}

// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}

module.exports = g;


/***/ }),
/* 127 */
/*!******************************************************************************!*\
  !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***!
  \******************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 55);
var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 179);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 95);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 73);
var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 133);
var has = __webpack_require__(/*! ../internals/has */ 44);
var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 134);

// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

// `Object.getOwnPropertyDescriptor` method
// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
  O = toIndexedObject(O);
  P = toPrimitive(P, true);
  if (IE8_DOM_DEFINE) try {
    return $getOwnPropertyDescriptor(O, P);
  } catch (error) { /* empty */ }
  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);
};


/***/ }),
/* 128 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/indexed-object.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 37);
var classof = __webpack_require__(/*! ../internals/classof-raw */ 74);

var split = ''.split;

// fallback for non-array-like ES3 and non-enumerable old V8 strings
module.exports = fails(function () {
  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
  // eslint-disable-next-line no-prototype-builtins -- safe
  return !Object('z').propertyIsEnumerable(0);
}) ? function (it) {
  return classof(it) == 'String' ? split.call(it, '') : Object(it);
} : Object;


/***/ }),
/* 129 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/inspect-source.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var store = __webpack_require__(/*! ../internals/shared-store */ 97);

var functionToString = Function.toString;

// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper
if (typeof store.inspectSource != 'function') {
  store.inspectSource = function (it) {
    return functionToString.call(it);
  };
}

module.exports = store.inspectSource;


/***/ }),
/* 130 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/internal-state.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 208);
var global = __webpack_require__(/*! ../internals/global */ 30);
var isObject = __webpack_require__(/*! ../internals/is-object */ 49);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);
var objectHas = __webpack_require__(/*! ../internals/has */ 44);
var shared = __webpack_require__(/*! ../internals/shared-store */ 97);
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 111);
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 105);

var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
var WeakMap = global.WeakMap;
var set, get, has;

var enforce = function (it) {
  return has(it) ? get(it) : set(it, {});
};

var getterFor = function (TYPE) {
  return function (it) {
    var state;
    if (!isObject(it) || (state = get(it)).type !== TYPE) {
      throw TypeError('Incompatible receiver, ' + TYPE + ' required');
    } return state;
  };
};

if (NATIVE_WEAK_MAP) {
  var store = shared.state || (shared.state = new WeakMap());
  var wmget = store.get;
  var wmhas = store.has;
  var wmset = store.set;
  set = function (it, metadata) {
    if (wmhas.call(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
    metadata.facade = it;
    wmset.call(store, it, metadata);
    return metadata;
  };
  get = function (it) {
    return wmget.call(store, it) || {};
  };
  has = function (it) {
    return wmhas.call(store, it);
  };
} else {
  var STATE = sharedKey('state');
  hiddenKeys[STATE] = true;
  set = function (it, metadata) {
    if (objectHas(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
    metadata.facade = it;
    createNonEnumerableProperty(it, STATE, metadata);
    return metadata;
  };
  get = function (it) {
    return objectHas(it, STATE) ? it[STATE] : {};
  };
  has = function (it) {
    return objectHas(it, STATE);
  };
}

module.exports = {
  set: set,
  get: get,
  has: has,
  enforce: enforce,
  getterFor: getterFor
};


/***/ }),
/* 131 */
/*!******************************************************!*\
  !*** ./node_modules/core-js/internals/a-function.js ***!
  \******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function (it) {
  if (typeof it != 'function') {
    throw TypeError(String(it) + ' is not a function');
  } return it;
};


/***/ }),
/* 132 */
/*!***********************************!*\
  !*** ./dev/View/Popup/Compose.js ***!
  \***********************************/
/*! exports provided: ComposePopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComposePopupView", function() { return ComposePopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ComposePopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-interval */ 57);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ 203);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! core-js/modules/es.string.link.js */ 204);
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_12__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ 85);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_14__);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ 119);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_15__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_16__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_17__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_18__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_19__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_21__);
/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Jua */ 205);
/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(Jua__WEBPACK_IMPORTED_MODULE_22__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Momentor__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Common/Momentor */ 61);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Common_HtmlEditor__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! Common/HtmlEditor */ 226);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! Stores/User/Settings */ 35);
/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! Stores/User/Identity */ 102);
/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! Stores/User/Account */ 46);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! Stores/User/Pgp */ 41);
/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! Stores/User/Message */ 13);
/* harmony import */ var Stores_Social__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! Stores/Social */ 26);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! Common/Events */ 23);
/* harmony import */ var Model_ComposeAttachment__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! Model/ComposeAttachment */ 309);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);




var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2;













































var ComposePopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["popup"])({
  name: 'View/Popup/Compose',
  templateID: 'PopupsCompose'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["command"])(function (self) {
  return self.canBeSentOrSaved();
}), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["command"])(function (self) {
  return self.canBeSentOrSaved();
}), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["command"])(function (self) {
  return self.isDraftFolderMessage();
}), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["command"])(function (self) {
  return self.canBeSentOrSaved();
}), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["command"])(function (self) {
  return self.allowContacts;
}), _dec7 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["command"])(function (self) {
  return self.dropboxEnabled();
}), _dec8 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["command"])(function (self) {
  return self.driveEnabled();
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(ComposePopupView, _AbstractViewNext);

  function ComposePopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;

    var fEmailOutInHelper = function fEmailOutInHelper(context, identity, name, isIn) {
      if (identity && context && identity[name]() && (isIn ? true : context[name]())) {
        var identityEmail = identity[name]();
        var list = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(context[name]()).split(/[,]/);
        list = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, list, function (email) {
          email = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(email);
          return email && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(identityEmail) !== email;
        });

        if (isIn) {
          list.push(identityEmail);
        }

        context[name](list.join(','));
      }
    };

    _this.oLastMessage = null;
    _this.oEditor = null;
    _this.aDraftInfo = null;
    _this.sInReplyTo = '';
    _this.bFromDraft = false;
    _this.sReferences = '';
    _this.sLastFocusedField = 'to';
    _this.resizerTrigger = ___WEBPACK_IMPORTED_MODULE_18___default.a.bind(_this.resizerTrigger, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    _this.allowContacts = !!Stores_User_App__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].contactsIsAllowed();
    _this.allowFolders = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_41__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_23__["Capa"].Folders);
    _this.bSkipNextHide = false;
    _this.composeInEdit = Stores_User_App__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].composeInEdit;
    _this.editorDefaultType = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].editorDefaultType;
    _this.capaOpenPGP = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].capaOpenPGP;
    _this.identitiesDropdownTrigger = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.to = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable('');
    _this.to.focused = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.cc = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable('');
    _this.cc.focused = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.bcc = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable('');
    _this.bcc.focused = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.replyTo = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable('');
    _this.replyTo.focused = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false); // this.to.subscribe((v) => console.log(v));

    ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      switch (true) {
        case _this.to.focused():
          _this.sLastFocusedField = 'to';
          break;

        case _this.cc.focused():
          _this.sLastFocusedField = 'cc';
          break;

        case _this.bcc.focused():
          _this.sLastFocusedField = 'bcc';
          break;
        // no default
      }
    }).extend({
      notify: 'always'
    });
    _this.subject = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable('');
    _this.subject.focused = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.isHtml = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.requestDsn = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.requestReadReceipt = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.markAsImportant = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.sendError = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.sendSuccessButSaveError = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.savedError = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.sendButtonSuccess = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      return !_this.sendError() && !_this.sendSuccessButSaveError();
    });
    _this.sendErrorDesc = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable('');
    _this.savedErrorDesc = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable('');

    _this.sendError.subscribe(function (value) {
      if (!value) {
        _this.sendErrorDesc('');
      }
    });

    _this.savedError.subscribe(function (value) {
      if (!value) {
        _this.savedErrorDesc('');
      }
    });

    _this.sendSuccessButSaveError.subscribe(function (value) {
      if (!value) {
        _this.savedErrorDesc('');
      }
    });

    _this.savedTime = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(0);
    _this.savedTimeText = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      return 0 < _this.savedTime() ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/SAVED_TIME', {
        'TIME': Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_29__["format"])(_this.savedTime() - 1, 'LT')
      }) : '';
    });
    _this.emptyToError = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.emptyToErrorTooltip = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      return _this.emptyToError() ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/EMPTY_TO_ERROR_DESC') : '';
    });
    _this.attachmentsInProcessError = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.attachmentsInErrorError = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.attachmentsErrorTooltip = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      var result = '';

      switch (true) {
        case _this.attachmentsInProcessError():
          result = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/ATTACHMENTS_UPLOAD_ERROR_DESC');
          break;

        case _this.attachmentsInErrorError():
          result = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/ATTACHMENTS_ERROR_DESC');
          break;
        // no default
      }

      return result;
    });
    _this.showCc = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.showBcc = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.showReplyTo = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);

    _this.cc.subscribe(function (value) {
      if (false === _this.showCc() && 0 < value.length) {
        _this.showCc(true);
      }
    });

    _this.bcc.subscribe(function (value) {
      if (false === _this.showBcc() && 0 < value.length) {
        _this.showBcc(true);
      }
    });

    _this.replyTo.subscribe(function (value) {
      if (false === _this.showReplyTo() && 0 < value.length) {
        _this.showReplyTo(true);
      }
    });

    _this.draftFolder = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable('');
    _this.draftUid = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable('');
    _this.sending = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.saving = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.attachments = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observableArray([]);
    _this.attachmentsInProcess = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, _this.attachments(), function (item) {
        return item && !item.complete();
      });
    });
    _this.attachmentsInReady = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, _this.attachments(), function (item) {
        return item && item.complete();
      });
    });
    _this.attachmentsInError = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, _this.attachments(), function (item) {
        return item && '' !== item.error();
      });
    });
    _this.attachmentsCount = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      return _this.attachments().length;
    });
    _this.attachmentsInErrorCount = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      return _this.attachmentsInError().length;
    });
    _this.attachmentsInProcessCount = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      return _this.attachmentsInProcess().length;
    });
    _this.isDraftFolderMessage = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      return '' !== _this.draftFolder() && '' !== _this.draftUid();
    });
    _this.attachmentsPlace = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);

    _this.attachments.subscribe(_this.resizerTrigger);

    _this.attachmentsPlace.subscribe(_this.resizerTrigger);

    _this.attachmentsInErrorCount.subscribe(function (value) {
      if (0 === value) {
        _this.attachmentsInErrorError(false);
      }
    });

    _this.composeUploaderButton = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(null);
    _this.composeUploaderDropPlace = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(null);
    _this.dragAndDropEnabled = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.dragAndDropOver = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false).extend({
      throttle: 1
    });
    _this.dragAndDropVisible = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false).extend({
      throttle: 1
    });
    _this.attacheMultipleAllowed = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.addAttachmentEnabled = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.composeEditorArea = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(null);
    _this.identities = Stores_User_Identity__WEBPACK_IMPORTED_MODULE_34__[/* default */ "a"].identities;
    _this.identitiesOptions = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, Stores_User_Identity__WEBPACK_IMPORTED_MODULE_34__[/* default */ "a"].identities(), function (item) {
        return {
          'item': item,
          'optValue': item.id(),
          'optText': item.formattedName()
        };
      });
    });
    _this.currentIdentity = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(_this.identities()[0] ? _this.identities()[0] : null);

    _this.currentIdentity.extend({
      toggleSubscribe: [Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this), function (identity) {
        fEmailOutInHelper(Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this), identity, 'bcc');
        fEmailOutInHelper(Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this), identity, 'replyTo');
      }, function (identity) {
        fEmailOutInHelper(Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this), identity, 'bcc', true);
        fEmailOutInHelper(Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this), identity, 'replyTo', true);
      }]
    });

    _this.currentIdentityView = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      var item = _this.currentIdentity();

      return item ? item.formattedName() : 'unknown';
    });

    _this.to.subscribe(function (value) {
      if (_this.emptyToError() && 0 < value.length) {
        _this.emptyToError(false);
      }
    });

    _this.attachmentsInProcess.subscribe(function (value) {
      if (_this.attachmentsInProcessError() && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isArray"])(value) && 0 === value.length) {
        _this.attachmentsInProcessError(false);
      }
    });

    _this.resizer = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false).extend({
      throttle: 50
    });

    _this.resizer.subscribe(function () {
      if (_this.oEditor) {
        _this.oEditor.resize();
      }
    });

    _this.canBeSentOrSaved = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].computed(function () {
      return !_this.sending() && !_this.saving();
    });
    _this.sendMessageResponse = ___WEBPACK_IMPORTED_MODULE_18___default.a.bind(_this.sendMessageResponse, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    _this.saveMessageResponse = ___WEBPACK_IMPORTED_MODULE_18___default.a.bind(_this.saveMessageResponse, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    Common_Events__WEBPACK_IMPORTED_MODULE_42__[/* sub */ "b"]('interval.2m', function () {
      if (_this.modalVisibility() && !Stores_User_Folder__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].draftFolderNotEnabled() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].allowDraftAutosave() && !_this.isEmptyForm(false) && !_this.saving() && !_this.sending() && !_this.savedError()) {
        _this.saveCommand();
      }
    });

    _this.showCc.subscribe(_this.resizerTrigger);

    _this.showBcc.subscribe(_this.resizerTrigger);

    _this.showReplyTo.subscribe(_this.resizerTrigger);

    _this.dropboxEnabled = Stores_Social__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].dropbox.enabled;
    _this.dropboxApiKey = Stores_Social__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].dropbox.apiKey;
    _this.driveEnabled = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(Common_Globals__WEBPACK_IMPORTED_MODULE_26__["bXMLHttpRequestSupported"] && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_41__["settingsGet"]('AllowGoogleSocial') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_41__["settingsGet"]('AllowGoogleSocialDrive') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_41__["settingsGet"]('GoogleClientID') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_41__["settingsGet"]('GoogleApiKey'));
    _this.driveVisible = ko__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].observable(false);
    _this.driveCallback = ___WEBPACK_IMPORTED_MODULE_18___default.a.bind(_this.driveCallback, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    _this.onMessageUploadAttachments = ___WEBPACK_IMPORTED_MODULE_18___default.a.bind(_this.onMessageUploadAttachments, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    _this.bDisabeCloseOnEsc = true;
    _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_23__["KeyState"].Compose;
    _this.tryToClosePopup = ___WEBPACK_IMPORTED_MODULE_18___default.a.debounce(___WEBPACK_IMPORTED_MODULE_18___default.a.bind(_this.tryToClosePopup, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this)), Common_Enums__WEBPACK_IMPORTED_MODULE_23__["Magics"].Time200ms);
    _this.emailsSource = ___WEBPACK_IMPORTED_MODULE_18___default.a.bind(_this.emailsSource, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    _this.autosaveFunction = ___WEBPACK_IMPORTED_MODULE_18___default.a.bind(_this.autosaveFunction, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    _this.iTimer = 0;
    return _this;
  }

  var _proto = ComposePopupView.prototype;

  _proto.sendCommand = function sendCommand() {
    var sTo = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(this.to()),
        sCc = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(this.cc()),
        sBcc = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(this.bcc());
    var sSentFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].sentFolder();
    this.attachmentsInProcessError(false);
    this.attachmentsInErrorError(false);
    this.emptyToError(false);

    if (0 < this.attachmentsInProcess().length) {
      this.attachmentsInProcessError(true);
      this.attachmentsPlace(true);
    } else if (0 < this.attachmentsInError().length) {
      this.attachmentsInErrorError(true);
      this.attachmentsPlace(true);
    }

    if ('' === sTo && '' === sCc && '' === sBcc) {
      this.emptyToError(true);
    }

    if (!this.emptyToError() && !this.attachmentsInErrorError() && !this.attachmentsInProcessError()) {
      if (Stores_User_Settings__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].replySameFolder()) {
        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isArray"])(this.aDraftInfo) && 3 === this.aDraftInfo.length && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNormal"])(this.aDraftInfo[2]) && 0 < this.aDraftInfo[2].length) {
          sSentFolder = this.aDraftInfo[2];
        }
      }

      if (!this.allowFolders) {
        sSentFolder = Common_Consts__WEBPACK_IMPORTED_MODULE_25__[/* UNUSED_OPTION_VALUE */ "r"];
      }

      if ('' === sSentFolder) {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 316), [Common_Enums__WEBPACK_IMPORTED_MODULE_23__["SetSystemFoldersNotification"].Sent]);
      } else {
        this.sendError(false);
        this.sending(true);

        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isArray"])(this.aDraftInfo) && 3 === this.aDraftInfo.length) {
          var flagsCache = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_30__[/* getMessageFlagsFromCache */ "j"])(this.aDraftInfo[2], this.aDraftInfo[1]);

          if (flagsCache) {
            if ('forward' === this.aDraftInfo[0]) {
              flagsCache[3] = true;
            } else {
              flagsCache[2] = true;
            }

            Object(Common_Cache__WEBPACK_IMPORTED_MODULE_30__[/* setMessageFlagsToCache */ "t"])(this.aDraftInfo[2], this.aDraftInfo[1], flagsCache);
            Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_44__[/* getApp */ "a"])().reloadFlagsCurrentMessageListAndMessageFromCache();
            Object(Common_Cache__WEBPACK_IMPORTED_MODULE_30__[/* setFolderHash */ "q"])(this.aDraftInfo[2], '');
          }
        }

        sSentFolder = Common_Consts__WEBPACK_IMPORTED_MODULE_25__[/* UNUSED_OPTION_VALUE */ "r"] === sSentFolder ? '' : sSentFolder;
        Object(Common_Cache__WEBPACK_IMPORTED_MODULE_30__[/* setFolderHash */ "q"])(this.draftFolder(), '');
        Object(Common_Cache__WEBPACK_IMPORTED_MODULE_30__[/* setFolderHash */ "q"])(sSentFolder, '');
        Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_40__[/* default */ "a"].sendMessage(this.sendMessageResponse, this.currentIdentity() ? this.currentIdentity().id() : '', this.draftFolder(), this.draftUid(), sSentFolder, sTo, this.cc(), this.bcc(), this.replyTo(), this.subject(), this.oEditor ? this.oEditor.isHtml() : false, this.oEditor ? this.oEditor.getData(true) : '', this.prepearAttachmentsForSendOrSave(), this.aDraftInfo, this.sInReplyTo, this.sReferences, this.requestDsn(), this.requestReadReceipt(), this.markAsImportant());
      }
    }
  };

  _proto.saveCommand = function saveCommand() {
    if (!this.allowFolders) {
      return false;
    }

    if (Stores_User_Folder__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].draftFolderNotEnabled()) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 316), [Common_Enums__WEBPACK_IMPORTED_MODULE_23__["SetSystemFoldersNotification"].Draft]);
    } else {
      this.savedError(false);
      this.saving(true);
      this.autosaveStart();
      Object(Common_Cache__WEBPACK_IMPORTED_MODULE_30__[/* setFolderHash */ "q"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].draftFolder(), '');
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_40__[/* default */ "a"].saveMessage(this.saveMessageResponse, this.currentIdentity() ? this.currentIdentity().id() : '', this.draftFolder(), this.draftUid(), Stores_User_Folder__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].draftFolder(), this.to(), this.cc(), this.bcc(), this.replyTo(), this.subject(), this.oEditor ? this.oEditor.isHtml() : false, this.oEditor ? this.oEditor.getData(true) : '', this.prepearAttachmentsForSendOrSave(), this.aDraftInfo, this.sInReplyTo, this.sReferences, this.markAsImportant());
    }

    return true;
  };

  _proto.deleteCommand = function deleteCommand() {
    var _this2 = this;

    var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 238);

    if (!Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["isPopupVisible"])(PopupsAskViewModel) && this.modalVisibility()) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["showScreenPopup"])(PopupsAskViewModel, [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'), function () {
        if (_this2.modalVisibility()) {
          Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_44__[/* getApp */ "a"])().deleteMessagesFromFolderWithoutCheck(_this2.draftFolder(), [_this2.draftUid()]);
          Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["hideScreenPopup"])(ComposePopupView);
        }
      }]);
    }
  };

  _proto.skipCommand = function skipCommand() {
    this.bSkipNextHide = true;

    if (this.modalVisibility() && !this.saving() && !this.sending() && !Stores_User_Folder__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].draftFolderNotEnabled() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].allowDraftAutosave()) {
      this.saveCommand();
    }

    this.tryToClosePopup();
  };

  _proto.contactsCommand = function contactsCommand() {
    var _this3 = this;

    if (this.allowContacts) {
      this.skipCommand();

      ___WEBPACK_IMPORTED_MODULE_18___default.a.delay(function () {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Contacts */ 427), [true, _this3.sLastFocusedField]);
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_23__["Magics"].Time200ms);
    }
  };

  _proto.dropboxCommand = function dropboxCommand() {
    var _this4 = this;

    if (window__WEBPACK_IMPORTED_MODULE_17___default.a.Dropbox) {
      window__WEBPACK_IMPORTED_MODULE_17___default.a.Dropbox.choose({
        success: function success(files) {
          if (files && files[0] && files[0].link) {
            _this4.addDropboxAttachment(files[0]);
          }
        },
        linkType: 'direct',
        multiselect: false
      });
    }

    return true;
  };

  _proto.driveCommand = function driveCommand() {
    this.driveOpenPopup();
    return true;
  };

  _proto.autosaveFunction = function autosaveFunction() {
    if (this.modalVisibility() && !Stores_User_Folder__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].draftFolderNotEnabled() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].allowDraftAutosave() && !this.isEmptyForm(false) && !this.saving() && !this.sending() && !this.savedError()) {
      this.saveCommand();
    }

    this.autosaveStart();
  };

  _proto.autosaveStart = function autosaveStart() {
    window__WEBPACK_IMPORTED_MODULE_17___default.a.clearTimeout(this.iTimer);
    this.iTimer = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_5___default()(this.autosaveFunction, Common_Enums__WEBPACK_IMPORTED_MODULE_23__["Magics"].Time1m);
  };

  _proto.autosaveStop = function autosaveStop() {
    window__WEBPACK_IMPORTED_MODULE_17___default.a.clearTimeout(this.iTimer);
  };

  _proto.emailsSource = function emailsSource(oData, fResponse) {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_44__[/* getApp */ "a"])().getAutocomplete(oData.term, function (aData) {
      fResponse(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, aData, function (oEmailItem) {
        return oEmailItem.toLine(false);
      }));
    });
  };

  _proto.openOpenPgpPopup = function openOpenPgpPopup() {
    var _this5 = this;

    if (Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_37__[/* default */ "a"].capaOpenPGP() && this.oEditor && !this.oEditor.isHtml()) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["showScreenPopup"])(__webpack_require__(/*! View/Popup/ComposeOpenPgp */ 553), [function (result) {
        _this5.editor(function (editor) {
          editor.setPlain(result);
        });
      }, this.oEditor.getData(false), this.currentIdentity(), this.to(), this.cc(), this.bcc()]);
    }
  };

  _proto.reloadDraftFolder = function reloadDraftFolder() {
    var draftFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].draftFolder();

    if ('' !== draftFolder && Common_Consts__WEBPACK_IMPORTED_MODULE_25__[/* UNUSED_OPTION_VALUE */ "r"] !== draftFolder) {
      Object(Common_Cache__WEBPACK_IMPORTED_MODULE_30__[/* setFolderHash */ "q"])(draftFolder, '');

      if (Stores_User_Folder__WEBPACK_IMPORTED_MODULE_36__[/* default */ "a"].currentFolderFullNameRaw() === draftFolder) {
        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_44__[/* getApp */ "a"])().reloadMessageList(true);
      } else {
        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_44__[/* getApp */ "a"])().folderInformation(draftFolder);
      }
    }
  };

  _proto.findIdentityByMessage = function findIdentityByMessage(composeType, message) {
    var resultIndex = 1000,
        resultIdentity = null;

    var identities = Stores_User_Identity__WEBPACK_IMPORTED_MODULE_34__[/* default */ "a"].identities(),
        identitiesCache = {},
        fEachHelper = function fEachHelper(item) {
      if (item && item.email && identitiesCache[item.email]) {
        if (!resultIdentity || resultIndex > identitiesCache[item.email][1]) {
          resultIdentity = identitiesCache[item.email][0];
          resultIndex = identitiesCache[item.email][1];
        }
      }
    };

    ___WEBPACK_IMPORTED_MODULE_18___default.a.each(identities, function (item, index) {
      identitiesCache[item.email()] = [item, index];
    });

    if (message) {
      switch (composeType) {
        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Empty:
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Reply:
        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].ReplyAll:
        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Forward:
        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].ForwardAsAttachment:
          ___WEBPACK_IMPORTED_MODULE_18___default.a.each(___WEBPACK_IMPORTED_MODULE_18___default.a.union(message.to, message.cc, message.bcc), fEachHelper);

          if (!resultIdentity) {
            ___WEBPACK_IMPORTED_MODULE_18___default.a.each(message.deliveredTo, fEachHelper);
          }

          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Draft:
          ___WEBPACK_IMPORTED_MODULE_18___default.a.each(___WEBPACK_IMPORTED_MODULE_18___default.a.union(message.from, message.replyTo), fEachHelper);

          break;
        // no default
      }
    }

    return resultIdentity || identities[0] || null;
  };

  _proto.selectIdentity = function selectIdentity(identity) {
    if (identity && identity.item) {
      this.currentIdentity(identity.item);
      this.setSignatureFromIdentity(identity.item);
    }
  };

  _proto.sendMessageResponse = function sendMessageResponse(statusResult, data) {
    var result = false,
        message = '';
    this.sending(false);

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_23__["StorageResultType"].Success === statusResult && data && data.Result) {
      result = true;

      if (this.modalVisibility()) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["delegateRun"])(this, 'closeCommand');
      }
    }

    if (this.modalVisibility() && !result) {
      if (data && Common_Enums__WEBPACK_IMPORTED_MODULE_23__["Notification"].CantSaveMessage === data.ErrorCode) {
        this.sendSuccessButSaveError(true);
        this.savedErrorDesc(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/SAVED_ERROR_ON_SEND')));
      } else {
        message = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["getNotification"])(data && data.ErrorCode ? data.ErrorCode : Common_Enums__WEBPACK_IMPORTED_MODULE_23__["Notification"].CantSendMessage, data && data.ErrorMessage ? data.ErrorMessage : '');
        this.sendError(true);
        this.sendErrorDesc(message || Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_23__["Notification"].CantSendMessage));
      }
    }

    this.reloadDraftFolder();
  };

  _proto.saveMessageResponse = function saveMessageResponse(statusResult, oData) {
    var result = false;
    this.saving(false);

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_23__["StorageResultType"].Success === statusResult && oData && oData.Result) {
      if (oData.Result.NewFolder && oData.Result.NewUid) {
        result = true;

        if (this.bFromDraft) {
          var message = Stores_User_Message__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].message();

          if (message && this.draftFolder() === message.folderFullNameRaw && this.draftUid() === message.uid) {
            Stores_User_Message__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].message(null);
          }
        }

        this.draftFolder(oData.Result.NewFolder);
        this.draftUid(oData.Result.NewUid);
        this.savedTime(window__WEBPACK_IMPORTED_MODULE_17___default.a.Math.round(new window__WEBPACK_IMPORTED_MODULE_17___default.a.Date().getTime() / 1000));

        if (this.bFromDraft) {
          Object(Common_Cache__WEBPACK_IMPORTED_MODULE_30__[/* setFolderHash */ "q"])(this.draftFolder(), '');
        }
      }
    }

    if (!result) {
      this.savedError(true);
      this.savedErrorDesc(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_23__["Notification"].CantSaveMessage));
    }

    this.reloadDraftFolder();
  };

  _proto.onHide = function onHide() {
    this.autosaveStop();

    if (!this.bSkipNextHide) {
      Stores_User_App__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].composeInEdit(false);
      this.reset();
    }

    this.bSkipNextHide = false;
    this.to.focused(false);
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["routeOn"])();
  };

  _proto.editor = function editor(fOnInit) {
    var _this6 = this;

    if (fOnInit) {
      if (!this.oEditor && this.composeEditorArea()) {
        // _.delay(() => {
        this.oEditor = new Common_HtmlEditor__WEBPACK_IMPORTED_MODULE_31__["HtmlEditor"](this.composeEditorArea(), null, function () {
          fOnInit(_this6.oEditor);

          _this6.resizerTrigger();
        }, function (bHtml) {
          _this6.isHtml(!!bHtml);
        }); // }, 1000);
      } else if (this.oEditor) {
        fOnInit(this.oEditor);
        this.resizerTrigger();
      }
    }
  };

  _proto.converSignature = function converSignature(signature) {
    var limit = 10,
        fromLine = '';
    var moments = [],
        momentRegx = /{{MOMENT:([^}]+)}}/g;
    signature = signature.replace(/[\r]/g, '');
    fromLine = this.oLastMessage ? this.emailArrayToStringLineHelper(this.oLastMessage.from, true) : '';

    if ('' !== fromLine) {
      signature = signature.replace(/{{FROM-FULL}}/g, fromLine);

      if (-1 === fromLine.indexOf(' ') && 0 < fromLine.indexOf('@')) {
        fromLine = fromLine.replace(/@[\S]+/, '');
      }

      signature = signature.replace(/{{FROM}}/g, fromLine);
    }

    signature = signature.replace(/[\s]{1,2}{{FROM}}/g, '{{FROM}}');
    signature = signature.replace(/[\s]{1,2}{{FROM-FULL}}/g, '{{FROM-FULL}}');
    signature = signature.replace(/{{FROM}}/g, '');
    signature = signature.replace(/{{FROM-FULL}}/g, '');

    if (-1 < signature.indexOf('{{DATE}}')) {
      signature = signature.replace(/{{DATE}}/g, Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_29__["format"])(0, 'llll'));
    }

    if (-1 < signature.indexOf('{{TIME}}')) {
      signature = signature.replace(/{{TIME}}/g, Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_29__["format"])(0, 'LT'));
    }

    if (-1 < signature.indexOf('{{MOMENT:')) {
      try {
        var match = null;

        while (null !== (match = momentRegx.exec(signature))) {
          // eslint-disable-line no-cond-assign
          if (match && match[0] && match[1]) {
            moments.push([match[0], match[1]]);
          }

          limit -= 1;

          if (0 === limit) {
            break;
          }
        }

        if (moments && 0 < moments.length) {
          ___WEBPACK_IMPORTED_MODULE_18___default.a.each(moments, function (data) {
            signature = signature.replace(data[0], Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_29__["format"])(0, data[1]));
          });
        }

        signature = signature.replace(/{{MOMENT:[^}]+}}/g, '');
      } catch (e) {} // eslint-disable-line no-empty

    }

    return signature;
  };

  _proto.setSignatureFromIdentity = function setSignatureFromIdentity(identity) {
    var _this7 = this;

    if (identity) {
      this.editor(function (editor) {
        var isHtml = false,
            signature = identity.signature();

        if ('' !== signature) {
          if (':HTML:' === signature.substr(0, 6)) {
            isHtml = true;
            signature = signature.substr(6);
          }
        }

        editor.setSignature(_this7.converSignature(signature), isHtml, !!identity.signatureInsertBefore());
      });
    }
  }
  /**
   * @param {string=} type = ComposeType.Empty
   * @param {?MessageModel|Array=} oMessageOrArray = null
   * @param {Array=} aToEmails = null
   * @param {Array=} aCcEmails = null
   * @param {Array=} aBccEmails = null
   * @param {string=} sCustomSubject = null
   * @param {string=} sCustomPlainText = null
   */
  ;

  _proto.onShow = function onShow(type, oMessageOrArray, aToEmails, aCcEmails, aBccEmails, sCustomSubject, sCustomPlainText) {
    var _this8 = this;

    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["routeOff"])();
    this.autosaveStart();

    if (Stores_User_App__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].composeInEdit()) {
      type = type || Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Empty;

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Empty !== type) {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Ask */ 238), [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/DISCARD_UNSAVED_DATA'), function () {
          _this8.initOnShow(type, oMessageOrArray, aToEmails, aCcEmails, aBccEmails, sCustomSubject, sCustomPlainText);
        }, null, null, null, false]);
      } else {
        this.addEmailsTo(this.to, aToEmails);
        this.addEmailsTo(this.cc, aCcEmails);
        this.addEmailsTo(this.bcc, aBccEmails);

        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNormal"])(sCustomSubject) && '' !== sCustomSubject && '' === this.subject()) {
          this.subject(sCustomSubject);
        }
      }
    } else {
      this.initOnShow(type, oMessageOrArray, aToEmails, aCcEmails, aBccEmails, sCustomSubject, sCustomPlainText);
    }
  };

  _proto.onWarmUp = function onWarmUp() {
    if (this.modalVisibility && !this.modalVisibility()) {
      this.editor(function (editor) {
        return editor.modeToggle(false);
      });
    }
  }
  /**
   * @param {Function} fKoValue
   * @param {Array} emails
   */
  ;

  _proto.addEmailsTo = function addEmailsTo(fKoValue, emails) {
    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNonEmptyArray"])(emails)) {
      var value = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(fKoValue()),
          values = ___WEBPACK_IMPORTED_MODULE_18___default.a.uniq(___WEBPACK_IMPORTED_MODULE_18___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, emails, function (item) {
        return item ? item.toLine(false) : null;
      })));

      fKoValue(value + ('' === value ? '' : ', ') + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(values.join(', ')));
    }
  }
  /**
   *
   * @param {Array} aList
   * @param {boolean} bFriendly
   * @returns {string}
   */
  ;

  _proto.emailArrayToStringLineHelper = function emailArrayToStringLineHelper(aList, bFriendly) {
    bFriendly = !!bFriendly;
    return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, aList, function (item) {
      return item.toLine(bFriendly);
    }).join(', ');
  }
  /**
   * @param {string=} sType = ComposeType.Empty
   * @param {?MessageModel|Array=} oMessageOrArray = null
   * @param {Array=} aToEmails = null
   * @param {Array=} aCcEmails = null
   * @param {Array=} aBccEmails = null
   * @param {string=} sCustomSubject = null
   * @param {string=} sCustomPlainText = null
   */
  ;

  _proto.initOnShow = function initOnShow(sType, oMessageOrArray, aToEmails, aCcEmails, aBccEmails, sCustomSubject, sCustomPlainText) {
    var _this9 = this;

    Stores_User_App__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].composeInEdit(true);
    var sFrom = '',
        sTo = '',
        sCc = '',
        sDate = '',
        sSubject = '',
        sText = '',
        sReplyTitle = '',
        identity = null,
        aDraftInfo = null,
        message = null;
    var excludeEmail = {},
        mEmail = Stores_User_Account__WEBPACK_IMPORTED_MODULE_35__[/* default */ "a"].email(),
        lineComposeType = sType || Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Empty;
    oMessageOrArray = oMessageOrArray || null;

    if (oMessageOrArray && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNormal"])(oMessageOrArray)) {
      message = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isArray"])(oMessageOrArray) && 1 === oMessageOrArray.length ? oMessageOrArray[0] : !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isArray"])(oMessageOrArray) ? oMessageOrArray : null;
    }

    this.oLastMessage = message;

    if (null !== mEmail) {
      excludeEmail[mEmail] = true;
    }

    this.reset();
    identity = this.findIdentityByMessage(lineComposeType, message);

    if (identity) {
      excludeEmail[identity.email()] = true;
    }

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNonEmptyArray"])(aToEmails)) {
      this.to(this.emailArrayToStringLineHelper(aToEmails));
    }

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNonEmptyArray"])(aCcEmails)) {
      this.cc(this.emailArrayToStringLineHelper(aCcEmails));
    }

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNonEmptyArray"])(aBccEmails)) {
      this.bcc(this.emailArrayToStringLineHelper(aBccEmails));
    }

    if ('' !== lineComposeType && message) {
      sDate = Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_29__["format"])(message.dateTimeStampInUTC(), 'FULL');
      sSubject = message.subject();
      aDraftInfo = message.aDraftInfo;
      var clonedText = $__WEBPACK_IMPORTED_MODULE_19___default()(message.body).clone();

      if (clonedText) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["clearBqSwitcher"])(clonedText);
        sText = clonedText.html();
      }

      var resplyAllParts = null;

      switch (lineComposeType) {
        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Empty:
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Reply:
          this.to(this.emailArrayToStringLineHelper(message.replyEmails(excludeEmail)));
          this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["replySubjectAdd"])('Re', sSubject));
          this.prepearMessageAttachments(message, lineComposeType);
          this.aDraftInfo = ['reply', message.uid, message.folderFullNameRaw];
          this.sInReplyTo = message.sMessageId;
          this.sReferences = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(this.sInReplyTo + ' ' + message.sReferences);
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].ReplyAll:
          resplyAllParts = message.replyAllEmails(excludeEmail);
          this.to(this.emailArrayToStringLineHelper(resplyAllParts[0]));
          this.cc(this.emailArrayToStringLineHelper(resplyAllParts[1]));
          this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["replySubjectAdd"])('Re', sSubject));
          this.prepearMessageAttachments(message, lineComposeType);
          this.aDraftInfo = ['reply', message.uid, message.folderFullNameRaw];
          this.sInReplyTo = message.sMessageId;
          this.sReferences = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(this.sInReplyTo + ' ' + message.references());
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Forward:
          this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["replySubjectAdd"])('Fwd', sSubject));
          this.prepearMessageAttachments(message, lineComposeType);
          this.aDraftInfo = ['forward', message.uid, message.folderFullNameRaw];
          this.sInReplyTo = message.sMessageId;
          this.sReferences = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(this.sInReplyTo + ' ' + message.sReferences);
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].ForwardAsAttachment:
          this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["replySubjectAdd"])('Fwd', sSubject));
          this.prepearMessageAttachments(message, lineComposeType);
          this.aDraftInfo = ['forward', message.uid, message.folderFullNameRaw];
          this.sInReplyTo = message.sMessageId;
          this.sReferences = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(this.sInReplyTo + ' ' + message.sReferences);
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Draft:
          this.to(this.emailArrayToStringLineHelper(message.to));
          this.cc(this.emailArrayToStringLineHelper(message.cc));
          this.bcc(this.emailArrayToStringLineHelper(message.bcc));
          this.replyTo(this.emailArrayToStringLineHelper(message.replyTo));
          this.bFromDraft = true;
          this.draftFolder(message.folderFullNameRaw);
          this.draftUid(message.uid);
          this.subject(sSubject);
          this.prepearMessageAttachments(message, lineComposeType);
          this.aDraftInfo = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNonEmptyArray"])(aDraftInfo) && 3 === aDraftInfo.length ? aDraftInfo : null;
          this.sInReplyTo = message.sInReplyTo;
          this.sReferences = message.sReferences;
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].EditAsNew:
          this.to(this.emailArrayToStringLineHelper(message.to));
          this.cc(this.emailArrayToStringLineHelper(message.cc));
          this.bcc(this.emailArrayToStringLineHelper(message.bcc));
          this.replyTo(this.emailArrayToStringLineHelper(message.replyTo));
          this.subject(sSubject);
          this.prepearMessageAttachments(message, lineComposeType);
          this.aDraftInfo = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNonEmptyArray"])(aDraftInfo) && 3 === aDraftInfo.length ? aDraftInfo : null;
          this.sInReplyTo = message.sInReplyTo;
          this.sReferences = message.sReferences;
          break;
        // no default
      }

      switch (lineComposeType) {
        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Reply:
        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].ReplyAll:
          sFrom = message.fromToLine(false, true);
          sReplyTitle = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/REPLY_MESSAGE_TITLE', {
            'DATETIME': sDate,
            'EMAIL': sFrom
          });
          sText = '<br /><br />' + sReplyTitle + ':' + '<br /><br />' + '<blockquote>' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(sText) + '</blockquote>';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Forward:
          sFrom = message.fromToLine(false, true);
          sTo = message.toToLine(false, true);
          sCc = message.ccToLine(false, true);
          sText = '<br /><br />' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/FORWARD_MESSAGE_TOP_TITLE') + '<br />' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/FORWARD_MESSAGE_TOP_FROM') + ': ' + sFrom + '<br />' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/FORWARD_MESSAGE_TOP_TO') + ': ' + sTo + (0 < sCc.length ? '<br />' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/FORWARD_MESSAGE_TOP_CC') + ': ' + sCc : '') + '<br />' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/FORWARD_MESSAGE_TOP_SENT') + ': ' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["encodeHtml"])(sDate) + '<br />' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('COMPOSE/FORWARD_MESSAGE_TOP_SUBJECT') + ': ' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["encodeHtml"])(sSubject) + '<br /><br />' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(sText) + '<br /><br />';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].ForwardAsAttachment:
          sText = '';
          break;
        // no default
      }

      this.editor(function (editor) {
        editor.setHtml(sText, false);

        if (Common_Enums__WEBPACK_IMPORTED_MODULE_23__["EditorDefaultType"].PlainForced === _this9.editorDefaultType() || !message.isHtml() && Common_Enums__WEBPACK_IMPORTED_MODULE_23__["EditorDefaultType"].HtmlForced !== _this9.editorDefaultType()) {
          editor.modeToggle(false);
        }

        if (identity && Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Draft !== lineComposeType && Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].EditAsNew !== lineComposeType) {
          _this9.setSignatureFromIdentity(identity);
        }

        _this9.setFocusInPopup();
      });
    } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Empty === lineComposeType) {
      this.subject(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNormal"])(sCustomSubject) ? '' + sCustomSubject : '');
      sText = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNormal"])(sCustomPlainText) ? '' + sCustomPlainText : '';
      this.editor(function (editor) {
        editor.setHtml(sText, false);

        if (Common_Enums__WEBPACK_IMPORTED_MODULE_23__["EditorDefaultType"].Html !== _this9.editorDefaultType() && Common_Enums__WEBPACK_IMPORTED_MODULE_23__["EditorDefaultType"].HtmlForced !== _this9.editorDefaultType()) {
          editor.modeToggle(false);
        }

        if (identity) {
          _this9.setSignatureFromIdentity(identity);
        }

        _this9.setFocusInPopup();
      });
    } else if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNonEmptyArray"])(oMessageOrArray)) {
      ___WEBPACK_IMPORTED_MODULE_18___default.a.each(oMessageOrArray, function (item) {
        _this9.addMessageAsAttachment(item);
      });

      this.editor(function (editor) {
        editor.setHtml('', false);

        if (Common_Enums__WEBPACK_IMPORTED_MODULE_23__["EditorDefaultType"].Html !== _this9.editorDefaultType() && Common_Enums__WEBPACK_IMPORTED_MODULE_23__["EditorDefaultType"].HtmlForced !== _this9.editorDefaultType()) {
          editor.modeToggle(false);
        }

        if (identity && Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Draft !== lineComposeType && Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].EditAsNew !== lineComposeType) {
          _this9.setSignatureFromIdentity(identity);
        }

        _this9.setFocusInPopup();
      });
    } else {
      this.setFocusInPopup();
    }

    var downloads = this.getAttachmentsDownloadsForUpload();

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNonEmptyArray"])(downloads)) {
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_40__[/* default */ "a"].messageUploadAttachments(this.onMessageUploadAttachments, downloads);
    }

    if (identity) {
      this.currentIdentity(identity);
    }

    this.resizerTrigger();
  };

  _proto.onMessageUploadAttachments = function onMessageUploadAttachments(sResult, oData) {
    var _this10 = this;

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_23__["StorageResultType"].Success === sResult && oData && oData.Result) {
      if (!this.viewModelVisibility()) {
        ___WEBPACK_IMPORTED_MODULE_18___default.a.each(oData.Result, function (id, tempName) {
          var attachment = _this10.getAttachmentById(id);

          if (attachment) {
            attachment.tempName(tempName);
            attachment.waiting(false).uploading(false).complete(true);
          }
        });
      }
    } else {
      this.setMessageAttachmentFailedDownloadText();
    }
  };

  _proto.setFocusInPopup = function setFocusInPopup() {
    var _this11 = this;

    if (!Common_Globals__WEBPACK_IMPORTED_MODULE_26__["bMobileDevice"]) {
      ___WEBPACK_IMPORTED_MODULE_18___default.a.delay(function () {
        if ('' === _this11.to()) {
          _this11.to.focused(true);
        } else if (_this11.oEditor) {
          if (!_this11.to.focused()) {
            _this11.oEditor.focus();
          }
        }
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_23__["Magics"].Time100ms);
    }
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    this.resizerTrigger();
  };

  _proto.tryToClosePopup = function tryToClosePopup() {
    var _this12 = this;

    var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 238);

    if (!Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["isPopupVisible"])(PopupsAskViewModel) && this.modalVisibility()) {
      if (this.bSkipNextHide || this.isEmptyForm() && !this.draftUid()) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["delegateRun"])(this, 'closeCommand');
      } else {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_45__["showScreenPopup"])(PopupsAskViewModel, [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('POPUPS_ASK/DESC_WANT_CLOSE_THIS_WINDOW'), function () {
          if (_this12.modalVisibility()) {
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["delegateRun"])(_this12, 'closeCommand');
          }
        }]);
      }
    }
  };

  _proto.onBuild = function onBuild() {
    var _this13 = this;

    this.initUploader();
    key__WEBPACK_IMPORTED_MODULE_21___default()('ctrl+q, command+q, ctrl+w, command+w', Common_Enums__WEBPACK_IMPORTED_MODULE_23__["KeyState"].Compose, Common_Utils__WEBPACK_IMPORTED_MODULE_24__["noopFalse"]);
    key__WEBPACK_IMPORTED_MODULE_21___default()('`', Common_Enums__WEBPACK_IMPORTED_MODULE_23__["KeyState"].Compose, function () {
      if (_this13.oEditor && !_this13.oEditor.hasFocus() && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["inFocus"])()) {
        _this13.identitiesDropdownTrigger(true);

        return false;
      }

      return true;
    });
    key__WEBPACK_IMPORTED_MODULE_21___default()('ctrl+`', Common_Enums__WEBPACK_IMPORTED_MODULE_23__["KeyState"].Compose, function () {
      _this13.identitiesDropdownTrigger(true);

      return false;
    });
    key__WEBPACK_IMPORTED_MODULE_21___default()('esc, ctrl+down, command+down', Common_Enums__WEBPACK_IMPORTED_MODULE_23__["KeyState"].Compose, function () {
      _this13.skipCommand();

      return false;
    });

    if (this.allowFolders) {
      key__WEBPACK_IMPORTED_MODULE_21___default()('ctrl+s, command+s', Common_Enums__WEBPACK_IMPORTED_MODULE_23__["KeyState"].Compose, function () {
        _this13.saveCommand();

        return false;
      });
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_41__["appSettingsGet"]('allowCtrlEnterOnCompose')) {
      key__WEBPACK_IMPORTED_MODULE_21___default()('ctrl+enter, command+enter', Common_Enums__WEBPACK_IMPORTED_MODULE_23__["KeyState"].Compose, function () {
        _this13.sendCommand();

        return false;
      });
    }

    key__WEBPACK_IMPORTED_MODULE_21___default()('shift+esc', Common_Enums__WEBPACK_IMPORTED_MODULE_23__["KeyState"].Compose, function () {
      if (_this13.modalVisibility()) {
        _this13.tryToClosePopup();
      }

      return false;
    });
    Common_Events__WEBPACK_IMPORTED_MODULE_42__[/* sub */ "b"]('window.resize.real', this.resizerTrigger);
    Common_Events__WEBPACK_IMPORTED_MODULE_42__[/* sub */ "b"]('window.resize.real', ___WEBPACK_IMPORTED_MODULE_18___default.a.debounce(this.resizerTrigger, Common_Enums__WEBPACK_IMPORTED_MODULE_23__["Magics"].Time50ms));
    Stores_Social__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].appendDropbox();

    if (this.driveEnabled()) {
      $__WEBPACK_IMPORTED_MODULE_19___default.a.getScript('https://apis.google.com/js/api.js', function () {
        if (window__WEBPACK_IMPORTED_MODULE_17___default.a.gapi) {
          _this13.driveVisible(true);
        }
      });
    }

    _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_6___default()(function () {
      if (_this13.modalVisibility() && _this13.oEditor) {
        _this13.oEditor.resize();
      }
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_23__["Magics"].Time5s);
  };

  _proto.driveCallback = function driveCallback(accessToken, data) {
    var _this14 = this;

    if (data && window__WEBPACK_IMPORTED_MODULE_17___default.a.XMLHttpRequest && window__WEBPACK_IMPORTED_MODULE_17___default.a.google && data[window__WEBPACK_IMPORTED_MODULE_17___default.a.google.picker.Response.ACTION] === window__WEBPACK_IMPORTED_MODULE_17___default.a.google.picker.Action.PICKED && data[window__WEBPACK_IMPORTED_MODULE_17___default.a.google.picker.Response.DOCUMENTS] && data[window__WEBPACK_IMPORTED_MODULE_17___default.a.google.picker.Response.DOCUMENTS][0] && data[window__WEBPACK_IMPORTED_MODULE_17___default.a.google.picker.Response.DOCUMENTS][0].id) {
      var request = new window__WEBPACK_IMPORTED_MODULE_17___default.a.XMLHttpRequest();
      request.open('GET', 'https://www.googleapis.com/drive/v2/files/' + data[window__WEBPACK_IMPORTED_MODULE_17___default.a.google.picker.Response.DOCUMENTS][0].id);
      request.setRequestHeader('Authorization', 'Bearer ' + accessToken);
      request.addEventListener('load', function () {
        if (request && request.responseText) {
          var response = window__WEBPACK_IMPORTED_MODULE_17___default.a.JSON.parse(request.responseText),
              fExport = function fExport(item, mimeType, ext) {
            if (item && item.exportLinks) {
              if (item.exportLinks[mimeType]) {
                response.downloadUrl = item.exportLinks[mimeType];
                response.title = item.title + '.' + ext;
                response.mimeType = mimeType;
              } else if (item.exportLinks['application/pdf']) {
                response.downloadUrl = item.exportLinks['application/pdf'];
                response.title = item.title + '.pdf';
                response.mimeType = 'application/pdf';
              }
            }
          };

          if (response && !response.downloadUrl && response.mimeType && response.exportLinks) {
            switch (response.mimeType.toString().toLowerCase()) {
              case 'application/vnd.google-apps.document':
                fExport(response, 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'docx');
                break;

              case 'application/vnd.google-apps.spreadsheet':
                fExport(response, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'xlsx');
                break;

              case 'application/vnd.google-apps.drawing':
                fExport(response, 'image/png', 'png');
                break;

              case 'application/vnd.google-apps.presentation':
                fExport(response, 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'pptx');
                break;

              default:
                fExport(response, 'application/pdf', 'pdf');
                break;
            }
          }

          if (response && response.downloadUrl) {
            _this14.addDriveAttachment(response, accessToken);
          }
        }
      });
      request.send();
    }
  };

  _proto.driveCreatePiker = function driveCreatePiker(authToken) {
    var _this15 = this;

    if (window__WEBPACK_IMPORTED_MODULE_17___default.a.gapi && authToken && authToken.access_token) {
      window__WEBPACK_IMPORTED_MODULE_17___default.a.gapi.load('picker', {
        callback: function callback() {
          if (window__WEBPACK_IMPORTED_MODULE_17___default.a.google && window__WEBPACK_IMPORTED_MODULE_17___default.a.google.picker) {
            var drivePicker = new window__WEBPACK_IMPORTED_MODULE_17___default.a.google.picker.PickerBuilder() // .addView(window.google.picker.ViewId.FOLDERS)
            .addView(window__WEBPACK_IMPORTED_MODULE_17___default.a.google.picker.ViewId.DOCS).setAppId(Storage_Settings__WEBPACK_IMPORTED_MODULE_41__["settingsGet"]('GoogleClientID')).setOAuthToken(authToken.access_token).setCallback(___WEBPACK_IMPORTED_MODULE_18___default.a.bind(_this15.driveCallback, _this15, authToken.access_token)).enableFeature(window__WEBPACK_IMPORTED_MODULE_17___default.a.google.picker.Feature.NAV_HIDDEN) // .setOrigin(window.location.protocol + '//' + window.location.host)
            .build();
            drivePicker.setVisible(true);
          }
        }
      });
    }
  };

  _proto.driveOpenPopup = function driveOpenPopup() {
    var _this16 = this;

    if (window__WEBPACK_IMPORTED_MODULE_17___default.a.gapi) {
      window__WEBPACK_IMPORTED_MODULE_17___default.a.gapi.load('auth', {
        callback: function callback() {
          var authToken = window__WEBPACK_IMPORTED_MODULE_17___default.a.gapi.auth.getToken(),
              fResult = function fResult(authResult) {
            if (authResult && !authResult.error) {
              var token = window__WEBPACK_IMPORTED_MODULE_17___default.a.gapi.auth.getToken();

              if (token) {
                _this16.driveCreatePiker(token);
              }

              return true;
            }

            return false;
          };

          if (!authToken) {
            window__WEBPACK_IMPORTED_MODULE_17___default.a.gapi.auth.authorize({
              'client_id': Storage_Settings__WEBPACK_IMPORTED_MODULE_41__["settingsGet"]('GoogleClientID'),
              'scope': 'https://www.googleapis.com/auth/drive.readonly',
              'immediate': true
            }, function (authResult) {
              if (!fResult(authResult)) {
                window__WEBPACK_IMPORTED_MODULE_17___default.a.gapi.auth.authorize({
                  'client_id': Storage_Settings__WEBPACK_IMPORTED_MODULE_41__["settingsGet"]('GoogleClientID'),
                  'scope': 'https://www.googleapis.com/auth/drive.readonly',
                  'immediate': false
                }, fResult);
              }
            });
          } else {
            _this16.driveCreatePiker(authToken);
          }
        }
      });
    }
  }
  /**
   * @param {string} id
   * @returns {?Object}
   */
  ;

  _proto.getAttachmentById = function getAttachmentById(id) {
    return _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, this.attachments(), function (item) {
      return item && id === item.id;
    });
  };

  _proto.cancelAttachmentHelper = function cancelAttachmentHelper(id, oJua) {
    var _this17 = this;

    return function () {
      var attachment = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, _this17.attachments(), function (item) {
        return item && item.id === id;
      });

      if (attachment) {
        _this17.attachments.remove(attachment);

        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["delegateRunOnDestroy"])(attachment);

        if (oJua) {
          oJua.cancel(id);
        }
      }
    };
  };

  _proto.initUploader = function initUploader() {
    var _this18 = this;

    if (this.composeUploaderButton()) {
      var uploadCache = {},
          attachmentSizeLimit = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["pInt"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_41__["settingsGet"]('AttachmentLimit')),
          oJua = new Jua__WEBPACK_IMPORTED_MODULE_22___default.a({
        'action': Object(Common_Links__WEBPACK_IMPORTED_MODULE_27__[/* upload */ "G"])(),
        'name': 'uploader',
        'queueSize': 2,
        'multipleSizeLimit': 50,
        'clickElement': this.composeUploaderButton(),
        'dragAndDropElement': this.composeUploaderDropPlace()
      });

      if (oJua) {
        oJua // .on('onLimitReached', (limit) => {
        // 	alert(limit);
        // })
        .on('onDragEnter', function () {
          _this18.dragAndDropOver(true);
        }).on('onDragLeave', function () {
          _this18.dragAndDropOver(false);
        }).on('onBodyDragEnter', function () {
          _this18.attachmentsPlace(true);

          _this18.dragAndDropVisible(true);
        }).on('onBodyDragLeave', function () {
          _this18.dragAndDropVisible(false);
        }).on('onProgress', function (id, loaded, total) {
          var item = uploadCache[id];

          if (!item) {
            item = _this18.getAttachmentById(id);

            if (item) {
              uploadCache[id] = item;
            }
          }

          if (item) {
            item.progress(window__WEBPACK_IMPORTED_MODULE_17___default.a.Math.floor(loaded / total * 100));
          }
        }).on('onSelect', function (sId, oData) {
          _this18.dragAndDropOver(false);

          var fileName = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isUnd"])(oData.FileName) ? '' : oData.FileName.toString(),
              size = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNormal"])(oData.Size) ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["pInt"])(oData.Size) : null,
              attachment = new Model_ComposeAttachment__WEBPACK_IMPORTED_MODULE_43__[/* ComposeAttachmentModel */ "a"](sId, fileName, size);
          attachment.cancel = _this18.cancelAttachmentHelper(sId, oJua);

          _this18.attachments.push(attachment);

          _this18.attachmentsPlace(true);

          if (0 < size && 0 < attachmentSizeLimit && attachmentSizeLimit < size) {
            attachment.waiting(false).uploading(true).complete(true).error(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('UPLOAD/ERROR_FILE_IS_TOO_BIG'));
            return false;
          }

          return true;
        }).on('onStart', function (id) {
          var item = uploadCache[id];

          if (!item) {
            item = _this18.getAttachmentById(id);

            if (item) {
              uploadCache[id] = item;
            }
          }

          if (item) {
            item.waiting(false).uploading(true).complete(false);
          }
        }).on('onComplete', function (id, result, data) {
          var attachment = _this18.getAttachmentById(id),
              errorCode = data && data.Result && data.Result.ErrorCode ? data.Result.ErrorCode : null,
              attachmentJson = result && data && data.Result && data.Result.Attachment ? data.Result.Attachment : null;

          var error = '';

          if (null !== errorCode) {
            error = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["getUploadErrorDescByCode"])(errorCode);
          } else if (!attachmentJson) {
            error = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('UPLOAD/ERROR_UNKNOWN');
          }

          if (attachment) {
            if ('' !== error && 0 < error.length) {
              attachment.waiting(false).uploading(false).complete(true).error(error);
            } else if (attachmentJson) {
              attachment.waiting(false).uploading(false).complete(true);
              attachment.initByUploadJson(attachmentJson);
            }

            if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isUnd"])(uploadCache[id])) {
              delete uploadCache[id];
            }
          }
        });
        this.addAttachmentEnabled(true).dragAndDropEnabled(oJua.isDragAndDropSupported());
      } else {
        this.addAttachmentEnabled(false).dragAndDropEnabled(false);
      }
    }
  }
  /**
   * @returns {Object}
   */
  ;

  _proto.prepearAttachmentsForSendOrSave = function prepearAttachmentsForSendOrSave() {
    var result = {};

    ___WEBPACK_IMPORTED_MODULE_18___default.a.each(this.attachmentsInReady(), function (item) {
      if (item && '' !== item.tempName() && item.enabled()) {
        result[item.tempName()] = [item.fileName(), item.isInline ? '1' : '0', item.CID, item.contentLocation];
      }
    });

    return result;
  }
  /**
   * @param {MessageModel} message
   */
  ;

  _proto.addMessageAsAttachment = function addMessageAsAttachment(message) {
    if (message) {
      var temp = message.subject();
      temp = '.eml' === temp.substr(-4).toLowerCase() ? temp : temp + '.eml';
      var attachment = new Model_ComposeAttachment__WEBPACK_IMPORTED_MODULE_43__[/* ComposeAttachmentModel */ "a"](message.requestHash, temp, message.size());
      attachment.fromMessage = true;
      attachment.cancel = this.cancelAttachmentHelper(message.requestHash);
      attachment.waiting(false).uploading(true).complete(true);
      this.attachments.push(attachment);
    }
  }
  /**
   * @param {string} url
   * @param {string} name
   * @param {number} size
   * @returns {ComposeAttachmentModel}
   */
  ;

  _proto.addAttachmentHelper = function addAttachmentHelper(url, name, size) {
    var attachment = new Model_ComposeAttachment__WEBPACK_IMPORTED_MODULE_43__[/* ComposeAttachmentModel */ "a"](url, name, size);
    attachment.fromMessage = false;
    attachment.cancel = this.cancelAttachmentHelper(url);
    attachment.waiting(false).uploading(true).complete(false);
    this.attachments.push(attachment);
    this.attachmentsPlace(true);
    return attachment;
  }
  /**
   * @param {Object} dropboxFile
   * @returns {boolean}
   */
  ;

  _proto.addDropboxAttachment = function addDropboxAttachment(dropboxFile) {
    var attachmentSizeLimit = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["pInt"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_41__["settingsGet"]('AttachmentLimit')),
        mSize = dropboxFile.bytes,
        attachment = this.addAttachmentHelper(dropboxFile.link, dropboxFile.name, mSize);

    if (0 < mSize && 0 < attachmentSizeLimit && attachmentSizeLimit < mSize) {
      attachment.uploading(false).complete(true);
      attachment.error(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('UPLOAD/ERROR_FILE_IS_TOO_BIG'));
      return false;
    }

    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_40__[/* default */ "a"].composeUploadExternals(function (statusResult, data) {
      var result = false;
      attachment.uploading(false).complete(true);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_23__["StorageResultType"].Success === statusResult && data && data.Result) {
        if (data.Result[attachment.id]) {
          result = true;
          attachment.tempName(data.Result[attachment.id]);
        }
      }

      if (!result) {
        attachment.error(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["getUploadErrorDescByCode"])(Common_Enums__WEBPACK_IMPORTED_MODULE_23__["UploadErrorCode"].FileNoUploaded));
      }
    }, [dropboxFile.link]);
    return true;
  }
  /**
   * @param {Object} driveFile
   * @param {string} accessToken
   * @returns {boolean}
   */
  ;

  _proto.addDriveAttachment = function addDriveAttachment(driveFile, accessToken) {
    var attachmentSizeLimit = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["pInt"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_41__["settingsGet"]('AttachmentLimit')),
        size = driveFile.fileSize ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["pInt"])(driveFile.fileSize) : 0,
        attachment = this.addAttachmentHelper(driveFile.downloadUrl, driveFile.title, size);

    if (0 < size && 0 < attachmentSizeLimit && attachmentSizeLimit < size) {
      attachment.uploading(false).complete(true);
      attachment.error(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["i18n"])('UPLOAD/ERROR_FILE_IS_TOO_BIG'));
      return false;
    }

    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_40__[/* default */ "a"].composeUploadDrive(function (statusResult, data) {
      var result = false;
      attachment.uploading(false).complete(true);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_23__["StorageResultType"].Success === statusResult && data && data.Result) {
        if (data.Result[attachment.id]) {
          result = true;
          attachment.tempName(data.Result[attachment.id][0]);
          attachment.size(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["pInt"])(data.Result[attachment.id][1]));
        }
      }

      if (!result) {
        attachment.error(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["getUploadErrorDescByCode"])(Common_Enums__WEBPACK_IMPORTED_MODULE_23__["UploadErrorCode"].FileNoUploaded));
      }
    }, driveFile.downloadUrl, accessToken);
    return true;
  }
  /**
   * @param {MessageModel} message
   * @param {string} type
   */
  ;

  _proto.prepearMessageAttachments = function prepearMessageAttachments(message, type) {
    var _this19 = this;

    if (message) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].ForwardAsAttachment === type) {
        this.addMessageAsAttachment(message);
      } else {
        var attachments = message.attachments();

        ___WEBPACK_IMPORTED_MODULE_18___default.a.each(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["isNonEmptyArray"])(attachments) ? attachments : [], function (item) {
          var add = false;

          switch (type) {
            case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Reply:
            case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].ReplyAll:
              add = item.isLinked;
              break;

            case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Forward:
            case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Draft:
            case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].EditAsNew:
              add = true;
              break;
            // no default
          }

          if (add) {
            var attachment = new Model_ComposeAttachment__WEBPACK_IMPORTED_MODULE_43__[/* ComposeAttachmentModel */ "a"](item.download, item.fileName, item.estimatedSize, item.isInline, item.isLinked, item.cid, item.contentLocation);
            attachment.fromMessage = true;
            attachment.cancel = _this19.cancelAttachmentHelper(item.download);
            attachment.waiting(false).uploading(true).complete(false);

            _this19.attachments.push(attachment);
          }
        });
      }
    }
  };

  _proto.removeLinkedAttachments = function removeLinkedAttachments() {
    var arrachment = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, this.attachments(), function (item) {
      return item && item.isLinked;
    });

    if (arrachment) {
      this.attachments.remove(arrachment);
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["delegateRunOnDestroy"])(arrachment);
    }
  };

  _proto.setMessageAttachmentFailedDownloadText = function setMessageAttachmentFailedDownloadText() {
    ___WEBPACK_IMPORTED_MODULE_18___default.a.each(this.attachments(), function (attachment) {
      if (attachment && attachment.fromMessage) {
        attachment.waiting(false).uploading(false).complete(true).error(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_28__["getUploadErrorDescByCode"])(Common_Enums__WEBPACK_IMPORTED_MODULE_23__["UploadErrorCode"].FileNoUploaded));
      }
    });
  }
  /**
   * @param {boolean=} includeAttachmentInProgress = true
   * @returns {boolean}
   */
  ;

  _proto.isEmptyForm = function isEmptyForm(includeAttachmentInProgress) {
    if (includeAttachmentInProgress === void 0) {
      includeAttachmentInProgress = true;
    }

    var withoutAttachment = includeAttachmentInProgress ? 0 === this.attachments().length : 0 === this.attachmentsInReady().length;
    return 0 === this.to().length && 0 === this.cc().length && 0 === this.bcc().length && 0 === this.replyTo().length && 0 === this.subject().length && withoutAttachment && (!this.oEditor || '' === this.oEditor.getData());
  };

  _proto.reset = function reset() {
    this.to('');
    this.cc('');
    this.bcc('');
    this.replyTo('');
    this.subject('');
    this.requestDsn(false);
    this.requestReadReceipt(false);
    this.markAsImportant(false);
    this.attachmentsPlace(false);
    this.aDraftInfo = null;
    this.sInReplyTo = '';
    this.bFromDraft = false;
    this.sReferences = '';
    this.sendError(false);
    this.sendSuccessButSaveError(false);
    this.savedError(false);
    this.savedTime(0);
    this.emptyToError(false);
    this.attachmentsInProcessError(false);
    this.showCc(false);
    this.showBcc(false);
    this.showReplyTo(false);
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["delegateRunOnDestroy"])(this.attachments());
    this.attachments([]);
    this.dragAndDropOver(false);
    this.dragAndDropVisible(false);
    this.draftFolder('');
    this.draftUid('');
    this.sending(false);
    this.saving(false);

    if (this.oEditor) {
      this.oEditor.clear(false);
    }
  }
  /**
   * @returns {Array}
   */
  ;

  _proto.getAttachmentsDownloadsForUpload = function getAttachmentsDownloadsForUpload() {
    return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_18___default.a).call(___WEBPACK_IMPORTED_MODULE_18___default.a, this.attachments(), function (item) {
      return item && '' === item.tempName();
    }), function (item) {
      return item.id;
    });
  };

  _proto.resizerTrigger = function resizerTrigger() {
    this.resizer(!this.resizer());
  };

  return ComposePopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_46__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "sendCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8___default()(_class2.prototype, "sendCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "saveCommand", [_dec3], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8___default()(_class2.prototype, "saveCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "deleteCommand", [_dec4], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8___default()(_class2.prototype, "deleteCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "skipCommand", [_dec5], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8___default()(_class2.prototype, "skipCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "contactsCommand", [_dec6], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8___default()(_class2.prototype, "contactsCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "dropboxCommand", [_dec7], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8___default()(_class2.prototype, "dropboxCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "driveCommand", [_dec8], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_8___default()(_class2.prototype, "driveCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 133 */
/*!********************************************************!*\
  !*** ./node_modules/core-js/internals/to-primitive.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 49);

// `ToPrimitive` abstract operation
// https://tc39.es/ecma262/#sec-toprimitive
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
module.exports = function (input, PREFERRED_STRING) {
  if (!isObject(input)) return input;
  var fn, val;
  if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
  if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;
  if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
  throw TypeError("Can't convert object to primitive value");
};


/***/ }),
/* 134 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/ie8-dom-define.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 55);
var fails = __webpack_require__(/*! ../internals/fails */ 37);
var createElement = __webpack_require__(/*! ../internals/document-create-element */ 135);

// Thank's IE8 for his funny defineProperty
module.exports = !DESCRIPTORS && !fails(function () {
  // eslint-disable-next-line es/no-object-defineproperty -- requied for testing
  return Object.defineProperty(createElement('div'), 'a', {
    get: function () { return 7; }
  }).a != 7;
});


/***/ }),
/* 135 */
/*!*******************************************************************!*\
  !*** ./node_modules/core-js/internals/document-create-element.js ***!
  \*******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var isObject = __webpack_require__(/*! ../internals/is-object */ 49);

var document = global.document;
// typeof document.createElement is 'object' in old IE
var EXISTS = isObject(document) && isObject(document.createElement);

module.exports = function (it) {
  return EXISTS ? document.createElement(it) : {};
};


/***/ }),
/* 136 */
/*!***********************************************!*\
  !*** ./node_modules/core-js/internals/uid.js ***!
  \***********************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

var id = 0;
var postfix = Math.random();

module.exports = function (key) {
  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);
};


/***/ }),
/* 137 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/native-symbol.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

/* eslint-disable es/no-symbol -- required for testing */
var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 156);
var fails = __webpack_require__(/*! ../internals/fails */ 37);

// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing
module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
  return !String(Symbol()) ||
    // Chrome 38 Symbol has incorrect toString conversion
    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
    !Symbol.sham && V8_VERSION && V8_VERSION < 41;
});


/***/ }),
/* 138 */
/*!************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/document-create-element.js ***!
  \************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var isObject = __webpack_require__(/*! ../internals/is-object */ 50);

var document = global.document;
// typeof document.createElement is 'object' in old IE
var EXISTS = isObject(document) && isObject(document.createElement);

module.exports = function (it) {
  return EXISTS ? document.createElement(it) : {};
};


/***/ }),
/* 139 */
/*!************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-get-prototype-of.js ***!
  \************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__(/*! ../internals/has */ 54);
var toObject = __webpack_require__(/*! ../internals/to-object */ 117);
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 140);
var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 255);

var IE_PROTO = sharedKey('IE_PROTO');
var ObjectPrototype = Object.prototype;

// `Object.getPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.getprototypeof
module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {
  O = toObject(O);
  if (has(O, IE_PROTO)) return O[IE_PROTO];
  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
    return O.constructor.prototype;
  } return O instanceof Object ? ObjectPrototype : null;
};


/***/ }),
/* 140 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/shared-key.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var shared = __webpack_require__(/*! ../internals/shared */ 188);
var uid = __webpack_require__(/*! ../internals/uid */ 189);

var keys = shared('keys');

module.exports = function (key) {
  return keys[key] || (keys[key] = uid(key));
};


/***/ }),
/* 141 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/shared-store.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var setGlobal = __webpack_require__(/*! ../internals/set-global */ 254);

var SHARED = '__core-js_shared__';
var store = global[SHARED] || setGlobal(SHARED, {});

module.exports = store;


/***/ }),
/* 142 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/to-integer.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

var ceil = Math.ceil;
var floor = Math.floor;

// `ToInteger` abstract operation
// https://tc39.es/ecma262/#sec-tointeger
module.exports = function (argument) {
  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
};


/***/ }),
/* 143 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/hidden-keys.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 144 */
/*!**********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/to-string-tag-support.js ***!
  \**********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var test = {};

test[TO_STRING_TAG] = 'z';

module.exports = String(test) === '[object z]';


/***/ }),
/* 145 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/set-to-string-tag.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 144);
var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 81).f;
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var has = __webpack_require__(/*! ../internals/has */ 54);
var toString = __webpack_require__(/*! ../internals/object-to-string */ 267);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');

module.exports = function (it, TAG, STATIC, SET_METHOD) {
  if (it) {
    var target = STATIC ? it : it.prototype;
    if (!has(target, TO_STRING_TAG)) {
      defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });
    }
    if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {
      createNonEnumerableProperty(target, 'toString', toString);
    }
  }
};


/***/ }),
/* 146 */
/*!********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/perform.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return { error: false, value: exec() };
  } catch (error) {
    return { error: true, value: error };
  }
};


/***/ }),
/* 147 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/internal-state.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ 274);
var global = __webpack_require__(/*! ../internals/global */ 31);
var isObject = __webpack_require__(/*! ../internals/is-object */ 50);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var objectHas = __webpack_require__(/*! ../internals/has */ 54);
var shared = __webpack_require__(/*! ../internals/shared-store */ 141);
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 140);
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 143);

var WeakMap = global.WeakMap;
var set, get, has;

var enforce = function (it) {
  return has(it) ? get(it) : set(it, {});
};

var getterFor = function (TYPE) {
  return function (it) {
    var state;
    if (!isObject(it) || (state = get(it)).type !== TYPE) {
      throw TypeError('Incompatible receiver, ' + TYPE + ' required');
    } return state;
  };
};

if (NATIVE_WEAK_MAP) {
  var store = shared.state || (shared.state = new WeakMap());
  var wmget = store.get;
  var wmhas = store.has;
  var wmset = store.set;
  set = function (it, metadata) {
    metadata.facade = it;
    wmset.call(store, it, metadata);
    return metadata;
  };
  get = function (it) {
    return wmget.call(store, it) || {};
  };
  has = function (it) {
    return wmhas.call(store, it);
  };
} else {
  var STATE = sharedKey('state');
  hiddenKeys[STATE] = true;
  set = function (it, metadata) {
    metadata.facade = it;
    createNonEnumerableProperty(it, STATE, metadata);
    return metadata;
  };
  get = function (it) {
    return objectHas(it, STATE) ? it[STATE] : {};
  };
  has = function (it) {
    return objectHas(it, STATE);
  };
}

module.exports = {
  set: set,
  get: get,
  has: has,
  enforce: enforce,
  getterFor: getterFor
};


/***/ }),
/* 148 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/engine-v8-version.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 106);

var process = global.process;
var versions = process && process.versions;
var v8 = versions && versions.v8;
var match, version;

if (v8) {
  match = v8.split('.');
  version = match[0] + match[1];
} else if (userAgent) {
  match = userAgent.match(/Edge\/(\d+)/);
  if (!match || match[1] >= 74) {
    match = userAgent.match(/Chrome\/(\d+)/);
    if (match) version = match[1];
  }
}

module.exports = version && +version;


/***/ }),
/* 149 */
/*!******************************************************************************!*\
  !*** ./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js ***!
  \******************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// TODO: Remove from `core-js@4` since it's moved to entry points
__webpack_require__(/*! ../modules/es.regexp.exec */ 45);
var redefine = __webpack_require__(/*! ../internals/redefine */ 69);
var fails = __webpack_require__(/*! ../internals/fails */ 37);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);

var SPECIES = wellKnownSymbol('species');

var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {
  // #replace needs built-in support for named groups.
  // #match works fine because it just return the exec results, even if it has
  // a "grops" property.
  var re = /./;
  re.exec = function () {
    var result = [];
    result.groups = { a: '7' };
    return result;
  };
  return ''.replace(re, '$<a>') !== '7';
});

// IE <= 11 replaces $0 with the whole match, as if it was $&
// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0
var REPLACE_KEEPS_$0 = (function () {
  // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing
  return 'a'.replace(/./, '$0') === '$0';
})();

var REPLACE = wellKnownSymbol('replace');
// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string
var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {
  if (/./[REPLACE]) {
    return /./[REPLACE]('a', '$0') === '';
  }
  return false;
})();

// Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
// Weex JS has frozen built-in prototypes, so use try / catch wrapper
var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {
  // eslint-disable-next-line regexp/no-empty-group -- required for testing
  var re = /(?:)/;
  var originalExec = re.exec;
  re.exec = function () { return originalExec.apply(this, arguments); };
  var result = 'ab'.split(re);
  return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';
});

module.exports = function (KEY, length, exec, sham) {
  var SYMBOL = wellKnownSymbol(KEY);

  var DELEGATES_TO_SYMBOL = !fails(function () {
    // String methods call symbol-named RegEp methods
    var O = {};
    O[SYMBOL] = function () { return 7; };
    return ''[KEY](O) != 7;
  });

  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {
    // Symbol-named RegExp methods call .exec
    var execCalled = false;
    var re = /a/;

    if (KEY === 'split') {
      // We can't use real regex here since it causes deoptimization
      // and serious performance degradation in V8
      // https://github.com/zloirock/core-js/issues/306
      re = {};
      // RegExp[@@split] doesn't call the regex's exec method, but first creates
      // a new one. We need to return the patched regex when creating the new one.
      re.constructor = {};
      re.constructor[SPECIES] = function () { return re; };
      re.flags = '';
      re[SYMBOL] = /./[SYMBOL];
    }

    re.exec = function () { execCalled = true; return null; };

    re[SYMBOL]('');
    return !execCalled;
  });

  if (
    !DELEGATES_TO_SYMBOL ||
    !DELEGATES_TO_EXEC ||
    (KEY === 'replace' && !(
      REPLACE_SUPPORTS_NAMED_GROUPS &&
      REPLACE_KEEPS_$0 &&
      !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE
    )) ||
    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)
  ) {
    var nativeRegExpMethod = /./[SYMBOL];
    var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {
      if (regexp.exec === RegExp.prototype.exec) {
        if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
          // The native String method already delegates to @@method (this
          // polyfilled function), leasing to infinite recursion.
          // We avoid it by directly calling the native @@method method.
          return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };
        }
        return { done: true, value: nativeMethod.call(str, regexp, arg2) };
      }
      return { done: false };
    }, {
      REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,
      REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE
    });
    var stringMethod = methods[0];
    var regexMethod = methods[1];

    redefine(String.prototype, KEY, stringMethod);
    redefine(RegExp.prototype, SYMBOL, length == 2
      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
      // 21.2.5.11 RegExp.prototype[@@split](string, limit)
      ? function (string, arg) { return regexMethod.call(string, this, arg); }
      // 21.2.5.6 RegExp.prototype[@@match](string)
      // 21.2.5.9 RegExp.prototype[@@search](string)
      : function (string) { return regexMethod.call(string, this); }
    );
  }

  if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);
};


/***/ }),
/* 150 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js/internals/regexp-exec-abstract.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var classof = __webpack_require__(/*! ./classof-raw */ 74);
var regexpExec = __webpack_require__(/*! ./regexp-exec */ 162);

// `RegExpExec` abstract operation
// https://tc39.es/ecma262/#sec-regexpexec
module.exports = function (R, S) {
  var exec = R.exec;
  if (typeof exec === 'function') {
    var result = exec.call(R, S);
    if (typeof result !== 'object') {
      throw TypeError('RegExp exec method returned something other than an Object or null');
    }
    return result;
  }

  if (classof(R) !== 'RegExp') {
    throw TypeError('RegExp#exec called on incompatible receiver');
  }

  return regexpExec.call(R, S);
};



/***/ }),
/* 151 */
/*!**********************************************************************!*\
  !*** ./node_modules/core-js/modules/web.dom-collections.for-each.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 218);
var forEach = __webpack_require__(/*! ../internals/array-for-each */ 355);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);

for (var COLLECTION_NAME in DOMIterables) {
  var Collection = global[COLLECTION_NAME];
  var CollectionPrototype = Collection && Collection.prototype;
  // some Chrome versions have non-configurable methods on DOMTokenList
  if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {
    createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);
  } catch (error) {
    CollectionPrototype.forEach = forEach;
  }
}


/***/ }),
/* 152 */
/*!*************************************!*\
  !*** ./dev/Knoin/AbstractScreen.js ***!
  \*************************************/
/*! exports provided: AbstractScreen */
/*! exports used: AbstractScreen */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractScreen; });
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ 151);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! crossroads */ 176);
/* harmony import */ var crossroads__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(crossroads__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);




var AbstractScreen = /*#__PURE__*/function () {
  function AbstractScreen(screenName, viewModels) {
    if (viewModels === void 0) {
      viewModels = [];
    }

    this.oCross = null;
    this.sScreenName = void 0;
    this.aViewModels = void 0;
    this.sScreenName = screenName;
    this.aViewModels = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isArray"])(viewModels) ? viewModels : [];
  }
  /**
   * @returns {Array}
   */


  var _proto = AbstractScreen.prototype;

  _proto.viewModels = function viewModels() {
    return this.aViewModels;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.screenName = function screenName() {
    return this.sScreenName;
  }
  /**
   * @returns {?Array)}
   */
  ;

  _proto.routes = function routes() {
    return null;
  }
  /**
   * @returns {?Object}
   */
  ;

  _proto.__cross = function __cross() {
    return this.oCross;
  }
  /**
   * @returns {void}
   */
  ;

  _proto.__start = function __start() {
    var route = null,
        fMatcher = null;
    var routes = this.routes();

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isNonEmptyArray"])(routes)) {
      fMatcher = ___WEBPACK_IMPORTED_MODULE_1___default.a.bind(this.onRoute || Common_Utils__WEBPACK_IMPORTED_MODULE_3__["noop"], this);
      route = crossroads__WEBPACK_IMPORTED_MODULE_2___default.a.create();
      routes.forEach(function (item) {
        if (item && route) {
          route.addRoute(item[0], fMatcher).rules = item[1];
        }
      });
      this.oCross = route;
    }
  };

  return AbstractScreen;
}();

/***/ }),
/* 153 */
/*!*****************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/trim.js ***!
  \*****************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/trim */ 327);

/***/ }),
/* 154 */
/*!*****************************!*\
  !*** external "window.ssm" ***!
  \*****************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.ssm;

/***/ }),
/* 155 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js/internals/object-keys-internal.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__(/*! ../internals/has */ 44);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 73);
var indexOf = __webpack_require__(/*! ../internals/array-includes */ 180).indexOf;
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 105);

module.exports = function (object, names) {
  var O = toIndexedObject(object);
  var i = 0;
  var result = [];
  var key;
  for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);
  // Don't enum bug & hidden keys
  while (names.length > i) if (has(O, key = names[i++])) {
    ~indexOf(result, key) || result.push(key);
  }
  return result;
};


/***/ }),
/* 156 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/engine-v8-version.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 166);

var process = global.process;
var versions = process && process.versions;
var v8 = versions && versions.v8;
var match, version;

if (v8) {
  match = v8.split('.');
  version = match[0] < 4 ? 1 : match[0] + match[1];
} else if (userAgent) {
  match = userAgent.match(/Edge\/(\d+)/);
  if (!match || match[1] >= 74) {
    match = userAgent.match(/Chrome\/(\d+)/);
    if (match) version = match[1];
  }
}

module.exports = version && +version;


/***/ }),
/* 157 */
/*!***********************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js ***!
  \***********************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 249);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 80);
var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 158);
var has = __webpack_require__(/*! ../internals/has */ 54);
var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 186);

var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

// `Object.getOwnPropertyDescriptor` method
// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
  O = toIndexedObject(O);
  P = toPrimitive(P, true);
  if (IE8_DOM_DEFINE) try {
    return nativeGetOwnPropertyDescriptor(O, P);
  } catch (error) { /* empty */ }
  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);
};


/***/ }),
/* 158 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/to-primitive.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 50);

// `ToPrimitive` abstract operation
// https://tc39.es/ecma262/#sec-toprimitive
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
module.exports = function (input, PREFERRED_STRING) {
  if (!isObject(input)) return input;
  var fn, val;
  if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
  if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;
  if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
  throw TypeError("Can't convert object to primitive value");
};


/***/ }),
/* 159 */
/*!************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-set-prototype-of.js ***!
  \************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 256);

// `Object.setPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.setprototypeof
// Works with __proto__ only. Old v8 can't work with null proto objects.
/* eslint-disable no-proto */
module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
  var CORRECT_SETTER = false;
  var test = {};
  var setter;
  try {
    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
    setter.call(test, []);
    CORRECT_SETTER = test instanceof Array;
  } catch (error) { /* empty */ }
  return function setPrototypeOf(O, proto) {
    anObject(O);
    aPossiblePrototype(proto);
    if (CORRECT_SETTER) setter.call(O, proto);
    else O.__proto__ = proto;
    return O;
  };
}() : undefined);


/***/ }),
/* 160 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-create.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 257);
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 190);
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 143);
var html = __webpack_require__(/*! ../internals/html */ 191);
var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 138);
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 140);

var GT = '>';
var LT = '<';
var PROTOTYPE = 'prototype';
var SCRIPT = 'script';
var IE_PROTO = sharedKey('IE_PROTO');

var EmptyConstructor = function () { /* empty */ };

var scriptTag = function (content) {
  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
};

// Create object with fake `null` prototype: use ActiveX Object with cleared prototype
var NullProtoObjectViaActiveX = function (activeXDocument) {
  activeXDocument.write(scriptTag(''));
  activeXDocument.close();
  var temp = activeXDocument.parentWindow.Object;
  activeXDocument = null; // avoid memory leak
  return temp;
};

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var NullProtoObjectViaIFrame = function () {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = documentCreateElement('iframe');
  var JS = 'java' + SCRIPT + ':';
  var iframeDocument;
  iframe.style.display = 'none';
  html.appendChild(iframe);
  // https://github.com/zloirock/core-js/issues/475
  iframe.src = String(JS);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(scriptTag('document.F=Object'));
  iframeDocument.close();
  return iframeDocument.F;
};

// Check for document.domain and active x support
// No need to use active x approach when document.domain is not set
// see https://github.com/es-shims/es5-shim/issues/150
// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
// avoid IE GC bug
var activeXDocument;
var NullProtoObject = function () {
  try {
    /* global ActiveXObject */
    activeXDocument = document.domain && new ActiveXObject('htmlfile');
  } catch (error) { /* ignore */ }
  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();
  var length = enumBugKeys.length;
  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
  return NullProtoObject();
};

hiddenKeys[IE_PROTO] = true;

// `Object.create` method
// https://tc39.es/ecma262/#sec-object.create
module.exports = Object.create || function create(O, Properties) {
  var result;
  if (O !== null) {
    EmptyConstructor[PROTOTYPE] = anObject(O);
    result = new EmptyConstructor();
    EmptyConstructor[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = NullProtoObject();
  return Properties === undefined ? result : defineProperties(result, Properties);
};


/***/ }),
/* 161 */
/*!***************************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/web.dom-collections.iterator.js ***!
  \***************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ./es.array.iterator */ 201);
var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 281);
var global = __webpack_require__(/*! ../internals/global */ 31);
var classof = __webpack_require__(/*! ../internals/classof */ 92);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 76);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');

for (var COLLECTION_NAME in DOMIterables) {
  var Collection = global[COLLECTION_NAME];
  var CollectionPrototype = Collection && Collection.prototype;
  if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) {
    createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);
  }
  Iterators[COLLECTION_NAME] = Iterators.Array;
}


/***/ }),
/* 162 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/regexp-exec.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var regexpFlags = __webpack_require__(/*! ./regexp-flags */ 202);
var stickyHelpers = __webpack_require__(/*! ./regexp-sticky-helpers */ 223);
var shared = __webpack_require__(/*! ./shared */ 104);

var nativeExec = RegExp.prototype.exec;
var nativeReplace = shared('native-string-replace', String.prototype.replace);

var patchedExec = nativeExec;

var UPDATES_LAST_INDEX_WRONG = (function () {
  var re1 = /a/;
  var re2 = /b*/g;
  nativeExec.call(re1, 'a');
  nativeExec.call(re2, 'a');
  return re1.lastIndex !== 0 || re2.lastIndex !== 0;
})();

var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;

// nonparticipating capturing group, copied from es5-shim's String#split patch.
// eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing
var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;

var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y;

if (PATCH) {
  patchedExec = function exec(str) {
    var re = this;
    var lastIndex, reCopy, match, i;
    var sticky = UNSUPPORTED_Y && re.sticky;
    var flags = regexpFlags.call(re);
    var source = re.source;
    var charsAdded = 0;
    var strCopy = str;

    if (sticky) {
      flags = flags.replace('y', '');
      if (flags.indexOf('g') === -1) {
        flags += 'g';
      }

      strCopy = String(str).slice(re.lastIndex);
      // Support anchored sticky behavior.
      if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) {
        source = '(?: ' + source + ')';
        strCopy = ' ' + strCopy;
        charsAdded++;
      }
      // ^(? + rx + ) is needed, in combination with some str slicing, to
      // simulate the 'y' flag.
      reCopy = new RegExp('^(?:' + source + ')', flags);
    }

    if (NPCG_INCLUDED) {
      reCopy = new RegExp('^' + source + '$(?!\\s)', flags);
    }
    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;

    match = nativeExec.call(sticky ? reCopy : re, strCopy);

    if (sticky) {
      if (match) {
        match.input = match.input.slice(charsAdded);
        match[0] = match[0].slice(charsAdded);
        match.index = re.lastIndex;
        re.lastIndex += match[0].length;
      } else re.lastIndex = 0;
    } else if (UPDATES_LAST_INDEX_WRONG && match) {
      re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
    }
    if (NPCG_INCLUDED && match && match.length > 1) {
      // Fix browsers whose `exec` methods don't consistently return `undefined`
      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
      nativeReplace.call(match[0], reCopy, function () {
        for (i = 1; i < arguments.length - 2; i++) {
          if (arguments[i] === undefined) match[i] = undefined;
        }
      });
    }

    return match;
  };
}

module.exports = patchedExec;


/***/ }),
/* 163 */
/*!*********************************!*\
  !*** ./dev/Storage/RainLoop.js ***!
  \*********************************/
/*! exports provided: isStorageSupported, getHash, setHash, clearHash, checkTimestamp */
/*! exports used: checkTimestamp, clearHash, getHash, isStorageSupported, setHash */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return isStorageSupported; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return getHash; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return setHash; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return clearHash; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return checkTimestamp; });
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-interval */ 57);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ 85);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ 119);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_4__);





var STORAGE_KEY = '__rlA';
var TIME_KEY = '__rlT';
/**
 * @param {string} storageName
 * @returns {boolean}
 */

function isStorageSupported(storageName) {
  var storageIsAvailable = false;

  try {
    // at: window[storageName] firefox throws SecurityError: The operation is insecure. when in iframe
    storageIsAvailable = storageName in window__WEBPACK_IMPORTED_MODULE_4___default.a && window__WEBPACK_IMPORTED_MODULE_4___default.a[storageName] && window__WEBPACK_IMPORTED_MODULE_4___default.a[storageName].setItem;
  } catch (e) {} // eslint-disable-line no-empty


  if (storageIsAvailable) {
    var s = window__WEBPACK_IMPORTED_MODULE_4___default.a[storageName],
        key = 'testLocalStorage_' + window__WEBPACK_IMPORTED_MODULE_4___default.a.Math.random();

    try {
      s.setItem(key, key);

      if (key === s.getItem(key)) {
        s.removeItem(key);
        return true;
      }
    } catch (e) {} // eslint-disable-line no-empty

  }

  return false;
}
var SESS_STORAGE = isStorageSupported('sessionStorage') ? window__WEBPACK_IMPORTED_MODULE_4___default.a.sessionStorage || null : null;
var WIN_STORAGE = window__WEBPACK_IMPORTED_MODULE_4___default.a.top || window__WEBPACK_IMPORTED_MODULE_4___default.a || null;

var __get = function __get(key) {
  var result = null;

  if (SESS_STORAGE) {
    result = SESS_STORAGE.getItem(key) || null;
  } else if (WIN_STORAGE && window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON) {
    var data = WIN_STORAGE.name && '{' === WIN_STORAGE.name.toString().substr(0, 1) ? window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON.parse(WIN_STORAGE.name.toString()) : null;
    result = data ? data[key] || null : null;
  }

  return result;
};

var __set = function __set(key, value) {
  if (SESS_STORAGE) {
    SESS_STORAGE.setItem(key, value);
  } else if (WIN_STORAGE && window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON) {
    var data = WIN_STORAGE.name && '{' === WIN_STORAGE.name.toString().substr(0, 1) ? window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON.parse(WIN_STORAGE.name.toString()) : null;
    data = data || {};
    data[key] = value;
    WIN_STORAGE.name = window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON.stringify(data);
  }
};

var timestamp = function timestamp() {
  return window__WEBPACK_IMPORTED_MODULE_4___default.a.Math.round(new window__WEBPACK_IMPORTED_MODULE_4___default.a.Date().getTime() / 1000);
};

var setTimestamp = function setTimestamp() {
  return __set(TIME_KEY, timestamp());
};

var getTimestamp = function getTimestamp() {
  var time = __get(TIME_KEY, 0);

  return time ? window__WEBPACK_IMPORTED_MODULE_4___default.a.parseInt(time, 10) || 0 : 0;
};
/**
 * @returns {string}
 */


function getHash() {
  return __get(STORAGE_KEY);
}
/**
 * @returns {void}
 */

function setHash() {
  var key = 'AuthAccountHash',
      appData = window__WEBPACK_IMPORTED_MODULE_4___default.a.__rlah_data();

  __set(STORAGE_KEY, appData && appData[key] ? appData[key] : '');

  setTimestamp();
}
/**
 * @returns {void}
 */

function clearHash() {
  __set(STORAGE_KEY, '');

  setTimestamp();
}
/**
 * @returns {boolean}
 */

function checkTimestamp() {
  if (timestamp() > getTimestamp() + 1000 * 60 * 60) {
    // 60m
    clearHash();
    return true;
  }

  return false;
} // init section

_babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_0___default()(setTimestamp, 1000 * 60); // 1m

/***/ }),
/* 164 */,
/* 165 */
/*!************************************************!*\
  !*** ./node_modules/core-js/internals/path.js ***!
  \************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);

module.exports = global;


/***/ }),
/* 166 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/engine-user-agent.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 78);

module.exports = getBuiltIn('navigator', 'userAgent') || '';


/***/ }),
/* 167 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/object-create.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ 241);
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 112);
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 105);
var html = __webpack_require__(/*! ../internals/html */ 235);
var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 135);
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 111);

var GT = '>';
var LT = '<';
var PROTOTYPE = 'prototype';
var SCRIPT = 'script';
var IE_PROTO = sharedKey('IE_PROTO');

var EmptyConstructor = function () { /* empty */ };

var scriptTag = function (content) {
  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
};

// Create object with fake `null` prototype: use ActiveX Object with cleared prototype
var NullProtoObjectViaActiveX = function (activeXDocument) {
  activeXDocument.write(scriptTag(''));
  activeXDocument.close();
  var temp = activeXDocument.parentWindow.Object;
  activeXDocument = null; // avoid memory leak
  return temp;
};

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var NullProtoObjectViaIFrame = function () {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = documentCreateElement('iframe');
  var JS = 'java' + SCRIPT + ':';
  var iframeDocument;
  iframe.style.display = 'none';
  html.appendChild(iframe);
  // https://github.com/zloirock/core-js/issues/475
  iframe.src = String(JS);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(scriptTag('document.F=Object'));
  iframeDocument.close();
  return iframeDocument.F;
};

// Check for document.domain and active x support
// No need to use active x approach when document.domain is not set
// see https://github.com/es-shims/es5-shim/issues/150
// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
// avoid IE GC bug
var activeXDocument;
var NullProtoObject = function () {
  try {
    /* global ActiveXObject -- old IE */
    activeXDocument = document.domain && new ActiveXObject('htmlfile');
  } catch (error) { /* ignore */ }
  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();
  var length = enumBugKeys.length;
  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
  return NullProtoObject();
};

hiddenKeys[IE_PROTO] = true;

// `Object.create` method
// https://tc39.es/ecma262/#sec-object.create
module.exports = Object.create || function create(O, Properties) {
  var result;
  if (O !== null) {
    EmptyConstructor[PROTOTYPE] = anObject(O);
    result = new EmptyConstructor();
    EmptyConstructor[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = NullProtoObject();
  return Properties === undefined ? result : defineProperties(result, Properties);
};


/***/ }),
/* 168 */
/*!*******************************************************************!*\
  !*** ./node_modules/core-js/internals/object-get-prototype-of.js ***!
  \*******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__(/*! ../internals/has */ 44);
var toObject = __webpack_require__(/*! ../internals/to-object */ 89);
var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 111);
var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 243);

var IE_PROTO = sharedKey('IE_PROTO');
var ObjectPrototype = Object.prototype;

// `Object.getPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.getprototypeof
// eslint-disable-next-line es/no-object-getprototypeof -- safe
module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {
  O = toObject(O);
  if (has(O, IE_PROTO)) return O[IE_PROTO];
  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
    return O.constructor.prototype;
  } return O instanceof Object ? ObjectPrototype : null;
};


/***/ }),
/* 169 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/set-to-string-tag.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 66).f;
var has = __webpack_require__(/*! ../internals/has */ 44);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');

module.exports = function (it, TAG, STATIC) {
  if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {
    defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });
  }
};


/***/ }),
/* 170 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/indexed-object.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);
var classof = __webpack_require__(/*! ../internals/classof-raw */ 114);

var split = ''.split;

// fallback for non-array-like ES3 and non-enumerable old V8 strings
module.exports = fails(function () {
  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
  // eslint-disable-next-line no-prototype-builtins
  return !Object('z').propertyIsEnumerable(0);
}) ? function (it) {
  return classof(it) == 'String' ? split.call(it, '') : Object(it);
} : Object;


/***/ }),
/* 171 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js/internals/advance-string-index.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var charAt = __webpack_require__(/*! ../internals/string-multibyte */ 217).charAt;

// `AdvanceStringIndex` abstract operation
// https://tc39.es/ecma262/#sec-advancestringindex
module.exports = function (S, index, unicode) {
  return index + (unicode ? charAt(S, index).length : 1);
};


/***/ }),
/* 172 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-iteration.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var bind = __webpack_require__(/*! ../internals/function-bind-context */ 116);
var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 170);
var toObject = __webpack_require__(/*! ../internals/to-object */ 117);
var toLength = __webpack_require__(/*! ../internals/to-length */ 91);
var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 286);

var push = [].push;

// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation
var createMethod = function (TYPE) {
  var IS_MAP = TYPE == 1;
  var IS_FILTER = TYPE == 2;
  var IS_SOME = TYPE == 3;
  var IS_EVERY = TYPE == 4;
  var IS_FIND_INDEX = TYPE == 6;
  var IS_FILTER_OUT = TYPE == 7;
  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
  return function ($this, callbackfn, that, specificCreate) {
    var O = toObject($this);
    var self = IndexedObject(O);
    var boundFunction = bind(callbackfn, that, 3);
    var length = toLength(self.length);
    var index = 0;
    var create = specificCreate || arraySpeciesCreate;
    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;
    var value, result;
    for (;length > index; index++) if (NO_HOLES || index in self) {
      value = self[index];
      result = boundFunction(value, index, O);
      if (TYPE) {
        if (IS_MAP) target[index] = result; // map
        else if (result) switch (TYPE) {
          case 3: return true;              // some
          case 5: return value;             // find
          case 6: return index;             // findIndex
          case 2: push.call(target, value); // filter
        } else switch (TYPE) {
          case 4: return false;             // every
          case 7: push.call(target, value); // filterOut
        }
      }
    }
    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
  };
};

module.exports = {
  // `Array.prototype.forEach` method
  // https://tc39.es/ecma262/#sec-array.prototype.foreach
  forEach: createMethod(0),
  // `Array.prototype.map` method
  // https://tc39.es/ecma262/#sec-array.prototype.map
  map: createMethod(1),
  // `Array.prototype.filter` method
  // https://tc39.es/ecma262/#sec-array.prototype.filter
  filter: createMethod(2),
  // `Array.prototype.some` method
  // https://tc39.es/ecma262/#sec-array.prototype.some
  some: createMethod(3),
  // `Array.prototype.every` method
  // https://tc39.es/ecma262/#sec-array.prototype.every
  every: createMethod(4),
  // `Array.prototype.find` method
  // https://tc39.es/ecma262/#sec-array.prototype.find
  find: createMethod(5),
  // `Array.prototype.findIndex` method
  // https://tc39.es/ecma262/#sec-array.prototype.findIndex
  findIndex: createMethod(6),
  // `Array.prototype.filterOut` method
  // https://github.com/tc39/proposal-array-filtering
  filterOut: createMethod(7)
};


/***/ }),
/* 173 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/is-array.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var classof = __webpack_require__(/*! ../internals/classof-raw */ 114);

// `IsArray` abstract operation
// https://tc39.es/ecma262/#sec-isarray
module.exports = Array.isArray || function isArray(arg) {
  return classof(arg) == 'Array';
};


/***/ }),
/* 174 */
/*!*********************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-method-has-species-support.js ***!
  \*********************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 148);

var SPECIES = wellKnownSymbol('species');

module.exports = function (METHOD_NAME) {
  // We can't use this feature detection in V8 since it causes
  // deoptimization and serious performance degradation
  // https://github.com/zloirock/core-js/issues/677
  return V8_VERSION >= 51 || !fails(function () {
    var array = [];
    var constructor = array.constructor = {};
    constructor[SPECIES] = function () {
      return { foo: 1 };
    };
    return array[METHOD_NAME](Boolean).foo !== 1;
  });
};


/***/ }),
/* 175 */
/*!*******************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js ***!
  \*******************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/concat */ 337);

/***/ }),
/* 176 */
/*!************************************!*\
  !*** external "window.crossroads" ***!
  \************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.crossroads;

/***/ }),
/* 177 */
/*!*******************************************!*\
  !*** ./dev/Component/AbstractCheckbox.js ***!
  \*******************************************/
/*! exports provided: AbstractCheckbox, default */
/*! exports used: AbstractCheckbox */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractCheckbox; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Component/Abstract */ 32);





var AbstractCheckbox = /*#__PURE__*/function (_AbstractComponent) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AbstractCheckbox, _AbstractComponent);

  /**
   * @param {Object} params = {}
   */
  function AbstractCheckbox(params) {
    var _this;

    if (params === void 0) {
      params = {};
    }

    _this = _AbstractComponent.call(this) || this;
    _this.value = params.value;

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(_this.value) || !_this.value.subscribe) {
      _this.value = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(_this.value) ? false : !!_this.value);
    }

    _this.enable = params.enable;

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(_this.enable) || !_this.enable.subscribe) {
      _this.enable = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(_this.enable) ? true : !!_this.enable);
    }

    _this.disable = params.disable;

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(_this.disable) || !_this.disable.subscribe) {
      _this.disable = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(_this.disable) ? false : !!_this.disable);
    }

    _this.label = params.label || '';
    _this.inline = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(params.inline) ? false : params.inline;
    _this.readOnly = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(params.readOnly) ? false : !!params.readOnly;
    _this.inverted = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(params.inverted) ? false : !!params.inverted;
    _this.labeled = !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(params.label);
    _this.labelAnimated = !!params.labelAnimated;
    return _this;
  }

  var _proto = AbstractCheckbox.prototype;

  _proto.click = function click() {
    if (!this.readOnly && this.enable() && !this.disable()) {
      this.value(!this.value());
    }
  };

  return AbstractCheckbox;
}(Component_Abstract__WEBPACK_IMPORTED_MODULE_3__[/* AbstractComponent */ "a"]);



/***/ }),
/* 178 */
/*!******************************************************************!*\
  !*** ./node_modules/emailjs-addressparser/dist/addressparser.js ***!
  \******************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
  value: true
});

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

exports.default = parse;

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

/**
 * Parses structured e-mail addresses from an address field
 *
 * Example:
 *
 *    "Name <address@domain>"
 *
 * will be converted to
 *
 *     [{name: "Name", address: "address@domain"}]
 *
 * @param {String} str Address field
 * @return {Array} An array of address objects
 */
function parse(str) {
  var tokenizer = new Tokenizer(str);
  var tokens = tokenizer.tokenize();

  var addresses = [];
  var address = [];
  var parsedAddresses = [];

  tokens.forEach(function (token) {
    if (token.type === 'operator' && (token.value === ',' || token.value === ';')) {
      if (address.length) {
        addresses.push(address);
      }
      address = [];
    } else {
      address.push(token);
    }
  });

  if (address.length) {
    addresses.push(address);
  }

  addresses.forEach(function (address) {
    address = _handleAddress(address);
    if (address.length) {
      parsedAddresses = parsedAddresses.concat(address);
    }
  });

  return parsedAddresses;
};

/**
 * Converts tokens for a single address into an address object
 *
 * @param {Array} tokens Tokens object
 * @return {Object} Address object
 */
function _handleAddress(tokens) {
  var isGroup = false;
  var state = 'text';
  var address = void 0;
  var addresses = [];
  var data = {
    address: [],
    comment: [],
    group: [],
    text: []

    // Filter out <addresses>, (comments) and regular text
  };for (var i = 0, len = tokens.length; i < len; i++) {
    var token = tokens[i];

    if (token.type === 'operator') {
      switch (token.value) {
        case '<':
          state = 'address';
          break;
        case '(':
          state = 'comment';
          break;
        case ':':
          state = 'group';
          isGroup = true;
          break;
        default:
          state = 'text';
      }
    } else {
      if (token.value) {
        data[state].push(token.value);
      }
    }
  }

  // If there is no text but a comment, replace the two
  if (!data.text.length && data.comment.length) {
    data.text = data.comment;
    data.comment = [];
  }

  if (isGroup) {
    // http://tools.ietf.org/html/rfc2822#appendix-A.1.3
    data.text = data.text.join(' ');
    addresses.push({
      name: data.text || address && address.name,
      group: data.group.length ? parse(data.group.join(',')) : []
    });
  } else {
    // If no address was found, try to detect one from regular text
    if (!data.address.length && data.text.length) {
      for (var _i = data.text.length - 1; _i >= 0; _i--) {
        if (data.text[_i].match(/^[^@\s]+@[^@\s]+$/)) {
          data.address = data.text.splice(_i, 1);
          break;
        }
      }

      var _regexHandler = function _regexHandler(address) {
        if (!data.address.length) {
          data.address = [address.trim()];
          return ' ';
        } else {
          return address;
        }
      };

      // still no address
      if (!data.address.length) {
        for (var _i2 = data.text.length - 1; _i2 >= 0; _i2--) {
          data.text[_i2] = data.text[_i2].replace(/\s*\b[^@\s]+@[^@\s]+\b\s*/, _regexHandler).trim();
          if (data.address.length) {
            break;
          }
        }
      }
    }

    // If there's still is no text but a comment exixts, replace the two
    if (!data.text.length && data.comment.length) {
      data.text = data.comment;
      data.comment = [];
    }

    // Keep only the first address occurence, push others to regular text
    if (data.address.length > 1) {
      data.text = data.text.concat(data.address.splice(1));
    }

    // Join values with spaces
    data.text = data.text.join(' ');
    data.address = data.address.join(' ');

    if (!data.address && isGroup) {
      return [];
    } else {
      address = {
        address: data.address || data.text || '',
        name: data.text || data.address || ''
      };

      if (address.address === address.name) {
        if ((address.address || '').match(/@/)) {
          address.name = '';
        } else {
          address.address = '';
        }
      }

      addresses.push(address);
    }
  }

  return addresses;
};

/*
 * Operator tokens and which tokens are expected to end the sequence
 */
var OPERATORS = {
  '"': '"',
  '(': ')',
  '<': '>',
  ',': '',
  // Groups are ended by semicolons
  ':': ';',
  // Semicolons are not a legal delimiter per the RFC2822 grammar other
  // than for terminating a group, but they are also not valid for any
  // other use in this context.  Given that some mail clients have
  // historically allowed the semicolon as a delimiter equivalent to the
  // comma in their UI, it makes sense to treat them the same as a comma
  // when used outside of a group.
  ';': ''

  /**
   * Creates a Tokenizer object for tokenizing address field strings
   *
   * @constructor
   * @param {String} str Address field string
   */
};
var Tokenizer = function () {
  function Tokenizer(str) {
    _classCallCheck(this, Tokenizer);

    this.str = (str || '').toString();
    this.operatorCurrent = '';
    this.operatorExpecting = '';
    this.node = null;
    this.escaped = false;
    this.list = [];
  }

  /**
   * Tokenizes the original input string
   *
   * @return {Array} An array of operator|text tokens
   */


  _createClass(Tokenizer, [{
    key: 'tokenize',
    value: function tokenize() {
      var chr = void 0;
      var list = [];
      for (var i = 0, len = this.str.length; i < len; i++) {
        chr = this.str.charAt(i);
        this.checkChar(chr);
      }

      this.list.forEach(function (node) {
        node.value = (node.value || '').toString().trim();
        if (node.value) {
          list.push(node);
        }
      });

      return list;
    }

    /**
     * Checks if a character is an operator or text and acts accordingly
     *
     * @param {String} chr Character from the address field
     */

  }, {
    key: 'checkChar',
    value: function checkChar(chr) {
      if ((chr in OPERATORS || chr === '\\') && this.escaped) {
        this.escaped = false;
      } else if (this.operatorExpecting && chr === this.operatorExpecting) {
        this.node = {
          type: 'operator',
          value: chr
        };
        this.list.push(this.node);
        this.node = null;
        this.operatorExpecting = '';
        this.escaped = false;
        return;
      } else if (!this.operatorExpecting && chr in OPERATORS) {
        this.node = {
          type: 'operator',
          value: chr
        };
        this.list.push(this.node);
        this.node = null;
        this.operatorExpecting = OPERATORS[chr];
        this.escaped = false;
        return;
      }

      if (!this.escaped && chr === '\\') {
        this.escaped = true;
        return;
      }

      if (!this.node) {
        this.node = {
          type: 'text',
          value: ''
        };
        this.list.push(this.node);
      }

      if (this.escaped && chr !== '\\') {
        this.node.value += '\\';
      }

      this.node.value += chr;
      this.escaped = false;
    }
  }]);

  return Tokenizer;
}();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hZGRyZXNzcGFyc2VyLmpzIl0sIm5hbWVzIjpbInBhcnNlIiwic3RyIiwidG9rZW5pemVyIiwiVG9rZW5pemVyIiwidG9rZW5zIiwidG9rZW5pemUiLCJhZGRyZXNzZXMiLCJhZGRyZXNzIiwicGFyc2VkQWRkcmVzc2VzIiwiZm9yRWFjaCIsInRva2VuIiwidHlwZSIsInZhbHVlIiwibGVuZ3RoIiwicHVzaCIsIl9oYW5kbGVBZGRyZXNzIiwiY29uY2F0IiwiaXNHcm91cCIsInN0YXRlIiwiZGF0YSIsImNvbW1lbnQiLCJncm91cCIsInRleHQiLCJpIiwibGVuIiwiam9pbiIsIm5hbWUiLCJtYXRjaCIsInNwbGljZSIsIl9yZWdleEhhbmRsZXIiLCJ0cmltIiwicmVwbGFjZSIsIk9QRVJBVE9SUyIsInRvU3RyaW5nIiwib3BlcmF0b3JDdXJyZW50Iiwib3BlcmF0b3JFeHBlY3RpbmciLCJub2RlIiwiZXNjYXBlZCIsImxpc3QiLCJjaHIiLCJjaGFyQXQiLCJjaGVja0NoYXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O2tCQWN3QkEsSzs7OztBQWR4Qjs7Ozs7Ozs7Ozs7Ozs7QUFjZSxTQUFTQSxLQUFULENBQWdCQyxHQUFoQixFQUFxQjtBQUNsQyxNQUFNQyxZQUFZLElBQUlDLFNBQUosQ0FBY0YsR0FBZCxDQUFsQjtBQUNBLE1BQU1HLFNBQVNGLFVBQVVHLFFBQVYsRUFBZjs7QUFFQSxNQUFNQyxZQUFZLEVBQWxCO0FBQ0EsTUFBSUMsVUFBVSxFQUFkO0FBQ0EsTUFBSUMsa0JBQWtCLEVBQXRCOztBQUVBSixTQUFPSyxPQUFQLENBQWUsVUFBVUMsS0FBVixFQUFpQjtBQUM5QixRQUFJQSxNQUFNQyxJQUFOLEtBQWUsVUFBZixLQUE4QkQsTUFBTUUsS0FBTixLQUFnQixHQUFoQixJQUF1QkYsTUFBTUUsS0FBTixLQUFnQixHQUFyRSxDQUFKLEVBQStFO0FBQzdFLFVBQUlMLFFBQVFNLE1BQVosRUFBb0I7QUFDbEJQLGtCQUFVUSxJQUFWLENBQWVQ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QUFJLENBQUMsS0FBS0YsaUJBQU4sSUFBMkJJLE9BQU9QLFNBQXRDLEVBQWlEO0FBQ3RELGFBQUtJLElBQUwsR0FBWTtBQUNWekIsZ0JBQU0sVUFESTtBQUVWQyxpQkFBTzJCO0FBRkcsU0FBWjtBQUlBLGFBQUtELElBQUwsQ0FBVXhCLElBQVYsQ0FBZSxLQUFLc0IsSUFBcEI7QUFDQSxhQUFLQSxJQUFMLEdBQVksSUFBWjtBQUNBLGFBQUtELGlCQUFMLEdBQXlCSCxVQUFVTyxHQUFWLENBQXpCO0FBQ0EsYUFBS0YsT0FBTCxHQUFlLEtBQWY7QUFDQTtBQUNEOztBQUVELFVBQUksQ0FBQyxLQUFLQSxPQUFOLElBQWlCRSxRQUFRLElBQTdCLEVBQW1DO0FBQ2pDLGFBQUtGLE9BQUwsR0FBZSxJQUFmO0FBQ0E7QUFDRDs7QUFFRCxVQUFJLENBQUMsS0FBS0QsSUFBVixFQUFnQjtBQUNkLGFBQUtBLElBQUwsR0FBWTtBQUNWekIsZ0JBQU0sTUFESTtBQUVWQyxpQkFBTztBQUZHLFNBQVo7QUFJQSxhQUFLMEIsSUFBTCxDQUFVeEIsSUFBVixDQUFlLEtBQUtzQixJQUFwQjtBQUNEOztBQUVELFVBQUksS0FBS0MsT0FBTCxJQUFnQkUsUUFBUSxJQUE1QixFQUFrQztBQUNoQyxhQUFLSCxJQUFMLENBQVV4QixLQUFWLElBQW1CLElBQW5CO0FBQ0Q7O0FBRUQsV0FBS3dCLElBQUwsQ0FBVXhCLEtBQVYsSUFBbUIyQixHQUFuQjtBQUNBLFdBQUtGLE9BQUwsR0FBZSxLQUFmO0FBQ0QiLCJmaWxlIjoiYWRkcmVzc3BhcnNlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyc2VzIHN0cnVjdHVyZWQgZS1tYWlsIGFkZHJlc3NlcyBmcm9tIGFuIGFkZHJlc3MgZmllbGRcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgIFwiTmFtZSA8YWRkcmVzc0Bkb21haW4+XCJcbiAqXG4gKiB3aWxsIGJlIGNvbnZlcnRlZCB0b1xuICpcbiAqICAgICBbe25hbWU6IFwiTmFtZVwiLCBhZGRyZXNzOiBcImFkZHJlc3NAZG9tYWluXCJ9XVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQWRkcmVzcyBmaWVsZFxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGFkZHJlc3Mgb2JqZWN0c1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZSAoc3RyKSB7XG4gIGNvbnN0IHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoc3RyKVxuICBjb25zdCB0b2tlbnMgPSB0b2tlbml6ZXIudG9rZW5pemUoKVxuXG4gIGNvbnN0IGFkZHJlc3NlcyA9IFtdXG4gIGxldCBhZGRyZXNzID0gW11cbiAgbGV0IHBhcnNlZEFkZHJlc3NlcyA9IFtdXG5cbiAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdvcGVyYXRvcicgJiYgKHRva2VuLnZhbHVlID09PSAnLCcgfHwgdG9rZW4udmFsdWUgPT09ICc7JykpIHtcbiAgICAgIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKVxuICAgICAgfVxuICAgICAgYWRkcmVzcyA9IFtdXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MucHVzaCh0b2tlbilcbiAgICB9XG4gIH0pXG5cbiAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgYWRkcmVzc2VzLnB1c2goYWRkcmVzcylcbiAgfVxuXG4gIGFkZHJlc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgYWRkcmVzcyA9IF9oYW5kbGVBZGRyZXNzKGFkZHJlc3MpXG4gICAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICBwYXJzZWRBZGRyZXNzZXMgPSBwYXJzZWRBZGRyZXNzZXMuY29uY2F0KGFkZHJlc3MpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBwYXJzZWRBZGRyZXNzZXNcbn07XG5cbi8qKlxuICogQ29udmVydHMgdG9rZW5zIGZvciBhIHNpbmdsZSBhZGRyZXNzIGludG8gYW4gYWRkcmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB0b2tlbnMgVG9rZW5zIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSBBZGRyZXNzIG9iamVjdFxuICovXG5mdW5jdGlvbiBfaGFuZGxlQWRkcmVzcyAodG9rZW5zKSB7XG4gIGxldCBpc0dyb3VwID0gZmFsc2VcbiAgbGV0IHN0YXRlID0gJ3RleHQnXG4gIGxldCBhZGRyZXNzXG4gIGNvbnN0IGFkZHJlc3NlcyA9IFtdXG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgYWRkcmVzczogW10sXG4gICAgY29tbWVudDogW10sXG4gICAgZ3JvdXA6IFtdLFxuICAgIHRleHQ6IFtdXG4gIH1cblxuICAvLyBGaWx0ZXIgb3V0IDxhZGRyZXNzZXM+LCAoY29tbWVudHMpIGFuZCByZWd1bGFyIHRleHRcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRva2Vucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2ldXG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ29wZXJhdG9yJykge1xuICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBzdGF0ZSA9ICdhZGRyZXNzJ1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgIHN0YXRlID0gJ2NvbW1lbnQnXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnOic6XG4gICAgICAgICAgc3RhdGUgPSAnZ3JvdXAnXG4gICAgICAgICAgaXNHcm91cCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHN0YXRlID0gJ3RleHQnXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBkYXRhW3N0YXRlXS5wdXNoKHRva2VuLnZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZXJlIGlzIG5vIHRleHQgYnV0IGEgY29tbWVudCwgcmVwbGFjZSB0aGUgdHdvXG4gIGlmICghZGF0YS50ZXh0Lmxlbmd0aCAmJiBkYXRhLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50XG4gICAgZGF0YS5jb21tZW50ID0gW11cbiAgfVxuXG4gIGlmIChpc0dyb3VwKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNhcHBlbmRpeC1BLjEuM1xuICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5qb2luKCcgJylcbiAgICBhZGRyZXNzZXMucHVzaCh7XG4gICAgICBuYW1lOiBkYXRhLnRleHQgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5uYW1lKSxcbiAgICAgIGdyb3VwOiBkYXRhLmdyb3VwLmxlbmd0aCA/IHBhcnNlKGRhdGEuZ3JvdXAuam9pbignLCcpKSA6IFtdXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBubyBhZGRyZXNzIHdhcyBmb3VuZCwgdHJ5IHRvIGRldGVjdCBvbmUgZnJvbSByZWd1bGFyIHRleHRcbiAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGggJiYgZGF0YS50ZXh0Lmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAoZGF0YS50ZXh0W2ldLm1hdGNoKC9eW15AXFxzXStAW15AXFxzXSskLykpIHtcbiAgICAgICAgICBkYXRhLmFkZHJlc3MgPSBkYXRhLnRleHQuc3BsaWNlKGksIDEpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgX3JlZ2V4SGFuZGxlciA9IGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICAgIGRhdGEuYWRkcmVzcyA9IFthZGRyZXNzLnRyaW0oKV1cbiAgICAgICAgICByZXR1cm4gJyAnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFkZHJlc3NcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzdGlsbCBubyBhZGRyZXNzXG4gICAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGRhdGEudGV4dFtpXSA9IGRhdGEudGV4dFtpXS5yZXBsYWNlKC9cXHMqXFxiW15AXFxzXStAW15AXFxzXStcXGJcXHMqLywgX3JlZ2V4SGFuZGxlcikudHJpbSgpXG4gICAgICAgICAgaWYgKGRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBzdGlsbCBpcyBubyB0ZXh0IGJ1dCBhIGNvbW1lbnQgZXhpeHRzLCByZXBsYWNlIHRoZSB0d29cbiAgICBpZiAoIWRhdGEudGV4dC5sZW5ndGggJiYgZGF0YS5jb21tZW50Lmxlbmd0aCkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50XG4gICAgICBkYXRhLmNvbW1lbnQgPSBbXVxuICAgIH1cblxuICAgIC8vIEtlZXAgb25seSB0aGUgZmlyc3QgYWRkcmVzcyBvY2N1cmVuY2UsIHB1c2ggb3RoZXJzIHRvIHJlZ3VsYXIgdGV4dFxuICAgIGlmIChkYXRhLmFkZHJlc3MubGVuZ3RoID4gMSkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmNvbmNhdChkYXRhLmFkZHJlc3Muc3BsaWNlKDEpKVxuICAgIH1cblxuICAgIC8vIEpvaW4gdmFsdWVzIHdpdGggc3BhY2VzXG4gICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmpvaW4oJyAnKVxuICAgIGRhdGEuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcy5qb2luKCcgJylcblxuICAgIGlmICghZGF0YS5hZGRyZXNzICYmIGlzR3JvdXApIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzID0ge1xuICAgICAgICBhZGRyZXNzOiBkYXRhLmFkZHJlc3MgfHwgZGF0YS50ZXh0IHx8ICcnLFxuICAgICAgICBuYW1lOiBkYXRhLnRleHQgfHwgZGF0YS5hZGRyZXNzIHx8ICcnXG4gICAgICB9XG5cbiAgICAgIGlmIChhZGRyZXNzLmFkZHJlc3MgPT09IGFkZHJlc3MubmFtZSkge1xuICAgICAgICBpZiAoKGFkZHJlc3MuYWRkcmVzcyB8fCAnJykubWF0Y2goL0AvKSkge1xuICAgICAgICAgIGFkZHJlc3MubmFtZSA9ICcnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkcmVzcy5hZGRyZXNzID0gJydcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhZGRyZXNzZXNcbn07XG5cbi8qXG4gKiBPcGVyYXRvciB0b2tlbnMgYW5kIHdoaWNoIHRva2VucyBhcmUgZXhwZWN0ZWQgdG8gZW5kIHRoZSBzZXF1ZW5jZVxuICovXG5jb25zdCBPUEVSQVRPUlMgPSB7XG4gICdcIic6ICdcIicsXG4gICcoJzogJyknLFxuICAnPCc6ICc+JyxcbiAgJywnOiAnJyxcbiAgLy8gR3JvdXBzIGFyZSBlbmRlZCBieSBzZW1pY29sb25zXG4gICc6JzogJzsnLFxuICAvLyBTZW1pY29sb25zIGFyZSBub3QgYSBsZWdhbCBkZWxpbWl0ZXIgcGVyIHRoZSBSRkMyODIyIGdyYW1tYXIgb3RoZXJcbiAgLy8gdGhhbiBmb3IgdGVybWluYXRpbmcgYSBncm91cCwgYnV0IHRoZXkgYXJlIGFsc28gbm90IHZhbGlkIGZvciBhbnlcbiAgLy8gb3RoZXIgdXNlIGluIHRoaXMgY29udGV4dC4gIEdpdmVuIHRoYXQgc29tZSBtYWlsIGNsaWVudHMgaGF2ZVxuICAvLyBoaXN0b3JpY2FsbHkgYWxsb3dlZCB0aGUgc2VtaWNvbG9uIGFzIGEgZGVsaW1pdGVyIGVxdWl2YWxlbnQgdG8gdGhlXG4gIC8vIGNvbW1hIGluIHRoZWlyIFVJLCBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCB0aGVtIHRoZSBzYW1lIGFzIGEgY29tbWFcbiAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBncm91cC5cbiAgJzsnOiAnJ1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBUb2tlbml6ZXIgb2JqZWN0IGZvciB0b2tlbml6aW5nIGFkZHJlc3MgZmllbGQgc3RyaW5nc1xuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBBZGRyZXNzIGZpZWxkIHN0cmluZ1xuICovXG5jbGFzcyBUb2tlbml6ZXIge1xuICBjb25zdHJ1Y3RvciAoc3RyKSB7XG4gICAgdGhpcy5zdHIgPSAoc3RyIHx8ICcnKS50b1N0cmluZygpXG4gICAgdGhpcy5vcGVyYXRvckN1cnJlbnQgPSAnJ1xuICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSAnJ1xuICAgIHRoaXMubm9kZSA9IG51bGxcbiAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZVxuICAgIHRoaXMubGlzdCA9IFtdXG4gIH1cblxuICAvKipcbiAgICogVG9rZW5pemVzIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmdcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIG9wZXJhdG9yfHRleHQgdG9rZW5zXG4gICAqL1xuICB0b2tlbml6ZSAoKSB7XG4gICAgbGV0IGNoclxuICAgIGxldCBsaXN0ID0gW11cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5zdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNociA9IHRoaXMuc3RyLmNoYXJBdChpKVxuICAgICAgdGhpcy5jaGVja0NoYXIoY2hyKVxuICAgIH1cblxuICAgIHRoaXMubGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBub2RlLnZhbHVlID0gKG5vZGUudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICBsaXN0LnB1c2gobm9kZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGxpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBjaGFyYWN0ZXIgaXMgYW4gb3BlcmF0b3Igb3IgdGV4dCBhbmQgYWN0cyBhY2NvcmRpbmdseVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY2hyIENoYXJhY3RlciBmcm9tIHRoZSBhZGRyZXNzIGZpZWxkXG4gICAqL1xuICBjaGVja0NoYXIgKGNocikge1xuICAgIGlmICgoY2hyIGluIE9QRVJBVE9SUyB8fCBjaHIgPT09ICdcXFxcJykgJiYgdGhpcy5lc2NhcGVkKSB7XG4gICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgPT09IHRoaXMub3BlcmF0b3JFeHBlY3RpbmcpIHtcbiAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgdHlwZTogJ29wZXJhdG9yJyxcbiAgICAgICAgdmFsdWU6IGNoclxuICAgICAgfVxuICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKVxuICAgICAgdGhpcy5ub2RlID0gbnVsbFxuICAgICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9ICcnXG4gICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICghdGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgaW4gT1BFUkFUT1JTKSB7XG4gICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgIHR5cGU6ICdvcGVyYXRvcicsXG4gICAgICAgIHZhbHVlOiBjaHJcbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSlcbiAgICAgIHRoaXMubm9kZSA9IG51bGxcbiAgICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSBPUEVSQVRPUlNbY2hyXVxuICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5lc2NhcGVkICYmIGNociA9PT0gJ1xcXFwnKSB7XG4gICAgICB0aGlzLmVzY2FwZWQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubm9kZSkge1xuICAgICAgdGhpcy5ub2RlID0ge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmVzY2FwZWQgJiYgY2hyICE9PSAnXFxcXCcpIHtcbiAgICAgIHRoaXMubm9kZS52YWx1ZSArPSAnXFxcXCdcbiAgICB9XG5cbiAgICB0aGlzLm5vZGUudmFsdWUgKz0gY2hyXG4gICAgdGhpcy5lc2NhcGVkID0gZmFsc2VcbiAgfVxufVxuIl19

/***/ }),
/* 179 */
/*!*************************************************************************!*\
  !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $propertyIsEnumerable = {}.propertyIsEnumerable;
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

// Nashorn ~ JDK8 bug
var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);

// `Object.prototype.propertyIsEnumerable` method implementation
// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable
exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
  var descriptor = getOwnPropertyDescriptor(this, V);
  return !!descriptor && descriptor.enumerable;
} : $propertyIsEnumerable;


/***/ }),
/* 180 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/array-includes.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 73);
var toLength = __webpack_require__(/*! ../internals/to-length */ 84);
var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 212);

// `Array.prototype.{ indexOf, includes }` methods implementation
var createMethod = function (IS_INCLUDES) {
  return function ($this, el, fromIndex) {
    var O = toIndexedObject($this);
    var length = toLength(O.length);
    var index = toAbsoluteIndex(fromIndex, length);
    var value;
    // Array#includes uses SameValueZero equality algorithm
    // eslint-disable-next-line no-self-compare -- NaN check
    if (IS_INCLUDES && el != el) while (length > index) {
      value = O[index++];
      // eslint-disable-next-line no-self-compare -- NaN check
      if (value != value) return true;
    // Array#indexOf ignores holes, Array#includes - not
    } else for (;length > index; index++) {
      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
    } return !IS_INCLUDES && -1;
  };
};

module.exports = {
  // `Array.prototype.includes` method
  // https://tc39.es/ecma262/#sec-array.prototype.includes
  includes: createMethod(true),
  // `Array.prototype.indexOf` method
  // https://tc39.es/ecma262/#sec-array.prototype.indexof
  indexOf: createMethod(false)
};


/***/ }),
/* 181 */
/*!***************************************************************************!*\
  !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***!
  \***************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe
exports.f = Object.getOwnPropertySymbols;


/***/ }),
/* 182 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/is-forced.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 37);

var replacement = /#|\.prototype\./;

var isForced = function (feature, detection) {
  var value = data[normalize(feature)];
  return value == POLYFILL ? true
    : value == NATIVE ? false
    : typeof detection == 'function' ? fails(detection)
    : !!detection;
};

var normalize = isForced.normalize = function (string) {
  return String(string).replace(replacement, '.').toLowerCase();
};

var data = isForced.data = {};
var NATIVE = isForced.NATIVE = 'N';
var POLYFILL = isForced.POLYFILL = 'P';

module.exports = isForced;


/***/ }),
/* 183 */
/*!***************************************************!*\
  !*** ./node_modules/core-js/internals/classof.js ***!
  \***************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 99);
var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 74);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');
// ES3 wrong here
var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';

// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
  try {
    return it[key];
  } catch (error) { /* empty */ }
};

// getting tag from ES6+ `Object.prototype.toString`
module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
  var O, tag, result;
  return it === undefined ? 'Undefined' : it === null ? 'Null'
    // @@toStringTag case
    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag
    // builtinTag case
    : CORRECT_ARGUMENTS ? classofRaw(O)
    // ES3 arguments fallback
    : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;
};


/***/ }),
/* 184 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/iterators-core.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__(/*! ../internals/fails */ 37);
var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 168);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);
var has = __webpack_require__(/*! ../internals/has */ 44);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 98);

var ITERATOR = wellKnownSymbol('iterator');
var BUGGY_SAFARI_ITERATORS = false;

var returnThis = function () { return this; };

// `%IteratorPrototype%` object
// https://tc39.es/ecma262/#sec-%iteratorprototype%-object
var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;

/* eslint-disable es/no-array-prototype-keys -- safe */
if ([].keys) {
  arrayIterator = [].keys();
  // Safari 8 has buggy iterators w/o `next`
  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
  else {
    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
  }
}

var NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {
  var test = {};
  // FF44- legacy iterators case
  return IteratorPrototype[ITERATOR].call(test) !== test;
});

if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};

// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
if ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {
  createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);
}

module.exports = {
  IteratorPrototype: IteratorPrototype,
  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
};


/***/ }),
/* 185 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/modules/web.timers.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ 34);
var global = __webpack_require__(/*! ../internals/global */ 31);
var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 106);

var slice = [].slice;
var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check

var wrap = function (scheduler) {
  return function (handler, timeout /* , ...arguments */) {
    var boundArgs = arguments.length > 2;
    var args = boundArgs ? slice.call(arguments, 2) : undefined;
    return scheduler(boundArgs ? function () {
      // eslint-disable-next-line no-new-func
      (typeof handler == 'function' ? handler : Function(handler)).apply(this, args);
    } : handler, timeout);
  };
};

// ie9- setTimeout & setInterval additional parameters fix
// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers
$({ global: true, bind: true, forced: MSIE }, {
  // `setTimeout` method
  // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout
  setTimeout: wrap(global.setTimeout),
  // `setInterval` method
  // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval
  setInterval: wrap(global.setInterval)
});


/***/ }),
/* 186 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/ie8-dom-define.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var fails = __webpack_require__(/*! ../internals/fails */ 43);
var createElement = __webpack_require__(/*! ../internals/document-create-element */ 138);

// Thank's IE8 for his funny defineProperty
module.exports = !DESCRIPTORS && !fails(function () {
  return Object.defineProperty(createElement('div'), 'a', {
    get: function () { return 7; }
  }).a != 7;
});


/***/ }),
/* 187 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/is-forced.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);

var replacement = /#|\.prototype\./;

var isForced = function (feature, detection) {
  var value = data[normalize(feature)];
  return value == POLYFILL ? true
    : value == NATIVE ? false
    : typeof detection == 'function' ? fails(detection)
    : !!detection;
};

var normalize = isForced.normalize = function (string) {
  return String(string).replace(replacement, '.').toLowerCase();
};

var data = isForced.data = {};
var NATIVE = isForced.NATIVE = 'N';
var POLYFILL = isForced.POLYFILL = 'P';

module.exports = isForced;


/***/ }),
/* 188 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/internals/shared.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 86);
var store = __webpack_require__(/*! ../internals/shared-store */ 141);

(module.exports = function (key, value) {
  return store[key] || (store[key] = value !== undefined ? value : {});
})('versions', []).push({
  version: '3.8.2',
  mode: IS_PURE ? 'pure' : 'global',
  copyright: '© 2021 Denis Pushkarev (zloirock.ru)'
});


/***/ }),
/* 189 */
/*!****************************************************!*\
  !*** ./node_modules/core-js-pure/internals/uid.js ***!
  \****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

var id = 0;
var postfix = Math.random();

module.exports = function (key) {
  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);
};


/***/ }),
/* 190 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/enum-bug-keys.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// IE8- don't enum bug keys
module.exports = [
  'constructor',
  'hasOwnProperty',
  'isPrototypeOf',
  'propertyIsEnumerable',
  'toLocaleString',
  'toString',
  'valueOf'
];


/***/ }),
/* 191 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js-pure/internals/html.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 75);

module.exports = getBuiltIn('document', 'documentElement');


/***/ }),
/* 192 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/native-symbol.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);

module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
  // Chrome 38 Symbol has incorrect toString conversion
  // eslint-disable-next-line no-undef
  return !String(Symbol());
});


/***/ }),
/* 193 */
/*!***************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/native-promise-constructor.js ***!
  \***************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);

module.exports = global.Promise;


/***/ }),
/* 194 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/inspect-source.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var store = __webpack_require__(/*! ../internals/shared-store */ 141);

var functionToString = Function.toString;

// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper
if (typeof store.inspectSource != 'function') {
  store.inspectSource = function (it) {
    return functionToString.call(it);
  };
}

module.exports = store.inspectSource;


/***/ }),
/* 195 */
/*!********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/species-constructor.js ***!
  \********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var SPECIES = wellKnownSymbol('species');

// `SpeciesConstructor` abstract operation
// https://tc39.es/ecma262/#sec-speciesconstructor
module.exports = function (O, defaultConstructor) {
  var C = anObject(O).constructor;
  var S;
  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);
};


/***/ }),
/* 196 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js-pure/internals/task.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var fails = __webpack_require__(/*! ../internals/fails */ 43);
var bind = __webpack_require__(/*! ../internals/function-bind-context */ 116);
var html = __webpack_require__(/*! ../internals/html */ 191);
var createElement = __webpack_require__(/*! ../internals/document-create-element */ 138);
var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 197);
var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ 118);

var location = global.location;
var set = global.setImmediate;
var clear = global.clearImmediate;
var process = global.process;
var MessageChannel = global.MessageChannel;
var Dispatch = global.Dispatch;
var counter = 0;
var queue = {};
var ONREADYSTATECHANGE = 'onreadystatechange';
var defer, channel, port;

var run = function (id) {
  // eslint-disable-next-line no-prototype-builtins
  if (queue.hasOwnProperty(id)) {
    var fn = queue[id];
    delete queue[id];
    fn();
  }
};

var runner = function (id) {
  return function () {
    run(id);
  };
};

var listener = function (event) {
  run(event.data);
};

var post = function (id) {
  // old engines have not location.origin
  global.postMessage(id + '', location.protocol + '//' + location.host);
};

// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
if (!set || !clear) {
  set = function setImmediate(fn) {
    var args = [];
    var i = 1;
    while (arguments.length > i) args.push(arguments[i++]);
    queue[++counter] = function () {
      // eslint-disable-next-line no-new-func
      (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);
    };
    defer(counter);
    return counter;
  };
  clear = function clearImmediate(id) {
    delete queue[id];
  };
  // Node.js 0.8-
  if (IS_NODE) {
    defer = function (id) {
      process.nextTick(runner(id));
    };
  // Sphere (JS game engine) Dispatch API
  } else if (Dispatch && Dispatch.now) {
    defer = function (id) {
      Dispatch.now(runner(id));
    };
  // Browsers with MessageChannel, includes WebWorkers
  // except iOS - https://github.com/zloirock/core-js/issues/624
  } else if (MessageChannel && !IS_IOS) {
    channel = new MessageChannel();
    port = channel.port2;
    channel.port1.onmessage = listener;
    defer = bind(port.postMessage, port, 1);
  // Browsers with postMessage, skip WebWorkers
  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
  } else if (
    global.addEventListener &&
    typeof postMessage == 'function' &&
    !global.importScripts &&
    location && location.protocol !== 'file:' &&
    !fails(post)
  ) {
    defer = post;
    global.addEventListener('message', listener, false);
  // IE8-
  } else if (ONREADYSTATECHANGE in createElement('script')) {
    defer = function (id) {
      html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {
        html.removeChild(this);
        run(id);
      };
    };
  // Rest old browsers
  } else {
    defer = function (id) {
      setTimeout(runner(id), 0);
    };
  }
}

module.exports = {
  set: set,
  clear: clear
};


/***/ }),
/* 197 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/engine-is-ios.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 106);

module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);


/***/ }),
/* 198 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/promise-resolve.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var isObject = __webpack_require__(/*! ../internals/is-object */ 50);
var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ 109);

module.exports = function (C, x) {
  anObject(C);
  if (isObject(x) && x.constructor === C) return x;
  var promiseCapability = newPromiseCapability.f(C);
  var resolve = promiseCapability.resolve;
  resolve(x);
  return promiseCapability.promise;
};


/***/ }),
/* 199 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/define-iterator.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 280);
var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 139);
var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 159);
var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 145);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var redefine = __webpack_require__(/*! ../internals/redefine */ 108);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 86);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 76);
var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 200);

var IteratorPrototype = IteratorsCore.IteratorPrototype;
var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
var ITERATOR = wellKnownSymbol('iterator');
var KEYS = 'keys';
var VALUES = 'values';
var ENTRIES = 'entries';

var returnThis = function () { return this; };

module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
  createIteratorConstructor(IteratorConstructor, NAME, next);

  var getIterationMethod = function (KIND) {
    if (KIND === DEFAULT && defaultIterator) return defaultIterator;
    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];
    switch (KIND) {
      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
    } return function () { return new IteratorConstructor(this); };
  };

  var TO_STRING_TAG = NAME + ' Iterator';
  var INCORRECT_VALUES_NAME = false;
  var IterablePrototype = Iterable.prototype;
  var nativeIterator = IterablePrototype[ITERATOR]
    || IterablePrototype['@@iterator']
    || DEFAULT && IterablePrototype[DEFAULT];
  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
  var CurrentIteratorPrototype, methods, KEY;

  // fix native
  if (anyNativeIterator) {
    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
    if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
        if (setPrototypeOf) {
          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {
          createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);
        }
      }
      // Set @@toStringTag to native iterators
      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
    }
  }

  // fix Array#{values, @@iterator}.name in V8 / FF
  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
    INCORRECT_VALUES_NAME = true;
    defaultIterator = function values() { return nativeIterator.call(this); };
  }

  // define iterator
  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
    createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);
  }
  Iterators[NAME] = defaultIterator;

  // export additional methods
  if (DEFAULT) {
    methods = {
      values: getIterationMethod(VALUES),
      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
      entries: getIterationMethod(ENTRIES)
    };
    if (FORCED) for (KEY in methods) {
      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
        redefine(IterablePrototype, KEY, methods[KEY]);
      }
    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
  }

  return methods;
};


/***/ }),
/* 200 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/iterators-core.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 139);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var has = __webpack_require__(/*! ../internals/has */ 54);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 86);

var ITERATOR = wellKnownSymbol('iterator');
var BUGGY_SAFARI_ITERATORS = false;

var returnThis = function () { return this; };

// `%IteratorPrototype%` object
// https://tc39.es/ecma262/#sec-%iteratorprototype%-object
var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;

if ([].keys) {
  arrayIterator = [].keys();
  // Safari 8 has buggy iterators w/o `next`
  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
  else {
    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
  }
}

if (IteratorPrototype == undefined) IteratorPrototype = {};

// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {
  createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);
}

module.exports = {
  IteratorPrototype: IteratorPrototype,
  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
};


/***/ }),
/* 201 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.iterator.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 80);
var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 222);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 76);
var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 147);
var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 199);

var ARRAY_ITERATOR = 'Array Iterator';
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);

// `Array.prototype.entries` method
// https://tc39.es/ecma262/#sec-array.prototype.entries
// `Array.prototype.keys` method
// https://tc39.es/ecma262/#sec-array.prototype.keys
// `Array.prototype.values` method
// https://tc39.es/ecma262/#sec-array.prototype.values
// `Array.prototype[@@iterator]` method
// https://tc39.es/ecma262/#sec-array.prototype-@@iterator
// `CreateArrayIterator` internal method
// https://tc39.es/ecma262/#sec-createarrayiterator
module.exports = defineIterator(Array, 'Array', function (iterated, kind) {
  setInternalState(this, {
    type: ARRAY_ITERATOR,
    target: toIndexedObject(iterated), // target
    index: 0,                          // next index
    kind: kind                         // kind
  });
// `%ArrayIteratorPrototype%.next` method
// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next
}, function () {
  var state = getInternalState(this);
  var target = state.target;
  var kind = state.kind;
  var index = state.index++;
  if (!target || index >= target.length) {
    state.target = undefined;
    return { value: undefined, done: true };
  }
  if (kind == 'keys') return { value: index, done: false };
  if (kind == 'values') return { value: target[index], done: false };
  return { value: [index, target[index]], done: false };
}, 'values');

// argumentsList[@@iterator] is %ArrayProto_values%
// https://tc39.es/ecma262/#sec-createunmappedargumentsobject
// https://tc39.es/ecma262/#sec-createmappedargumentsobject
Iterators.Arguments = Iterators.Array;

// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');


/***/ }),
/* 202 */
/*!********************************************************!*\
  !*** ./node_modules/core-js/internals/regexp-flags.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var anObject = __webpack_require__(/*! ../internals/an-object */ 42);

// `RegExp.prototype.flags` getter implementation
// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
module.exports = function () {
  var that = anObject(this);
  var result = '';
  if (that.global) result += 'g';
  if (that.ignoreCase) result += 'i';
  if (that.multiline) result += 'm';
  if (that.dotAll) result += 's';
  if (that.unicode) result += 'u';
  if (that.sticky) result += 'y';
  return result;
};


/***/ }),
/* 203 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/modules/es.string.split.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 149);
var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ 242);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);
var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 236);
var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 171);
var toLength = __webpack_require__(/*! ../internals/to-length */ 84);
var callRegExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 150);
var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ 162);
var stickyHelpers = __webpack_require__(/*! ../internals/regexp-sticky-helpers */ 223);

var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
var arrayPush = [].push;
var min = Math.min;
var MAX_UINT32 = 0xFFFFFFFF;

// @@split logic
fixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {
  var internalSplit;
  if (
    'abbc'.split(/(b)*/)[1] == 'c' ||
    // eslint-disable-next-line regexp/no-empty-group -- required for testing
    'test'.split(/(?:)/, -1).length != 4 ||
    'ab'.split(/(?:ab)*/).length != 2 ||
    '.'.split(/(.?)(.?)/).length != 4 ||
    // eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing
    '.'.split(/()()/).length > 1 ||
    ''.split(/.?/).length
  ) {
    // based on es5-shim implementation, need to rework it
    internalSplit = function (separator, limit) {
      var string = String(requireObjectCoercible(this));
      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
      if (lim === 0) return [];
      if (separator === undefined) return [string];
      // If `separator` is not a regex, use native split
      if (!isRegExp(separator)) {
        return nativeSplit.call(string, separator, lim);
      }
      var output = [];
      var flags = (separator.ignoreCase ? 'i' : '') +
                  (separator.multiline ? 'm' : '') +
                  (separator.unicode ? 'u' : '') +
                  (separator.sticky ? 'y' : '');
      var lastLastIndex = 0;
      // Make `global` and avoid `lastIndex` issues by working with a copy
      var separatorCopy = new RegExp(separator.source, flags + 'g');
      var match, lastIndex, lastLength;
      while (match = regexpExec.call(separatorCopy, string)) {
        lastIndex = separatorCopy.lastIndex;
        if (lastIndex > lastLastIndex) {
          output.push(string.slice(lastLastIndex, match.index));
          if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));
          lastLength = match[0].length;
          lastLastIndex = lastIndex;
          if (output.length >= lim) break;
        }
        if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop
      }
      if (lastLastIndex === string.length) {
        if (lastLength || !separatorCopy.test('')) output.push('');
      } else output.push(string.slice(lastLastIndex));
      return output.length > lim ? output.slice(0, lim) : output;
    };
  // Chakra, V8
  } else if ('0'.split(undefined, 0).length) {
    internalSplit = function (separator, limit) {
      return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);
    };
  } else internalSplit = nativeSplit;

  return [
    // `String.prototype.split` method
    // https://tc39.es/ecma262/#sec-string.prototype.split
    function split(separator, limit) {
      var O = requireObjectCoercible(this);
      var splitter = separator == undefined ? undefined : separator[SPLIT];
      return splitter !== undefined
        ? splitter.call(separator, O, limit)
        : internalSplit.call(String(O), separator, limit);
    },
    // `RegExp.prototype[@@split]` method
    // https://tc39.es/ecma262/#sec-regexp.prototype-@@split
    //
    // NOTE: This cannot be properly polyfilled in engines that don't support
    // the 'y' flag.
    function (regexp, limit) {
      var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);
      if (res.done) return res.value;

      var rx = anObject(regexp);
      var S = String(this);
      var C = speciesConstructor(rx, RegExp);

      var unicodeMatching = rx.unicode;
      var flags = (rx.ignoreCase ? 'i' : '') +
                  (rx.multiline ? 'm' : '') +
                  (rx.unicode ? 'u' : '') +
                  (UNSUPPORTED_Y ? 'g' : 'y');

      // ^(? + rx + ) is needed, in combination with some S slicing, to
      // simulate the 'y' flag.
      var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);
      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
      if (lim === 0) return [];
      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];
      var p = 0;
      var q = 0;
      var A = [];
      while (q < S.length) {
        splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;
        var z = callRegExpExec(splitter, UNSUPPORTED_Y ? S.slice(q) : S);
        var e;
        if (
          z === null ||
          (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p
        ) {
          q = advanceStringIndex(S, q, unicodeMatching);
        } else {
          A.push(S.slice(p, q));
          if (A.length === lim) return A;
          for (var i = 1; i <= z.length - 1; i++) {
            A.push(z[i]);
            if (A.length === lim) return A;
          }
          q = p = e;
        }
      }
      A.push(S.slice(p));
      return A;
    }
  ];
}, UNSUPPORTED_Y);


/***/ }),
/* 204 */
/*!********************************************************!*\
  !*** ./node_modules/core-js/modules/es.string.link.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 65);
var createHTML = __webpack_require__(/*! ../internals/create-html */ 325);
var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 326);

// `String.prototype.link` method
// https://tc39.es/ecma262/#sec-string.prototype.link
$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {
  link: function link(url) {
    return createHTML(this, 'a', 'href', url);
  }
});


/***/ }),
/* 205 */
/*!*****************************!*\
  !*** external "window.Jua" ***!
  \*****************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.Jua;

/***/ }),
/* 206 */
/*!*************************************!*\
  !*** ./dev/Stores/User/Template.js ***!
  \*************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__);



 // import Remote from 'Remote/User/Ajax';

var TemplateUserStore = /*#__PURE__*/function () {
  function TemplateUserStore() {
    this.templates = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observableArray([]);
    this.templates.loading = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false).extend({
      throttle: 100
    });
    this.templatesNames = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observableArray([]).extend({
      throttle: 1000
    });
    this.templatesNames.skipFirst = true;
    this.subscribers();
  }

  var _proto = TemplateUserStore.prototype;

  _proto.subscribers = function subscribers() {
    var _this = this;

    this.templates.subscribe(function (list) {
      _this.templatesNames(___WEBPACK_IMPORTED_MODULE_3___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_3___default.a).call(___WEBPACK_IMPORTED_MODULE_3___default.a, list, function (item) {
        return item ? item.name : null;
      })));
    }); // this.templatesNames.subscribe((aList) => {
    // 	if (this.templatesNames.skipFirst)
    // 	{
    // 		this.templatesNames.skipFirst = false;
    // 	}
    // 	else if (aList && 1 < aList.length)
    // 	{
    // 		Remote.templatesSortOrder(null, aList);
    // 	}
    // });
  };

  return TemplateUserStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new TemplateUserStore());

/***/ }),
/* 207 */
/*!*********************************!*\
  !*** ./dev/Model/Attachment.js ***!
  \*********************************/
/*! exports provided: staticFileType, staticIconClass, staticCombinedIconClass, AttachmentModel, default */
/*! exports used: AttachmentModel, staticCombinedIconClass, staticFileType, staticIconClass */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return staticFileType; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return staticIconClass; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return staticCombinedIconClass; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AttachmentModel; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ 203);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Knoin/AbstractModel */ 67);
/* harmony import */ var Common_Audio__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Audio */ 83);














/**
 * @param {string} sExt
 * @param {string} sMimeType
 * @returns {string}
 */

var staticFileType = ___WEBPACK_IMPORTED_MODULE_6___default.a.memoize(function (ext, mimeType) {
  ext = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["trim"])(ext).toLowerCase();
  mimeType = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["trim"])(mimeType).toLowerCase();
  var result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Unknown;
  var mimeTypeParts = mimeType.split('/');

  switch (true) {
    case 'image' === mimeTypeParts[0] || -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(ext, ['png', 'jpg', 'jpeg', 'gif', 'bmp']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Image;
      break;

    case 'audio' === mimeTypeParts[0] || -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(ext, ['mp3', 'ogg', 'oga', 'wav']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Audio;
      break;

    case 'video' === mimeTypeParts[0] || -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(ext, ['mkv', 'avi']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Video;
      break;

    case -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(ext, ['php', 'js', 'css']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Code;
      break;

    case 'eml' === ext || -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(mimeType, ['message/delivery-status', 'message/rfc822']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Eml;
      break;

    case 'text' === mimeTypeParts[0] && 'html' !== mimeTypeParts[1] || -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(ext, ['txt', 'log']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Text;
      break;

    case 'text/html' === mimeType || -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(ext, ['html']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Html;
      break;

    case -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(mimeTypeParts[1], ['zip', '7z', 'tar', 'rar', 'gzip', 'bzip', 'bzip2', 'x-zip', 'x-7z', 'x-rar', 'x-tar', 'x-gzip', 'x-bzip', 'x-bzip2', 'x-zip-compressed', 'x-7z-compressed', 'x-rar-compressed']) || -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(ext, ['zip', '7z', 'tar', 'rar', 'gzip', 'bzip', 'bzip2']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Archive;
      break;

    case -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(mimeTypeParts[1], ['pdf', 'x-pdf']) || -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(ext, ['pdf']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Pdf;
      break;

    case -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(mimeType, ['application/pgp-signature', 'application/pgp-keys']) || -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(ext, ['asc', 'pem', 'ppk']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Certificate;
      break;

    case -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(mimeType, ['application/pkcs7-signature']) || -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(ext, ['p7s']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].CertificateBin;
      break;

    case -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(mimeTypeParts[1], ['rtf', 'msword', 'vnd.msword', 'vnd.openxmlformats-officedocument.wordprocessingml.document', 'vnd.openxmlformats-officedocument.wordprocessingml.template', 'vnd.ms-word.document.macroEnabled.12', 'vnd.ms-word.template.macroEnabled.12']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].WordText;
      break;

    case -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(mimeTypeParts[1], ['excel', 'ms-excel', 'vnd.ms-excel', 'vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'vnd.openxmlformats-officedocument.spreadsheetml.template', 'vnd.ms-excel.sheet.macroEnabled.12', 'vnd.ms-excel.template.macroEnabled.12', 'vnd.ms-excel.addin.macroEnabled.12', 'vnd.ms-excel.sheet.binary.macroEnabled.12']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Sheet;
      break;

    case -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(mimeTypeParts[1], ['powerpoint', 'ms-powerpoint', 'vnd.ms-powerpoint', 'vnd.openxmlformats-officedocument.presentationml.presentation', 'vnd.openxmlformats-officedocument.presentationml.template', 'vnd.openxmlformats-officedocument.presentationml.slideshow', 'vnd.ms-powerpoint.addin.macroEnabled.12', 'vnd.ms-powerpoint.presentation.macroEnabled.12', 'vnd.ms-powerpoint.template.macroEnabled.12', 'vnd.ms-powerpoint.slideshow.macroEnabled.12']):
      result = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Presentation;
      break;
    // no default
  }

  return result;
});
/**
 * @param {string} sFileType
 * @returns {string}
 */

var staticIconClass = ___WEBPACK_IMPORTED_MODULE_6___default.a.memoize(function (fileType) {
  var resultText = '',
      resultClass = 'icon-file';

  switch (fileType) {
    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Text:
    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Eml:
    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].WordText:
      resultClass = 'icon-file-text';
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Html:
    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Code:
      resultClass = 'icon-file-code';
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Image:
      resultClass = 'icon-file-image';
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Audio:
      resultClass = 'icon-file-music';
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Video:
      resultClass = 'icon-file-movie';
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Archive:
      resultClass = 'icon-file-zip';
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Certificate:
    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].CertificateBin:
      resultClass = 'icon-file-certificate';
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Sheet:
      resultClass = 'icon-file-excel';
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Presentation:
      resultClass = 'icon-file-chart-graph';
      break;

    case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Pdf:
      resultText = 'pdf';
      resultClass = 'icon-none';
      break;
    // no default
  }

  return [resultClass, resultText];
});
/**
 * @static
 * @param {string} sFileType
 * @returns {string}
 */

var staticCombinedIconClass = function staticCombinedIconClass(data) {
  var result = '',
      types = [];

  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["isNonEmptyArray"])(data)) {
    result = 'icon-attachment';
    types = ___WEBPACK_IMPORTED_MODULE_6___default.a.uniq(___WEBPACK_IMPORTED_MODULE_6___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, data, function (item) {
      return item ? staticFileType(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["getFileExtension"])(item[0]), item[1]) : '';
    })));

    if (types && 1 === types.length && types[0]) {
      switch (types[0]) {
        case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Text:
        case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].WordText:
          result = 'icon-file-text';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Html:
        case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Code:
          result = 'icon-file-code';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Image:
          result = 'icon-file-image';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Audio:
          result = 'icon-file-music';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Video:
          result = 'icon-file-movie';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Archive:
          result = 'icon-file-zip';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Certificate:
        case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].CertificateBin:
          result = 'icon-file-certificate';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Sheet:
          result = 'icon-file-excel';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Presentation:
          result = 'icon-file-chart-graph';
          break;
        // no default
      }
    }
  }

  return result;
};

var AttachmentModel = /*#__PURE__*/function (_AbstractModel) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AttachmentModel, _AbstractModel);

  function AttachmentModel() {
    var _this;

    _this = _AbstractModel.call(this, 'AttachmentModel') || this;
    _this.checked = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.mimeType = '';
    _this.fileName = '';
    _this.fileNameExt = '';
    _this.fileType = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Unknown;
    _this.estimatedSize = 0;
    _this.friendlySize = '';
    _this.isInline = false;
    _this.isLinked = false;
    _this.isThumbnail = false;
    _this.cid = '';
    _this.cidWithOutTags = '';
    _this.contentLocation = '';
    _this.download = '';
    _this.folder = '';
    _this.uid = '';
    _this.mimeIndex = '';
    _this.framed = false;
    return _this;
  }
  /**
   * @static
   * @param {AjaxJsonAttachment} json
   * @returns {?AttachmentModel}
   */


  AttachmentModel.newInstanceFromJson = function newInstanceFromJson(json) {
    var attachment = new AttachmentModel();
    return attachment.initByJson(json) ? attachment : null;
  }
  /**
   * @param {AjaxJsonAttachment} json
   * @returns {boolean}
   */
  ;

  var _proto = AttachmentModel.prototype;

  _proto.initByJson = function initByJson(json) {
    var bResult = false;

    if (json && 'Object/Attachment' === json['@Object']) {
      this.mimeType = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["trim"])((json.MimeType || '').toLowerCase());
      this.fileName = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["trim"])(json.FileName);
      this.estimatedSize = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["pInt"])(json.EstimatedSize);
      this.isInline = !!json.IsInline;
      this.isLinked = !!json.IsLinked;
      this.isThumbnail = !!json.IsThumbnail;
      this.cid = json.CID;
      this.contentLocation = json.ContentLocation;
      this.download = json.Download;
      this.folder = json.Folder;
      this.uid = json.Uid;
      this.mimeIndex = json.MimeIndex;
      this.framed = !!json.Framed;
      this.friendlySize = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["friendlySize"])(this.estimatedSize);
      this.cidWithOutTags = this.cid.replace(/^<+/, '').replace(/>+$/, '');
      this.fileNameExt = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["getFileExtension"])(this.fileName);
      this.fileType = staticFileType(this.fileNameExt, this.mimeType);
      bResult = true;
    }

    return bResult;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isImage = function isImage() {
    return Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Image === this.fileType;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isMp3 = function isMp3() {
    return Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Audio === this.fileType && 'mp3' === this.fileNameExt;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isOgg = function isOgg() {
    return Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Audio === this.fileType && ('oga' === this.fileNameExt || 'ogg' === this.fileNameExt);
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isWav = function isWav() {
    return Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Audio === this.fileType && 'wav' === this.fileNameExt;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.hasThumbnail = function hasThumbnail() {
    return this.isThumbnail;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isText = function isText() {
    return Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Text === this.fileType || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Eml === this.fileType || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Certificate === this.fileType || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Html === this.fileType || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Code === this.fileType;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isPdf = function isPdf() {
    return Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FileType"].Pdf === this.fileType;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isFramed = function isFramed() {
    return this.framed && Common_Globals__WEBPACK_IMPORTED_MODULE_9__["data"].__APP__ && Common_Globals__WEBPACK_IMPORTED_MODULE_9__["data"].__APP__.googlePreviewSupported() && !(this.isPdf() && Common_Globals__WEBPACK_IMPORTED_MODULE_9__["bAllowPdfPreview"]) && !this.isText() && !this.isImage();
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.hasPreview = function hasPreview() {
    return this.isImage() || this.isPdf() && Common_Globals__WEBPACK_IMPORTED_MODULE_9__["bAllowPdfPreview"] || this.isText() || this.isFramed();
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.hasPreplay = function hasPreplay() {
    return Common_Audio__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].supportedMp3 && this.isMp3() || Common_Audio__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].supportedOgg && this.isOgg() || Common_Audio__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].supportedWav && this.isWav();
  }
  /**
   * @returns {string}
   */
  ;

  _proto.linkDownload = function linkDownload() {
    return Object(Common_Links__WEBPACK_IMPORTED_MODULE_11__[/* attachmentDownload */ "c"])(this.download);
  }
  /**
   * @returns {string}
   */
  ;

  _proto.linkPreview = function linkPreview() {
    return Object(Common_Links__WEBPACK_IMPORTED_MODULE_11__[/* attachmentPreview */ "e"])(this.download);
  }
  /**
   * @returns {string}
   */
  ;

  _proto.linkThumbnail = function linkThumbnail() {
    return this.hasThumbnail() ? Object(Common_Links__WEBPACK_IMPORTED_MODULE_11__[/* attachmentThumbnailPreview */ "g"])(this.download) : '';
  }
  /**
   * @returns {string}
   */
  ;

  _proto.linkThumbnailPreviewStyle = function linkThumbnailPreviewStyle() {
    var link = this.linkThumbnail();
    return '' === link ? '' : 'background:url(' + link + ')';
  }
  /**
   * @returns {string}
   */
  ;

  _proto.linkFramed = function linkFramed() {
    return Object(Common_Links__WEBPACK_IMPORTED_MODULE_11__[/* attachmentFramed */ "d"])(this.download);
  }
  /**
   * @returns {string}
   */
  ;

  _proto.linkPreviewAsPlain = function linkPreviewAsPlain() {
    return Object(Common_Links__WEBPACK_IMPORTED_MODULE_11__[/* attachmentPreviewAsPlain */ "f"])(this.download);
  }
  /**
   * @returns {string}
   */
  ;

  _proto.linkPreviewMain = function linkPreviewMain() {
    var result = '';

    switch (true) {
      case this.isImage():
      case this.isPdf() && Common_Globals__WEBPACK_IMPORTED_MODULE_9__["bAllowPdfPreview"]:
        result = this.linkPreview();
        break;

      case this.isText():
        result = this.linkPreviewAsPlain();
        break;

      case this.isFramed():
        result = this.linkFramed();
        break;
      // no default
    }

    return result;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.generateTransferDownloadUrl = function generateTransferDownloadUrl() {
    var link = this.linkDownload();

    if ('http' !== link.substr(0, 4)) {
      link = window__WEBPACK_IMPORTED_MODULE_5___default.a.location.protocol + '//' + window__WEBPACK_IMPORTED_MODULE_5___default.a.location.host + window__WEBPACK_IMPORTED_MODULE_5___default.a.location.pathname + link;
    }

    return this.mimeType + ':' + this.fileName + ':' + link;
  }
  /**
   * @param {AttachmentModel} attachment
   * @param {*} event
   * @returns {boolean}
   */
  ;

  _proto.eventDragStart = function eventDragStart(attachment, event) {
    var localEvent = event.originalEvent || event;

    if (attachment && localEvent && localEvent.dataTransfer && localEvent.dataTransfer.setData) {
      localEvent.dataTransfer.setData('DownloadURL', this.generateTransferDownloadUrl());
    }

    return true;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.iconClass = function iconClass() {
    return staticIconClass(this.fileType)[0];
  }
  /**
   * @returns {string}
   */
  ;

  _proto.iconText = function iconText() {
    return staticIconClass(this.fileType)[1];
  };

  return AttachmentModel;
}(Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_12__[/* AbstractModel */ "a"]);



/***/ }),
/* 208 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js/internals/native-weak-map.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 129);

var WeakMap = global.WeakMap;

module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));


/***/ }),
/* 209 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__(/*! ../internals/has */ 44);
var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 210);
var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 127);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 66);

module.exports = function (target, source) {
  var keys = ownKeys(source);
  var defineProperty = definePropertyModule.f;
  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
  for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));
  }
};


/***/ }),
/* 210 */
/*!****************************************************!*\
  !*** ./node_modules/core-js/internals/own-keys.js ***!
  \****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 78);
var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 211);
var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 181);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);

// all object keys, includes non-enumerable and symbols
module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {
  var keys = getOwnPropertyNamesModule.f(anObject(it));
  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
  return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;
};


/***/ }),
/* 211 */
/*!*************************************************************************!*\
  !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 155);
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 112);

var hiddenKeys = enumBugKeys.concat('length', 'prototype');

// `Object.getOwnPropertyNames` method
// https://tc39.es/ecma262/#sec-object.getownpropertynames
// eslint-disable-next-line es/no-object-getownpropertynames -- safe
exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
  return internalObjectKeys(O, hiddenKeys);
};


/***/ }),
/* 212 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/to-absolute-index.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79);

var max = Math.max;
var min = Math.min;

// Helper for a popular repeating case of the spec:
// Let integer be ? ToInteger(index).
// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
module.exports = function (index, length) {
  var integer = toInteger(index);
  return integer < 0 ? max(integer + length, 0) : min(integer, length);
};


/***/ }),
/* 213 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js/internals/use-symbol-as-uid.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

/* eslint-disable es/no-symbol -- required for testing */
var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 137);

module.exports = NATIVE_SYMBOL
  && !Symbol.sham
  && typeof Symbol.iterator == 'symbol';


/***/ }),
/* 214 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js/internals/function-bind-context.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var aFunction = __webpack_require__(/*! ../internals/a-function */ 131);

// optional / simple context binding
module.exports = function (fn, that, length) {
  aFunction(fn);
  if (that === undefined) return fn;
  switch (length) {
    case 0: return function () {
      return fn.call(that);
    };
    case 1: return function (a) {
      return fn.call(that, a);
    };
    case 2: return function (a, b) {
      return fn.call(that, a, b);
    };
    case 3: return function (a, b, c) {
      return fn.call(that, a, b, c);
    };
  }
  return function (/* ...args */) {
    return fn.apply(that, arguments);
  };
};


/***/ }),
/* 215 */
/*!*******************************************************************!*\
  !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***!
  \*******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

/* eslint-disable no-proto -- safe */
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 244);

// `Object.setPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.setprototypeof
// Works with __proto__ only. Old v8 can't work with null proto objects.
// eslint-disable-next-line es/no-object-setprototypeof -- safe
module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
  var CORRECT_SETTER = false;
  var test = {};
  var setter;
  try {
    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
    setter.call(test, []);
    CORRECT_SETTER = test instanceof Array;
  } catch (error) { /* empty */ }
  return function setPrototypeOf(O, proto) {
    anObject(O);
    aPossiblePrototype(proto);
    if (CORRECT_SETTER) setter.call(O, proto);
    else O.__proto__ = proto;
    return O;
  };
}() : undefined);


/***/ }),
/* 216 */
/*!************************************************************!*\
  !*** ./node_modules/core-js/internals/object-to-string.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 99);
var classof = __webpack_require__(/*! ../internals/classof */ 183);

// `Object.prototype.toString` method implementation
// https://tc39.es/ecma262/#sec-object.prototype.tostring
module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
  return '[object ' + classof(this) + ']';
};


/***/ }),
/* 217 */
/*!************************************************************!*\
  !*** ./node_modules/core-js/internals/string-multibyte.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(/*! ../internals/to-integer */ 79);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);

// `String.prototype.{ codePointAt, at }` methods implementation
var createMethod = function (CONVERT_TO_STRING) {
  return function ($this, pos) {
    var S = String(requireObjectCoercible($this));
    var position = toInteger(pos);
    var size = S.length;
    var first, second;
    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
    first = S.charCodeAt(position);
    return first < 0xD800 || first > 0xDBFF || position + 1 === size
      || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF
        ? CONVERT_TO_STRING ? S.charAt(position) : first
        : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
  };
};

module.exports = {
  // `String.prototype.codePointAt` method
  // https://tc39.es/ecma262/#sec-string.prototype.codepointat
  codeAt: createMethod(false),
  // `String.prototype.at` method
  // https://github.com/mathiasbynens/String.prototype.at
  charAt: createMethod(true)
};


/***/ }),
/* 218 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/internals/dom-iterables.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// iterable DOM collections
// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
module.exports = {
  CSSRuleList: 0,
  CSSStyleDeclaration: 0,
  CSSValueList: 0,
  ClientRectList: 0,
  DOMRectList: 0,
  DOMStringList: 0,
  DOMTokenList: 1,
  DataTransferItemList: 0,
  FileList: 0,
  HTMLAllCollection: 0,
  HTMLCollection: 0,
  HTMLFormElement: 0,
  HTMLSelectElement: 0,
  MediaList: 0,
  MimeTypeArray: 0,
  NamedNodeMap: 0,
  NodeList: 1,
  PaintRequestList: 0,
  Plugin: 0,
  PluginArray: 0,
  SVGLengthList: 0,
  SVGNumberList: 0,
  SVGPathSegList: 0,
  SVGPointList: 0,
  SVGStringList: 0,
  SVGTransformList: 0,
  SourceBufferList: 0,
  StyleSheetList: 0,
  TextTrackCueList: 0,
  TextTrackList: 0,
  TouchList: 0
};


/***/ }),
/* 219 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js/modules/es.array.iterator.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 73);
var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 234);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 113);
var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 130);
var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 237);

var ARRAY_ITERATOR = 'Array Iterator';
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);

// `Array.prototype.entries` method
// https://tc39.es/ecma262/#sec-array.prototype.entries
// `Array.prototype.keys` method
// https://tc39.es/ecma262/#sec-array.prototype.keys
// `Array.prototype.values` method
// https://tc39.es/ecma262/#sec-array.prototype.values
// `Array.prototype[@@iterator]` method
// https://tc39.es/ecma262/#sec-array.prototype-@@iterator
// `CreateArrayIterator` internal method
// https://tc39.es/ecma262/#sec-createarrayiterator
module.exports = defineIterator(Array, 'Array', function (iterated, kind) {
  setInternalState(this, {
    type: ARRAY_ITERATOR,
    target: toIndexedObject(iterated), // target
    index: 0,                          // next index
    kind: kind                         // kind
  });
// `%ArrayIteratorPrototype%.next` method
// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next
}, function () {
  var state = getInternalState(this);
  var target = state.target;
  var kind = state.kind;
  var index = state.index++;
  if (!target || index >= target.length) {
    state.target = undefined;
    return { value: undefined, done: true };
  }
  if (kind == 'keys') return { value: index, done: false };
  if (kind == 'values') return { value: target[index], done: false };
  return { value: [index, target[index]], done: false };
}, 'values');

// argumentsList[@@iterator] is %ArrayProto_values%
// https://tc39.es/ecma262/#sec-createunmappedargumentsobject
// https://tc39.es/ecma262/#sec-createmappedargumentsobject
Iterators.Arguments = Iterators.Array;

// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');


/***/ }),
/* 220 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-keys.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 258);
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 190);

// `Object.keys` method
// https://tc39.es/ecma262/#sec-object.keys
module.exports = Object.keys || function keys(O) {
  return internalObjectKeys(O, enumBugKeys);
};


/***/ }),
/* 221 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/to-absolute-index.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(/*! ../internals/to-integer */ 142);

var max = Math.max;
var min = Math.min;

// Helper for a popular repeating case of the spec:
// Let integer be ? ToInteger(index).
// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
module.exports = function (index, length) {
  var integer = toInteger(index);
  return integer < 0 ? max(integer + length, 0) : min(integer, length);
};


/***/ }),
/* 222 */
/*!*******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/add-to-unscopables.js ***!
  \*******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function () { /* empty */ };


/***/ }),
/* 223 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js/internals/regexp-sticky-helpers.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var fails = __webpack_require__(/*! ./fails */ 37);

// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,
// so we use an intermediate function.
function RE(s, f) {
  return RegExp(s, f);
}

exports.UNSUPPORTED_Y = fails(function () {
  // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError
  var re = RE('a', 'y');
  re.lastIndex = 2;
  return re.exec('abcd') != null;
});

exports.BROKEN_CARET = fails(function () {
  // https://bugzilla.mozilla.org/show_bug.cgi?id=773687
  var re = RE('^r', 'gy');
  re.lastIndex = 2;
  return re.exec('str') != null;
});


/***/ }),
/* 224 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/modules/es.string.match.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 149);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var toLength = __webpack_require__(/*! ../internals/to-length */ 84);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);
var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 171);
var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 150);

// @@match logic
fixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) {
  return [
    // `String.prototype.match` method
    // https://tc39.es/ecma262/#sec-string.prototype.match
    function match(regexp) {
      var O = requireObjectCoercible(this);
      var matcher = regexp == undefined ? undefined : regexp[MATCH];
      return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
    },
    // `RegExp.prototype[@@match]` method
    // https://tc39.es/ecma262/#sec-regexp.prototype-@@match
    function (regexp) {
      var res = maybeCallNative(nativeMatch, regexp, this);
      if (res.done) return res.value;

      var rx = anObject(regexp);
      var S = String(this);

      if (!rx.global) return regExpExec(rx, S);

      var fullUnicode = rx.unicode;
      rx.lastIndex = 0;
      var A = [];
      var n = 0;
      var result;
      while ((result = regExpExec(rx, S)) !== null) {
        var matchStr = String(result[0]);
        A[n] = matchStr;
        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
        n++;
      }
      return n === 0 ? null : A;
    }
  ];
});


/***/ }),
/* 225 */
/*!***********************************!*\
  !*** ./dev/Component/Checkbox.js ***!
  \***********************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractCheckbox */ 177);




var CheckboxComponent = /*#__PURE__*/function (_AbstractCheckbox) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(CheckboxComponent, _AbstractCheckbox);

  function CheckboxComponent() {
    return _AbstractCheckbox.apply(this, arguments) || this;
  }

  return CheckboxComponent;
}(Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_2__[/* AbstractCheckbox */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(CheckboxComponent, 'CheckboxComponent'));

/***/ }),
/* 226 */
/*!**********************************!*\
  !*** ./dev/Common/HtmlEditor.js ***!
  \**********************************/
/*! exports provided: HtmlEditor, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HtmlEditor", function() { return HtmlEditor; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return HtmlEditor; });
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.match.js */ 224);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Storage/Settings */ 5);











var HtmlEditor = /*#__PURE__*/function () {
  /**
   * @param {Object} element
   * @param {Function=} onBlur
   * @param {Function=} onReady
   * @param {Function=} onModeChange
   */
  function HtmlEditor(element, onBlur, onReady, onModeChange) {
    if (onBlur === void 0) {
      onBlur = null;
    }

    if (onReady === void 0) {
      onReady = null;
    }

    if (onModeChange === void 0) {
      onModeChange = null;
    }

    this.editor = void 0;
    this.blurTimer = 0;
    this.__resizable = false;
    this.__inited = false;
    this.onBlur = null;
    this.onReady = null;
    this.onModeChange = null;
    this.element = void 0;
    this.$element = void 0;
    this.resize = void 0;
    this.onBlur = onBlur;
    this.onReady = onReady;
    this.onModeChange = onModeChange;
    this.element = element;
    this.$element = $__WEBPACK_IMPORTED_MODULE_6___default()(element);
    this.resize = ___WEBPACK_IMPORTED_MODULE_5___default.a.throttle(___WEBPACK_IMPORTED_MODULE_5___default.a.bind(this.resizeEditor, this), 100);
    this.init();
  }

  var _proto = HtmlEditor.prototype;

  _proto.runOnBlur = function runOnBlur() {
    if (this.onBlur) {
      this.onBlur();
    }
  };

  _proto.blurTrigger = function blurTrigger() {
    var _this = this;

    if (this.onBlur) {
      window__WEBPACK_IMPORTED_MODULE_4___default.a.clearTimeout(this.blurTimer);
      this.blurTimer = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default()(function () {
        _this.runOnBlur();
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Magics"].Time200ms);
    }
  };

  _proto.focusTrigger = function focusTrigger() {
    if (this.onBlur) {
      window__WEBPACK_IMPORTED_MODULE_4___default.a.clearTimeout(this.blurTimer);
    }
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isHtml = function isHtml() {
    return this.editor ? 'wysiwyg' === this.editor.mode : false;
  }
  /**
   * @returns {void}
   */
  ;

  _proto.clearCachedSignature = function clearCachedSignature() {
    if (this.editor) {
      this.editor.execCommand('insertSignature', {
        clearCache: true
      });
    }
  }
  /**
   * @param {string} signature
   * @param {bool} html
   * @param {bool} insertBefore
   * @returns {void}
   */
  ;

  _proto.setSignature = function setSignature(signature, html, insertBefore) {
    if (insertBefore === void 0) {
      insertBefore = false;
    }

    if (this.editor) {
      this.editor.execCommand('insertSignature', {
        isHtml: html,
        insertBefore: insertBefore,
        signature: signature
      });
    }
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.checkDirty = function checkDirty() {
    return this.editor ? this.editor.checkDirty() : false;
  };

  _proto.resetDirty = function resetDirty() {
    if (this.editor) {
      this.editor.resetDirty();
    }
  }
  /**
   * @param {boolean=} wrapIsHtml = false
   * @returns {string}
   */
  ;

  _proto.getData = function getData(wrapIsHtml) {
    if (wrapIsHtml === void 0) {
      wrapIsHtml = false;
    }

    var result = '';

    if (this.editor) {
      try {
        if ('plain' === this.editor.mode && this.editor.plugins.plain && this.editor.__plain) {
          result = this.editor.__plain.getRawData();
        } else {
          result = wrapIsHtml ? '<div data-html-editor-font-wrapper="true" style="font-family: arial, sans-serif; font-size: 13px;">' + this.editor.getData() + '</div>' : this.editor.getData();
        }
      } catch (e) {} // eslint-disable-line no-empty

    }

    return result;
  }
  /**
   * @param {boolean=} wrapIsHtml = false
   * @returns {string}
   */
  ;

  _proto.getDataWithHtmlMark = function getDataWithHtmlMark(wrapIsHtml) {
    if (wrapIsHtml === void 0) {
      wrapIsHtml = false;
    }

    return (this.isHtml() ? ':HTML:' : '') + this.getData(wrapIsHtml);
  };

  _proto.modeToggle = function modeToggle(plain, resize) {
    if (this.editor) {
      try {
        if (plain) {
          if ('plain' === this.editor.mode) {
            this.editor.setMode('wysiwyg');
          }
        } else if ('wysiwyg' === this.editor.mode) {
          this.editor.setMode('plain');
        }
      } catch (e) {} // eslint-disable-line no-empty


      if (resize) {
        this.resize();
      }
    }
  };

  _proto.setHtmlOrPlain = function setHtmlOrPlain(text, focus) {
    if (':HTML:' === text.substr(0, 6)) {
      this.setHtml(text.substr(6), focus);
    } else {
      this.setPlain(text, focus);
    }
  };

  _proto.setHtml = function setHtml(html, focus) {
    if (this.editor && this.__inited) {
      this.clearCachedSignature();
      this.modeToggle(true);
      html = html.replace(/<p[^>]*><\/p>/gi, '');

      try {
        this.editor.setData(html);
      } catch (e) {} // eslint-disable-line no-empty


      if (focus) {
        this.focus();
      }
    }
  };

  _proto.replaceHtml = function replaceHtml(find, _replaceHtml) {
    if (this.editor && this.__inited && 'wysiwyg' === this.editor.mode) {
      try {
        this.editor.setData(this.editor.getData().replace(find, _replaceHtml));
      } catch (e) {} // eslint-disable-line no-empty

    }
  };

  _proto.setPlain = function setPlain(plain, focus) {
    if (this.editor && this.__inited) {
      this.clearCachedSignature();
      this.modeToggle(false);

      if ('plain' === this.editor.mode && this.editor.plugins.plain && this.editor.__plain) {
        this.editor.__plain.setRawData(plain);
      } else {
        try {
          this.editor.setData(plain);
        } catch (e) {} // eslint-disable-line no-empty

      }

      if (focus) {
        this.focus();
      }
    }
  };

  _proto.init = function init() {
    var _this2 = this;

    if (this.element && !this.editor) {
      var initFunc = function initFunc() {
        var config = Common_Globals__WEBPACK_IMPORTED_MODULE_7__["htmlEditorDefaultConfig"],
            language = Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('Language'),
            allowSource = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["appSettingsGet"]('allowHtmlEditorSourceButton'),
            biti = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["appSettingsGet"]('allowHtmlEditorBitiButtons');

        if ((allowSource || !biti) && !config.toolbarGroups.__cfgInited) {
          config.toolbarGroups.__cfgInited = true;

          if (allowSource) {
            config.removeButtons = config.removeButtons.replace(',Source', '');
          }

          if (!biti) {
            config.removePlugins += (config.removePlugins ? ',' : '') + 'bidi';
          }
        }

        config.enterMode = window__WEBPACK_IMPORTED_MODULE_4___default.a.CKEDITOR.ENTER_BR;
        config.shiftEnterMode = window__WEBPACK_IMPORTED_MODULE_4___default.a.CKEDITOR.ENTER_P;
        config.language = Common_Globals__WEBPACK_IMPORTED_MODULE_7__["htmlEditorLangsMap"][(language || 'en').toLowerCase()] || 'en';

        if (window__WEBPACK_IMPORTED_MODULE_4___default.a.CKEDITOR.env) {
          window__WEBPACK_IMPORTED_MODULE_4___default.a.CKEDITOR.env.isCompatible = true;
        }

        _this2.editor = window__WEBPACK_IMPORTED_MODULE_4___default.a.CKEDITOR.appendTo(_this2.element, config);

        _this2.editor.on('key', function (event) {
          if (event && event.data && Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Tab === event.data.keyCode) {
            return false;
          }

          return true;
        });

        _this2.editor.on('blur', function () {
          _this2.blurTrigger();
        });

        _this2.editor.on('mode', function () {
          _this2.blurTrigger();

          if (_this2.onModeChange) {
            _this2.onModeChange('plain' !== _this2.editor.mode);
          }
        });

        _this2.editor.on('focus', function () {
          _this2.focusTrigger();
        });

        if (window__WEBPACK_IMPORTED_MODULE_4___default.a.FileReader) {
          _this2.editor.on('drop', function (event) {
            if (0 < event.data.dataTransfer.getFilesCount()) {
              var file = event.data.dataTransfer.getFile(0);

              if (file && window__WEBPACK_IMPORTED_MODULE_4___default.a.FileReader && event.data.dataTransfer.id && file.type && file.type.match(/^image/i)) {
                var id = event.data.dataTransfer.id,
                    imageId = "[img=" + id + "]",
                    reader = new window__WEBPACK_IMPORTED_MODULE_4___default.a.FileReader();

                reader.onloadend = function () {
                  if (reader.result) {
                    _this2.replaceHtml(imageId, "<img src=\"" + reader.result + "\" />");
                  }
                };

                reader.readAsDataURL(file);
                event.data.dataTransfer.setData('text/html', imageId);
              }
            }
          });
        }

        _this2.editor.on('instanceReady', function () {
          if (_this2.editor.removeMenuItem) {
            _this2.editor.removeMenuItem('cut');

            _this2.editor.removeMenuItem('copy');

            _this2.editor.removeMenuItem('paste');
          }

          _this2.__resizable = true;
          _this2.__inited = true;

          _this2.resize();

          if (_this2.onReady) {
            _this2.onReady();
          }
        });
      };

      if (window__WEBPACK_IMPORTED_MODULE_4___default.a.CKEDITOR) {
        initFunc();
      } else {
        window__WEBPACK_IMPORTED_MODULE_4___default.a.__initEditor = initFunc;
      }
    }
  };

  _proto.focus = function focus() {
    if (this.editor) {
      try {
        this.editor.focus();
      } catch (e) {} // eslint-disable-line no-empty

    }
  };

  _proto.hasFocus = function hasFocus() {
    if (this.editor) {
      try {
        return !!this.editor.focusManager.hasFocus;
      } catch (e) {} // eslint-disable-line no-empty

    }

    return false;
  };

  _proto.blur = function blur() {
    if (this.editor) {
      try {
        this.editor.focusManager.blur(true);
      } catch (e) {} // eslint-disable-line no-empty

    }
  };

  _proto.resizeEditor = function resizeEditor() {
    if (this.editor && this.__resizable) {
      try {
        this.editor.resize(this.$element.width(), this.$element.innerHeight());
      } catch (e) {} // eslint-disable-line no-empty

    }
  };

  _proto.setReadOnly = function setReadOnly(value) {
    if (this.editor) {
      try {
        this.editor.setReadOnly(!!value);
      } catch (e) {} // eslint-disable-line no-empty

    }
  };

  _proto.clear = function clear(focus) {
    this.setHtml('', focus);
  };

  return HtmlEditor;
}();



/***/ }),
/* 227 */
/*!*******************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/reduce.js ***!
  \*******************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/reduce */ 344);

/***/ }),
/* 228 */
/*!*********************************!*\
  !*** ./dev/External/Opentip.js ***!
  \*********************************/
/*! exports provided: Opentip, default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* unused harmony export Opentip */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Opentip; });
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_0__);

var Opentip = window__WEBPACK_IMPORTED_MODULE_0___default.a.Opentip || {};
Opentip.styles = Opentip.styles || {};
Opentip.styles.rainloop = {
  'extends': 'standard',
  'fixed': true,
  'target': true,
  'delay': 0.2,
  'hideDelay': 0,
  'hideEffect': 'fade',
  'hideEffectDuration': 0.2,
  'showEffect': 'fade',
  'showEffectDuration': 0.2,
  'showOn': 'mouseover click',
  'removeElementsOnHide': true,
  'background': '#fff',
  'shadow': false,
  'borderColor': '#999',
  'borderRadius': 2,
  'borderWidth': 1
};
Opentip.styles.rainloopTip = {
  'extends': 'rainloop',
  'delay': 0.4,
  'group': 'rainloopTips'
};
Opentip.styles.rainloopErrorTip = {
  'extends': 'rainloop',
  'className': 'rainloopErrorTip'
};


/***/ }),
/* 229 */
/*!*****************************************!*\
  !*** ./node_modules/pikaday/pikaday.js ***!
  \*****************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Pikaday
 *
 * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday
 */

(function (root, factory)
{
    'use strict';

    var moment;
    if (true) {
        // CommonJS module
        // Load moment.js as an optional dependency
        try { moment = __webpack_require__(/*! moment */ 100); } catch (e) {}
        module.exports = factory(moment);
    } else {}
}(this, function (moment)
{
    'use strict';

    /**
     * feature detection and helper functions
     */
    var hasMoment = typeof moment === 'function',

    hasEventListeners = !!window.addEventListener,

    document = window.document,

    sto = window.setTimeout,

    addEvent = function(el, e, callback, capture)
    {
        if (hasEventListeners) {
            el.addEventListener(e, callback, !!capture);
        } else {
            el.attachEvent('on' + e, callback);
        }
    },

    removeEvent = function(el, e, callback, capture)
    {
        if (hasEventListeners) {
            el.removeEventListener(e, callback, !!capture);
        } else {
            el.detachEvent('on' + e, callback);
        }
    },

    trim = function(str)
    {
        return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g,'');
    },

    hasClass = function(el, cn)
    {
        return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;
    },

    addClass = function(el, cn)
    {
        if (!hasClass(el, cn)) {
            el.className = (el.className === '') ? cn : el.className + ' ' + cn;
        }
    },

    removeClass = function(el, cn)
    {
        el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));
    },

    isArray = function(obj)
    {
        return (/Array/).test(Object.prototype.toString.call(obj));
    },

    isDate = function(obj)
    {
        return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());
    },

    isWeekend = function(date)
    {
        var day = date.getDay();
        return day === 0 || day === 6;
    },

    isLeapYear = function(year)
    {
        // solution lifted from date.js (MIT license): https://github.com/datejs/Datejs
        return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);
    },

    getDaysInMonth = function(year, month)
    {
        return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
    },

    setToStartOfDay = function(date)
    {
        if (isDate(date)) date.setHours(0,0,0,0);
    },

    compareDates = function(a,b)
    {
        // weak date comparison (use setToStartOfDay(date) to ensure correct result)
        return a.getTime() === b.getTime();
    },

    extend = function(to, from, overwrite)
    {
        var prop, hasProp;
        for (prop in from) {
            hasProp = to[prop] !== undefined;
            if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {
                if (isDate(from[prop])) {
                    if (overwrite) {
                        to[prop] = new Date(from[prop].getTime());
                    }
                }
                else if (isArray(from[prop])) {
                    if (overwrite) {
                        to[prop] = from[prop].slice(0);
                    }
                } else {
                    to[prop] = extend({}, from[prop], overwrite);
                }
            } else if (overwrite || !hasProp) {
                to[prop] = from[prop];
            }
        }
        return to;
    },

    fireEvent = function(el, eventName, data)
    {
        var ev;

        if (document.createEvent) {
            ev = document.createEvent('HTMLEvents');
            ev.initEvent(eventName, true, false);
            ev = extend(ev, data);
            el.dispatchEvent(ev);
        } else if (document.createEventObject) {
            ev = document.createEventObject();
            ev = extend(ev, data);
            el.fireEvent('on' + eventName, ev);
        }
    },

    adjustCalendar = function(calendar) {
        if (calendar.month < 0) {
            calendar.year -= Math.ceil(Math.abs(calendar.month)/12);
            calendar.month += 12;
        }
        if (calendar.month > 11) {
            calendar.year += Math.floor(Math.abs(calendar.month)/12);
            calendar.month -= 12;
        }
        return calendar;
    },

    /**
     * defaults and localisation
     */
    defaults = {

        // bind the picker to a form field
        field: null,

        // automatically show/hide the picker on `field` focus (default `true` if `field` is set)
        bound: undefined,

        // data-attribute on the input field with an aria assistance text (only applied when `bound` is set)
        ariaLabel: 'Use the arrow keys to pick a date',

        // position of the datepicker, relative to the field (default to bottom & left)
        // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)
        position: 'bottom left',

        // automatically fit in the viewport even if it means repositioning from the position option
        reposition: true,

        // the default output format for `.toString()` and `field` value
        format: 'YYYY-MM-DD',

        // the toString function which gets passed a current date object and format
        // and returns a string
        toString: null,

        // used to create date object from current input string
        parse: null,

        // the initial date to view when first opened
        defaultDate: null,

        // make the `defaultDate` the initial selected value
        setDefaultDate: false,

        // first day of week (0: Sunday, 1: Monday etc)
        firstDay: 0,

        // minimum number of days in the week that gets week number one
        // default ISO 8601, week 01 is the week with the first Thursday (4)
        firstWeekOfYearMinDays: 4,

        // the default flag for moment's strict date parsing
        formatStrict: false,

        // the minimum/earliest date that can be selected
        minDate: null,
        // the maximum/latest date that can be selected
        maxDate: null,

        // number of years either side, or array of upper/lower range
        yearRange: 10,

        // show week numbers at head of row
        showWeekNumber: false,

        // Week picker mode
        pickWholeWeek: false,

        // used internally (don't config outside)
        minYear: 0,
        maxYear: 9999,
        minMonth: undefined,
        maxMonth: undefined,

        startRange: null,
        endRange: null,

        isRTL: false,

        // Additional text to append to the year in the calendar title
        yearSuffix: '',

        // Render the month after year in the calendar title
        showMonthAfterYear: false,

        // Render days of the calendar grid that fall in the next or previous month
        showDaysInNextAndPreviousMonths: false,

        // Allows user to select days that fall in the next or previous month
        enableSelectionDaysInNextAndPreviousMonths: false,

        // how many months are visible
        numberOfMonths: 1,

        // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)
        // only used for the first display or when a selected date is not visible
        mainCalendar: 'left',

        // Specify a DOM element to render the calendar in
        container: undefined,

        // Blur field when date is selected
        blurFieldOnSelect : true,

        // internationalization
        i18n: {
            previousMonth : 'Previous Month',
            nextMonth     : 'Next Month',
            months        : ['January','February','March','April','May','June','July','August','September','October','November','December'],
            weekdays      : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
            weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
        },

        // Theme Classname
        theme: null,

        // events array
        events: [],

        // callback function
        onSelect: null,
        onOpen: null,
        onClose: null,
        onDraw: null,

        // Enable keyboard input
        keyboardInput: true
    },


    /**
     * templating functions to abstract HTML rendering
     */
    renderDayName = function(opts, day, abbr)
    {
        day += opts.firstDay;
        while (day >= 7) {
            day -= 7;
        }
        return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];
    },

    renderDay = function(opts)
    {
        var arr = [];
        var ariaSelected = 'false';
        if (opts.isEmpty) {
            if (opts.showDaysInNextAndPreviousMonths) {
                arr.push('is-outside-current-month');

                if(!opts.enableSelectionDaysInNextAndPreviousMonths) {
                    arr.push('is-selection-disabled');
                }

            } else {
                return '<td class="is-empty"></td>';
            }
        }
        if (opts.isDisabled) {
            arr.push('is-disabled');
        }
        if (opts.isToday) {
            arr.push('is-today');
        }
        if (opts.isSelected) {
            arr.push('is-selected');
            ariaSelected = 'true';
        }
        if (opts.hasEvent) {
            arr.push('has-event');
        }
        if (opts.isInRange) {
            arr.push('is-inrange');
        }
        if (opts.isStartRange) {
            arr.push('is-startrange');
        }
        if (opts.isEndRange) {
            arr.push('is-endrange');
        }
        return '<td data-day="' + opts.day + '" class="' + arr.join(' ') + '" aria-selected="' + ariaSelected + '">' +
                 '<button class="pika-button pika-day" type="button" ' +
                    'data-pika-year="' + opts.year + '" data-pika-month="' + opts.month + '" data-pika-day="' + opts.day + '">' +
                        opts.day +
                 '</button>' +
               '</td>';
    },

    isoWeek = function(date, firstWeekOfYearMinDays) {
        // Ensure we're at the start of the day.
        date.setHours(0, 0, 0, 0);

        // Thursday in current week decides the year because January 4th
        // is always in the first week according to ISO8601.
        var yearDay        = date.getDate(),
            weekDay        = date.getDay(),
            dayInFirstWeek = firstWeekOfYearMinDays,
            dayShift       = dayInFirstWeek - 1, // counting starts at 0
            daysPerWeek    = 7,
            prevWeekDay    = function(day) { return (day + daysPerWeek - 1) % daysPerWeek; };

        // Adjust to Thursday in week 1 and count number of weeks from date to week 1.
        date.setDate(yearDay + dayShift - prevWeekDay(weekDay));

        var jan4th      = new Date(date.getFullYear(), 0, dayInFirstWeek),
            msPerDay    = 24 * 60 * 60 * 1000,
            daysBetween = (date.getTime() - jan4th.getTime()) / msPerDay,
            weekNum     = 1 + Math.round((daysBetween - dayShift + prevWeekDay(jan4th.getDay())) / daysPerWeek);

        return weekNum;
    },

    renderWeek = function (d, m, y, firstWeekOfYearMinDays) {
        var date = new Date(y, m, d),
            week = hasMoment ? moment(date).isoWeek() : isoWeek(date, firstWeekOfYearMinDays);

        return '<td class="pika-week">' + week + '</td>';
    },

    renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)
    {
        return '<tr class="pika-row' + (pickWholeWeek ? ' pick-whole-week' : '') + (isRowSelected ? ' is-selected' : '') + '">' + (isRTL ? days.reverse() : days).join('') + '</tr>';
    },

    renderBody = function(rows)
    {
        return '<tbody>' + rows.join('') + '</tbody>';
    },

    renderHead = function(opts)
    {
        var i, arr = [];
        if (opts.showWeekNumber) {
            arr.push('<th></th>');
        }
        for (i = 0; i < 7; i++) {
            arr.push('<th scope="col"><abbr title="' + renderDayName(opts, i) + '">' + renderDayName(opts, i, true) + '</abbr></th>');
        }
        return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';
    },

    renderTitle = function(instance, c, year, month, refYear, randId)
    {
        var i, j, arr,
            opts = instance._o,
            isMinYear = year === opts.minYear,
            isMaxYear = year === opts.maxYear,
            html = '<div id="' + randId + '" class="pika-title" role="heading" aria-live="assertive">',
            monthHtml,
            yearHtml,
            prev = true,
            next = true;

        for (arr = [], i = 0; i < 12; i++) {
            arr.push('<option value="' + (year === refYear ? i - c : 12 + i - c) + '"' +
                (i === month ? ' selected="selected"': '') +
                ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? ' disabled="disabled"' : '') + '>' +
                opts.i18n.months[i] + '</option>');
        }

        monthHtml = '<div class="pika-label">' + opts.i18n.months[month] + '<select class="pika-select pika-select-month" tabindex="-1">' + arr.join('') + '</select></div>';

        if (isArray(opts.yearRange)) {
            i = opts.yearRange[0];
            j = opts.yearRange[1] + 1;
        } else {
            i = year - opts.yearRange;
            j = 1 + year + opts.yearRange;
        }

        for (arr = []; i < j && i <= opts.maxYear; i++) {
            if (i >= opts.minYear) {
                arr.push('<option value="' + i + '"' + (i === year ? ' selected="selected"': '') + '>' + (i) + '</option>');
            }
        }
        yearHtml = '<div class="pika-label">' + year + opts.yearSuffix + '<select class="pika-select pika-select-year" tabindex="-1">' + arr.join('') + '</select></div>';

        if (opts.showMonthAfterYear) {
            html += yearHtml + monthHtml;
        } else {
            html += monthHtml + yearHtml;
        }

        if (isMinYear && (month === 0 || opts.minMonth >= month)) {
            prev = false;
        }

        if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {
            next = false;
        }

        if (c === 0) {
            html += '<button class="pika-prev' + (prev ? '' : ' is-disabled') + '" type="button">' + opts.i18n.previousMonth + '</button>';
        }
        if (c === (instance._o.numberOfMonths - 1) ) {
            html += '<button class="pika-next' + (next ? '' : ' is-disabled') + '" type="button">' + opts.i18n.nextMonth + '</button>';
        }

        return html += '</div>';
    },

    renderTable = function(opts, data, randId)
    {
        return '<table cellpadding="0" cellspacing="0" class="pika-table" role="grid" aria-labelledby="' + randId + '">' + renderHead(opts) + renderBody(data) + '</table>';
    },


    /**
     * Pikaday constructor
     */
    Pikaday = function(options)
    {
        var self = this,
            opts = self.config(options);

        self._onMouseDown = function(e)
        {
            if (!self._v) {
                return;
            }
            e = e || window.event;
            var target = e.target || e.srcElement;
            if (!target) {
                return;
            }

            if (!hasClass(target, 'is-disabled')) {
                if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {
                    self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));
                    if (opts.bound) {
                        sto(function() {
                            self.hide();
                            if (opts.blurFieldOnSelect && opts.field) {
                                opts.field.blur();
                            }
                        }, 100);
                    }
                }
                else if (hasClass(target, 'pika-prev')) {
                    self.prevMonth();
                }
                else if (hasClass(target, 'pika-next')) {
                    self.nextMonth();
                }
            }
            if (!hasClass(target, 'pika-select')) {
                // if this is touch event prevent mouse events emulation
                if (e.preventDefault) {
                    e.preventDefault();
                } else {
                    e.returnValue = false;
                    return false;
                }
            } else {
                self._c = true;
            }
        };

        self._onChange = function(e)
        {
            e = e || window.event;
            var target = e.target || e.srcElement;
            if (!target) {
                return;
            }
            if (hasClass(target, 'pika-select-month')) {
                self.gotoMonth(target.value);
            }
            else if (hasClass(target, 'pika-select-year')) {
                self.gotoYear(target.value);
            }
        };

        self._onKeyChange = function(e)
        {
            e = e || window.event;

            if (self.isVisible()) {

                switch(e.keyCode){
                    case 13:
                    case 27:
                        if (opts.field) {
                            opts.field.blur();
                        }
                        break;
                    case 37:
                        self.adjustDate('subtract', 1);
                        break;
                    case 38:
                        self.adjustDate('subtract', 7);
                        break;
                    case 39:
                        self.adjustDate('add', 1);
                        break;
                    case 40:
                        self.adjustDate('add', 7);
                        break;
                    case 8:
                    case 46:
                        self.setDate(null);
                        break;
                }
            }
        };

        self._parseFieldValue = function()
        {
            if (opts.parse) {
                return opts.parse(opts.field.value, opts.format);
            } else if (hasMoment) {
                var date = moment(opts.field.value, opts.format, opts.formatStrict);
                return (date && date.isValid()) ? date.toDate() : null;
            } else {
                return new Date(Date.parse(opts.field.value));
            }
        };

        self._onInputChange = function(e)
        {
            var date;

            if (e.firedBy === self) {
                return;
            }
            date = self._parseFieldValue();
            if (isDate(date)) {
              self.setDate(date);
            }
            if (!self._v) {
                self.show();
            }
        };

        self._onInputFocus = function()
        {
            self.show();
        };

        self._onInputClick = function()
        {
            self.show();
        };

        self._onInputBlur = function()
        {
            // IE allows pika div to gain focus; catch blur the input field
            var pEl = document.activeElement;
            do {
                if (hasClass(pEl, 'pika-single')) {
                    return;
                }
            }
            while ((pEl = pEl.parentNode));

            if (!self._c) {
                self._b = sto(function() {
                    self.hide();
                }, 50);
            }
            self._c = false;
        };

        self._onClick = function(e)
        {
            e = e || window.event;
            var target = e.target || e.srcElement,
                pEl = target;
            if (!target) {
                return;
            }
            if (!hasEventListeners && hasClass(target, 'pika-select')) {
                if (!target.onchange) {
                    target.setAttribute('onchange', 'return;');
                    addEvent(target, 'change', self._onChange);
                }
            }
            do {
                if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {
                    return;
                }
            }
            while ((pEl = pEl.parentNode));
            if (self._v && target !== opts.trigger && pEl !== opts.trigger) {
                self.hide();
            }
        };

        self.el = document.createElement('div');
        self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');

        addEvent(self.el, 'mousedown', self._onMouseDown, true);
        addEvent(self.el, 'touchend', self._onMouseDown, true);
        addEvent(self.el, 'change', self._onChange);

        if (opts.keyboardInput) {
            addEvent(document, 'keydown', self._onKeyChange);
        }

        if (opts.field) {
            if (opts.container) {
                opts.container.appendChild(self.el);
            } else if (opts.bound) {
                document.body.appendChild(self.el);
            } else {
                opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);
            }
            addEvent(opts.field, 'change', self._onInputChange);

            if (!opts.defaultDate) {
                opts.defaultDate = self._parseFieldValue();
                opts.setDefaultDate = true;
            }
        }

        var defDate = opts.defaultDate;

        if (isDate(defDate)) {
            if (opts.setDefaultDate) {
                self.setDate(defDate, true);
            } else {
                self.gotoDate(defDate);
            }
        } else {
            self.gotoDate(new Date());
        }

        if (opts.bound) {
            this.hide();
            self.el.className += ' is-bound';
            addEvent(opts.trigger, 'click', self._onInputClick);
            addEvent(opts.trigger, 'focus', self._onInputFocus);
            addEvent(opts.trigger, 'blur', self._onInputBlur);
        } else {
            this.show();
        }
    };


    /**
     * public Pikaday API
     */
    Pikaday.prototype = {


        /**
         * configure functionality
         */
        config: function(options)
        {
            if (!this._o) {
                this._o = extend({}, defaults, true);
            }

            var opts = extend(this._o, options, true);

            opts.isRTL = !!opts.isRTL;

            opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;

            opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;

            opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);

            opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;

            opts.disableWeekends = !!opts.disableWeekends;

            opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;

            var nom = parseInt(opts.numberOfMonths, 10) || 1;
            opts.numberOfMonths = nom > 4 ? 4 : nom;

            if (!isDate(opts.minDate)) {
                opts.minDate = false;
            }
            if (!isDate(opts.maxDate)) {
                opts.maxDate = false;
            }
            if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {
                opts.maxDate = opts.minDate = false;
            }
            if (opts.minDate) {
                this.setMinDate(opts.minDate);
            }
            if (opts.maxDate) {
                this.setMaxDate(opts.maxDate);
            }

            if (isArray(opts.yearRange)) {
                var fallback = new Date().getFullYear() - 10;
                opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;
                opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;
            } else {
                opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;
                if (opts.yearRange > 100) {
                    opts.yearRange = 100;
                }
            }

            return opts;
        },

        /**
         * return a formatted string of the current selection (using Moment.js if available)
         */
        toString: function(format)
        {
            format = format || this._o.format;
            if (!isDate(this._d)) {
                return '';
            }
            if (this._o.toString) {
              return this._o.toString(this._d, format);
            }
            if (hasMoment) {
              return moment(this._d).format(format);
            }
            return this._d.toDateString();
        },

        /**
         * return a Moment.js object of the current selection (if available)
         */
        getMoment: function()
        {
            return hasMoment ? moment(this._d) : null;
        },

        /**
         * set the current selection from a Moment.js object (if available)
         */
        setMoment: function(date, preventOnSelect)
        {
            if (hasMoment && moment.isMoment(date)) {
                this.setDate(date.toDate(), preventOnSelect);
            }
        },

        /**
         * return a Date object of the current selection
         */
        getDate: function()
        {
            return isDate(this._d) ? new Date(this._d.getTime()) : null;
        },

        /**
         * set the current selection
         */
        setDate: function(date, preventOnSelect)
        {
            if (!date) {
                this._d = null;

                if (this._o.field) {
                    this._o.field.value = '';
                    fireEvent(this._o.field, 'change', { firedBy: this });
                }

                return this.draw();
            }
            if (typeof date === 'string') {
                date = new Date(Date.parse(date));
            }
            if (!isDate(date)) {
                return;
            }

            var min = this._o.minDate,
                max = this._o.maxDate;

            if (isDate(min) && date < min) {
                date = min;
            } else if (isDate(max) && date > max) {
                date = max;
            }

            this._d = new Date(date.getTime());
            setToStartOfDay(this._d);
            this.gotoDate(this._d);

            if (this._o.field) {
                this._o.field.value = this.toString();
                fireEvent(this._o.field, 'change', { firedBy: this });
            }
            if (!preventOnSelect && typeof this._o.onSelect === 'function') {
                this._o.onSelect.call(this, this.getDate());
            }
        },

        /**
         * clear and reset the date
         */
        clear: function()
        {
            this.setDate(null);
        },

        /**
         * change view to a specific date
         */
        gotoDate: function(date)
        {
            var newCalendar = true;

            if (!isDate(date)) {
                return;
            }

            if (this.calendars) {
                var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),
                    lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),
                    visibleDate = date.getTime();
                // get the end of the month
                lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);
                lastVisibleDate.setDate(lastVisibleDate.getDate()-1);
                newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);
            }

            if (newCalendar) {
                this.calendars = [{
                    month: date.getMonth(),
                    year: date.getFullYear()
                }];
                if (this._o.mainCalendar === 'right') {
                    this.calendars[0].month += 1 - this._o.numberOfMonths;
                }
            }

            this.adjustCalendars();
        },

        adjustDate: function(sign, days) {

            var day = this.getDate() || new Date();
            var difference = parseInt(days)*24*60*60*1000;

            var newDay;

            if (sign === 'add') {
                newDay = new Date(day.valueOf() + difference);
            } else if (sign === 'subtract') {
                newDay = new Date(day.valueOf() - difference);
            }

            this.setDate(newDay);
        },

        adjustCalendars: function() {
            this.calendars[0] = adjustCalendar(this.calendars[0]);
            for (var c = 1; c < this._o.numberOfMonths; c++) {
                this.calendars[c] = adjustCalendar({
                    month: this.calendars[0].month + c,
                    year: this.calendars[0].year
                });
            }
            this.draw();
        },

        gotoToday: function()
        {
            this.gotoDate(new Date());
        },

        /**
         * change view to a specific month (zero-index, e.g. 0: January)
         */
        gotoMonth: function(month)
        {
            if (!isNaN(month)) {
                this.calendars[0].month = parseInt(month, 10);
                this.adjustCalendars();
            }
        },

        nextMonth: function()
        {
            this.calendars[0].month++;
            this.adjustCalendars();
        },

        prevMonth: function()
        {
            this.calendars[0].month--;
            this.adjustCalendars();
        },

        /**
         * change view to a specific full year (e.g. "2012")
         */
        gotoYear: function(year)
        {
            if (!isNaN(year)) {
                this.calendars[0].year = parseInt(year, 10);
                this.adjustCalendars();
            }
        },

        /**
         * change the minDate
         */
        setMinDate: function(value)
        {
            if(value instanceof Date) {
                setToStartOfDay(value);
                this._o.minDate = value;
                this._o.minYear  = value.getFullYear();
                this._o.minMonth = value.getMonth();
            } else {
                this._o.minDate = defaults.minDate;
                this._o.minYear  = defaults.minYear;
                this._o.minMonth = defaults.minMonth;
                this._o.startRange = defaults.startRange;
            }

            this.draw();
        },

        /**
         * change the maxDate
         */
        setMaxDate: function(value)
        {
            if(value instanceof Date) {
                setToStartOfDay(value);
                this._o.maxDate = value;
                this._o.maxYear = value.getFullYear();
                this._o.maxMonth = value.getMonth();
            } else {
                this._o.maxDate = defaults.maxDate;
                this._o.maxYear = defaults.maxYear;
                this._o.maxMonth = defaults.maxMonth;
                this._o.endRange = defaults.endRange;
            }

            this.draw();
        },

        setStartRange: function(value)
        {
            this._o.startRange = value;
        },

        setEndRange: function(value)
        {
            this._o.endRange = value;
        },

        /**
         * refresh the HTML
         */
        draw: function(force)
        {
            if (!this._v && !force) {
                return;
            }
            var opts = this._o,
                minYear = opts.minYear,
                maxYear = opts.maxYear,
                minMonth = opts.minMonth,
                maxMonth = opts.maxMonth,
                html = '',
                randId;

            if (this._y <= minYear) {
                this._y = minYear;
                if (!isNaN(minMonth) && this._m < minMonth) {
                    this._m = minMonth;
                }
            }
            if (this._y >= maxYear) {
                this._y = maxYear;
                if (!isNaN(maxMonth) && this._m > maxMonth) {
                    this._m = maxMonth;
                }
            }

            for (var c = 0; c < opts.numberOfMonths; c++) {
                randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);
                html += '<div class="pika-lendar">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '</div>';
            }

            this.el.innerHTML = html;

            if (opts.bound) {
                if(opts.field.type !== 'hidden') {
                    sto(function() {
                        opts.trigger.focus();
                    }, 1);
                }
            }

            if (typeof this._o.onDraw === 'function') {
                this._o.onDraw(this);
            }

            if (opts.bound) {
                // let the screen reader user know to use arrow keys
                opts.field.setAttribute('aria-label', opts.ariaLabel);
            }
        },

        adjustPosition: function()
        {
            var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;

            if (this._o.container) return;

            this.el.style.position = 'absolute';

            field = this._o.trigger;
            pEl = field;
            width = this.el.offsetWidth;
            height = this.el.offsetHeight;
            viewportWidth = window.innerWidth || document.documentElement.clientWidth;
            viewportHeight = window.innerHeight || document.documentElement.clientHeight;
            scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
            leftAligned = true;
            bottomAligned = true;

            if (typeof field.getBoundingClientRect === 'function') {
                clientRect = field.getBoundingClientRect();
                left = clientRect.left + window.pageXOffset;
                top = clientRect.bottom + window.pageYOffset;
            } else {
                left = pEl.offsetLeft;
                top  = pEl.offsetTop + pEl.offsetHeight;
                while((pEl = pEl.offsetParent)) {
                    left += pEl.offsetLeft;
                    top  += pEl.offsetTop;
                }
            }

            // default position is bottom & left
            if ((this._o.reposition && left + width > viewportWidth) ||
                (
                    this._o.position.indexOf('right') > -1 &&
                    left - width + field.offsetWidth > 0
                )
            ) {
                left = left - width + field.offsetWidth;
                leftAligned = false;
            }
            if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||
                (
                    this._o.position.indexOf('top') > -1 &&
                    top - height - field.offsetHeight > 0
                )
            ) {
                top = top - height - field.offsetHeight;
                bottomAligned = false;
            }

            this.el.style.left = left + 'px';
            this.el.style.top = top + 'px';

            addClass(this.el, leftAligned ? 'left-aligned' : 'right-aligned');
            addClass(this.el, bottomAligned ? 'bottom-aligned' : 'top-aligned');
            removeClass(this.el, !leftAligned ? 'left-aligned' : 'right-aligned');
            removeClass(this.el, !bottomAligned ? 'bottom-aligned' : 'top-aligned');
        },

        /**
         * render HTML for a particular month
         */
        render: function(year, month, randId)
        {
            var opts   = this._o,
                now    = new Date(),
                days   = getDaysInMonth(year, month),
                before = new Date(year, month, 1).getDay(),
                data   = [],
                row    = [];
            setToStartOfDay(now);
            if (opts.firstDay > 0) {
                before -= opts.firstDay;
                if (before < 0) {
                    before += 7;
                }
            }
            var previousMonth = month === 0 ? 11 : month - 1,
                nextMonth = month === 11 ? 0 : month + 1,
                yearOfPreviousMonth = month === 0 ? year - 1 : year,
                yearOfNextMonth = month === 11 ? year + 1 : year,
                daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);
            var cells = days + before,
                after = cells;
            while(after > 7) {
                after -= 7;
            }
            cells += 7 - after;
            var isWeekSelected = false;
            for (var i = 0, r = 0; i < cells; i++)
            {
                var day = new Date(year, month, 1 + (i - before)),
                    isSelected = isDate(this._d) ? compareDates(day, this._d) : false,
                    isToday = compareDates(day, now),
                    hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,
                    isEmpty = i < before || i >= (days + before),
                    dayNumber = 1 + (i - before),
                    monthNumber = month,
                    yearNumber = year,
                    isStartRange = opts.startRange && compareDates(opts.startRange, day),
                    isEndRange = opts.endRange && compareDates(opts.endRange, day),
                    isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,
                    isDisabled = (opts.minDate && day < opts.minDate) ||
                                 (opts.maxDate && day > opts.maxDate) ||
                                 (opts.disableWeekends && isWeekend(day)) ||
                                 (opts.disableDayFn && opts.disableDayFn(day));

                if (isEmpty) {
                    if (i < before) {
                        dayNumber = daysInPreviousMonth + dayNumber;
                        monthNumber = previousMonth;
                        yearNumber = yearOfPreviousMonth;
                    } else {
                        dayNumber = dayNumber - days;
                        monthNumber = nextMonth;
                        yearNumber = yearOfNextMonth;
                    }
                }

                var dayConfig = {
                        day: dayNumber,
                        month: monthNumber,
                        year: yearNumber,
                        hasEvent: hasEvent,
                        isSelected: isSelected,
                        isToday: isToday,
                        isDisabled: isDisabled,
                        isEmpty: isEmpty,
                        isStartRange: isStartRange,
                        isEndRange: isEndRange,
                        isInRange: isInRange,
                        showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,
                        enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths
                    };

                if (opts.pickWholeWeek && isSelected) {
                    isWeekSelected = true;
                }

                row.push(renderDay(dayConfig));

                if (++r === 7) {
                    if (opts.showWeekNumber) {
                        row.unshift(renderWeek(i - before, month, year, opts.firstWeekOfYearMinDays));
                    }
                    data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));
                    row = [];
                    r = 0;
                    isWeekSelected = false;
                }
            }
            return renderTable(opts, data, randId);
        },

        isVisible: function()
        {
            return this._v;
        },

        show: function()
        {
            if (!this.isVisible()) {
                this._v = true;
                this.draw();
                removeClass(this.el, 'is-hidden');
                if (this._o.bound) {
                    addEvent(document, 'click', this._onClick);
                    this.adjustPosition();
                }
                if (typeof this._o.onOpen === 'function') {
                    this._o.onOpen.call(this);
                }
            }
        },

        hide: function()
        {
            var v = this._v;
            if (v !== false) {
                if (this._o.bound) {
                    removeEvent(document, 'click', this._onClick);
                }

                if (!this._o.container) {
                    this.el.style.position = 'static'; // reset
                    this.el.style.left = 'auto';
                    this.el.style.top = 'auto';
                }
                addClass(this.el, 'is-hidden');
                this._v = false;
                if (v !== undefined && typeof this._o.onClose === 'function') {
                    this._o.onClose.call(this);
                }
            }
        },

        /**
         * GAME OVER
         */
        destroy: function()
        {
            var opts = this._o;

            this.hide();
            removeEvent(this.el, 'mousedown', this._onMouseDown, true);
            removeEvent(this.el, 'touchend', this._onMouseDown, true);
            removeEvent(this.el, 'change', this._onChange);
            if (opts.keyboardInput) {
                removeEvent(document, 'keydown', this._onKeyChange);
            }
            if (opts.field) {
                removeEvent(opts.field, 'change', this._onInputChange);
                if (opts.bound) {
                    removeEvent(opts.trigger, 'click', this._onInputClick);
                    removeEvent(opts.trigger, 'focus', this._onInputFocus);
                    removeEvent(opts.trigger, 'blur', this._onInputBlur);
                }
            }
            if (this.el.parentNode) {
                this.el.parentNode.removeChild(this.el);
            }
        }

    };

    return Pikaday;
}));


/***/ }),
/* 230 */
/*!************************************!*\
  !*** external "window.Autolinker" ***!
  \************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.Autolinker;

/***/ }),
/* 231 */
/*!****************************!*\
  !*** ./dev/Common/Mime.js ***!
  \****************************/
/*! exports provided: Mime, default */
/*! exports used: Mime */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Mime; });
/* unused harmony export default */
/* eslint key-spacing: 0 */

/* eslint quote-props: 0 */
var Mime = {
  'eml': 'message/rfc822',
  'mime': 'message/rfc822',
  'txt': 'text/plain',
  'text': 'text/plain',
  'def': 'text/plain',
  'list': 'text/plain',
  'in': 'text/plain',
  'ini': 'text/plain',
  'log': 'text/plain',
  'sql': 'text/plain',
  'cfg': 'text/plain',
  'conf': 'text/plain',
  'asc': 'text/plain',
  'rtx': 'text/richtext',
  'vcard': 'text/vcard',
  'vcf': 'text/vcard',
  'htm': 'text/html',
  'html': 'text/html',
  'csv': 'text/csv',
  'ics': 'text/calendar',
  'ifb': 'text/calendar',
  'xml': 'text/xml',
  'json': 'application/json',
  'swf': 'application/x-shockwave-flash',
  'hlp': 'application/winhlp',
  'wgt': 'application/widget',
  'chm': 'application/vnd.ms-htmlhelp',
  'p10': 'application/pkcs10',
  'p7c': 'application/pkcs7-mime',
  'p7m': 'application/pkcs7-mime',
  'p7s': 'application/pkcs7-signature',
  'torrent': 'application/x-bittorrent',
  // scripts
  'js': 'application/javascript',
  'pl': 'text/perl',
  'css': 'text/css',
  'asp': 'text/asp',
  'php': 'application/x-httpd-php',
  'php3': 'application/x-httpd-php',
  'php4': 'application/x-httpd-php',
  'php5': 'application/x-httpd-php',
  'phtml': 'application/x-httpd-php',
  // images
  'png': 'image/png',
  'jpg': 'image/jpeg',
  'jpeg': 'image/jpeg',
  'jpe': 'image/jpeg',
  'jfif': 'image/jpeg',
  'gif': 'image/gif',
  'bmp': 'image/bmp',
  'cgm': 'image/cgm',
  'ief': 'image/ief',
  'ico': 'image/x-icon',
  'tif': 'image/tiff',
  'tiff': 'image/tiff',
  'svg': 'image/svg+xml',
  'svgz': 'image/svg+xml',
  'djv': 'image/vnd.djvu',
  'djvu': 'image/vnd.djvu',
  'webp': 'image/webp',
  // archives
  'zip': 'application/zip',
  '7z': 'application/x-7z-compressed',
  'rar': 'application/x-rar-compressed',
  'exe': 'application/x-msdownload',
  'dll': 'application/x-msdownload',
  'scr': 'application/x-msdownload',
  'com': 'application/x-msdownload',
  'bat': 'application/x-msdownload',
  'msi': 'application/x-msdownload',
  'cab': 'application/vnd.ms-cab-compressed',
  'gz': 'application/x-gzip',
  'tgz': 'application/x-gzip',
  'bz': 'application/x-bzip',
  'bz2': 'application/x-bzip2',
  'deb': 'application/x-debian-package',
  // fonts
  'psf': 'application/x-font-linux-psf',
  'otf': 'application/x-font-otf',
  'pcf': 'application/x-font-pcf',
  'snf': 'application/x-font-snf',
  'ttf': 'application/x-font-ttf',
  'ttc': 'application/x-font-ttf',
  // audio
  'mp3': 'audio/mpeg',
  'amr': 'audio/amr',
  'aac': 'audio/x-aac',
  'aif': 'audio/x-aiff',
  'aifc': 'audio/x-aiff',
  'aiff': 'audio/x-aiff',
  'wav': 'audio/x-wav',
  'wma': 'audio/x-ms-wma',
  'wax': 'audio/x-ms-wax',
  'midi': 'audio/midi',
  'mp4a': 'audio/mp4',
  'ogg': 'audio/ogg',
  'weba': 'audio/webm',
  'ra': 'audio/x-pn-realaudio',
  'ram': 'audio/x-pn-realaudio',
  'rmp': 'audio/x-pn-realaudio-plugin',
  'm3u': 'audio/x-mpegurl',
  // video
  'flv': 'video/x-flv',
  'qt': 'video/quicktime',
  'mov': 'video/quicktime',
  'wmv': 'video/windows-media',
  'avi': 'video/x-msvideo',
  'mpg': 'video/mpeg',
  'mpeg': 'video/mpeg',
  'mpe': 'video/mpeg',
  'm1v': 'video/mpeg',
  'm2v': 'video/mpeg',
  '3gp': 'video/3gpp',
  '3g2': 'video/3gpp2',
  'h261': 'video/h261',
  'h263': 'video/h263',
  'h264': 'video/h264',
  'jpgv': 'video/jpgv',
  'mp4': 'video/mp4',
  'mp4v': 'video/mp4',
  'mpg4': 'video/mp4',
  'ogv': 'video/ogg',
  'webm': 'video/webm',
  'm4v': 'video/x-m4v',
  'asf': 'video/x-ms-asf',
  'asx': 'video/x-ms-asf',
  'wm': 'video/x-ms-wm',
  'wmx': 'video/x-ms-wmx',
  'wvx': 'video/x-ms-wvx',
  'movie': 'video/x-sgi-movie',
  // adobe
  'pdf': 'application/pdf',
  'psd': 'image/vnd.adobe.photoshop',
  'ai': 'application/postscript',
  'eps': 'application/postscript',
  'ps': 'application/postscript',
  // ms office
  'doc': 'application/msword',
  'dot': 'application/msword',
  'rtf': 'application/rtf',
  'xls': 'application/vnd.ms-excel',
  'ppt': 'application/vnd.ms-powerpoint',
  'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
  'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  'dotx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
  'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
  // open office
  'odt': 'application/vnd.oasis.opendocument.text',
  'ods': 'application/vnd.oasis.opendocument.spreadsheet'
};


/***/ }),
/* 232 */
/*!***********************************!*\
  !*** ./dev/Stores/User/Filter.js ***!
  \***********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Enums */ 0);



var FilterUserStore = function FilterUserStore() {
  this.capa = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
  this.modules = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable({});
  this.filters = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observableArray([]);
  this.filters.loading = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
    throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Magics"].Time200ms
  });
  this.filters.saving = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(false).extend({
    throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Magics"].Time200ms
  });
  this.raw = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable('');
};

/* harmony default export */ __webpack_exports__["a"] = (new FilterUserStore());

/***/ }),
/* 233 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/object-keys.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 155);
var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 112);

// `Object.keys` method
// https://tc39.es/ecma262/#sec-object.keys
// eslint-disable-next-line es/no-object-keys -- safe
module.exports = Object.keys || function keys(O) {
  return internalObjectKeys(O, enumBugKeys);
};


/***/ }),
/* 234 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js/internals/add-to-unscopables.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);
var create = __webpack_require__(/*! ../internals/object-create */ 167);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 66);

var UNSCOPABLES = wellKnownSymbol('unscopables');
var ArrayPrototype = Array.prototype;

// Array.prototype[@@unscopables]
// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
if (ArrayPrototype[UNSCOPABLES] == undefined) {
  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {
    configurable: true,
    value: create(null)
  });
}

// add a key to Array.prototype[@@unscopables]
module.exports = function (key) {
  ArrayPrototype[UNSCOPABLES][key] = true;
};


/***/ }),
/* 235 */
/*!************************************************!*\
  !*** ./node_modules/core-js/internals/html.js ***!
  \************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 78);

module.exports = getBuiltIn('document', 'documentElement');


/***/ }),
/* 236 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js/internals/species-constructor.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var aFunction = __webpack_require__(/*! ../internals/a-function */ 131);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

var SPECIES = wellKnownSymbol('species');

// `SpeciesConstructor` abstract operation
// https://tc39.es/ecma262/#sec-speciesconstructor
module.exports = function (O, defaultConstructor) {
  var C = anObject(O).constructor;
  var S;
  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);
};


/***/ }),
/* 237 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js/internals/define-iterator.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 65);
var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ 246);
var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 168);
var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 215);
var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 169);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);
var redefine = __webpack_require__(/*! ../internals/redefine */ 69);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 98);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 113);
var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 184);

var IteratorPrototype = IteratorsCore.IteratorPrototype;
var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
var ITERATOR = wellKnownSymbol('iterator');
var KEYS = 'keys';
var VALUES = 'values';
var ENTRIES = 'entries';

var returnThis = function () { return this; };

module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
  createIteratorConstructor(IteratorConstructor, NAME, next);

  var getIterationMethod = function (KIND) {
    if (KIND === DEFAULT && defaultIterator) return defaultIterator;
    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];
    switch (KIND) {
      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
    } return function () { return new IteratorConstructor(this); };
  };

  var TO_STRING_TAG = NAME + ' Iterator';
  var INCORRECT_VALUES_NAME = false;
  var IterablePrototype = Iterable.prototype;
  var nativeIterator = IterablePrototype[ITERATOR]
    || IterablePrototype['@@iterator']
    || DEFAULT && IterablePrototype[DEFAULT];
  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
  var CurrentIteratorPrototype, methods, KEY;

  // fix native
  if (anyNativeIterator) {
    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
    if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
        if (setPrototypeOf) {
          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {
          createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);
        }
      }
      // Set @@toStringTag to native iterators
      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
    }
  }

  // fix Array#{values, @@iterator}.name in V8 / FF
  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
    INCORRECT_VALUES_NAME = true;
    defaultIterator = function values() { return nativeIterator.call(this); };
  }

  // define iterator
  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
    createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);
  }
  Iterators[NAME] = defaultIterator;

  // export additional methods
  if (DEFAULT) {
    methods = {
      values: getIterationMethod(VALUES),
      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
      entries: getIterationMethod(ENTRIES)
    };
    if (FORCED) for (KEY in methods) {
      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
        redefine(IterablePrototype, KEY, methods[KEY]);
      }
    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
  }

  return methods;
};


/***/ }),
/* 238 */
/*!*******************************!*\
  !*** ./dev/View/Popup/Ask.js ***!
  \*******************************/
/*! exports provided: AskPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AskPopupView", function() { return AskPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AskPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;








var AskPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["popup"])({
  name: 'View/Popup/Ask',
  templateID: 'PopupsAsk'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AskPopupView, _AbstractViewNext);

  function AskPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.askDesc = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    _this.yesButton = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    _this.noButton = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    _this.yesFocus = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    _this.noFocus = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    _this.fYesAction = null;
    _this.fNoAction = null;
    _this.bFocusYesOnShow = true;
    _this.bDisabeCloseOnEsc = true;
    _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].PopupAsk;
    return _this;
  }

  var _proto = AskPopupView.prototype;

  _proto.clearPopup = function clearPopup() {
    this.askDesc('');
    this.yesButton(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_5__["i18n"])('POPUPS_ASK/BUTTON_YES'));
    this.noButton(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_5__["i18n"])('POPUPS_ASK/BUTTON_NO'));
    this.yesFocus(false);
    this.noFocus(false);
    this.fYesAction = null;
    this.fNoAction = null;
  };

  _proto.yesClick = function yesClick() {
    this.cancelCommand();

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isFunc"])(this.fYesAction)) {
      this.fYesAction.call(null);
    }
  };

  _proto.noClick = function noClick() {
    this.cancelCommand();

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isFunc"])(this.fNoAction)) {
      this.fNoAction.call(null);
    }
  }
  /**
   * @param {string} sAskDesc
   * @param {Function=} fYesFunc
   * @param {Function=} fNoFunc
   * @param {string=} sYesButton
   * @param {string=} sNoButton
   * @param {boolean=} bFocusYesOnShow = true
   * @returns {void}
   */
  ;

  _proto.onShow = function onShow(askDesc, fYesFunc, fNoFunc, yesButton, noButton, isFocusYesOnShow) {
    if (fYesFunc === void 0) {
      fYesFunc = null;
    }

    if (fNoFunc === void 0) {
      fNoFunc = null;
    }

    if (yesButton === void 0) {
      yesButton = '';
    }

    if (noButton === void 0) {
      noButton = '';
    }

    if (isFocusYesOnShow === void 0) {
      isFocusYesOnShow = true;
    }

    this.clearPopup();
    this.fYesAction = fYesFunc || null;
    this.fNoAction = fNoFunc || null;
    this.askDesc(askDesc || '');

    if (yesButton) {
      this.yesButton(yesButton);
    }

    if (noButton) {
      this.noButton(noButton);
    }

    this.bFocusYesOnShow = !!isFocusYesOnShow;
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    if (this.bFocusYesOnShow) {
      this.yesFocus(true);
    }
  };

  _proto.onBuild = function onBuild() {
    var _this2 = this;

    key__WEBPACK_IMPORTED_MODULE_2___default()('tab, shift+tab, right, left', Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].PopupAsk, function () {
      if (_this2.yesFocus()) {
        _this2.noFocus(true);
      } else {
        _this2.yesFocus(true);
      }

      return false;
    });
    key__WEBPACK_IMPORTED_MODULE_2___default()('esc', Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].PopupAsk, function () {
      _this2.noClick();

      return false;
    });
  };

  return AskPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_7__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 239 */
/*!**********************************!*\
  !*** ./dev/Stores/User/Quota.js ***!
  \**********************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0);




var QuotaUserStore = /*#__PURE__*/function () {
  function QuotaUserStore() {
    var _this = this;

    this.quota = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(0);
    this.usage = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(0);
    this.percentage = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      var quota = _this.quota(),
          usage = _this.usage();

      return 0 < quota ? window__WEBPACK_IMPORTED_MODULE_0___default.a.Math.ceil(usage / quota * 100) : 0;
    });
  }
  /**
   * @param {number} quota
   * @param {number} usage
   */


  var _proto = QuotaUserStore.prototype;

  _proto.populateData = function populateData(quota, usage) {
    this.quota(quota * Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Magics"].BitLength1024);
    this.usage(usage * Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Magics"].BitLength1024);
  };

  return QuotaUserStore;
}();

/* harmony default export */ __webpack_exports__["a"] = (new QuotaUserStore());

/***/ }),
/* 240 */
/*!***********************************!*\
  !*** external "window.ifvisible" ***!
  \***********************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.ifvisible;

/***/ }),
/* 241 */
/*!********************************************************************!*\
  !*** ./node_modules/core-js/internals/object-define-properties.js ***!
  \********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 55);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 66);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 233);

// `Object.defineProperties` method
// https://tc39.es/ecma262/#sec-object.defineproperties
// eslint-disable-next-line es/no-object-defineproperties -- safe
module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var keys = objectKeys(Properties);
  var length = keys.length;
  var index = 0;
  var key;
  while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);
  return O;
};


/***/ }),
/* 242 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js/internals/is-regexp.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 49);
var classof = __webpack_require__(/*! ../internals/classof-raw */ 74);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

var MATCH = wellKnownSymbol('match');

// `IsRegExp` abstract operation
// https://tc39.es/ecma262/#sec-isregexp
module.exports = function (it) {
  var isRegExp;
  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');
};


/***/ }),
/* 243 */
/*!********************************************************************!*\
  !*** ./node_modules/core-js/internals/correct-prototype-getter.js ***!
  \********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 37);

module.exports = !fails(function () {
  function F() { /* empty */ }
  F.prototype.constructor = null;
  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing
  return Object.getPrototypeOf(new F()) !== F.prototype;
});


/***/ }),
/* 244 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js/internals/a-possible-prototype.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 49);

module.exports = function (it) {
  if (!isObject(it) && it !== null) {
    throw TypeError("Can't set " + String(it) + ' as a prototype');
  } return it;
};


/***/ }),
/* 245 */,
/* 246 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js/internals/create-iterator-constructor.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 184).IteratorPrototype;
var create = __webpack_require__(/*! ../internals/object-create */ 167);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 95);
var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 169);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 113);

var returnThis = function () { return this; };

module.exports = function (IteratorConstructor, NAME, next) {
  var TO_STRING_TAG = NAME + ' Iterator';
  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });
  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
  Iterators[TO_STRING_TAG] = returnThis;
  return IteratorConstructor;
};


/***/ }),
/* 247 */
/*!**********************************************************************!*\
  !*** ./node_modules/core-js/modules/web.dom-collections.iterator.js ***!
  \**********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 30);
var DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ 218);
var ArrayIteratorMethods = __webpack_require__(/*! ../modules/es.array.iterator */ 219);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 47);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

var ITERATOR = wellKnownSymbol('iterator');
var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var ArrayValues = ArrayIteratorMethods.values;

for (var COLLECTION_NAME in DOMIterables) {
  var Collection = global[COLLECTION_NAME];
  var CollectionPrototype = Collection && Collection.prototype;
  if (CollectionPrototype) {
    // some Chrome versions have non-configurable methods on DOMTokenList
    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {
      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);
    } catch (error) {
      CollectionPrototype[ITERATOR] = ArrayValues;
    }
    if (!CollectionPrototype[TO_STRING_TAG]) {
      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);
    }
    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {
      // some Chrome versions have non-configurable methods on DOMTokenList
      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {
        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);
      } catch (error) {
        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];
      }
    }
  }
}


/***/ }),
/* 248 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/set-timeout.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../modules/web.timers */ 185);
var path = __webpack_require__(/*! ../internals/path */ 51);

module.exports = path.setTimeout;


/***/ }),
/* 249 */
/*!******************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-property-is-enumerable.js ***!
  \******************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var nativePropertyIsEnumerable = {}.propertyIsEnumerable;
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

// Nashorn ~ JDK8 bug
var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);

// `Object.prototype.propertyIsEnumerable` method implementation
// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable
exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
  var descriptor = getOwnPropertyDescriptor(this, V);
  return !!descriptor && descriptor.enumerable;
} : nativePropertyIsEnumerable;


/***/ }),
/* 250 */,
/* 251 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/promise/index.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/promise */ 252);

module.exports = parent;


/***/ }),
/* 252 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/es/promise/index.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/es.aggregate-error */ 253);
__webpack_require__(/*! ../../modules/es.object.to-string */ 264);
__webpack_require__(/*! ../../modules/es.promise */ 265);
__webpack_require__(/*! ../../modules/es.promise.all-settled */ 275);
__webpack_require__(/*! ../../modules/es.promise.any */ 276);
__webpack_require__(/*! ../../modules/es.promise.finally */ 277);
__webpack_require__(/*! ../../modules/es.string.iterator */ 278);
__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 161);
var path = __webpack_require__(/*! ../../internals/path */ 51);

module.exports = path.Promise;


/***/ }),
/* 253 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.aggregate-error.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 139);
var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 159);
var create = __webpack_require__(/*! ../internals/object-create */ 160);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90);
var iterate = __webpack_require__(/*! ../internals/iterate */ 107);

var $AggregateError = function AggregateError(errors, message) {
  var that = this;
  if (!(that instanceof $AggregateError)) return new $AggregateError(errors, message);
  if (setPrototypeOf) {
    // eslint-disable-next-line unicorn/error-message
    that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));
  }
  if (message !== undefined) createNonEnumerableProperty(that, 'message', String(message));
  var errorsArray = [];
  iterate(errors, errorsArray.push, { that: errorsArray });
  createNonEnumerableProperty(that, 'errors', errorsArray);
  return that;
};

$AggregateError.prototype = create(Error.prototype, {
  constructor: createPropertyDescriptor(5, $AggregateError),
  message: createPropertyDescriptor(5, ''),
  name: createPropertyDescriptor(5, 'AggregateError')
});

// `AggregateError` constructor
// https://tc39.es/ecma262/#sec-aggregate-error-constructor
$({ global: true }, {
  AggregateError: $AggregateError
});


/***/ }),
/* 254 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/set-global.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 52);

module.exports = function (key, value) {
  try {
    createNonEnumerableProperty(global, key, value);
  } catch (error) {
    global[key] = value;
  } return value;
};


/***/ }),
/* 255 */
/*!*************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/correct-prototype-getter.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);

module.exports = !fails(function () {
  function F() { /* empty */ }
  F.prototype.constructor = null;
  return Object.getPrototypeOf(new F()) !== F.prototype;
});


/***/ }),
/* 256 */
/*!*********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/a-possible-prototype.js ***!
  \*********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 50);

module.exports = function (it) {
  if (!isObject(it) && it !== null) {
    throw TypeError("Can't set " + String(it) + ' as a prototype');
  } return it;
};


/***/ }),
/* 257 */
/*!*************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-define-properties.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 81);
var anObject = __webpack_require__(/*! ../internals/an-object */ 58);
var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 220);

// `Object.defineProperties` method
// https://tc39.es/ecma262/#sec-object.defineproperties
module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var keys = objectKeys(Properties);
  var length = keys.length;
  var index = 0;
  var key;
  while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);
  return O;
};


/***/ }),
/* 258 */
/*!*********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-keys-internal.js ***!
  \*********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__(/*! ../internals/has */ 54);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 80);
var indexOf = __webpack_require__(/*! ../internals/array-includes */ 259).indexOf;
var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 143);

module.exports = function (object, names) {
  var O = toIndexedObject(object);
  var i = 0;
  var result = [];
  var key;
  for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);
  // Don't enum bug & hidden keys
  while (names.length > i) if (has(O, key = names[i++])) {
    ~indexOf(result, key) || result.push(key);
  }
  return result;
};


/***/ }),
/* 259 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-includes.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 80);
var toLength = __webpack_require__(/*! ../internals/to-length */ 91);
var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 221);

// `Array.prototype.{ indexOf, includes }` methods implementation
var createMethod = function (IS_INCLUDES) {
  return function ($this, el, fromIndex) {
    var O = toIndexedObject($this);
    var length = toLength(O.length);
    var index = toAbsoluteIndex(fromIndex, length);
    var value;
    // Array#includes uses SameValueZero equality algorithm
    // eslint-disable-next-line no-self-compare
    if (IS_INCLUDES && el != el) while (length > index) {
      value = O[index++];
      // eslint-disable-next-line no-self-compare
      if (value != value) return true;
    // Array#indexOf ignores holes, Array#includes - not
    } else for (;length > index; index++) {
      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
    } return !IS_INCLUDES && -1;
  };
};

module.exports = {
  // `Array.prototype.includes` method
  // https://tc39.es/ecma262/#sec-array.prototype.includes
  includes: createMethod(true),
  // `Array.prototype.indexOf` method
  // https://tc39.es/ecma262/#sec-array.prototype.indexof
  indexOf: createMethod(false)
};


/***/ }),
/* 260 */
/*!*************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/is-array-iterator-method.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 76);

var ITERATOR = wellKnownSymbol('iterator');
var ArrayPrototype = Array.prototype;

// check on default Array iterator
module.exports = function (it) {
  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
};


/***/ }),
/* 261 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/use-symbol-as-uid.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 192);

module.exports = NATIVE_SYMBOL
  // eslint-disable-next-line no-undef
  && !Symbol.sham
  // eslint-disable-next-line no-undef
  && typeof Symbol.iterator == 'symbol';


/***/ }),
/* 262 */
/*!********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/get-iterator-method.js ***!
  \********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var classof = __webpack_require__(/*! ../internals/classof */ 92);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 76);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var ITERATOR = wellKnownSymbol('iterator');

module.exports = function (it) {
  if (it != undefined) return it[ITERATOR]
    || it['@@iterator']
    || Iterators[classof(it)];
};


/***/ }),
/* 263 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/iterator-close.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(/*! ../internals/an-object */ 58);

module.exports = function (iterator) {
  var returnMethod = iterator['return'];
  if (returnMethod !== undefined) {
    return anObject(returnMethod.call(iterator)).value;
  }
};


/***/ }),
/* 264 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.object.to-string.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// empty


/***/ }),
/* 265 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.promise.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 86);
var global = __webpack_require__(/*! ../internals/global */ 31);
var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 75);
var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 193);
var redefine = __webpack_require__(/*! ../internals/redefine */ 108);
var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 266);
var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 145);
var setSpecies = __webpack_require__(/*! ../internals/set-species */ 268);
var isObject = __webpack_require__(/*! ../internals/is-object */ 50);
var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);
var anInstance = __webpack_require__(/*! ../internals/an-instance */ 269);
var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 194);
var iterate = __webpack_require__(/*! ../internals/iterate */ 107);
var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 270);
var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 195);
var task = __webpack_require__(/*! ../internals/task */ 196).set;
var microtask = __webpack_require__(/*! ../internals/microtask */ 271);
var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 198);
var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 273);
var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 109);
var perform = __webpack_require__(/*! ../internals/perform */ 146);
var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 147);
var isForced = __webpack_require__(/*! ../internals/is-forced */ 187);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ 118);
var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 148);

var SPECIES = wellKnownSymbol('species');
var PROMISE = 'Promise';
var getInternalState = InternalStateModule.get;
var setInternalState = InternalStateModule.set;
var getInternalPromiseState = InternalStateModule.getterFor(PROMISE);
var PromiseConstructor = NativePromise;
var TypeError = global.TypeError;
var document = global.document;
var process = global.process;
var $fetch = getBuiltIn('fetch');
var newPromiseCapability = newPromiseCapabilityModule.f;
var newGenericPromiseCapability = newPromiseCapability;
var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);
var NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';
var UNHANDLED_REJECTION = 'unhandledrejection';
var REJECTION_HANDLED = 'rejectionhandled';
var PENDING = 0;
var FULFILLED = 1;
var REJECTED = 2;
var HANDLED = 1;
var UNHANDLED = 2;
var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;

var FORCED = isForced(PROMISE, function () {
  var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);
  if (!GLOBAL_CORE_JS_PROMISE) {
    // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
    // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
    // We can't detect it synchronously, so just check versions
    if (V8_VERSION === 66) return true;
    // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
    if (!IS_NODE && !NATIVE_REJECTION_EVENT) return true;
  }
  // We need Promise#finally in the pure version for preventing prototype pollution
  if (IS_PURE && !PromiseConstructor.prototype['finally']) return true;
  // We can't use @@species feature detection in V8 since it causes
  // deoptimization and performance degradation
  // https://github.com/zloirock/core-js/issues/679
  if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false;
  // Detect correctness of subclassing with @@species support
  var promise = PromiseConstructor.resolve(1);
  var FakePromise = function (exec) {
    exec(function () { /* empty */ }, function () { /* empty */ });
  };
  var constructor = promise.constructor = {};
  constructor[SPECIES] = FakePromise;
  return !(promise.then(function () { /* empty */ }) instanceof FakePromise);
});

var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {
  PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });
});

// helpers
var isThenable = function (it) {
  var then;
  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
};

var notify = function (state, isReject) {
  if (state.notified) return;
  state.notified = true;
  var chain = state.reactions;
  microtask(function () {
    var value = state.value;
    var ok = state.state == FULFILLED;
    var index = 0;
    // variable length - can't use forEach
    while (chain.length > index) {
      var reaction = chain[index++];
      var handler = ok ? reaction.ok : reaction.fail;
      var resolve = reaction.resolve;
      var reject = reaction.reject;
      var domain = reaction.domain;
      var result, then, exited;
      try {
        if (handler) {
          if (!ok) {
            if (state.rejection === UNHANDLED) onHandleUnhandled(state);
            state.rejection = HANDLED;
          }
          if (handler === true) result = value;
          else {
            if (domain) domain.enter();
            result = handler(value); // can throw
            if (domain) {
              domain.exit();
              exited = true;
            }
          }
          if (result === reaction.promise) {
            reject(TypeError('Promise-chain cycle'));
          } else if (then = isThenable(result)) {
            then.call(result, resolve, reject);
          } else resolve(result);
        } else reject(value);
      } catch (error) {
        if (domain && !exited) domain.exit();
        reject(error);
      }
    }
    state.reactions = [];
    state.notified = false;
    if (isReject && !state.rejection) onUnhandled(state);
  });
};

var dispatchEvent = function (name, promise, reason) {
  var event, handler;
  if (DISPATCH_EVENT) {
    event = document.createEvent('Event');
    event.promise = promise;
    event.reason = reason;
    event.initEvent(name, false, true);
    global.dispatchEvent(event);
  } else event = { promise: promise, reason: reason };
  if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);
  else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);
};

var onUnhandled = function (state) {
  task.call(global, function () {
    var promise = state.facade;
    var value = state.value;
    var IS_UNHANDLED = isUnhandled(state);
    var result;
    if (IS_UNHANDLED) {
      result = perform(function () {
        if (IS_NODE) {
          process.emit('unhandledRejection', value, promise);
        } else dispatchEvent(UNHANDLED_REJECTION, promise, value);
      });
      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
      state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;
      if (result.error) throw result.value;
    }
  });
};

var isUnhandled = function (state) {
  return state.rejection !== HANDLED && !state.parent;
};

var onHandleUnhandled = function (state) {
  task.call(global, function () {
    var promise = state.facade;
    if (IS_NODE) {
      process.emit('rejectionHandled', promise);
    } else dispatchEvent(REJECTION_HANDLED, promise, state.value);
  });
};

var bind = function (fn, state, unwrap) {
  return function (value) {
    fn(state, value, unwrap);
  };
};

var internalReject = function (state, value, unwrap) {
  if (state.done) return;
  state.done = true;
  if (unwrap) state = unwrap;
  state.value = value;
  state.state = REJECTED;
  notify(state, true);
};

var internalResolve = function (state, value, unwrap) {
  if (state.done) return;
  state.done = true;
  if (unwrap) state = unwrap;
  try {
    if (state.facade === value) throw TypeError("Promise can't be resolved itself");
    var then = isThenable(value);
    if (then) {
      microtask(function () {
        var wrapper = { done: false };
        try {
          then.call(value,
            bind(internalResolve, wrapper, state),
            bind(internalReject, wrapper, state)
          );
        } catch (error) {
          internalReject(wrapper, error, state);
        }
      });
    } else {
      state.value = value;
      state.state = FULFILLED;
      notify(state, false);
    }
  } catch (error) {
    internalReject({ done: false }, error, state);
  }
};

// constructor polyfill
if (FORCED) {
  // 25.4.3.1 Promise(executor)
  PromiseConstructor = function Promise(executor) {
    anInstance(this, PromiseConstructor, PROMISE);
    aFunction(executor);
    Internal.call(this);
    var state = getInternalState(this);
    try {
      executor(bind(internalResolve, state), bind(internalReject, state));
    } catch (error) {
      internalReject(state, error);
    }
  };
  // eslint-disable-next-line no-unused-vars
  Internal = function Promise(executor) {
    setInternalState(this, {
      type: PROMISE,
      done: false,
      notified: false,
      parent: false,
      reactions: [],
      rejection: false,
      state: PENDING,
      value: undefined
    });
  };
  Internal.prototype = redefineAll(PromiseConstructor.prototype, {
    // `Promise.prototype.then` method
    // https://tc39.es/ecma262/#sec-promise.prototype.then
    then: function then(onFulfilled, onRejected) {
      var state = getInternalPromiseState(this);
      var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));
      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
      reaction.fail = typeof onRejected == 'function' && onRejected;
      reaction.domain = IS_NODE ? process.domain : undefined;
      state.parent = true;
      state.reactions.push(reaction);
      if (state.state != PENDING) notify(state, false);
      return reaction.promise;
    },
    // `Promise.prototype.catch` method
    // https://tc39.es/ecma262/#sec-promise.prototype.catch
    'catch': function (onRejected) {
      return this.then(undefined, onRejected);
    }
  });
  OwnPromiseCapability = function () {
    var promise = new Internal();
    var state = getInternalState(promise);
    this.promise = promise;
    this.resolve = bind(internalResolve, state);
    this.reject = bind(internalReject, state);
  };
  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
    return C === PromiseConstructor || C === PromiseWrapper
      ? new OwnPromiseCapability(C)
      : newGenericPromiseCapability(C);
  };

  if (!IS_PURE && typeof NativePromise == 'function') {
    nativeThen = NativePromise.prototype.then;

    // wrap native Promise#then for native async functions
    redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {
      var that = this;
      return new PromiseConstructor(function (resolve, reject) {
        nativeThen.call(that, resolve, reject);
      }).then(onFulfilled, onRejected);
    // https://github.com/zloirock/core-js/issues/640
    }, { unsafe: true });

    // wrap fetch result
    if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, {
      // eslint-disable-next-line no-unused-vars
      fetch: function fetch(input /* , init */) {
        return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));
      }
    });
  }
}

$({ global: true, wrap: true, forced: FORCED }, {
  Promise: PromiseConstructor
});

setToStringTag(PromiseConstructor, PROMISE, false, true);
setSpecies(PROMISE);

PromiseWrapper = getBuiltIn(PROMISE);

// statics
$({ target: PROMISE, stat: true, forced: FORCED }, {
  // `Promise.reject` method
  // https://tc39.es/ecma262/#sec-promise.reject
  reject: function reject(r) {
    var capability = newPromiseCapability(this);
    capability.reject.call(undefined, r);
    return capability.promise;
  }
});

$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {
  // `Promise.resolve` method
  // https://tc39.es/ecma262/#sec-promise.resolve
  resolve: function resolve(x) {
    return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);
  }
});

$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {
  // `Promise.all` method
  // https://tc39.es/ecma262/#sec-promise.all
  all: function all(iterable) {
    var C = this;
    var capability = newPromiseCapability(C);
    var resolve = capability.resolve;
    var reject = capability.reject;
    var result = perform(function () {
      var $promiseResolve = aFunction(C.resolve);
      var values = [];
      var counter = 0;
      var remaining = 1;
      iterate(iterable, function (promise) {
        var index = counter++;
        var alreadyCalled = false;
        values.push(undefined);
        remaining++;
        $promiseResolve.call(C, promise).then(function (value) {
          if (alreadyCalled) return;
          alreadyCalled = true;
          values[index] = value;
          --remaining || resolve(values);
        }, reject);
      });
      --remaining || resolve(values);
    });
    if (result.error) reject(result.value);
    return capability.promise;
  },
  // `Promise.race` method
  // https://tc39.es/ecma262/#sec-promise.race
  race: function race(iterable) {
    var C = this;
    var capability = newPromiseCapability(C);
    var reject = capability.reject;
    var result = perform(function () {
      var $promiseResolve = aFunction(C.resolve);
      iterate(iterable, function (promise) {
        $promiseResolve.call(C, promise).then(capability.resolve, reject);
      });
    });
    if (result.error) reject(result.value);
    return capability.promise;
  }
});


/***/ }),
/* 266 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/redefine-all.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var redefine = __webpack_require__(/*! ../internals/redefine */ 108);

module.exports = function (target, src, options) {
  for (var key in src) {
    if (options && options.unsafe && target[key]) target[key] = src[key];
    else redefine(target, key, src[key], options);
  } return target;
};


/***/ }),
/* 267 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/object-to-string.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 144);
var classof = __webpack_require__(/*! ../internals/classof */ 92);

// `Object.prototype.toString` method implementation
// https://tc39.es/ecma262/#sec-object.prototype.tostring
module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
  return '[object ' + classof(this) + ']';
};


/***/ }),
/* 268 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/set-species.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 75);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 81);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);

var SPECIES = wellKnownSymbol('species');

module.exports = function (CONSTRUCTOR_NAME) {
  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);
  var defineProperty = definePropertyModule.f;

  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {
    defineProperty(Constructor, SPECIES, {
      configurable: true,
      get: function () { return this; }
    });
  }
};


/***/ }),
/* 269 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/an-instance.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

module.exports = function (it, Constructor, name) {
  if (!(it instanceof Constructor)) {
    throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');
  } return it;
};


/***/ }),
/* 270 */
/*!*******************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/check-correctness-of-iteration.js ***!
  \*******************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var ITERATOR = wellKnownSymbol('iterator');
var SAFE_CLOSING = false;

try {
  var called = 0;
  var iteratorWithReturn = {
    next: function () {
      return { done: !!called++ };
    },
    'return': function () {
      SAFE_CLOSING = true;
    }
  };
  iteratorWithReturn[ITERATOR] = function () {
    return this;
  };
  // eslint-disable-next-line no-throw-literal
  Array.from(iteratorWithReturn, function () { throw 2; });
} catch (error) { /* empty */ }

module.exports = function (exec, SKIP_CLOSING) {
  if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
  var ITERATION_SUPPORT = false;
  try {
    var object = {};
    object[ITERATOR] = function () {
      return {
        next: function () {
          return { done: ITERATION_SUPPORT = true };
        }
      };
    };
    exec(object);
  } catch (error) { /* empty */ }
  return ITERATION_SUPPORT;
};


/***/ }),
/* 271 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/internals/microtask.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 157).f;
var macrotask = __webpack_require__(/*! ../internals/task */ 196).set;
var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 197);
var IS_WEBOS_WEBKIT = __webpack_require__(/*! ../internals/engine-is-webos-webkit */ 272);
var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ 118);

var MutationObserver = global.MutationObserver || global.WebKitMutationObserver;
var document = global.document;
var process = global.process;
var Promise = global.Promise;
// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`
var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');
var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;

var flush, head, last, notify, toggle, node, promise, then;

// modern engines have queueMicrotask method
if (!queueMicrotask) {
  flush = function () {
    var parent, fn;
    if (IS_NODE && (parent = process.domain)) parent.exit();
    while (head) {
      fn = head.fn;
      head = head.next;
      try {
        fn();
      } catch (error) {
        if (head) notify();
        else last = undefined;
        throw error;
      }
    } last = undefined;
    if (parent) parent.enter();
  };

  // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
  // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898
  if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {
    toggle = true;
    node = document.createTextNode('');
    new MutationObserver(flush).observe(node, { characterData: true });
    notify = function () {
      node.data = toggle = !toggle;
    };
  // environments with maybe non-completely correct, but existent Promise
  } else if (Promise && Promise.resolve) {
    // Promise.resolve without an argument throws an error in LG WebOS 2
    promise = Promise.resolve(undefined);
    then = promise.then;
    notify = function () {
      then.call(promise, flush);
    };
  // Node.js without promises
  } else if (IS_NODE) {
    notify = function () {
      process.nextTick(flush);
    };
  // for other environments - macrotask based on:
  // - setImmediate
  // - MessageChannel
  // - window.postMessag
  // - onreadystatechange
  // - setTimeout
  } else {
    notify = function () {
      // strange IE + webpack dev server bug - use .call(global)
      macrotask.call(global, flush);
    };
  }
}

module.exports = queueMicrotask || function (fn) {
  var task = { fn: fn, next: undefined };
  if (last) last.next = task;
  if (!head) {
    head = task;
    notify();
  } last = task;
};


/***/ }),
/* 272 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/engine-is-webos-webkit.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 106);

module.exports = /web0s(?!.*chrome)/i.test(userAgent);


/***/ }),
/* 273 */
/*!*******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/host-report-errors.js ***!
  \*******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);

module.exports = function (a, b) {
  var console = global.console;
  if (console && console.error) {
    arguments.length === 1 ? console.error(a) : console.error(a, b);
  }
};


/***/ }),
/* 274 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/native-weak-map.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(/*! ../internals/global */ 31);
var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 194);

var WeakMap = global.WeakMap;

module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));


/***/ }),
/* 275 */
/*!*********************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.promise.all-settled.js ***!
  \*********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);
var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 109);
var perform = __webpack_require__(/*! ../internals/perform */ 146);
var iterate = __webpack_require__(/*! ../internals/iterate */ 107);

// `Promise.allSettled` method
// https://tc39.es/ecma262/#sec-promise.allsettled
$({ target: 'Promise', stat: true }, {
  allSettled: function allSettled(iterable) {
    var C = this;
    var capability = newPromiseCapabilityModule.f(C);
    var resolve = capability.resolve;
    var reject = capability.reject;
    var result = perform(function () {
      var promiseResolve = aFunction(C.resolve);
      var values = [];
      var counter = 0;
      var remaining = 1;
      iterate(iterable, function (promise) {
        var index = counter++;
        var alreadyCalled = false;
        values.push(undefined);
        remaining++;
        promiseResolve.call(C, promise).then(function (value) {
          if (alreadyCalled) return;
          alreadyCalled = true;
          values[index] = { status: 'fulfilled', value: value };
          --remaining || resolve(values);
        }, function (error) {
          if (alreadyCalled) return;
          alreadyCalled = true;
          values[index] = { status: 'rejected', reason: error };
          --remaining || resolve(values);
        });
      });
      --remaining || resolve(values);
    });
    if (result.error) reject(result.value);
    return capability.promise;
  }
});


/***/ }),
/* 276 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.promise.any.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);
var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 75);
var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 109);
var perform = __webpack_require__(/*! ../internals/perform */ 146);
var iterate = __webpack_require__(/*! ../internals/iterate */ 107);

var PROMISE_ANY_ERROR = 'No one promise resolved';

// `Promise.any` method
// https://tc39.es/ecma262/#sec-promise.any
$({ target: 'Promise', stat: true }, {
  any: function any(iterable) {
    var C = this;
    var capability = newPromiseCapabilityModule.f(C);
    var resolve = capability.resolve;
    var reject = capability.reject;
    var result = perform(function () {
      var promiseResolve = aFunction(C.resolve);
      var errors = [];
      var counter = 0;
      var remaining = 1;
      var alreadyResolved = false;
      iterate(iterable, function (promise) {
        var index = counter++;
        var alreadyRejected = false;
        errors.push(undefined);
        remaining++;
        promiseResolve.call(C, promise).then(function (value) {
          if (alreadyRejected || alreadyResolved) return;
          alreadyResolved = true;
          resolve(value);
        }, function (error) {
          if (alreadyRejected || alreadyResolved) return;
          alreadyRejected = true;
          errors[index] = error;
          --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));
        });
      });
      --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));
    });
    if (result.error) reject(result.value);
    return capability.promise;
  }
});


/***/ }),
/* 277 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.promise.finally.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 86);
var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 193);
var fails = __webpack_require__(/*! ../internals/fails */ 43);
var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 75);
var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 195);
var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 198);
var redefine = __webpack_require__(/*! ../internals/redefine */ 108);

// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829
var NON_GENERIC = !!NativePromise && fails(function () {
  NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });
});

// `Promise.prototype.finally` method
// https://tc39.es/ecma262/#sec-promise.prototype.finally
$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {
  'finally': function (onFinally) {
    var C = speciesConstructor(this, getBuiltIn('Promise'));
    var isFunction = typeof onFinally == 'function';
    return this.then(
      isFunction ? function (x) {
        return promiseResolve(C, onFinally()).then(function () { return x; });
      } : onFinally,
      isFunction ? function (e) {
        return promiseResolve(C, onFinally()).then(function () { throw e; });
      } : onFinally
    );
  }
});

// patch native Promise.prototype for native async functions
if (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {
  redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);
}


/***/ }),
/* 278 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.string.iterator.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var charAt = __webpack_require__(/*! ../internals/string-multibyte */ 279).charAt;
var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 147);
var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ 199);

var STRING_ITERATOR = 'String Iterator';
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);

// `String.prototype[@@iterator]` method
// https://tc39.es/ecma262/#sec-string.prototype-@@iterator
defineIterator(String, 'String', function (iterated) {
  setInternalState(this, {
    type: STRING_ITERATOR,
    string: String(iterated),
    index: 0
  });
// `%StringIteratorPrototype%.next` method
// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next
}, function next() {
  var state = getInternalState(this);
  var string = state.string;
  var index = state.index;
  var point;
  if (index >= string.length) return { value: undefined, done: true };
  point = charAt(string, index);
  state.index += point.length;
  return { value: point, done: false };
});


/***/ }),
/* 279 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/string-multibyte.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(/*! ../internals/to-integer */ 142);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 115);

// `String.prototype.{ codePointAt, at }` methods implementation
var createMethod = function (CONVERT_TO_STRING) {
  return function ($this, pos) {
    var S = String(requireObjectCoercible($this));
    var position = toInteger(pos);
    var size = S.length;
    var first, second;
    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
    first = S.charCodeAt(position);
    return first < 0xD800 || first > 0xDBFF || position + 1 === size
      || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF
        ? CONVERT_TO_STRING ? S.charAt(position) : first
        : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
  };
};

module.exports = {
  // `String.prototype.codePointAt` method
  // https://tc39.es/ecma262/#sec-string.prototype.codepointat
  codeAt: createMethod(false),
  // `String.prototype.at` method
  // https://github.com/mathiasbynens/String.prototype.at
  charAt: createMethod(true)
};


/***/ }),
/* 280 */
/*!****************************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/create-iterator-constructor.js ***!
  \****************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ 200).IteratorPrototype;
var create = __webpack_require__(/*! ../internals/object-create */ 160);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90);
var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 145);
var Iterators = __webpack_require__(/*! ../internals/iterators */ 76);

var returnThis = function () { return this; };

module.exports = function (IteratorConstructor, NAME, next) {
  var TO_STRING_TAG = NAME + ' Iterator';
  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });
  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
  Iterators[TO_STRING_TAG] = returnThis;
  return IteratorConstructor;
};


/***/ }),
/* 281 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/dom-iterables.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// iterable DOM collections
// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
module.exports = {
  CSSRuleList: 0,
  CSSStyleDeclaration: 0,
  CSSValueList: 0,
  ClientRectList: 0,
  DOMRectList: 0,
  DOMStringList: 0,
  DOMTokenList: 1,
  DataTransferItemList: 0,
  FileList: 0,
  HTMLAllCollection: 0,
  HTMLCollection: 0,
  HTMLFormElement: 0,
  HTMLSelectElement: 0,
  MediaList: 0,
  MimeTypeArray: 0,
  NamedNodeMap: 0,
  NodeList: 1,
  PaintRequestList: 0,
  Plugin: 0,
  PluginArray: 0,
  SVGLengthList: 0,
  SVGNumberList: 0,
  SVGPathSegList: 0,
  SVGPointList: 0,
  SVGStringList: 0,
  SVGTransformList: 0,
  SourceBufferList: 0,
  StyleSheetList: 0,
  TextTrackCueList: 0,
  TextTrackList: 0,
  TouchList: 0
};


/***/ }),
/* 282 */
/*!************************************************************!*\
  !*** ./node_modules/core-js/internals/get-substitution.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var toObject = __webpack_require__(/*! ../internals/to-object */ 89);

var floor = Math.floor;
var replace = ''.replace;
var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g;
var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g;

// https://tc39.es/ecma262/#sec-getsubstitution
module.exports = function (matched, str, position, captures, namedCaptures, replacement) {
  var tailPos = position + matched.length;
  var m = captures.length;
  var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
  if (namedCaptures !== undefined) {
    namedCaptures = toObject(namedCaptures);
    symbols = SUBSTITUTION_SYMBOLS;
  }
  return replace.call(replacement, symbols, function (match, ch) {
    var capture;
    switch (ch.charAt(0)) {
      case '$': return '$';
      case '&': return matched;
      case '`': return str.slice(0, position);
      case "'": return str.slice(tailPos);
      case '<':
        capture = namedCaptures[ch.slice(1, -1)];
        break;
      default: // \d\d?
        var n = +ch;
        if (n === 0) return match;
        if (n > m) {
          var f = floor(n / 10);
          if (f === 0) return match;
          if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);
          return match;
        }
        capture = captures[n - 1];
    }
    return capture === undefined ? '' : capture;
  });
};


/***/ }),
/* 283 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/set-interval.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../modules/web.timers */ 185);
var path = __webpack_require__(/*! ../internals/path */ 51);

module.exports = path.setInterval;


/***/ }),
/* 284 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js/internals/array-method-is-strict.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__(/*! ../internals/fails */ 37);

module.exports = function (METHOD_NAME, argument) {
  var method = [][METHOD_NAME];
  return !!method && fails(function () {
    // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing
    method.call(null, argument || function () { throw 1; }, 1);
  });
};


/***/ }),
/* 285 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/whitespaces.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// a string of all valid unicode whitespaces
// eslint-disable-next-line max-len
module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';


/***/ }),
/* 286 */
/*!*********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-species-create.js ***!
  \*********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 50);
var isArray = __webpack_require__(/*! ../internals/is-array */ 173);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);

var SPECIES = wellKnownSymbol('species');

// `ArraySpeciesCreate` abstract operation
// https://tc39.es/ecma262/#sec-arrayspeciescreate
module.exports = function (originalArray, length) {
  var C;
  if (isArray(originalArray)) {
    C = originalArray.constructor;
    // cross-realm fallback
    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
    else if (isObject(C)) {
      C = C[SPECIES];
      if (C === null) C = undefined;
    }
  } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);
};


/***/ }),
/* 287 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/create-property.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 158);
var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 81);
var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 90);

module.exports = function (object, key, value) {
  var propertyKey = toPrimitive(key);
  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));
  else object[propertyKey] = value;
};


/***/ }),
/* 288 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/reduce.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var reduce = __webpack_require__(/*! ../array/virtual/reduce */ 345);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.reduce;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.reduce) ? reduce : own;
};


/***/ }),
/* 289 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-method-is-strict.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__(/*! ../internals/fails */ 43);

module.exports = function (METHOD_NAME, argument) {
  var method = [][METHOD_NAME];
  return !!method && fails(function () {
    // eslint-disable-next-line no-useless-call,no-throw-literal
    method.call(null, argument || function () { throw 1; }, 1);
  });
};


/***/ }),
/* 290 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js/internals/array-iteration.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var bind = __webpack_require__(/*! ../internals/function-bind-context */ 214);
var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 128);
var toObject = __webpack_require__(/*! ../internals/to-object */ 89);
var toLength = __webpack_require__(/*! ../internals/to-length */ 84);
var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 352);

var push = [].push;

// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation
var createMethod = function (TYPE) {
  var IS_MAP = TYPE == 1;
  var IS_FILTER = TYPE == 2;
  var IS_SOME = TYPE == 3;
  var IS_EVERY = TYPE == 4;
  var IS_FIND_INDEX = TYPE == 6;
  var IS_FILTER_OUT = TYPE == 7;
  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
  return function ($this, callbackfn, that, specificCreate) {
    var O = toObject($this);
    var self = IndexedObject(O);
    var boundFunction = bind(callbackfn, that, 3);
    var length = toLength(self.length);
    var index = 0;
    var create = specificCreate || arraySpeciesCreate;
    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;
    var value, result;
    for (;length > index; index++) if (NO_HOLES || index in self) {
      value = self[index];
      result = boundFunction(value, index, O);
      if (TYPE) {
        if (IS_MAP) target[index] = result; // map
        else if (result) switch (TYPE) {
          case 3: return true;              // some
          case 5: return value;             // find
          case 6: return index;             // findIndex
          case 2: push.call(target, value); // filter
        } else switch (TYPE) {
          case 4: return false;             // every
          case 7: push.call(target, value); // filterOut
        }
      }
    }
    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
  };
};

module.exports = {
  // `Array.prototype.forEach` method
  // https://tc39.es/ecma262/#sec-array.prototype.foreach
  forEach: createMethod(0),
  // `Array.prototype.map` method
  // https://tc39.es/ecma262/#sec-array.prototype.map
  map: createMethod(1),
  // `Array.prototype.filter` method
  // https://tc39.es/ecma262/#sec-array.prototype.filter
  filter: createMethod(2),
  // `Array.prototype.some` method
  // https://tc39.es/ecma262/#sec-array.prototype.some
  some: createMethod(3),
  // `Array.prototype.every` method
  // https://tc39.es/ecma262/#sec-array.prototype.every
  every: createMethod(4),
  // `Array.prototype.find` method
  // https://tc39.es/ecma262/#sec-array.prototype.find
  find: createMethod(5),
  // `Array.prototype.findIndex` method
  // https://tc39.es/ecma262/#sec-array.prototype.findIndex
  findIndex: createMethod(6),
  // `Array.prototype.filterOut` method
  // https://github.com/tc39/proposal-array-filtering
  filterOut: createMethod(7)
};


/***/ }),
/* 291 */
/*!*************************************!*\
  !*** ./dev/View/Popup/Languages.js ***!
  \*************************************/
/*! exports provided: LanguagesPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LanguagesPopupView", function() { return LanguagesPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return LanguagesPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;




 // import {view, ViewType} from 'Knoin/Knoin';



var LanguagesPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["popup"])({
  name: 'View/Popup/Languages',
  templateID: 'PopupsLanguages'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(LanguagesPopupView, _AbstractViewNext);

  function LanguagesPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.fLang = null;
    _this.userLanguage = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    _this.langs = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observableArray([]);
    _this.languages = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      var userLanguage = _this.userLanguage();

      return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, _this.langs(), function (language) {
        return {
          key: language,
          user: language === userLanguage,
          selected: ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false),
          fullName: Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["convertLangName"])(language)
        };
      });
    });

    _this.langs.subscribe(function () {
      _this.setLanguageSelection();
    });

    return _this;
  }

  var _proto = LanguagesPopupView.prototype;

  _proto.languageTooltipName = function languageTooltipName(language) {
    return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["convertLangName"])(language, true);
  };

  _proto.setLanguageSelection = function setLanguageSelection() {
    var currentLang = this.fLang ? ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].unwrap(this.fLang) : '';

    ___WEBPACK_IMPORTED_MODULE_2___default.a.each(this.languages(), function (item) {
      item.selected(item.key === currentLang);
    });
  };

  _proto.onBeforeShow = function onBeforeShow() {
    this.fLang = null;
    this.userLanguage('');
    this.langs([]);
  };

  _proto.onShow = function onShow(fLanguage, langs, userLanguage) {
    this.fLang = fLanguage;
    this.userLanguage(userLanguage || '');
    this.langs(langs);
  };

  _proto.changeLanguage = function changeLanguage(lang) {
    if (this.fLang) {
      this.fLang(lang);
    }

    this.cancelCommand();
  };

  return LanguagesPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_6__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 292 */
/*!**************************!*\
  !*** ./dev/bootstrap.js ***!
  \**************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Plugins */ 36);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Model/Email */ 82);








/* harmony default export */ __webpack_exports__["a"] = (function (App) {
  Common_Globals__WEBPACK_IMPORTED_MODULE_3__["data"].__APP__ = App;
  Common_Globals__WEBPACK_IMPORTED_MODULE_3__["$win"].on('keydown', Common_Utils__WEBPACK_IMPORTED_MODULE_2__["killCtrlACtrlS"]).on('unload', function () {
    Common_Globals__WEBPACK_IMPORTED_MODULE_3__["data"].bUnload = true;
  });
  Common_Globals__WEBPACK_IMPORTED_MODULE_3__["$html"].addClass(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["bMobileDevice"] ? 'mobile' : 'no-mobile').on('click.dropdown.data-api', Common_Utils__WEBPACK_IMPORTED_MODULE_2__["detectDropdownVisibility"]);
  var rl = window__WEBPACK_IMPORTED_MODULE_1___default.a.rl || {};
  rl.i18n = Common_Translator__WEBPACK_IMPORTED_MODULE_6__["i18n"];
  rl.createCommand = Common_Utils__WEBPACK_IMPORTED_MODULE_2__["createCommandLegacy"];
  rl.addSettingsViewModel = Common_Plugins__WEBPACK_IMPORTED_MODULE_5__[/* addSettingsViewModel */ "b"];
  rl.addSettingsViewModelForAdmin = Common_Plugins__WEBPACK_IMPORTED_MODULE_5__[/* addSettingsViewModelForAdmin */ "c"];
  rl.addHook = Common_Plugins__WEBPACK_IMPORTED_MODULE_5__[/* addHook */ "a"];
  rl.settingsGet = Common_Plugins__WEBPACK_IMPORTED_MODULE_5__[/* mainSettingsGet */ "d"];
  rl.pluginSettingsGet = Common_Plugins__WEBPACK_IMPORTED_MODULE_5__[/* settingsGet */ "h"];
  rl.pluginRemoteRequest = Common_Plugins__WEBPACK_IMPORTED_MODULE_5__[/* remoteRequest */ "e"];
  rl.EmailModel = Model_Email__WEBPACK_IMPORTED_MODULE_7__["EmailModel"];
  rl.Enums = Common_Enums__WEBPACK_IMPORTED_MODULE_4__;
  window__WEBPACK_IMPORTED_MODULE_1___default.a.rl = rl;

  var start = function start() {
    _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0___default()(function () {
      Common_Globals__WEBPACK_IMPORTED_MODULE_3__["$html"].removeClass('no-js rl-booted-trigger').addClass('rl-booted');
      App.bootstart();
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time10ms);
  };

  window__WEBPACK_IMPORTED_MODULE_1___default.a.__APP_BOOT = function (fErrorCallback) {
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["domReady"])(function () {
      _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0___default()(function () {
        if (window__WEBPACK_IMPORTED_MODULE_1___default.a.document.getElementById('rainloop-templates-id')) {
          start();
        } else if (window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES && window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES[0]) {
          window__WEBPACK_IMPORTED_MODULE_1___default.a.document.getElementById('rl-templates').innerHTML = window__WEBPACK_IMPORTED_MODULE_1___default.a.rainloopTEMPLATES[0];
          start();
        } else {
          fErrorCallback();
        }

        window__WEBPACK_IMPORTED_MODULE_1___default.a.__APP_BOOT = null;
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time10ms);
    });
  };
});

/***/ }),
/* 293 */
/*!**********************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/object/create.js ***!
  \**********************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/object/create */ 362);

/***/ }),
/* 294 */
/*!***************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/setPrototypeOf.js ***!
  \***************************************************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _setPrototypeOf; });
/* harmony import */ var _babel_runtime_corejs3_core_js_object_set_prototype_of__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/object/set-prototype-of */ 295);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_set_prototype_of__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_object_set_prototype_of__WEBPACK_IMPORTED_MODULE_0__);

function _setPrototypeOf(o, p) {
  _setPrototypeOf = _babel_runtime_corejs3_core_js_object_set_prototype_of__WEBPACK_IMPORTED_MODULE_0___default.a || function _setPrototypeOf(o, p) {
    o.__proto__ = p;
    return o;
  };

  return _setPrototypeOf(o, p);
}

/***/ }),
/* 295 */
/*!********************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/object/set-prototype-of.js ***!
  \********************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/object/set-prototype-of */ 365);

/***/ }),
/* 296 */
/*!***********************************!*\
  !*** ./dev/Stores/AbstractApp.js ***!
  \***********************************/
/*! exports provided: AbstractAppStore, default */
/*! exports used: AbstractAppStore */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractAppStore; });
/* unused harmony export default */
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Storage/Settings */ 5);




var AbstractAppStore = /*#__PURE__*/function () {
  function AbstractAppStore() {
    this.allowLanguagesOnSettings = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
    this.allowLanguagesOnLogin = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
    this.newMoveToFolder = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
    this.interfaceAnimation = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(true);
    this.interfaceAnimation.subscribe(function (value) {
      var anim = Common_Globals__WEBPACK_IMPORTED_MODULE_1__["bMobileDevice"] || !value;
      Common_Globals__WEBPACK_IMPORTED_MODULE_1__["$html"].toggleClass('rl-anim', !anim).toggleClass('no-rl-anim', anim);
    });
    this.interfaceAnimation.valueHasMutated();
  }

  var _proto = AbstractAppStore.prototype;

  _proto.populate = function populate() {
    this.allowLanguagesOnLogin(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('AllowLanguagesOnLogin'));
    this.allowLanguagesOnSettings(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('AllowLanguagesOnSettings'));
    this.newMoveToFolder(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('NewMoveToFolder'));
    this.interfaceAnimation(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_2__["settingsGet"]('InterfaceAnimation'));
  };

  return AbstractAppStore;
}();



/***/ }),
/* 297 */
/*!**************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js ***!
  \**************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/instance/for-each */ 368);

/***/ }),
/* 298 */
/*!********************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js ***!
  \********************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/object/keys */ 374);

/***/ }),
/* 299 */
/*!************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/reduce.js ***!
  \************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/instance/reduce */ 377);

/***/ }),
/* 300 */
/*!*************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/reverse.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/instance/reverse */ 378);

/***/ }),
/* 301 */
/*!***********************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/instance/slice.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/instance/slice */ 382);

/***/ }),
/* 302 */
/*!*******************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js ***!
  \*******************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/features/object/define-property */ 386);

/***/ }),
/* 303 */
/*!************************************!*\
  !*** ./dev/Remote/AbstractAjax.js ***!
  \************************************/
/*! exports provided: AbstractAjaxRemote, default */
/*! exports used: AbstractAjaxRemote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractAjaxRemote; });
/* unused harmony export default */
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Plugins */ 36);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Storage/Settings */ 5);











var AbstractAjaxRemote = /*#__PURE__*/function () {
  function AbstractAjaxRemote() {
    this.oRequests = {};
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sRequestAction
   * @param {string} sType
   * @param {?AjaxJsonDefaultResponse} oData
   * @param {boolean} bCached
   * @param {*=} oRequestParameters
   */


  var _proto = AbstractAjaxRemote.prototype;

  _proto.defaultResponse = function defaultResponse(fCallback, sRequestAction, sType, oData, bCached, oRequestParameters) {
    var fCall = function fCall() {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success !== sType && Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].bUnload) {
        sType = Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Unload;
      }

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === sType && oData && !oData.Result) {
        if (oData && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["inArray"])(oData.ErrorCode, [Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].AuthError, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].AccessError, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].ConnectionError, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].DomainNotAllowed, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].AccountNotAllowed, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].MailServerError, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].UnknownNotification, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].UnknownError])) {
          Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].iAjaxErrorCount += 1;
        }

        if (oData && Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].InvalidToken === oData.ErrorCode) {
          Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].iTokenErrorCount += 1;
        }

        if (Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* TOKEN_ERROR_LIMIT */ "q"] < Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].iTokenErrorCount) {
          if (Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__ && Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.loginAndLogoutReload) {
            Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.loginAndLogoutReload(false, true);
          }
        }

        if (oData.ClearAuth || oData.Logout || Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* AJAX_ERROR_LIMIT */ "a"] < Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].iAjaxErrorCount) {
          if (Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__ && Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.clearClientSideToken) {
            Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.clearClientSideToken();

            if (!oData.ClearAuth && Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.loginAndLogoutReload) {
              Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.loginAndLogoutReload(false, true);
            }
          }
        }
      } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === sType && oData && oData.Result) {
        Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].iAjaxErrorCount = 0;
        Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].iTokenErrorCount = 0;
      }

      Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_8__[/* runHook */ "f"])('ajax-default-response', [sRequestAction, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === sType ? oData : null, sType, bCached, oRequestParameters]);

      if (fCallback) {
        fCallback(sType, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === sType ? oData : null, bCached, sRequestAction, oRequestParameters);
      }
    };

    switch (sType) {
      case 'success':
        sType = Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success;
        break;

      case 'abort':
        sType = Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Abort;
        break;

      default:
        sType = Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Error;
        break;
    }

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Error === sType) {
      ___WEBPACK_IMPORTED_MODULE_1___default.a.delay(fCall, 300);
    } else {
      fCall();
    }
  }
  /**
   * @param {?Function} fResultCallback
   * @param {Object} oParameters
   * @param {?number=} iTimeOut = 20000
   * @param {string=} sGetAdd = ''
   * @param {Array=} aAbortActions = []
   * @returns {jQuery.jqXHR}
   */
  ;

  _proto.ajaxRequest = function ajaxRequest(fResultCallback, params, iTimeOut, sGetAdd, abortActions) {
    var _this = this;

    if (iTimeOut === void 0) {
      iTimeOut = 20000;
    }

    if (sGetAdd === void 0) {
      sGetAdd = '';
    }

    if (abortActions === void 0) {
      abortActions = [];
    }

    var isPost = '' === sGetAdd,
        headers = {},
        start = new window__WEBPACK_IMPORTED_MODULE_0___default.a.Date().getTime();
    var action = '';
    params = params || {};
    action = params.Action || '';

    if (action && 0 < abortActions.length) {
      ___WEBPACK_IMPORTED_MODULE_1___default.a.each(abortActions, function (actionToAbort) {
        if (_this.oRequests[actionToAbort]) {
          _this.oRequests[actionToAbort].__aborted = true;

          if (_this.oRequests[actionToAbort].abort) {
            _this.oRequests[actionToAbort].abort();
          }

          _this.oRequests[actionToAbort] = null;
        }
      });
    }

    if (isPost) {
      params.XToken = Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["appSettingsGet"]('token');
    }

    var oDefAjax = $__WEBPACK_IMPORTED_MODULE_2___default.a.ajax({
      type: isPost ? 'POST' : 'GET',
      url: Object(Common_Links__WEBPACK_IMPORTED_MODULE_7__[/* ajax */ "a"])(sGetAdd),
      async: true,
      dataType: 'json',
      data: isPost ? params : {},
      headers: headers,
      timeout: iTimeOut,
      global: true
    });
    oDefAjax.always(function (oData, sType) {
      var cached = false;

      if (oData && oData.Time) {
        cached = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pInt"])(oData.Time) > new window__WEBPACK_IMPORTED_MODULE_0___default.a.Date().getTime() - start;
      }

      if (oData && oData.UpdateToken) {
        if (Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__ && Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.setClientSideToken) {
          Common_Globals__WEBPACK_IMPORTED_MODULE_6__["data"].__APP__.setClientSideToken(oData.UpdateToken);
        }
      }

      if (action && _this.oRequests[action]) {
        if (_this.oRequests[action].__aborted) {
          sType = 'abort';
        }

        _this.oRequests[action] = null;
      }

      _this.defaultResponse(fResultCallback, action, sType, oData, cached, params);
    });

    if (action && 0 < abortActions.length && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["inArray"])(action, abortActions)) {
      if (this.oRequests[action]) {
        this.oRequests[action].__aborted = true;

        if (this.oRequests[action].abort) {
          this.oRequests[action].abort();
        }

        this.oRequests[action] = null;
      }

      this.oRequests[action] = oDefAjax;
    } // eslint-disable-next-line no-console


    oDefAjax.catch(console.log);
    return oDefAjax;
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sAction
   * @param {Object=} oParameters
   * @param {?number=} iTimeout
   * @param {string=} sGetAdd = ''
   * @param {Array=} aAbortActions = []
   */
  ;

  _proto.defaultRequest = function defaultRequest(fCallback, sAction, oParameters, iTimeout, sGetAdd, aAbortActions) {
    oParameters = oParameters || {};
    oParameters.Action = sAction;
    sGetAdd = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pString"])(sGetAdd);
    Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_8__[/* runHook */ "f"])('ajax-default-request', [sAction, oParameters, sGetAdd]);
    return this.ajaxRequest(fCallback, oParameters, Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["isUnd"])(iTimeout) ? Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* DEFAULT_AJAX_TIMEOUT */ "g"] : Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pInt"])(iTimeout), sGetAdd, aAbortActions);
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.noop = function noop(fCallback) {
    this.defaultRequest(fCallback, 'Noop');
  }
  /**
   * @param {?Function} fCallback
   */
  ;

  _proto.getPublicKey = function getPublicKey(fCallback) {
    this.defaultRequest(fCallback, 'GetPublicKey');
  }
  /**
   * @param {?Function} fCallback
   * @param {string} sVersion
   */
  ;

  _proto.jsVersion = function jsVersion(fCallback, sVersion) {
    this.defaultRequest(fCallback, 'Version', {
      'Version': sVersion
    });
  };

  return AbstractAjaxRemote;
}();



/***/ }),
/* 304 */
/*!****************************************!*\
  !*** ./dev/Screen/AbstractSettings.js ***!
  \****************************************/
/*! exports provided: AbstractSettingsScreen, default */
/*! exports used: AbstractSettingsScreen */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractSettingsScreen; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/AbstractScreen */ 152);











var AbstractSettingsScreen = /*#__PURE__*/function (_AbstractScreen) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AbstractSettingsScreen, _AbstractScreen);

  /**
   * @param {Array} viewModels
   */
  function AbstractSettingsScreen(viewModels) {
    var _this;

    _this = _AbstractScreen.call(this, 'settings', viewModels) || this;
    _this.menu = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observableArray([]);
    _this.oCurrentSubScreen = null;
    _this.oViewModelPlace = null;

    _this.setupSettings();

    return _this;
  }
  /**
   * @param {Function=} fCallback
   */


  var _proto = AbstractSettingsScreen.prototype;

  _proto.setupSettings = function setupSettings(fCallback) {
    if (fCallback === void 0) {
      fCallback = null;
    }

    if (fCallback) {
      fCallback();
    }
  };

  _proto.onRoute = function onRoute(subName) {
    var _this2 = this;

    var settingsScreen = null,
        RoutedSettingsViewModel = null,
        viewModelPlace = null,
        viewModelDom = null;
    RoutedSettingsViewModel = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"].settings, function (SettingsViewModel) {
      return SettingsViewModel && SettingsViewModel.__rlSettingsData && subName === SettingsViewModel.__rlSettingsData.Route;
    });

    if (RoutedSettingsViewModel) {
      if (_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"]['settings-removed'], function (DisabledSettingsViewModel) {
        return DisabledSettingsViewModel && DisabledSettingsViewModel === RoutedSettingsViewModel;
      })) {
        RoutedSettingsViewModel = null;
      }

      if (RoutedSettingsViewModel && _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"]['settings-disabled'], function (DisabledSettingsViewModel) {
        return DisabledSettingsViewModel && DisabledSettingsViewModel === RoutedSettingsViewModel;
      })) {
        RoutedSettingsViewModel = null;
      }
    }

    if (RoutedSettingsViewModel) {
      if (RoutedSettingsViewModel.__builded && RoutedSettingsViewModel.__vm) {
        settingsScreen = RoutedSettingsViewModel.__vm;
      } else {
        viewModelPlace = this.oViewModelPlace;

        if (viewModelPlace && 1 === viewModelPlace.length) {
          settingsScreen = new RoutedSettingsViewModel();
          viewModelDom = $__WEBPACK_IMPORTED_MODULE_3___default()('<div></div>').addClass('rl-settings-view-model').hide();
          viewModelDom.appendTo(viewModelPlace);
          settingsScreen.viewModelDom = viewModelDom;
          settingsScreen.__rlSettingsData = RoutedSettingsViewModel.__rlSettingsData;
          RoutedSettingsViewModel.__dom = viewModelDom;
          RoutedSettingsViewModel.__builded = true;
          RoutedSettingsViewModel.__vm = settingsScreen;
          var tmpl = {
            name: RoutedSettingsViewModel.__rlSettingsData.Template
          };
          ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].applyBindingAccessorsToNode(viewModelDom[0], {
            translatorInit: true,
            template: function template() {
              return tmpl;
            }
          }, settingsScreen);
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(settingsScreen, 'onBuild', [viewModelDom]);
        } else {
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["log"])('Cannot find sub settings view model position: SettingsSubScreen');
        }
      }

      if (settingsScreen) {
        ___WEBPACK_IMPORTED_MODULE_2___default.a.defer(function () {
          // hide
          if (_this2.oCurrentSubScreen) {
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(_this2.oCurrentSubScreen, 'onHide');

            _this2.oCurrentSubScreen.viewModelDom.hide();
          } // --


          _this2.oCurrentSubScreen = settingsScreen; // show

          if (_this2.oCurrentSubScreen) {
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(_this2.oCurrentSubScreen, 'onBeforeShow');

            _this2.oCurrentSubScreen.viewModelDom.show();

            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(_this2.oCurrentSubScreen, 'onShow');
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(_this2.oCurrentSubScreen, 'onShowWithDelay', [], 200);

            ___WEBPACK_IMPORTED_MODULE_2___default.a.each(_this2.menu(), function (item) {
              item.selected(settingsScreen && settingsScreen.__rlSettingsData && item.route === settingsScreen.__rlSettingsData.Route);
            });

            $__WEBPACK_IMPORTED_MODULE_3___default()('#rl-content .b-settings .b-content .content').scrollTop(0);
          } // --


          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["windowResize"])();
        });
      }
    } else {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_7__[/* settings */ "z"])(), false, true);
    }
  };

  _proto.onHide = function onHide() {
    if (this.oCurrentSubScreen && this.oCurrentSubScreen.viewModelDom) {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(this.oCurrentSubScreen, 'onHide');
      this.oCurrentSubScreen.viewModelDom.hide();
    }
  };

  _proto.onBuild = function onBuild() {
    var _this3 = this;

    ___WEBPACK_IMPORTED_MODULE_2___default.a.each(Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"].settings, function (SettingsViewModel) {
      if (SettingsViewModel && SettingsViewModel.__rlSettingsData && !_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"]['settings-removed'], function (RemoveSettingsViewModel) {
        return RemoveSettingsViewModel && RemoveSettingsViewModel === SettingsViewModel;
      })) {
        _this3.menu.push({
          route: SettingsViewModel.__rlSettingsData.Route,
          label: SettingsViewModel.__rlSettingsData.Label,
          selected: ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false),
          disabled: !!_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"]['settings-disabled'], function (DisabledSettingsViewModel) {
            return DisabledSettingsViewModel && DisabledSettingsViewModel === SettingsViewModel;
          })
        });
      }
    });

    this.oViewModelPlace = $__WEBPACK_IMPORTED_MODULE_3___default()('#rl-content #rl-settings-subscreen');
  };

  _proto.routes = function routes() {
    var DefaultViewModel = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, Common_Globals__WEBPACK_IMPORTED_MODULE_5__["VIEW_MODELS"].settings, function (SettingsViewModel) {
      return SettingsViewModel && SettingsViewModel.__rlSettingsData && SettingsViewModel.__rlSettingsData.IsDefault;
    }),
        defaultRoute = DefaultViewModel && DefaultViewModel.__rlSettingsData ? DefaultViewModel.__rlSettingsData.Route : 'general',
        rules = {
      subname: /^(.*)$/,
      normalize_: function normalize_(rquest, vals) {
        vals.subname = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["isUnd"])(vals.subname) ? defaultRoute : Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["pString"])(vals.subname);
        return [vals.subname];
      }
    };

    return [['{subname}/', rules], ['{subname}', rules], ['', rules]];
  };

  return AbstractSettingsScreen;
}(Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_9__[/* AbstractScreen */ "a"]);



/***/ }),
/* 305 */
/*!*****************************!*\
  !*** ./dev/App/Abstract.js ***!
  \*****************************/
/*! exports provided: AbstractApp, default */
/*! exports used: AbstractApp */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractApp; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ssm__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ssm */ 154);
/* harmony import */ var ssm__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(ssm__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Events */ 23);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/Language */ 72);
/* harmony import */ var Stores_Theme__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/Theme */ 123);
/* harmony import */ var Stores_Social__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Stores/Social */ 26);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractBoot__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Knoin/AbstractBoot */ 306);




















var AbstractApp = /*#__PURE__*/function (_AbstractBoot) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AbstractApp, _AbstractBoot);

  /**
   * @param {RemoteStorage|AdminRemoteStorage} Remote
   */
  function AbstractApp() {
    var _this;

    _this = _AbstractBoot.call(this) || this;
    _this.googlePreviewSupportedCache = null;
    _this.isLocalAutocomplete = true;
    _this.iframe = null;
    _this.lastErrorTime = 0;
    _this.iframe = $__WEBPACK_IMPORTED_MODULE_2___default()('<iframe class="internal-hiddden" />').appendTo('body');
    Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].on('resize', function () {
      Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('window.resize');
    });
    Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* sub */ "b"]('window.resize', ___WEBPACK_IMPORTED_MODULE_3___default.a.throttle(function () {
      var iH = Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].height(),
          iW = Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].height();

      if (Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].__sizes[0] !== iH || Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].__sizes[1] !== iW) {
        Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].__sizes[0] = iH;
        Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].__sizes[1] = iW;
        Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('window.resize.real');
      }
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time50ms)); // DEBUG
    //		Events.sub({
    //			'window.resize': function() {
    //				window.console.log('window.resize');
    //			},
    //			'window.resize.real': function() {
    //				window.console.log('window.resize.real');
    //			}
    //		});

    Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$doc"].on('keydown', function (event) {
      if (event && event.ctrlKey) {
        Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('rl-ctrl-key-pressed');
      }
    }).on('keyup', function (event) {
      if (event && !event.ctrlKey) {
        Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].removeClass('rl-ctrl-key-pressed');
      }
    });
    Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$doc"].on('mousemove keypress click', ___WEBPACK_IMPORTED_MODULE_3___default.a.debounce(function () {
      Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('rl.auto-logout-refresh');
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time5s));
    key__WEBPACK_IMPORTED_MODULE_5___default()('esc, enter', Common_Enums__WEBPACK_IMPORTED_MODULE_9__["KeyState"].All, function () {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["detectDropdownVisibility"])();
    });
    return _this;
  }

  var _proto = AbstractApp.prototype;

  _proto.remote = function remote() {
    return null;
  };

  _proto.data = function data() {
    return null;
  };

  _proto.getApplicationConfiguration = function getApplicationConfiguration(name, default_) {
    return this.applicationConfiguration[name] || default_;
  }
  /**
   * @param {string} link
   * @returns {boolean}
   */
  ;

  _proto.download = function download(link) {
    if (Common_Globals__WEBPACK_IMPORTED_MODULE_7__["sUserAgent"] && (-1 < Common_Globals__WEBPACK_IMPORTED_MODULE_7__["sUserAgent"].indexOf('chrome') || -1 < Common_Globals__WEBPACK_IMPORTED_MODULE_7__["sUserAgent"].indexOf('chrome'))) {
      var oLink = window__WEBPACK_IMPORTED_MODULE_1___default.a.document.createElement('a');
      oLink.href = link;

      if (window__WEBPACK_IMPORTED_MODULE_1___default.a.document && window__WEBPACK_IMPORTED_MODULE_1___default.a.document.createEvent) {
        var oE = window__WEBPACK_IMPORTED_MODULE_1___default.a.document.createEvent.MouseEvents;

        if (oE && oE.initEvent && oLink.dispatchEvent) {
          oE.initEvent('click', true, true);
          oLink.dispatchEvent(oE);
          return true;
        }
      }
    }

    if (Common_Globals__WEBPACK_IMPORTED_MODULE_7__["bMobileDevice"]) {
      window__WEBPACK_IMPORTED_MODULE_1___default.a.open(link, '_self');
      window__WEBPACK_IMPORTED_MODULE_1___default.a.focus();
    } else {
      this.iframe.attr('src', link); // window.document.location.href = link;
    }

    return true;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.googlePreviewSupported = function googlePreviewSupported() {
    if (null === this.googlePreviewSupportedCache) {
      this.googlePreviewSupportedCache = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["settingsGet"]('AllowGoogleSocial') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["settingsGet"]('AllowGoogleSocialPreview');
    }

    return this.googlePreviewSupportedCache;
  }
  /**
   * @param {string} title
   */
  ;

  _proto.setWindowTitle = function setWindowTitle(title) {
    title = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNormal"])(title) && 0 < title.length ? '' + title : '';

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["settingsGet"]('Title')) {
      title += (title ? ' - ' : '') + Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["settingsGet"]('Title');
    }

    window__WEBPACK_IMPORTED_MODULE_1___default.a.document.title = title + ' ...';
    window__WEBPACK_IMPORTED_MODULE_1___default.a.document.title = title;
  };

  _proto.redirectToAdminPanel = function redirectToAdminPanel() {
    ___WEBPACK_IMPORTED_MODULE_3___default.a.delay(function () {
      window__WEBPACK_IMPORTED_MODULE_1___default.a.location.href = Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* rootAdmin */ "x"])();
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time100ms);
  };

  _proto.clearClientSideToken = function clearClientSideToken() {
    if (window__WEBPACK_IMPORTED_MODULE_1___default.a.__rlah_clear) {
      window__WEBPACK_IMPORTED_MODULE_1___default.a.__rlah_clear();
    }
  }
  /**
   * @param {string} token
   */
  ;

  _proto.setClientSideToken = function setClientSideToken(token) {
    if (window__WEBPACK_IMPORTED_MODULE_1___default.a.__rlah_set) {
      window__WEBPACK_IMPORTED_MODULE_1___default.a.__rlah_set(token);

      Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["settingsSet"]('AuthAccountHash', token);
      Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* populateAuthSuffix */ "v"])();
    }
  }
  /**
   * @param {boolean=} admin = false
   * @param {boolean=} logout = false
   * @param {boolean=} close = false
   */
  ;

  _proto.loginAndLogoutReload = function loginAndLogoutReload(admin, logout, close) {
    if (admin === void 0) {
      admin = false;
    }

    if (logout === void 0) {
      logout = false;
    }

    if (close === void 0) {
      close = false;
    }

    var inIframe = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["appSettingsGet"]('inIframe');
    var customLogoutLink = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["pString"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["appSettingsGet"]('customLogoutLink'));

    if (logout) {
      this.clearClientSideToken();
    }

    if (logout && close && window__WEBPACK_IMPORTED_MODULE_1___default.a.close) {
      window__WEBPACK_IMPORTED_MODULE_1___default.a.close();
    }

    customLogoutLink = customLogoutLink || (admin ? Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* rootAdmin */ "x"])() : Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* rootUser */ "y"])());

    if (logout && window__WEBPACK_IMPORTED_MODULE_1___default.a.location.href !== customLogoutLink) {
      ___WEBPACK_IMPORTED_MODULE_3___default.a.delay(function () {
        if (inIframe && window__WEBPACK_IMPORTED_MODULE_1___default.a.parent) {
          window__WEBPACK_IMPORTED_MODULE_1___default.a.parent.location.href = customLogoutLink;
        } else {
          window__WEBPACK_IMPORTED_MODULE_1___default.a.location.href = customLogoutLink;
        }

        Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].trigger('rl.tooltips.diactivate');
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time100ms);
    } else {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["routeOff"])();
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* root */ "w"])(), true);
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_17__["routeOff"])();

      ___WEBPACK_IMPORTED_MODULE_3___default.a.delay(function () {
        if (inIframe && window__WEBPACK_IMPORTED_MODULE_1___default.a.parent) {
          window__WEBPACK_IMPORTED_MODULE_1___default.a.parent.location.reload();
        } else {
          window__WEBPACK_IMPORTED_MODULE_1___default.a.location.reload();
        }

        Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$win"].trigger('rl.tooltips.diactivate');
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time100ms);
    }
  };

  _proto.historyBack = function historyBack() {
    window__WEBPACK_IMPORTED_MODULE_1___default.a.history.back();
  };

  _proto.bootstart = function bootstart() {
    // log('Ps' + 'ss, hac' + 'kers! The' + 're\'s not' + 'hing inte' + 'resting :' + ')');
    Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('rl.bootstart');
    var mobile = Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["appSettingsGet"]('mobile');
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('SaveTrigger', __webpack_require__(/*! Component/SaveTrigger */ 394).default);
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('Input', __webpack_require__(/*! Component/Input */ 395).default);
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('Select', __webpack_require__(/*! Component/Select */ 396).default);
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('Radio', __webpack_require__(/*! Component/Radio */ 397).default);
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('TextArea', __webpack_require__(/*! Component/TextArea */ 398).default);
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('Date', __webpack_require__(/*! Component/Date */ 399).default);
    ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('x-script', __webpack_require__(/*! Component/Script */ 400).default); // ko.components.register('svg-icon', require('Component/SvgIcon').default);

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_13__["appSettingsGet"]('materialDesign') && Common_Globals__WEBPACK_IMPORTED_MODULE_7__["bAnimationSupported"]) {
      ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('Checkbox', __webpack_require__(/*! Component/MaterialDesign/Checkbox */ 401).default);
      ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('CheckboxSimple', __webpack_require__(/*! Component/Checkbox */ 225).default);
    } else {
      // ko.components.register('Checkbox', require('Component/Classic/Checkbox').default);
      // ko.components.register('CheckboxSimple', require('Component/Classic/Checkbox').default);
      ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('Checkbox', __webpack_require__(/*! Component/Checkbox */ 225).default);
      ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].components.register('CheckboxSimple', __webpack_require__(/*! Component/Checkbox */ 225).default);
    }

    Object(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["initOnStartOrLangChange"])(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["initNotificationLanguage"]);

    ___WEBPACK_IMPORTED_MODULE_3___default.a.delay(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["windowResizeCallback"], Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time1s);

    Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* sub */ "b"]('ssm.mobile-enter', function () {
      Object(Common_Globals__WEBPACK_IMPORTED_MODULE_7__["leftPanelDisabled"])(true);
    });
    Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* sub */ "b"]('ssm.mobile-leave', function () {
      Object(Common_Globals__WEBPACK_IMPORTED_MODULE_7__["leftPanelDisabled"])(false);
    });

    if (!mobile) {
      Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('rl-desktop');
      ssm__WEBPACK_IMPORTED_MODULE_6___default.a.addState({
        id: 'mobile',
        query: '(max-width: 767px)',
        onEnter: function onEnter() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('ssm-state-mobile');
          Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('ssm.mobile-enter');
        },
        onLeave: function onLeave() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].removeClass('ssm-state-mobile');
          Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('ssm.mobile-leave');
        }
      });
      ssm__WEBPACK_IMPORTED_MODULE_6___default.a.addState({
        id: 'tablet',
        query: '(min-width: 768px) and (max-width: 999px)',
        onEnter: function onEnter() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('ssm-state-tablet');
        },
        onLeave: function onLeave() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].removeClass('ssm-state-tablet');
        }
      });
      ssm__WEBPACK_IMPORTED_MODULE_6___default.a.addState({
        id: 'desktop',
        query: '(min-width: 1000px) and (max-width: 1400px)',
        onEnter: function onEnter() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('ssm-state-desktop');
        },
        onLeave: function onLeave() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].removeClass('ssm-state-desktop');
        }
      });
      ssm__WEBPACK_IMPORTED_MODULE_6___default.a.addState({
        id: 'desktop-large',
        query: '(min-width: 1401px)',
        onEnter: function onEnter() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('ssm-state-desktop-large');
        },
        onLeave: function onLeave() {
          Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].removeClass('ssm-state-desktop-large');
        }
      });
    } else {
      Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].addClass('ssm-state-mobile').addClass('rl-mobile');
      Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('ssm.mobile-enter');
    }

    Common_Globals__WEBPACK_IMPORTED_MODULE_7__["leftPanelDisabled"].subscribe(function (bValue) {
      Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].toggleClass('rl-left-panel-disabled', bValue);
      Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].toggleClass('rl-left-panel-enabled', !bValue);
    });
    Common_Globals__WEBPACK_IMPORTED_MODULE_7__["leftPanelType"].subscribe(function (sValue) {
      Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].toggleClass('rl-left-panel-none', 'none' === sValue);
      Common_Globals__WEBPACK_IMPORTED_MODULE_7__["$html"].toggleClass('rl-left-panel-short', 'short' === sValue);
    });
    Common_Globals__WEBPACK_IMPORTED_MODULE_7__["leftPanelDisabled"].valueHasMutated();
    Stores_Language__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].populate();
    Stores_Theme__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].populate();
    Stores_Social__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].populate();
  };

  return AbstractApp;
}(Knoin_AbstractBoot__WEBPACK_IMPORTED_MODULE_18__[/* AbstractBoot */ "a"]);



/***/ }),
/* 306 */
/*!***********************************!*\
  !*** ./dev/Knoin/AbstractBoot.js ***!
  \***********************************/
/*! exports provided: AbstractBoot */
/*! exports used: AbstractBoot */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractBoot; });
var AbstractBoot = /*#__PURE__*/function () {
  function AbstractBoot() {}

  var _proto = AbstractBoot.prototype;

  _proto.bootstart = function bootstart() {
    /* no-empty */
  };

  return AbstractBoot;
}();

/***/ }),
/* 307 */
/*!****************************************!*\
  !*** ./dev/Component/AbstractRadio.js ***!
  \****************************************/
/*! exports provided: AbstractRadio, default */
/*! exports used: AbstractRadio */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractRadio; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 122);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ 219);
/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ 85);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ 247);
/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Component/Abstract */ 32);












var AbstractRadio = /*#__PURE__*/function (_AbstractComponent) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(AbstractRadio, _AbstractComponent);

  /**
   * @param {Object} params
   */
  function AbstractRadio(params) {
    var _this;

    _this = _AbstractComponent.call(this) || this;
    _this.values = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observableArray([]);
    _this.value = params.value;

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(_this.value) || !_this.value.subscribe) {
      _this.value = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable('');
    }

    _this.inline = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(params.inline) ? false : params.inline;
    _this.readOnly = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(params.readOnly) ? false : !!params.readOnly;

    if (_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_2___default()(params)) {
      _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_2___default()(_this).call(_this, _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_2___default()(params), function (label, value) {
        return {
          label: label,
          value: value
        };
      }));
    }

    _this.click = ___WEBPACK_IMPORTED_MODULE_7___default.a.bind(_this.click, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    return _this;
  }

  var _proto = AbstractRadio.prototype;

  _proto.click = function click(value) {
    if (!this.readOnly && value) {
      this.value(value.value);
    }
  };

  return AbstractRadio;
}(Component_Abstract__WEBPACK_IMPORTED_MODULE_10__[/* AbstractComponent */ "a"]);



/***/ }),
/* 308 */
/*!*****************************************************************************!*\
  !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/keys.js ***!
  \*****************************************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! core-js-pure/stable/instance/keys */ 550);

/***/ }),
/* 309 */
/*!****************************************!*\
  !*** ./dev/Model/ComposeAttachment.js ***!
  \****************************************/
/*! exports provided: ComposeAttachmentModel, default */
/*! exports used: ComposeAttachmentModel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ComposeAttachmentModel; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Model_Attachment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Model/Attachment */ 207);
/* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Knoin/AbstractModel */ 67);






var ComposeAttachmentModel = /*#__PURE__*/function (_AbstractModel) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(ComposeAttachmentModel, _AbstractModel);

  /**
   * @param {string} id
   * @param {string} fileName
   * @param {?number=} size = null
   * @param {boolean=} isInline = false
   * @param {boolean=} isLinked = false
   * @param {string=} CID = ''
   * @param {string=} contentLocation = ''
   */
  function ComposeAttachmentModel(id, fileName, size, isInline, isLinked, CID, contentLocation) {
    var _this;

    if (size === void 0) {
      size = null;
    }

    if (isInline === void 0) {
      isInline = false;
    }

    if (isLinked === void 0) {
      isLinked = false;
    }

    if (CID === void 0) {
      CID = '';
    }

    if (contentLocation === void 0) {
      contentLocation = '';
    }

    _this = _AbstractModel.call(this, 'ComposeAttachmentModel') || this;
    _this.id = id;
    _this.isInline = !!isInline;
    _this.isLinked = !!isLinked;
    _this.CID = CID;
    _this.contentLocation = contentLocation;
    _this.fromMessage = false;
    _this.fileName = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(fileName);
    _this.size = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(size);
    _this.tempName = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    _this.progress = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(0);
    _this.error = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    _this.waiting = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(true);
    _this.uploading = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    _this.enabled = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(true);
    _this.complete = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    _this.progressText = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      var p = _this.progress();

      return 0 === p ? '' : '' + (98 < p ? 100 : p) + '%';
    });
    _this.progressStyle = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      var p = _this.progress();

      return 0 === p ? '' : 'width:' + (98 < p ? 100 : p) + '%';
    });
    _this.title = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      var error = _this.error();

      return '' !== error ? error : _this.fileName();
    });
    _this.friendlySize = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      var localSize = _this.size();

      return null === localSize ? '' : Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["friendlySize"])(localSize);
    });
    _this.mimeType = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["mimeContentType"])(_this.fileName());
    });
    _this.fileExt = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["getFileExtension"])(_this.fileName());
    });

    _this.regDisposables([_this.progressText, _this.progressStyle, _this.title, _this.friendlySize, _this.mimeType, _this.fileExt]);

    return _this;
  }
  /**
   * @param {AjaxJsonComposeAttachment} json
   * @returns {boolean}
   */


  var _proto = ComposeAttachmentModel.prototype;

  _proto.initByUploadJson = function initByUploadJson(json) {
    var bResult = false;

    if (json) {
      this.fileName(json.Name);
      this.size(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(json.Size) ? 0 : Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["pInt"])(json.Size));
      this.tempName(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(json.TempName) ? '' : json.TempName);
      this.isInline = false;
      bResult = true;
    }

    return bResult;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.iconClass = function iconClass() {
    return Object(Model_Attachment__WEBPACK_IMPORTED_MODULE_3__[/* staticIconClass */ "d"])(Object(Model_Attachment__WEBPACK_IMPORTED_MODULE_3__[/* staticFileType */ "c"])(this.fileExt(), this.mimeType()))[0];
  }
  /**
   * @returns {string}
   */
  ;

  _proto.iconText = function iconText() {
    return Object(Model_Attachment__WEBPACK_IMPORTED_MODULE_3__[/* staticIconClass */ "d"])(Object(Model_Attachment__WEBPACK_IMPORTED_MODULE_3__[/* staticFileType */ "c"])(this.fileExt(), this.mimeType()))[1];
  };

  return ComposeAttachmentModel;
}(Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_4__[/* AbstractModel */ "a"]);



/***/ }),
/* 310 */
/*!**************************************!*\
  !*** ./dev/Model/ContactProperty.js ***!
  \**************************************/
/*! exports provided: ContactPropertyModel, default */
/*! exports used: ContactPropertyModel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ContactPropertyModel; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Knoin/AbstractModel */ 67);







var ContactPropertyModel = /*#__PURE__*/function (_AbstractModel) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(ContactPropertyModel, _AbstractModel);

  /**
   * @param {number=} type = Enums.ContactPropertyType.Unknown
   * @param {string=} typeStr = ''
   * @param {string=} value = ''
   * @param {boolean=} focused = false
   * @param {string=} placeholder = ''
   */
  function ContactPropertyModel(type, typeStr, value, focused, placeholder) {
    var _this;

    if (type === void 0) {
      type = Common_Enums__WEBPACK_IMPORTED_MODULE_2__["ContactPropertyType"].Unknown;
    }

    if (typeStr === void 0) {
      typeStr = '';
    }

    if (value === void 0) {
      value = '';
    }

    if (focused === void 0) {
      focused = false;
    }

    if (placeholder === void 0) {
      placeholder = '';
    }

    _this = _AbstractModel.call(this, 'ContactPropertyModel') || this;
    _this.type = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pInt"])(type));
    _this.typeStr = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pString"])(typeStr));
    _this.focused = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(!!focused);
    _this.value = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pString"])(value));
    _this.placeholder = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(placeholder);
    _this.placeholderValue = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      var v = _this.placeholder();

      return v ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])(v) : '';
    });
    _this.largeValue = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return Common_Enums__WEBPACK_IMPORTED_MODULE_2__["ContactPropertyType"].Note === _this.type();
    });

    _this.regDisposables([_this.placeholderValue, _this.largeValue]);

    return _this;
  }

  return ContactPropertyModel;
}(Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_5__[/* AbstractModel */ "a"]);



/***/ }),
/* 311 */,
/* 312 */,
/* 313 */,
/* 314 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js/modules/es.array.filter.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 65);
var $filter = __webpack_require__(/*! ../internals/array-iteration */ 290).filter;
var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 354);

var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');

// `Array.prototype.filter` method
// https://tc39.es/ecma262/#sec-array.prototype.filter
// with adding support of @@species
$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
  filter: function filter(callbackfn /* , thisArg */) {
    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  }
});


/***/ }),
/* 315 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/modules/es.string.search.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 149);
var anObject = __webpack_require__(/*! ../internals/an-object */ 42);
var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);
var sameValue = __webpack_require__(/*! ../internals/same-value */ 356);
var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 150);

// @@search logic
fixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) {
  return [
    // `String.prototype.search` method
    // https://tc39.es/ecma262/#sec-string.prototype.search
    function search(regexp) {
      var O = requireObjectCoercible(this);
      var searcher = regexp == undefined ? undefined : regexp[SEARCH];
      return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
    },
    // `RegExp.prototype[@@search]` method
    // https://tc39.es/ecma262/#sec-regexp.prototype-@@search
    function (regexp) {
      var res = maybeCallNative(nativeSearch, regexp, this);
      if (res.done) return res.value;

      var rx = anObject(regexp);
      var S = String(this);

      var previousLastIndex = rx.lastIndex;
      if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;
      var result = regExpExec(rx, S);
      if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;
      return result === null ? -1 : result.index;
    }
  ];
});


/***/ }),
/* 316 */
/*!****************************************!*\
  !*** ./dev/View/Popup/FolderSystem.js ***!
  \****************************************/
/*! exports provided: FolderSystemPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FolderSystemPopupView", function() { return FolderSystemPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FolderSystemPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;












var FolderSystemPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["popup"])({
  name: 'View/Popup/FolderSystem',
  templateID: 'PopupsFolderSystem'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(FolderSystemPopupView, _AbstractViewNext);

  function FolderSystemPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.sChooseOnText = '';
    _this.sUnuseText = '';
    Object(Common_Translator__WEBPACK_IMPORTED_MODULE_6__["initOnStartOrLangChange"])(function () {
      _this.sChooseOnText = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_6__["i18n"])('POPUPS_SYSTEM_FOLDERS/SELECT_CHOOSE_ONE');
      _this.sUnuseText = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_6__["i18n"])('POPUPS_SYSTEM_FOLDERS/SELECT_UNUSE_NAME');
    });
    _this.notification = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    _this.folderSelectList = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["folderListOptionsBuilder"])([], Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].folderList(), Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].folderListSystemNames(), [['', _this.sChooseOnText], [Common_Consts__WEBPACK_IMPORTED_MODULE_4__[/* UNUSED_OPTION_VALUE */ "r"], _this.sUnuseText]], null, null, null, null, null, true);
    });
    _this.sentFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].sentFolder;
    _this.draftFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].draftFolder;
    _this.spamFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].spamFolder;
    _this.trashFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].trashFolder;
    _this.archiveFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].archiveFolder;

    var fSetSystemFolders = function fSetSystemFolders() {
      Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsSet"]('SentFolder', Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].sentFolder());
      Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsSet"]('DraftFolder', Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].draftFolder());
      Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsSet"]('SpamFolder', Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].spamFolder());
      Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsSet"]('TrashFolder', Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].trashFolder());
      Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsSet"]('ArchiveFolder', Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].archiveFolder());
    },
        fSaveSystemFolders = ___WEBPACK_IMPORTED_MODULE_1___default.a.debounce(function () {
      fSetSystemFolders();
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].saveSystemFolders(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["noop"], {
        SentFolder: Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].sentFolder(),
        DraftFolder: Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].draftFolder(),
        SpamFolder: Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].spamFolder(),
        TrashFolder: Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].trashFolder(),
        ArchiveFolder: Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].archiveFolder(),
        NullFolder: 'NullFolder'
      });
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_3__["Magics"].Time1s),
        fCallback = function fCallback() {
      fSetSystemFolders();
      fSaveSystemFolders();
    };

    Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].sentFolder.subscribe(fCallback);
    Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].draftFolder.subscribe(fCallback);
    Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].spamFolder.subscribe(fCallback);
    Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].trashFolder.subscribe(fCallback);
    Stores_User_Folder__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].archiveFolder.subscribe(fCallback);
    _this.defautOptionsAfterRender = Common_Utils__WEBPACK_IMPORTED_MODULE_5__["defautOptionsAfterRender"];
    return _this;
  }
  /**
   * @param {number=} notificationType = SetSystemFoldersNotification.None
   */


  var _proto = FolderSystemPopupView.prototype;

  _proto.onShow = function onShow(notificationType) {
    if (notificationType === void 0) {
      notificationType = Common_Enums__WEBPACK_IMPORTED_MODULE_3__["SetSystemFoldersNotification"].None;
    }

    var notification = '';

    switch (notificationType) {
      case Common_Enums__WEBPACK_IMPORTED_MODULE_3__["SetSystemFoldersNotification"].Sent:
        notification = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_6__["i18n"])('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_SENT');
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_3__["SetSystemFoldersNotification"].Draft:
        notification = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_6__["i18n"])('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_DRAFTS');
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_3__["SetSystemFoldersNotification"].Spam:
        notification = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_6__["i18n"])('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_SPAM');
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_3__["SetSystemFoldersNotification"].Trash:
        notification = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_6__["i18n"])('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_TRASH');
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_3__["SetSystemFoldersNotification"].Archive:
        notification = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_6__["i18n"])('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_ARCHIVE');
        break;
      // no default
    }

    this.notification(notification);
  };

  return FolderSystemPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_11__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 317 */
/*!***************************************!*\
  !*** ./dev/Promises/AbstractBasic.js ***!
  \***************************************/
/*! exports provided: AbstractBasicPromises */
/*! exports used: AbstractBasicPromises */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractBasicPromises; });
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ 151);
/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ 62);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);




var AbstractBasicPromises = /*#__PURE__*/function () {
  function AbstractBasicPromises() {
    this.oPromisesStack = {};
  }

  var _proto = AbstractBasicPromises.prototype;

  _proto.func = function func(fFunc) {
    fFunc();
    return this;
  };

  _proto.fastResolve = function fastResolve(mData) {
    return _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default.a.resolve(mData);
  };

  _proto.fastReject = function fastReject(mData) {
    return _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default.a.reject(mData);
  };

  _proto.setTrigger = function setTrigger(trigger, value) {
    if (trigger) {
      value = !!value;
      (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isArray"])(trigger) ? trigger : [trigger]).forEach(function (fTrigger) {
        if (fTrigger) {
          fTrigger(value);
        }
      });
    }
  };

  return AbstractBasicPromises;
}();

/***/ }),
/* 318 */
/*!*************************************************!*\
  !*** ./dev/View/User/AbstractSystemDropDown.js ***!
  \*************************************************/
/*! exports provided: AbstractSystemDropDownUserView, default */
/*! exports used: AbstractSystemDropDownUserView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractSystemDropDownUserView; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/User/Account */ 46);
/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Stores/User/Message */ 13);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Events */ 23);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);

















var AbstractSystemDropDownUserView = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(AbstractSystemDropDownUserView, _AbstractViewNext);

  function AbstractSystemDropDownUserView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.logoImg = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["trim"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_12__["settingsGet"]('UserLogo'));
    _this.logoTitle = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["trim"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_12__["settingsGet"]('UserLogoTitle'));
    _this.mobile = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_12__["appSettingsGet"]('mobile');
    _this.mobileDevice = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_12__["appSettingsGet"]('mobileDevice');
    _this.allowSettings = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_12__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Capa"].Settings);
    _this.allowHelp = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_12__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Capa"].Help);
    _this.currentAudio = Stores_User_App__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].currentAudio;
    _this.accountEmail = Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].email;
    _this.accounts = Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].accounts;
    _this.accountsUnreadCount = Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].accountsUnreadCount;
    _this.accountMenuDropdownTrigger = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.capaAdditionalAccounts = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(Storage_Settings__WEBPACK_IMPORTED_MODULE_12__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Capa"].AdditionalAccounts));
    _this.addAccountClick = ___WEBPACK_IMPORTED_MODULE_2___default.a.bind(_this.addAccountClick, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    Common_Events__WEBPACK_IMPORTED_MODULE_11__[/* sub */ "b"]('audio.stop', function () {
      return Stores_User_App__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].currentAudio('');
    });
    Common_Events__WEBPACK_IMPORTED_MODULE_11__[/* sub */ "b"]('audio.start', function (name) {
      return Stores_User_App__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].currentAudio(name);
    });
    return _this;
  }

  var _proto = AbstractSystemDropDownUserView.prototype;

  _proto.stopPlay = function stopPlay() {
    Common_Events__WEBPACK_IMPORTED_MODULE_11__[/* pub */ "a"]('audio.api.stop');
  };

  _proto.accountClick = function accountClick(account, event) {
    if (account && event && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(event.which) && 1 === event.which) {
      Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].accounts.loading(true);

      ___WEBPACK_IMPORTED_MODULE_2___default.a.delay(function () {
        return Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].accounts.loading(false);
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Magics"].Time1s);
    }

    return true;
  };

  _proto.emailTitle = function emailTitle() {
    return Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].email();
  };

  _proto.settingsClick = function settingsClick() {
    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_12__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Capa"].Settings)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* settings */ "z"])());
    }
  };

  _proto.settingsHelp = function settingsHelp() {
    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_12__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Capa"].Help)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["showScreenPopup"])(__webpack_require__(/*! View/Popup/KeyboardShortcutsHelp */ 426));
    }
  };

  _proto.addAccountClick = function addAccountClick() {
    if (this.capaAdditionalAccounts()) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Account */ 392));
    }
  };

  _proto.logoutClick = function logoutClick() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_13__[/* getApp */ "a"])().logout();
  };

  _proto.onBuild = function onBuild() {
    var _this2 = this;

    key__WEBPACK_IMPORTED_MODULE_4___default()('`', [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_8__["KeyState"].MessageView, Common_Enums__WEBPACK_IMPORTED_MODULE_8__["KeyState"].Settings], function () {
      if (_this2.viewModelVisibility()) {
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].messageFullScreenMode(false);

        _this2.accountMenuDropdownTrigger(true);
      }
    }); // shortcuts help

    key__WEBPACK_IMPORTED_MODULE_4___default()('shift+/', [Common_Enums__WEBPACK_IMPORTED_MODULE_8__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_8__["KeyState"].MessageView, Common_Enums__WEBPACK_IMPORTED_MODULE_8__["KeyState"].Settings], function () {
      if (_this2.viewModelVisibility()) {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["showScreenPopup"])(__webpack_require__(/*! View/Popup/KeyboardShortcutsHelp */ 426));
        return false;
      }

      return true;
    });
  };

  return AbstractSystemDropDownUserView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_15__[/* AbstractViewNext */ "a"]);



/***/ }),
/* 319 */
/*!********************************!*\
  !*** ./dev/Common/Selector.js ***!
  \********************************/
/*! exports provided: Selector, default */
/*! exports used: Selector */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Selector; });
/* unused harmony export default */
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ 85);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ 119);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Utils */ 2);











var Selector = /*#__PURE__*/function () {
  /**
   * @param {koProperty} koList
   * @param {koProperty} koSelectedItem
   * @param {koProperty} koFocusedItem
   * @param {string} sItemSelector
   * @param {string} sItemSelectedSelector
   * @param {string} sItemCheckedSelector
   * @param {string} sItemFocusedSelector
   */
  function Selector(koList, koSelectedItem, koFocusedItem, sItemSelector, sItemSelectedSelector, sItemCheckedSelector, sItemFocusedSelector) {
    var _this = this;

    this.list = void 0;
    this.listChecked = void 0;
    this.isListChecked = void 0;
    this.focusedItem = void 0;
    this.selectedItem = void 0;
    this.itemSelectedThrottle = void 0;
    this.selectedItemUseCallback = true;
    this.iSelectNextHelper = 0;
    this.iFocusedNextHelper = 0;
    this.oContentVisible = void 0;
    this.oContentScrollable = void 0;
    this.sItemSelector = void 0;
    this.sItemSelectedSelector = void 0;
    this.sItemCheckedSelector = void 0;
    this.sItemFocusedSelector = void 0;
    this.sLastUid = '';
    this.oCallbacks = {};
    this.list = koList;
    this.listChecked = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, _this.list(), function (item) {
        return item.checked();
      });
    }).extend({
      rateLimit: 0
    });
    this.isListChecked = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return 0 < _this.listChecked().length;
    });
    this.focusedItem = koFocusedItem || ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(null);
    this.selectedItem = koSelectedItem || ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(null);
    this.itemSelectedThrottle = ___WEBPACK_IMPORTED_MODULE_5___default.a.debounce(___WEBPACK_IMPORTED_MODULE_5___default.a.bind(this.itemSelected, this), 300);
    this.listChecked.subscribe(function (items) {
      if (0 < items.length) {
        if (null === _this.selectedItem()) {
          if (_this.selectedItem.valueHasMutated) {
            _this.selectedItem.valueHasMutated();
          }
        } else {
          _this.selectedItem(null);
        }
      } else if (_this.autoSelect() && _this.focusedItem()) {
        _this.selectedItem(_this.focusedItem());
      }
    }, this);
    this.selectedItem.subscribe(function (item) {
      if (item) {
        if (_this.isListChecked()) {
          ___WEBPACK_IMPORTED_MODULE_5___default.a.each(_this.listChecked(), function (subItem) {
            subItem.checked(false);
          });
        }

        if (_this.selectedItemUseCallback) {
          _this.itemSelectedThrottle(item);
        }
      } else if (_this.selectedItemUseCallback) {
        _this.itemSelected(null);
      }
    }, this);
    this.selectedItem = this.selectedItem.extend({
      toggleSubscribeProperty: [this, 'selected']
    });
    this.focusedItem = this.focusedItem.extend({
      toggleSubscribeProperty: [null, 'focused']
    });
    this.sItemSelector = sItemSelector;
    this.sItemSelectedSelector = sItemSelectedSelector;
    this.sItemCheckedSelector = sItemCheckedSelector;
    this.sItemFocusedSelector = sItemFocusedSelector;
    this.focusedItem.subscribe(function (item) {
      if (item) {
        _this.sLastUid = _this.getItemUid(item);
      }
    }, this);
    var aCache = [],
        aCheckedCache = [],
        mFocused = null,
        mSelected = null;
    this.list.subscribe(function (items) {
      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isArray"])(items)) {
        ___WEBPACK_IMPORTED_MODULE_5___default.a.each(items, function (item) {
          if (item) {
            var uid = _this.getItemUid(item);

            aCache.push(uid);

            if (item.checked()) {
              aCheckedCache.push(uid);
            }

            if (null === mFocused && item.focused()) {
              mFocused = uid;
            }

            if (null === mSelected && item.selected()) {
              mSelected = uid;
            }
          }
        });
      }
    }, this, 'beforeChange');
    this.list.subscribe(function (aItems) {
      var temp = null,
          getNext = false,
          isNextFocused = mFocused,
          isChecked = false,
          isSelected = false,
          len = 0;
      var uids = [];
      _this.selectedItemUseCallback = false;

      _this.focusedItem(null);

      _this.selectedItem(null);

      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isArray"])(aItems)) {
        len = aCheckedCache.length;

        ___WEBPACK_IMPORTED_MODULE_5___default.a.each(aItems, function (item) {
          var uid = _this.getItemUid(item);

          uids.push(uid);

          if (null !== mFocused && mFocused === uid) {
            _this.focusedItem(item);

            mFocused = null;
          }

          if (0 < len && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["inArray"])(uid, aCheckedCache)) {
            isChecked = true;
            item.checked(true);
            len -= 1;
          }

          if (!isChecked && null !== mSelected && mSelected === uid) {
            isSelected = true;

            _this.selectedItem(item);

            mSelected = null;
          }
        });

        _this.selectedItemUseCallback = true;

        if (!isChecked && !isSelected && _this.autoSelect()) {
          if (_this.focusedItem()) {
            _this.selectedItem(_this.focusedItem());
          } else if (0 < aItems.length) {
            if (null !== isNextFocused) {
              getNext = false;
              isNextFocused = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, aCache, function (sUid) {
                if (getNext && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["inArray"])(sUid, uids)) {
                  return sUid;
                } else if (isNextFocused === sUid) {
                  getNext = true;
                }

                return false;
              });

              if (isNextFocused) {
                temp = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, aItems, function (oItem) {
                  return isNextFocused === _this.getItemUid(oItem);
                });
              }
            }

            _this.selectedItem(temp || null);

            _this.focusedItem(_this.selectedItem());
          }
        }

        if ((0 !== _this.iSelectNextHelper || 0 !== _this.iFocusedNextHelper) && 0 < aItems.length && !_this.focusedItem()) {
          temp = null;

          if (0 !== _this.iFocusedNextHelper) {
            temp = aItems[-1 === _this.iFocusedNextHelper ? aItems.length - 1 : 0] || null;
          }

          if (!temp && 0 !== _this.iSelectNextHelper) {
            temp = aItems[-1 === _this.iSelectNextHelper ? aItems.length - 1 : 0] || null;
          }

          if (temp) {
            if (0 !== _this.iSelectNextHelper) {
              _this.selectedItem(temp || null);
            }

            _this.focusedItem(temp || null);

            _this.scrollToFocused();

            ___WEBPACK_IMPORTED_MODULE_5___default.a.delay(function () {
              return _this.scrollToFocused();
            }, 100);
          }

          _this.iSelectNextHelper = 0;
          _this.iFocusedNextHelper = 0;
        }
      }

      aCache = [];
      aCheckedCache = [];
      mFocused = null;
      mSelected = null;
    });
  }

  var _proto = Selector.prototype;

  _proto.itemSelected = function itemSelected(item) {
    if (this.isListChecked()) {
      if (!item) {
        (this.oCallbacks.onItemSelect || Common_Utils__WEBPACK_IMPORTED_MODULE_9__["noop"])(item || null);
      }
    } else if (item) {
      (this.oCallbacks.onItemSelect || Common_Utils__WEBPACK_IMPORTED_MODULE_9__["noop"])(item);
    }
  }
  /**
   * @param {boolean} forceSelect
   */
  ;

  _proto.goDown = function goDown(forceSelect) {
    this.newSelectPosition(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Down, false, forceSelect);
  }
  /**
   * @param {boolean} forceSelect
   */
  ;

  _proto.goUp = function goUp(forceSelect) {
    this.newSelectPosition(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Up, false, forceSelect);
  };

  _proto.unselect = function unselect() {
    this.selectedItem(null);
    this.focusedItem(null);
  };

  _proto.init = function init(contentVisible, contentScrollable, keyScope) {
    var _this2 = this;

    if (keyScope === void 0) {
      keyScope = 'all';
    }

    this.oContentVisible = contentVisible;
    this.oContentScrollable = contentScrollable;

    if (this.oContentVisible && this.oContentScrollable) {
      $__WEBPACK_IMPORTED_MODULE_4___default()(this.oContentVisible).on('selectstart', function (event) {
        if (event && event.preventDefault) {
          event.preventDefault();
        }
      }).on('click', this.sItemSelector, function (event) {
        _this2.actionClick(ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].dataFor(event.currentTarget), event);
      }).on('click', this.sItemCheckedSelector, function (event) {
        var item = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].dataFor(event.currentTarget);

        if (item) {
          if (event && event.shiftKey) {
            _this2.actionClick(item, event);
          } else {
            _this2.focusedItem(item);

            item.checked(!item.checked());
          }
        }
      });
      key__WEBPACK_IMPORTED_MODULE_6___default()('enter', keyScope, function () {
        if (_this2.focusedItem() && !_this2.focusedItem().selected()) {
          _this2.actionClick(_this2.focusedItem());

          return false;
        }

        return true;
      });
      key__WEBPACK_IMPORTED_MODULE_6___default()('ctrl+up, command+up, ctrl+down, command+down', keyScope, function () {
        return false;
      });
      key__WEBPACK_IMPORTED_MODULE_6___default()('up, shift+up, down, shift+down, home, end, pageup, pagedown, insert, space', keyScope, function (event, handler) {
        if (event && handler && handler.shortcut) {
          var eventKey = 0;

          switch (handler.shortcut) {
            case 'up':
            case 'shift+up':
              eventKey = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Up;
              break;

            case 'down':
            case 'shift+down':
              eventKey = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Down;
              break;

            case 'insert':
              eventKey = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Insert;
              break;

            case 'space':
              eventKey = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Space;
              break;

            case 'home':
              eventKey = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Home;
              break;

            case 'end':
              eventKey = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].End;
              break;

            case 'pageup':
              eventKey = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].PageUp;
              break;

            case 'pagedown':
              eventKey = Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].PageDown;
              break;
            // no default
          }

          if (0 < eventKey) {
            _this2.newSelectPosition(eventKey, key__WEBPACK_IMPORTED_MODULE_6___default.a.shift);

            return false;
          }
        }

        return true;
      });
    }
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.autoSelect = function autoSelect() {
    return !!(this.oCallbacks.onAutoSelect || Common_Utils__WEBPACK_IMPORTED_MODULE_9__["noopTrue"])();
  }
  /**
   * @param {boolean} up
   */
  ;

  _proto.doUpUpOrDownDown = function doUpUpOrDownDown(up) {
    (this.oCallbacks.onUpUpOrDownDown || Common_Utils__WEBPACK_IMPORTED_MODULE_9__["noopTrue"])(!!up);
  }
  /**
   * @param {Object} oItem
   * @returns {string}
   */
  ;

  _proto.getItemUid = function getItemUid(item) {
    var uid = '';
    var getItemUidCallback = this.oCallbacks.onItemGetUid || null;

    if (getItemUidCallback && item) {
      uid = getItemUidCallback(item);
    }

    return uid.toString();
  }
  /**
   * @param {number} iEventKeyCode
   * @param {boolean} bShiftKey
   * @param {boolean=} bForceSelect = false
   */
  ;

  _proto.newSelectPosition = function newSelectPosition(iEventKeyCode, bShiftKey, bForceSelect) {
    var index = 0,
        isNext = false,
        isStop = false,
        result = null;
    var pageStep = 10,
        list = this.list(),
        listLen = list ? list.length : 0,
        focused = this.focusedItem();

    if (0 < listLen) {
      if (!focused) {
        if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Down === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Insert === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Space === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Home === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].PageUp === iEventKeyCode) {
          result = list[0];
        } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Up === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].End === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].PageDown === iEventKeyCode) {
          result = list[list.length - 1];
        }
      } else if (focused) {
        if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Down === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Up === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Insert === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Space === iEventKeyCode) {
          ___WEBPACK_IMPORTED_MODULE_5___default.a.each(list, function (item) {
            if (!isStop) {
              switch (iEventKeyCode) {
                case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Up:
                  if (focused === item) {
                    isStop = true;
                  } else {
                    result = item;
                  }

                  break;

                case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Down:
                case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Insert:
                  if (isNext) {
                    result = item;
                    isStop = true;
                  } else if (focused === item) {
                    isNext = true;
                  }

                  break;
                // no default
              }
            }
          });

          if (!result && (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Down === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Up === iEventKeyCode)) {
            this.doUpUpOrDownDown(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Up === iEventKeyCode);
          }
        } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Home === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].End === iEventKeyCode) {
          if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Home === iEventKeyCode) {
            result = list[0];
          } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].End === iEventKeyCode) {
            result = list[list.length - 1];
          }
        } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].PageDown === iEventKeyCode) {
          for (; index < listLen; index++) {
            if (focused === list[index]) {
              index += pageStep;
              index = listLen - 1 < index ? listLen - 1 : index;
              result = list[index];
              break;
            }
          }
        } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].PageUp === iEventKeyCode) {
          for (index = listLen; 0 <= index; index--) {
            if (focused === list[index]) {
              index -= pageStep;
              index = 0 > index ? 0 : index;
              result = list[index];
              break;
            }
          }
        }
      }
    }

    if (result) {
      this.focusedItem(result);

      if (focused) {
        if (bShiftKey) {
          if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Up === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Down === iEventKeyCode) {
            focused.checked(!focused.checked());
          }
        } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Insert === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Space === iEventKeyCode) {
          focused.checked(!focused.checked());
        }
      }

      if ((this.autoSelect() || !!bForceSelect) && !this.isListChecked() && Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Space !== iEventKeyCode) {
        this.selectedItem(result);
      }

      this.scrollToFocused();
    } else if (focused) {
      if (bShiftKey && (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Up === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Down === iEventKeyCode)) {
        focused.checked(!focused.checked());
      } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Insert === iEventKeyCode || Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Space === iEventKeyCode) {
        focused.checked(!focused.checked());
      }

      this.focusedItem(focused);
    }
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.scrollToFocused = function scrollToFocused() {
    if (!this.oContentVisible || !this.oContentScrollable) {
      return false;
    }

    var offset = 20,
        list = this.list(),
        $focused = $__WEBPACK_IMPORTED_MODULE_4___default()(this.sItemFocusedSelector, this.oContentScrollable),
        pos = $focused.position(),
        visibleHeight = this.oContentVisible.height(),
        focusedHeight = $focused.outerHeight();

    if (list && list[0] && list[0].focused()) {
      this.oContentScrollable.scrollTop(0);
      return true;
    } else if (pos && (0 > pos.top || pos.top + focusedHeight > visibleHeight)) {
      this.oContentScrollable.scrollTop(0 > pos.top ? this.oContentScrollable.scrollTop() + pos.top - offset : this.oContentScrollable.scrollTop() + pos.top - visibleHeight + focusedHeight + offset);
      return true;
    }

    return false;
  }
  /**
   * @param {boolean=} fast = false
   * @returns {boolean}
   */
  ;

  _proto.scrollToTop = function scrollToTop(fast) {
    if (fast === void 0) {
      fast = false;
    }

    if (!this.oContentVisible || !this.oContentScrollable) {
      return false;
    }

    if (fast || 50 > this.oContentScrollable.scrollTop()) {
      this.oContentScrollable.scrollTop(0);
    } else {
      this.oContentScrollable.stop().animate({
        scrollTop: 0
      }, 200);
    }

    return true;
  };

  _proto.eventClickFunction = function eventClickFunction(item, event) {
    var index = 0,
        length = 0,
        changeRange = false,
        isInRange = false,
        list = [],
        checked = false,
        listItem = null,
        lineUid = '';
    var uid = this.getItemUid(item);

    if (event && event.shiftKey) {
      if ('' !== uid && '' !== this.sLastUid && uid !== this.sLastUid) {
        list = this.list();
        checked = item.checked();

        for (index = 0, length = list.length; index < length; index++) {
          listItem = list[index];
          lineUid = this.getItemUid(listItem);
          changeRange = false;

          if (lineUid === this.sLastUid || lineUid === uid) {
            changeRange = true;
          }

          if (changeRange) {
            isInRange = !isInRange;
          }

          if (isInRange || changeRange) {
            listItem.checked(checked);
          }
        }
      }
    }

    this.sLastUid = '' === uid ? '' : uid;
  }
  /**
   * @param {Object} item
   * @param {Object=} event
   */
  ;

  _proto.actionClick = function actionClick(item, event) {
    if (event === void 0) {
      event = null;
    }

    if (item) {
      var click = true;

      if (event) {
        if (event.shiftKey && !(event.ctrlKey || event.metaKey) && !event.altKey) {
          click = false;

          if ('' === this.sLastUid) {
            this.sLastUid = this.getItemUid(item);
          }

          item.checked(!item.checked());
          this.eventClickFunction(item, event);
          this.focusedItem(item);
        } else if ((event.ctrlKey || event.metaKey) && !event.shiftKey && !event.altKey) {
          click = false;
          this.focusedItem(item);

          if (this.selectedItem() && item !== this.selectedItem()) {
            this.selectedItem().checked(true);
          }

          item.checked(!item.checked());
        }
      }

      if (click) {
        this.selectMessageItem(item);
      }
    }
  };

  _proto.on = function on(eventName, callback) {
    this.oCallbacks[eventName] = callback;
  };

  _proto.selectMessageItem = function selectMessageItem(messageItem) {
    this.focusedItem(messageItem);
    this.selectedItem(messageItem);
    this.scrollToFocused();
  };

  return Selector;
}();



/***/ }),
/* 320 */
/*!******************************!*\
  !*** ./dev/Model/Message.js ***!
  \******************************/
/*! exports provided: MessageModel, default */
/*! exports used: MessageModel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MessageModel; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 227);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 175);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! moment */ 100);
/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! classnames */ 436);
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_12__);
/* harmony import */ var lozad__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! lozad */ 437);
/* harmony import */ var lozad__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(lozad__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Stores/User/Pgp */ 41);
/* harmony import */ var Helper_Message__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Helper/Message */ 64);
/* harmony import */ var Model_Attachment__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Model/Attachment */ 207);
/* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Knoin/AbstractModel */ 67);


























var MessageModel = /*#__PURE__*/function (_AbstractModel) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(MessageModel, _AbstractModel);

  function MessageModel() {
    var _this;

    _this = _AbstractModel.call(this, 'MessageModel') || this;
    _this.folderFullNameRaw = '';
    _this.uid = '';
    _this.hash = '';
    _this.requestHash = '';
    _this.subject = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    _this.subjectPrefix = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    _this.subjectSuffix = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    _this.size = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(0);
    _this.dateTimeStampInUTC = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(0);
    _this.priority = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].Normal);
    _this.proxy = false;
    _this.fromEmailString = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    _this.fromClearEmailString = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    _this.toEmailsString = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    _this.toClearEmailsString = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    _this.senderEmailsString = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    _this.senderClearEmailsString = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    _this.emails = [];
    _this.from = [];
    _this.to = [];
    _this.cc = [];
    _this.bcc = [];
    _this.replyTo = [];
    _this.deliveredTo = [];
    _this.unsubsribeLinks = [];
    _this.newForAnimation = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.deleted = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.deletedMark = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.unseen = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.flagged = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.answered = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.forwarded = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.isReadReceipt = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.focused = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.selected = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.checked = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.hasAttachments = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.attachmentsSpecData = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observableArray([]);
    _this.attachmentIconClass = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed(function () {
      return Object(Model_Attachment__WEBPACK_IMPORTED_MODULE_23__[/* staticCombinedIconClass */ "b"])(_this.hasAttachments() ? _this.attachmentsSpecData() : []);
    });
    _this.body = null;
    _this.isHtml = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.hasImages = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.attachments = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observableArray([]);
    _this.isPgpSigned = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.isPgpEncrypted = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.pgpSignedVerifyStatus = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_14__["SignedVerifyStatus"].None);
    _this.pgpSignedVerifyUser = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    _this.priority = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].Normal);
    _this.readReceipt = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable('');
    _this.aDraftInfo = [];
    _this.sMessageId = '';
    _this.sInReplyTo = '';
    _this.sReferences = '';
    _this.hasUnseenSubMessage = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.hasFlaggedSubMessage = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observable(false);
    _this.threads = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].observableArray([]);
    _this.threadsLen = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed(function () {
      return _this.threads().length;
    });
    _this.isImportant = ko__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].computed(function () {
      return Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].High === _this.priority();
    });

    _this.regDisposables([_this.attachmentIconClass, _this.threadsLen, _this.isImportant]);

    return _this;
  }
  /**
   * @static
   * @param {AjaxJsonMessage} oJsonMessage
   * @returns {?MessageModel}
   */


  MessageModel.newInstanceFromJson = function newInstanceFromJson(json) {
    var oMessageModel = new MessageModel();
    return oMessageModel.initByJson(json) ? oMessageModel : null;
  };

  var _proto = MessageModel.prototype;

  _proto.clear = function clear() {
    this.folderFullNameRaw = '';
    this.uid = '';
    this.hash = '';
    this.requestHash = '';
    this.subject('');
    this.subjectPrefix('');
    this.subjectSuffix('');
    this.size(0);
    this.dateTimeStampInUTC(0);
    this.priority(Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].Normal);
    this.proxy = false;
    this.fromEmailString('');
    this.fromClearEmailString('');
    this.toEmailsString('');
    this.toClearEmailsString('');
    this.senderEmailsString('');
    this.senderClearEmailsString('');
    this.emails = [];
    this.from = [];
    this.to = [];
    this.cc = [];
    this.bcc = [];
    this.replyTo = [];
    this.deliveredTo = [];
    this.unsubsribeLinks = [];
    this.newForAnimation(false);
    this.deleted(false);
    this.deletedMark(false);
    this.unseen(false);
    this.flagged(false);
    this.answered(false);
    this.forwarded(false);
    this.isReadReceipt(false);
    this.selected(false);
    this.checked(false);
    this.hasAttachments(false);
    this.attachmentsSpecData([]);
    this.body = null;
    this.isHtml(false);
    this.hasImages(false);
    this.attachments([]);
    this.isPgpSigned(false);
    this.isPgpEncrypted(false);
    this.pgpSignedVerifyStatus(Common_Enums__WEBPACK_IMPORTED_MODULE_14__["SignedVerifyStatus"].None);
    this.pgpSignedVerifyUser('');
    this.priority(Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].Normal);
    this.readReceipt('');
    this.aDraftInfo = [];
    this.sMessageId = '';
    this.sInReplyTo = '';
    this.sReferences = '';
    this.threads([]);
    this.hasUnseenSubMessage(false);
    this.hasFlaggedSubMessage(false);
  }
  /**
   * @param {Array} properties
   * @returns {Array}
   */
  ;

  _proto.getEmails = function getEmails(properties) {
    var _this2 = this;

    return ___WEBPACK_IMPORTED_MODULE_8___default.a.compact(___WEBPACK_IMPORTED_MODULE_8___default.a.uniq(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_8___default.a).call(___WEBPACK_IMPORTED_MODULE_8___default.a, _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_5___default()(___WEBPACK_IMPORTED_MODULE_8___default.a).call(___WEBPACK_IMPORTED_MODULE_8___default.a, properties, function (carry, property) {
      return _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_6___default()(carry).call(carry, _this2[property]);
    }, []), function (oItem) {
      return oItem ? oItem.email : '';
    })));
  }
  /**
   * @returns {Array}
   */
  ;

  _proto.getRecipientsEmails = function getRecipientsEmails() {
    return this.getEmails(['to', 'cc']);
  }
  /**
   * @returns {string}
   */
  ;

  _proto.friendlySize = function friendlySize() {
    return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["friendlySize"])(this.size());
  };

  _proto.computeSenderEmail = function computeSenderEmail() {
    var sentFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].sentFolder(),
        draftFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].draftFolder();
    this.senderEmailsString(this.folderFullNameRaw === sentFolder || this.folderFullNameRaw === draftFolder ? this.toEmailsString() : this.fromEmailString());
    this.senderClearEmailsString(this.folderFullNameRaw === sentFolder || this.folderFullNameRaw === draftFolder ? this.toClearEmailsString() : this.fromClearEmailString());
  }
  /**
   * @param {AjaxJsonMessage} json
   * @returns {boolean}
   */
  ;

  _proto.initByJson = function initByJson(json) {
    var result = false,
        priority = Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].Normal;

    if (json && 'Object/Message' === json['@Object']) {
      priority = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["pInt"])(json.Priority);
      this.priority(-1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["inArray"])(priority, [Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].High, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].Low]) ? priority : Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].Normal);
      this.folderFullNameRaw = json.Folder;
      this.uid = json.Uid;
      this.hash = json.Hash;
      this.requestHash = json.RequestHash;
      this.proxy = !!json.ExternalProxy;
      this.size(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["pInt"])(json.Size));
      this.from = Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayFromJson */ "a"])(json.From);
      this.to = Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayFromJson */ "a"])(json.To);
      this.cc = Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayFromJson */ "a"])(json.Cc);
      this.bcc = Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayFromJson */ "a"])(json.Bcc);
      this.replyTo = Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayFromJson */ "a"])(json.ReplyTo);
      this.deliveredTo = Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayFromJson */ "a"])(json.DeliveredTo);
      this.unsubsribeLinks = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isNonEmptyArray"])(json.UnsubsribeLinks) ? json.UnsubsribeLinks : [];
      this.subject(json.Subject);

      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isArray"])(json.SubjectParts)) {
        this.subjectPrefix(json.SubjectParts[0]);
        this.subjectSuffix(json.SubjectParts[1]);
      } else {
        this.subjectPrefix('');
        this.subjectSuffix(this.subject());
      }

      this.dateTimeStampInUTC(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["pInt"])(json.DateTimeStampInUTC));
      this.hasAttachments(!!json.HasAttachments);
      this.attachmentsSpecData(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isArray"])(json.AttachmentsSpecData) ? json.AttachmentsSpecData : []);
      this.fromEmailString(Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayToString */ "b"])(this.from, true));
      this.fromClearEmailString(Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayToStringClear */ "c"])(this.from));
      this.toEmailsString(Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayToString */ "b"])(this.to, true));
      this.toClearEmailsString(Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayToStringClear */ "c"])(this.to));
      this.threads(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isArray"])(json.Threads) ? json.Threads : []);
      this.initFlagsByJson(json);
      this.computeSenderEmail();
      result = true;
    }

    return result;
  }
  /**
   * @param {AjaxJsonMessage} json
   * @returns {boolean}
   */
  ;

  _proto.initUpdateByMessageJson = function initUpdateByMessageJson(json) {
    var result = false,
        priority = Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].Normal;

    if (json && 'Object/Message' === json['@Object']) {
      priority = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["pInt"])(json.Priority);
      this.priority(-1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["inArray"])(priority, [Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].High, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].Low]) ? priority : Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessagePriority"].Normal);
      this.aDraftInfo = json.DraftInfo;
      this.sMessageId = json.MessageId;
      this.sInReplyTo = json.InReplyTo;
      this.sReferences = json.References;
      this.proxy = !!json.ExternalProxy;

      if (Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].capaOpenPGP()) {
        this.isPgpSigned(!!json.PgpSigned);
        this.isPgpEncrypted(!!json.PgpEncrypted);
      }

      this.hasAttachments(!!json.HasAttachments);
      this.attachmentsSpecData(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isArray"])(json.AttachmentsSpecData) ? json.AttachmentsSpecData : []);
      this.foundedCIDs = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isArray"])(json.FoundedCIDs) ? json.FoundedCIDs : [];
      this.attachments(this.initAttachmentsFromJson(json.Attachments));
      this.readReceipt(json.ReadReceipt || '');
      this.computeSenderEmail();
      result = true;
    }

    return result;
  }
  /**
   * @param {(AjaxJsonAttachment|null)} oJsonAttachments
   * @returns {Array}
   */
  ;

  _proto.initAttachmentsFromJson = function initAttachmentsFromJson(json) {
    var index = 0,
        len = 0,
        attachment = null;
    var result = [];

    if (json && 'Collection/AttachmentCollection' === json['@Object'] && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isNonEmptyArray"])(json['@Collection'])) {
      for (index = 0, len = json['@Collection'].length; index < len; index++) {
        attachment = Model_Attachment__WEBPACK_IMPORTED_MODULE_23__[/* AttachmentModel */ "a"].newInstanceFromJson(json['@Collection'][index]);

        if (attachment) {
          if ('' !== attachment.cidWithOutTags && 0 < this.foundedCIDs.length && 0 <= Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["inArray"])(attachment.cidWithOutTags, this.foundedCIDs)) {
            attachment.isLinked = true;
          }

          result.push(attachment);
        }
      }
    }

    return result;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.hasUnsubsribeLinks = function hasUnsubsribeLinks() {
    return this.unsubsribeLinks && 0 < this.unsubsribeLinks.length;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.getFirstUnsubsribeLink = function getFirstUnsubsribeLink() {
    return this.unsubsribeLinks && 0 < this.unsubsribeLinks.length ? this.unsubsribeLinks[0] || '' : '';
  }
  /**
   * @param {AjaxJsonMessage} json
   * @returns {boolean}
   */
  ;

  _proto.initFlagsByJson = function initFlagsByJson(json) {
    var result = false;

    if (json && 'Object/Message' === json['@Object']) {
      this.unseen(!json.IsSeen);
      this.flagged(!!json.IsFlagged);
      this.answered(!!json.IsAnswered);
      this.forwarded(!!json.IsForwarded);
      this.isReadReceipt(!!json.IsReadReceipt);
      this.deletedMark(!!json.IsDeleted);
      result = true;
    }

    return result;
  }
  /**
   * @param {boolean} friendlyView
   * @param {boolean=} wrapWithLink = false
   * @returns {string}
   */
  ;

  _proto.fromToLine = function fromToLine(friendlyView, wrapWithLink) {
    if (wrapWithLink === void 0) {
      wrapWithLink = false;
    }

    return Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayToString */ "b"])(this.from, friendlyView, wrapWithLink);
  }
  /**
   * @returns {string}
   */
  ;

  _proto.fromDkimData = function fromDkimData() {
    var result = ['none', ''];

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isNonEmptyArray"])(this.from) && 1 === this.from.length && this.from[0] && this.from[0].dkimStatus) {
      result = [this.from[0].dkimStatus, this.from[0].dkimValue || ''];
    }

    return result;
  }
  /**
   * @param {boolean} friendlyView
   * @param {boolean=} wrapWithLink = false
   * @returns {string}
   */
  ;

  _proto.toToLine = function toToLine(friendlyView, wrapWithLink) {
    if (wrapWithLink === void 0) {
      wrapWithLink = false;
    }

    return Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayToString */ "b"])(this.to, friendlyView, wrapWithLink);
  }
  /**
   * @param {boolean} friendlyView
   * @param {boolean=} wrapWithLink = false
   * @returns {string}
   */
  ;

  _proto.ccToLine = function ccToLine(friendlyView, wrapWithLink) {
    if (wrapWithLink === void 0) {
      wrapWithLink = false;
    }

    return Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayToString */ "b"])(this.cc, friendlyView, wrapWithLink);
  }
  /**
   * @param {boolean} friendlyView
   * @param {boolean=} wrapWithLink = false
   * @returns {string}
   */
  ;

  _proto.bccToLine = function bccToLine(friendlyView, wrapWithLink) {
    if (wrapWithLink === void 0) {
      wrapWithLink = false;
    }

    return Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayToString */ "b"])(this.bcc, friendlyView, wrapWithLink);
  }
  /**
   * @param {boolean} friendlyView
   * @param {boolean=} wrapWithLink = false
   * @returns {string}
   */
  ;

  _proto.replyToToLine = function replyToToLine(friendlyView, wrapWithLink) {
    if (wrapWithLink === void 0) {
      wrapWithLink = false;
    }

    return Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* emailArrayToString */ "b"])(this.replyTo, friendlyView, wrapWithLink);
  }
  /**
   * @return string
   */
  ;

  _proto.lineAsCss = function lineAsCss() {
    return classnames__WEBPACK_IMPORTED_MODULE_12___default()({
      'deleted': this.deleted(),
      'deleted-mark': this.deletedMark(),
      'selected': this.selected(),
      'checked': this.checked(),
      'flagged': this.flagged(),
      'unseen': this.unseen(),
      'answered': this.answered(),
      'forwarded': this.forwarded(),
      'focused': this.focused(),
      'important': this.isImportant(),
      'withAttachments': this.hasAttachments(),
      'new': this.newForAnimation(),
      'emptySubject': '' === this.subject(),
      // 'hasChildrenMessage': 1 < this.threadsLen(),
      'hasUnseenSubMessage': this.hasUnseenSubMessage(),
      'hasFlaggedSubMessage': this.hasFlaggedSubMessage()
    });
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.hasVisibleAttachments = function hasVisibleAttachments() {
    return !!_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_8___default.a).call(___WEBPACK_IMPORTED_MODULE_8___default.a, this.attachments(), function (item) {
      return !item.isLinked;
    });
  }
  /**
   * @param {string} cid
   * @returns {*}
   */
  ;

  _proto.findAttachmentByCid = function findAttachmentByCid(cid) {
    var result = null;
    var attachments = this.attachments();

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isNonEmptyArray"])(attachments)) {
      cid = cid.replace(/^<+/, '').replace(/>+$/, '');
      result = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_8___default.a).call(___WEBPACK_IMPORTED_MODULE_8___default.a, attachments, function (item) {
        return cid === item.cidWithOutTags;
      });
    }

    return result || null;
  }
  /**
   * @param {string} contentLocation
   * @returns {*}
   */
  ;

  _proto.findAttachmentByContentLocation = function findAttachmentByContentLocation(contentLocation) {
    var result = null;
    var attachments = this.attachments();

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isNonEmptyArray"])(attachments)) {
      result = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_8___default.a).call(___WEBPACK_IMPORTED_MODULE_8___default.a, attachments, function (item) {
        return contentLocation === item.contentLocation;
      });
    }

    return result || null;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.messageId = function messageId() {
    return this.sMessageId;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.inReplyTo = function inReplyTo() {
    return this.sInReplyTo;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.references = function references() {
    return this.sReferences;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.fromAsSingleEmail = function fromAsSingleEmail() {
    return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isArray"])(this.from) && this.from[0] ? this.from[0].email : '';
  }
  /**
   * @returns {string}
   */
  ;

  _proto.viewLink = function viewLink() {
    return Object(Common_Links__WEBPACK_IMPORTED_MODULE_19__[/* messageViewLink */ "q"])(this.requestHash);
  }
  /**
   * @returns {string}
   */
  ;

  _proto.downloadLink = function downloadLink() {
    return Object(Common_Links__WEBPACK_IMPORTED_MODULE_19__[/* messageDownloadLink */ "p"])(this.requestHash);
  }
  /**
   * @param {Object} excludeEmails
   * @param {boolean=} last = false
   * @returns {Array}
   */
  ;

  _proto.replyEmails = function replyEmails(excludeEmails, last) {
    if (last === void 0) {
      last = false;
    }

    var result = [],
        unic = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isUnd"])(excludeEmails) ? {} : excludeEmails;
    Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* replyHelper */ "d"])(this.replyTo, unic, result);

    if (0 === result.length) {
      Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* replyHelper */ "d"])(this.from, unic, result);
    }

    if (0 === result.length && !last) {
      return this.replyEmails({}, true);
    }

    return result;
  }
  /**
   * @param {Object} excludeEmails
   * @param {boolean=} last = false
   * @returns {Array.<Array>}
   */
  ;

  _proto.replyAllEmails = function replyAllEmails(excludeEmails, last) {
    if (last === void 0) {
      last = false;
    }

    var data = [];
    var toResult = [],
        ccResult = [],
        unic = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["isUnd"])(excludeEmails) ? {} : excludeEmails;
    Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* replyHelper */ "d"])(this.replyTo, unic, toResult);

    if (0 === toResult.length) {
      Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* replyHelper */ "d"])(this.from, unic, toResult);
    }

    Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* replyHelper */ "d"])(this.to, unic, toResult);
    Object(Helper_Message__WEBPACK_IMPORTED_MODULE_22__[/* replyHelper */ "d"])(this.cc, unic, ccResult);

    if (0 === toResult.length && !last) {
      data = this.replyAllEmails({}, true);
      return [data[0], ccResult];
    }

    return [toResult, ccResult];
  }
  /**
   * @returns {string}
   */
  ;

  _proto.textBodyToString = function textBodyToString() {
    return this.body ? this.body.html() : '';
  }
  /**
   * @returns {string}
   */
  ;

  _proto.attachmentsToStringLine = function attachmentsToStringLine() {
    var attachLines = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_8___default.a).call(___WEBPACK_IMPORTED_MODULE_8___default.a, this.attachments(), function (item) {
      return item.fileName + ' (' + item.friendlySize + ')';
    });

    return attachLines && 0 < attachLines.length ? attachLines.join(', ') : '';
  }
  /**
   * @param {boolean=} print = false
   */
  ;

  _proto.viewPopupMessage = function viewPopupMessage(print) {
    if (print === void 0) {
      print = false;
    }

    this.showLazyExternalImagesInBody();
    var timeStampInUTC = this.dateTimeStampInUTC() || 0,
        ccLine = this.ccToLine(false),
        m = 0 < timeStampInUTC ? moment__WEBPACK_IMPORTED_MODULE_11___default.a.unix(timeStampInUTC) : null;
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["previewMessage"])({
      title: this.subject(),
      subject: this.subject(),
      date: m ? m.format('LLL') : '',
      fromCreds: this.fromToLine(false),
      toLabel: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_15__["i18n"])('MESSAGE/LABEL_TO'),
      toCreds: this.toToLine(false),
      ccClass: ccLine ? '' : 'rl-preview-hide',
      ccLabel: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_15__["i18n"])('MESSAGE/LABEL_CC'),
      ccCreds: ccLine
    }, this.body, this.isHtml(), print);
  };

  _proto.printMessage = function printMessage() {
    this.viewPopupMessage(true);
  }
  /**
   * @returns {string}
   */
  ;

  _proto.generateUid = function generateUid() {
    return this.folderFullNameRaw + '/' + this.uid;
  }
  /**
   * @param {MessageModel} message
   * @returns {MessageModel}
   */
  ;

  _proto.populateByMessageListItem = function populateByMessageListItem(message) {
    if (message) {
      this.folderFullNameRaw = message.folderFullNameRaw;
      this.uid = message.uid;
      this.hash = message.hash;
      this.requestHash = message.requestHash;
      this.subject(message.subject());
    }

    this.subjectPrefix(this.subjectPrefix());
    this.subjectSuffix(this.subjectSuffix());

    if (message) {
      this.size(message.size());
      this.dateTimeStampInUTC(message.dateTimeStampInUTC());
      this.priority(message.priority());
      this.proxy = message.proxy;
      this.fromEmailString(message.fromEmailString());
      this.fromClearEmailString(message.fromClearEmailString());
      this.toEmailsString(message.toEmailsString());
      this.toClearEmailsString(message.toClearEmailsString());
      this.emails = message.emails;
      this.from = message.from;
      this.to = message.to;
      this.cc = message.cc;
      this.bcc = message.bcc;
      this.replyTo = message.replyTo;
      this.deliveredTo = message.deliveredTo;
      this.unsubsribeLinks = message.unsubsribeLinks;
      this.unseen(message.unseen());
      this.flagged(message.flagged());
      this.answered(message.answered());
      this.forwarded(message.forwarded());
      this.isReadReceipt(message.isReadReceipt());
      this.deletedMark(message.deletedMark());
      this.priority(message.priority());
      this.selected(message.selected());
      this.checked(message.checked());
      this.hasAttachments(message.hasAttachments());
      this.attachmentsSpecData(message.attachmentsSpecData());
    }

    this.body = null;
    this.aDraftInfo = [];
    this.sMessageId = '';
    this.sInReplyTo = '';
    this.sReferences = '';

    if (message) {
      this.threads(message.threads());
    }

    this.computeSenderEmail();
    return this;
  };

  _proto.showLazyExternalImagesInBody = function showLazyExternalImagesInBody() {
    if (this.body) {
      $__WEBPACK_IMPORTED_MODULE_9___default()('.lazy[data-original]', this.body).each(function () {
        $__WEBPACK_IMPORTED_MODULE_9___default()(this).attr('src', $__WEBPACK_IMPORTED_MODULE_9___default()(this).attr('data-original')) // eslint-disable-line no-invalid-this
        .removeAttr('data-original').removeAttr('data-loaded');
      });
    }
  };

  _proto.lozad = function lozad() {
    lozad__WEBPACK_IMPORTED_MODULE_13___default()('img.lazy:not(.lazy-inited)', {
      threshold: 0.4,
      load: function load(element) {
        // console.log('lazy', element.dataset.original);
        element.src = Common_Consts__WEBPACK_IMPORTED_MODULE_16__[/* DATA_IMAGE_LAZY_PLACEHOLDER_PIC */ "e"];
        $__WEBPACK_IMPORTED_MODULE_9___default()(element).addClass('lazy-inited').attr('src', element.dataset.original).removeAttr('data-loaded').removeAttr('data-original').css({
          opacity: 0.3
        }).animate({
          opacity: 1
        }, 500);
      }
    }).observe();
  };

  _proto.showExternalImages = function showExternalImages(lazy) {
    if (lazy === void 0) {
      lazy = false;
    }

    if (this.body && this.body.data('rl-has-images')) {
      this.hasImages(false);
      this.body.data('rl-has-images', false);
      var attr = this.proxy ? 'data-x-additional-src' : 'data-x-src';
      $__WEBPACK_IMPORTED_MODULE_9___default()('[' + attr + ']', this.body).each(function () {
        var $this = $__WEBPACK_IMPORTED_MODULE_9___default()(this); // eslint-disable-line no-invalid-this

        if (lazy && $this.is('img')) {
          $this.addClass('lazy').attr('data-original', $this.attr(attr)).removeAttr('data-loaded');
        } else {
          $this.attr('src', $this.attr(attr)).removeAttr('data-loaded');
        }
      });
      attr = this.proxy ? 'data-x-additional-style-url' : 'data-x-style-url';
      $__WEBPACK_IMPORTED_MODULE_9___default()('[' + attr + ']', this.body).each(function () {
        var $this = $__WEBPACK_IMPORTED_MODULE_9___default()(this); // eslint-disable-line no-invalid-this

        var style = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["trim"])($this.attr('style'));
        style = '' === style ? '' : ';' === style.substr(-1) ? style + ' ' : style + '; ';
        $this.attr('style', style + $this.attr(attr));
      });

      if (lazy) {
        this.lozad();
        Common_Globals__WEBPACK_IMPORTED_MODULE_18__["$win"].resize();
      }

      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["windowResize"])(500);
    }
  };

  _proto.showInternalImages = function showInternalImages(lazy) {
    var _this3 = this;

    if (lazy === void 0) {
      lazy = false;
    }

    if (this.body && !this.body.data('rl-init-internal-images')) {
      this.body.data('rl-init-internal-images', true);
      var self = this;
      $__WEBPACK_IMPORTED_MODULE_9___default()('[data-x-src-cid]', this.body).each(function () {
        var $this = $__WEBPACK_IMPORTED_MODULE_9___default()(this),
            // eslint-disable-line no-invalid-this
        attachment = self.findAttachmentByCid($this.attr('data-x-src-cid'));

        if (attachment && attachment.download) {
          if (lazy && $this.is('img')) {
            $this.addClass('lazy').attr('data-original', attachment.linkPreview());
          } else {
            $this.attr('src', attachment.linkPreview());
          }
        }
      });
      $__WEBPACK_IMPORTED_MODULE_9___default()('[data-x-src-location]', this.body).each(function () {
        var $this = $__WEBPACK_IMPORTED_MODULE_9___default()(this); // eslint-disable-line no-invalid-this

        var attachment = self.findAttachmentByContentLocation($this.attr('data-x-src-location'));

        if (!attachment) {
          attachment = self.findAttachmentByCid($this.attr('data-x-src-location'));
        }

        if (attachment && attachment.download) {
          if (lazy && $this.is('img')) {
            $this.addClass('lazy').attr('data-original', attachment.linkPreview());
          } else {
            $this.attr('src', attachment.linkPreview());
          }
        }
      });
      $__WEBPACK_IMPORTED_MODULE_9___default()('[data-x-style-cid]', this.body).each(function () {
        var style = '',
            name = '';
        var $this = $__WEBPACK_IMPORTED_MODULE_9___default()(this),
            // eslint-disable-line no-invalid-this
        attachment = self.findAttachmentByCid($this.attr('data-x-style-cid'));

        if (attachment && attachment.linkPreview) {
          name = $this.attr('data-x-style-cid-name');

          if ('' !== name) {
            style = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["trim"])($this.attr('style'));
            style = '' === style ? '' : ';' === style.substr(-1) ? style + ' ' : style + '; ';
            $this.attr('style', style + name + ": url('" + attachment.linkPreview() + "')");
          }
        }
      });

      if (lazy) {
        // $('.RL-MailMessageView .messageView .messageItem .content')[0]
        ___WEBPACK_IMPORTED_MODULE_8___default.a.delay(function () {
          return _this3.lozad();
        }, 300);
      }

      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_17__["windowResize"])(500);
    }
  };

  _proto.storeDataInDom = function storeDataInDom() {
    if (this.body) {
      this.body.data('rl-is-html', !!this.isHtml());
      this.body.data('rl-has-images', !!this.hasImages());
    }
  };

  _proto.fetchDataFromDom = function fetchDataFromDom() {
    if (this.body) {
      this.isHtml(!!this.body.data('rl-is-html'));
      this.hasImages(!!this.body.data('rl-has-images'));
    }
  };

  _proto.replacePlaneTextBody = function replacePlaneTextBody(plain) {
    if (this.body) {
      this.body.html(plain).addClass('b-text-part plain');
    }
  }
  /**
   * @returns {string}
   */
  ;

  _proto.flagHash = function flagHash() {
    return [this.deleted(), this.deletedMark(), this.unseen(), this.flagged(), this.answered(), this.forwarded(), this.isReadReceipt()].join(',');
  };

  return MessageModel;
}(Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_24__[/* AbstractModel */ "a"]);



/***/ }),
/* 321 */
/*!*************************************************!*\
  !*** ./node_modules/js-cookie/src/js.cookie.js ***!
  \*************************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
 * JavaScript Cookie v2.2.1
 * https://github.com/js-cookie/js-cookie
 *
 * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
 * Released under the MIT license
 */
;(function (factory) {
	var registeredInModuleLoader;
	if (true) {
		!(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
				(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :
				__WEBPACK_AMD_DEFINE_FACTORY__),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		registeredInModuleLoader = true;
	}
	if (true) {
		module.exports = factory();
		registeredInModuleLoader = true;
	}
	if (!registeredInModuleLoader) {
		var OldCookies = window.Cookies;
		var api = window.Cookies = factory();
		api.noConflict = function () {
			window.Cookies = OldCookies;
			return api;
		};
	}
}(function () {
	function extend () {
		var i = 0;
		var result = {};
		for (; i < arguments.length; i++) {
			var attributes = arguments[ i ];
			for (var key in attributes) {
				result[key] = attributes[key];
			}
		}
		return result;
	}

	function decode (s) {
		return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);
	}

	function init (converter) {
		function api() {}

		function set (key, value, attributes) {
			if (typeof document === 'undefined') {
				return;
			}

			attributes = extend({
				path: '/'
			}, api.defaults, attributes);

			if (typeof attributes.expires === 'number') {
				attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);
			}

			// We're using "expires" because "max-age" is not supported by IE
			attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';

			try {
				var result = JSON.stringify(value);
				if (/^[\{\[]/.test(result)) {
					value = result;
				}
			} catch (e) {}

			value = converter.write ?
				converter.write(value, key) :
				encodeURIComponent(String(value))
					.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);

			key = encodeURIComponent(String(key))
				.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)
				.replace(/[\(\)]/g, escape);

			var stringifiedAttributes = '';
			for (var attributeName in attributes) {
				if (!attributes[attributeName]) {
					continue;
				}
				stringifiedAttributes += '; ' + attributeName;
				if (attributes[attributeName] === true) {
					continue;
				}

				// Considers RFC 6265 section 5.2:
				// ...
				// 3.  If the remaining unparsed-attributes contains a %x3B (";")
				//     character:
				// Consume the characters of the unparsed-attributes up to,
				// not including, the first %x3B (";") character.
				// ...
				stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];
			}

			return (document.cookie = key + '=' + value + stringifiedAttributes);
		}

		function get (key, json) {
			if (typeof document === 'undefined') {
				return;
			}

			var jar = {};
			// To prevent the for loop in the first place assign an empty array
			// in case there are no cookies at all.
			var cookies = document.cookie ? document.cookie.split('; ') : [];
			var i = 0;

			for (; i < cookies.length; i++) {
				var parts = cookies[i].split('=');
				var cookie = parts.slice(1).join('=');

				if (!json && cookie.charAt(0) === '"') {
					cookie = cookie.slice(1, -1);
				}

				try {
					var name = decode(parts[0]);
					cookie = (converter.read || converter)(cookie, name) ||
						decode(cookie);

					if (json) {
						try {
							cookie = JSON.parse(cookie);
						} catch (e) {}
					}

					jar[name] = cookie;

					if (key === name) {
						break;
					}
				} catch (e) {}
			}

			return key ? jar[key] : jar;
		}

		api.set = set;
		api.get = function (key) {
			return get(key, false /* read as raw */);
		};
		api.getJSON = function (key) {
			return get(key, true /* read as json */);
		};
		api.remove = function (key, attributes) {
			set(key, '', extend(attributes, {
				expires: -1
			}));
		};

		api.defaults = {};

		api.withConverter = init;

		return api;
	}

	return init(function () {});
}));


/***/ }),
/* 322 */,
/* 323 */,
/* 324 */,
/* 325 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js/internals/create-html.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56);

var quot = /"/g;

// B.2.3.2.1 CreateHTML(string, tag, attribute, value)
// https://tc39.es/ecma262/#sec-createhtml
module.exports = function (string, tag, attribute, value) {
  var S = String(requireObjectCoercible(string));
  var p1 = '<' + tag;
  if (attribute !== '') p1 += ' ' + attribute + '="' + String(value).replace(quot, '&quot;') + '"';
  return p1 + '>' + S + '</' + tag + '>';
};


/***/ }),
/* 326 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js/internals/string-html-forced.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 37);

// check the existence of a method, lowercase
// of a tag and escaping quotes in arguments
module.exports = function (METHOD_NAME) {
  return fails(function () {
    var test = ''[METHOD_NAME]('"');
    return test !== test.toLowerCase() || test.split('"').length > 3;
  });
};


/***/ }),
/* 327 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/trim.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/trim */ 328);

module.exports = parent;


/***/ }),
/* 328 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/trim.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var trim = __webpack_require__(/*! ../string/virtual/trim */ 329);

var StringPrototype = String.prototype;

module.exports = function (it) {
  var own = it.trim;
  return typeof it === 'string' || it === StringPrototype
    || (it instanceof String && own === StringPrototype.trim) ? trim : own;
};


/***/ }),
/* 329 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/es/string/virtual/trim.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.string.trim */ 330);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('String').trim;


/***/ }),
/* 330 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.string.trim.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var $trim = __webpack_require__(/*! ../internals/string-trim */ 331).trim;
var forcedStringTrimMethod = __webpack_require__(/*! ../internals/string-trim-forced */ 332);

// `String.prototype.trim` method
// https://tc39.es/ecma262/#sec-string.prototype.trim
$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {
  trim: function trim() {
    return $trim(this);
  }
});


/***/ }),
/* 331 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/string-trim.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 115);
var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 285);

var whitespace = '[' + whitespaces + ']';
var ltrim = RegExp('^' + whitespace + whitespace + '*');
var rtrim = RegExp(whitespace + whitespace + '*$');

// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation
var createMethod = function (TYPE) {
  return function ($this) {
    var string = String(requireObjectCoercible($this));
    if (TYPE & 1) string = string.replace(ltrim, '');
    if (TYPE & 2) string = string.replace(rtrim, '');
    return string;
  };
};

module.exports = {
  // `String.prototype.{ trimLeft, trimStart }` methods
  // https://tc39.es/ecma262/#sec-string.prototype.trimstart
  start: createMethod(1),
  // `String.prototype.{ trimRight, trimEnd }` methods
  // https://tc39.es/ecma262/#sec-string.prototype.trimend
  end: createMethod(2),
  // `String.prototype.trim` method
  // https://tc39.es/ecma262/#sec-string.prototype.trim
  trim: createMethod(3)
};


/***/ }),
/* 332 */
/*!*******************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/string-trim-forced.js ***!
  \*******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 43);
var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 285);

var non = '\u200B\u0085\u180E';

// check that a method works with the correct list
// of whitespaces and has a correct name
module.exports = function (METHOD_NAME) {
  return fails(function () {
    return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;
  });
};


/***/ }),
/* 333 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/find.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/find */ 334);

module.exports = parent;


/***/ }),
/* 334 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/find.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var find = __webpack_require__(/*! ../array/virtual/find */ 335);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.find;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.find) ? find : own;
};


/***/ }),
/* 335 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/find.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.find */ 336);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').find;


/***/ }),
/* 336 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.find.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var $find = __webpack_require__(/*! ../internals/array-iteration */ 172).find;
var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 222);
var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 120);

var FIND = 'find';
var SKIPS_HOLES = true;

var USES_TO_LENGTH = arrayMethodUsesToLength(FIND);

// Shouldn't skip holes
if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });

// `Array.prototype.find` method
// https://tc39.es/ecma262/#sec-array.prototype.find
$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {
  find: function find(callbackfn /* , that = undefined */) {
    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  }
});

// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
addToUnscopables(FIND);


/***/ }),
/* 337 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/concat.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/concat */ 338);

module.exports = parent;


/***/ }),
/* 338 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/concat.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var concat = __webpack_require__(/*! ../array/virtual/concat */ 339);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.concat;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.concat) ? concat : own;
};


/***/ }),
/* 339 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/concat.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.concat */ 340);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').concat;


/***/ }),
/* 340 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.concat.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var fails = __webpack_require__(/*! ../internals/fails */ 43);
var isArray = __webpack_require__(/*! ../internals/is-array */ 173);
var isObject = __webpack_require__(/*! ../internals/is-object */ 50);
var toObject = __webpack_require__(/*! ../internals/to-object */ 117);
var toLength = __webpack_require__(/*! ../internals/to-length */ 91);
var createProperty = __webpack_require__(/*! ../internals/create-property */ 287);
var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 286);
var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 174);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 148);

var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');
var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;
var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';

// We can't use this feature detection in V8 since it causes
// deoptimization and serious performance degradation
// https://github.com/zloirock/core-js/issues/679
var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {
  var array = [];
  array[IS_CONCAT_SPREADABLE] = false;
  return array.concat()[0] !== array;
});

var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');

var isConcatSpreadable = function (O) {
  if (!isObject(O)) return false;
  var spreadable = O[IS_CONCAT_SPREADABLE];
  return spreadable !== undefined ? !!spreadable : isArray(O);
};

var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;

// `Array.prototype.concat` method
// https://tc39.es/ecma262/#sec-array.prototype.concat
// with adding support of @@isConcatSpreadable and @@species
$({ target: 'Array', proto: true, forced: FORCED }, {
  concat: function concat(arg) { // eslint-disable-line no-unused-vars
    var O = toObject(this);
    var A = arraySpeciesCreate(O, 0);
    var n = 0;
    var i, k, length, len, E;
    for (i = -1, length = arguments.length; i < length; i++) {
      E = i === -1 ? O : arguments[i];
      if (isConcatSpreadable(E)) {
        len = toLength(E.length);
        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);
      } else {
        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
        createProperty(A, n++, E);
      }
    }
    A.length = n;
    return A;
  }
});


/***/ }),
/* 341 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/values.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 161);
var values = __webpack_require__(/*! ../array/virtual/values */ 342);
var classof = __webpack_require__(/*! ../../internals/classof */ 92);
var ArrayPrototype = Array.prototype;

var DOMIterables = {
  DOMTokenList: true,
  NodeList: true
};

module.exports = function (it) {
  var own = it.values;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.values)
    // eslint-disable-next-line no-prototype-builtins
    || DOMIterables.hasOwnProperty(classof(it)) ? values : own;
};


/***/ }),
/* 342 */
/*!******************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/array/virtual/values.js ***!
  \******************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../../es/array/virtual/values */ 343);

module.exports = parent;


/***/ }),
/* 343 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/values.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.iterator */ 201);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').values;


/***/ }),
/* 344 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/reduce.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/reduce */ 288);

module.exports = parent;


/***/ }),
/* 345 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/reduce.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.reduce */ 346);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').reduce;


/***/ }),
/* 346 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.reduce.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var $reduce = __webpack_require__(/*! ../internals/array-reduce */ 347).left;
var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 289);
var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 120);
var CHROME_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 148);
var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ 118);

var STRICT_METHOD = arrayMethodIsStrict('reduce');
var USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 });
// Chrome 80-82 has a critical bug
// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;

// `Array.prototype.reduce` method
// https://tc39.es/ecma262/#sec-array.prototype.reduce
$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH || CHROME_BUG }, {
  reduce: function reduce(callbackfn /* , initialValue */) {
    return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
  }
});


/***/ }),
/* 347 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-reduce.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var aFunction = __webpack_require__(/*! ../internals/a-function */ 70);
var toObject = __webpack_require__(/*! ../internals/to-object */ 117);
var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 170);
var toLength = __webpack_require__(/*! ../internals/to-length */ 91);

// `Array.prototype.{ reduce, reduceRight }` methods implementation
var createMethod = function (IS_RIGHT) {
  return function (that, callbackfn, argumentsLength, memo) {
    aFunction(callbackfn);
    var O = toObject(that);
    var self = IndexedObject(O);
    var length = toLength(O.length);
    var index = IS_RIGHT ? length - 1 : 0;
    var i = IS_RIGHT ? -1 : 1;
    if (argumentsLength < 2) while (true) {
      if (index in self) {
        memo = self[index];
        index += i;
        break;
      }
      index += i;
      if (IS_RIGHT ? index < 0 : length <= index) {
        throw TypeError('Reduce of empty array with no initial value');
      }
    }
    for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {
      memo = callbackfn(memo, self[index], index, O);
    }
    return memo;
  };
};

module.exports = {
  // `Array.prototype.reduce` method
  // https://tc39.es/ecma262/#sec-array.prototype.reduce
  left: createMethod(false),
  // `Array.prototype.reduceRight` method
  // https://tc39.es/ecma262/#sec-array.prototype.reduceright
  right: createMethod(true)
};


/***/ }),
/* 348 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/map.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/map */ 349);

module.exports = parent;


/***/ }),
/* 349 */
/*!******************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/map.js ***!
  \******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var map = __webpack_require__(/*! ../array/virtual/map */ 350);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.map;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.map) ? map : own;
};


/***/ }),
/* 350 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/map.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.map */ 351);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').map;


/***/ }),
/* 351 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.map.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var $map = __webpack_require__(/*! ../internals/array-iteration */ 172).map;
var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 174);
var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 120);

var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');
// FF49- issue
var USES_TO_LENGTH = arrayMethodUsesToLength('map');

// `Array.prototype.map` method
// https://tc39.es/ecma262/#sec-array.prototype.map
// with adding support of @@species
$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {
  map: function map(callbackfn /* , thisArg */) {
    return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  }
});


/***/ }),
/* 352 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js/internals/array-species-create.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(/*! ../internals/is-object */ 49);
var isArray = __webpack_require__(/*! ../internals/is-array */ 353);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);

var SPECIES = wellKnownSymbol('species');

// `ArraySpeciesCreate` abstract operation
// https://tc39.es/ecma262/#sec-arrayspeciescreate
module.exports = function (originalArray, length) {
  var C;
  if (isArray(originalArray)) {
    C = originalArray.constructor;
    // cross-realm fallback
    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
    else if (isObject(C)) {
      C = C[SPECIES];
      if (C === null) C = undefined;
    }
  } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);
};


/***/ }),
/* 353 */
/*!****************************************************!*\
  !*** ./node_modules/core-js/internals/is-array.js ***!
  \****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var classof = __webpack_require__(/*! ../internals/classof-raw */ 74);

// `IsArray` abstract operation
// https://tc39.es/ecma262/#sec-isarray
// eslint-disable-next-line es/no-array-isarray -- safe
module.exports = Array.isArray || function isArray(arg) {
  return classof(arg) == 'Array';
};


/***/ }),
/* 354 */
/*!****************************************************************************!*\
  !*** ./node_modules/core-js/internals/array-method-has-species-support.js ***!
  \****************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var fails = __webpack_require__(/*! ../internals/fails */ 37);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 39);
var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 156);

var SPECIES = wellKnownSymbol('species');

module.exports = function (METHOD_NAME) {
  // We can't use this feature detection in V8 since it causes
  // deoptimization and serious performance degradation
  // https://github.com/zloirock/core-js/issues/677
  return V8_VERSION >= 51 || !fails(function () {
    var array = [];
    var constructor = array.constructor = {};
    constructor[SPECIES] = function () {
      return { foo: 1 };
    };
    return array[METHOD_NAME](Boolean).foo !== 1;
  });
};


/***/ }),
/* 355 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js/internals/array-for-each.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $forEach = __webpack_require__(/*! ../internals/array-iteration */ 290).forEach;
var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 284);

var STRICT_METHOD = arrayMethodIsStrict('forEach');

// `Array.prototype.forEach` method implementation
// https://tc39.es/ecma262/#sec-array.prototype.foreach
module.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {
  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
// eslint-disable-next-line es/no-array-prototype-foreach -- safe
} : [].forEach;


/***/ }),
/* 356 */
/*!******************************************************!*\
  !*** ./node_modules/core-js/internals/same-value.js ***!
  \******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {

// `SameValue` abstract operation
// https://tc39.es/ecma262/#sec-samevalue
// eslint-disable-next-line es/no-object-is -- safe
module.exports = Object.is || function is(x, y) {
  // eslint-disable-next-line no-self-compare -- NaN check
  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
};


/***/ }),
/* 357 */
/*!**************************************!*\
  !*** ./dev/Html/PreviewMessage.html ***!
  \**************************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony default export */ __webpack_exports__["default"] = ("<html>\n<head>\n\t<meta charset=\"utf-8\" />\n\t<meta name=\"viewport\" content=\"user-scalable=no\" />\n\t<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n\t<meta name=\"robots\" content=\"noindex, nofollow, noodp\" />\n\t<title>{{title}}</title>\n\t<style>\nhtml, body {\n\tbackground-color: #fff;\n\tfont-size: 13px;\n\tfont-family: arial, sans-serif;\n\tmargin: 0;\n\tpadding: 0;\n}\n\na {color: blue; text-decoration: underline}\na:visited {color: #609}\na:active {color: red}\nblockquote {border-left: 2px solid black; margin: 0; padding: 0px 10px}\n\npre {\n\tmargin: 0px;\n\tpadding: 0px;\n\tfont-family: Monaco, Menlo, Consolas, 'Courier New', monospace;\n\tbackground: #fff;\n\tborder: none;\n\twhite-space: pre-wrap;\n\tword-wrap: break-word;\n\tword-break: break-all;\n}\n\n.body-wrp {\n\tpadding: 10px;\n}\n\n.body-wrp.html pre {\n\tfont-family: Monaco, Menlo, Consolas, 'Courier New', monospace;\n\twhite-space: pre-wrap;\n\tword-wrap: break-word;\n\tword-break: normal;\n}\n\n.body-wrp.plain {\n\tpadding: 15px;\n\twhite-space: pre-wrap;\n\tfont-family: Monaco, Menlo, Consolas, 'Courier New', monospace;\n}\n\n.body-wrp.plain pre {\n\tmargin: 0px;\n\tpadding: 0px;\n\tbackground: #fff;\n\tborder: none;\n\tfont-family: Monaco, Menlo, Consolas, 'Courier New', monospace;\n\twhite-space: pre-wrap;\n\tword-wrap: break-word;\n\tword-break: normal;\n}\n\n.body-wrp.plain blockquote {\n\tborder-left: 2px solid blue;\n\tcolor: blue;\n}\n\n.body-wrp.plain blockquote blockquote {\n\tborder-left: 2px solid green;\n\tcolor: green;\n}\n\n.body-wrp.plain blockquote blockquote blockquote {\n\tborder-left: 2px solid red;\n\tcolor: red;\n}\n.rl-preview-subject {\n\tfont-size: 16px;\n\tfont-weight: bold;\n\tpadding: 15px;\n}\n.rl-preview-creds-from, .rl-preview-creds-to, .rl-preview-creds-cc {\n\tfont-size: 12px;\n\tpadding: 5px 15px;\n}\n.rl-preview-date {\n\tfloat: right;\n\tfont-size: 12px;\n\tpadding: 10px 15px;\n}\n.rl-preview-section {\n\tpadding: 0;\n\tmargin: 0;\n\tborder-bottom: 1px solid #ccc;\n}\n.rl-preview-hide {\n\tdisplay: none;\n}\n\t</style>\n</head>\n<body>\n\t<div class=\"rl-preview-section\">\n\t\t<div class=\"rl-preview-subject\">{{subject}}</div>\n\t</div>\n\t<div class=\"rl-preview-section\">\n\t\t<div class=\"rl-preview-date\">{{date}}</div>\n\t\t<div class=\"rl-preview-creds-from\">{{fromCreds}}</div>\n\t\t<div class=\"rl-preview-creds-to\">{{toLabel}}: {{toCreds}}</div>\n\t\t<div class=\"rl-preview-creds-cc {{ccClass}}\">{{ccLabel}}: {{ccCreds}}</div>\n\t</div>\n\t<div class=\"body-wrp {{bodyClass}}\">{{html}}</div>\n</body>\n</html>");

/***/ }),
/* 358 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/filter.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/filter */ 359);

module.exports = parent;


/***/ }),
/* 359 */
/*!*********************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/filter.js ***!
  \*********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var filter = __webpack_require__(/*! ../array/virtual/filter */ 360);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.filter;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.filter) ? filter : own;
};


/***/ }),
/* 360 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/filter.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.filter */ 361);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').filter;


/***/ }),
/* 361 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.filter.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var $filter = __webpack_require__(/*! ../internals/array-iteration */ 172).filter;
var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 174);
var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 120);

var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');
// Edge 14- issue
var USES_TO_LENGTH = arrayMethodUsesToLength('filter');

// `Array.prototype.filter` method
// https://tc39.es/ecma262/#sec-array.prototype.filter
// with adding support of @@species
$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {
  filter: function filter(callbackfn /* , thisArg */) {
    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  }
});


/***/ }),
/* 362 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/features/object/create.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/object/create */ 363);

module.exports = parent;


/***/ }),
/* 363 */
/*!*******************************************************!*\
  !*** ./node_modules/core-js-pure/es/object/create.js ***!
  \*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/es.object.create */ 364);
var path = __webpack_require__(/*! ../../internals/path */ 51);

var Object = path.Object;

module.exports = function create(P, D) {
  return Object.create(P, D);
};


/***/ }),
/* 364 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.object.create.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ 34);
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var create = __webpack_require__(/*! ../internals/object-create */ 160);

// `Object.create` method
// https://tc39.es/ecma262/#sec-object.create
$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {
  create: create
});


/***/ }),
/* 365 */
/*!***********************************************************************!*\
  !*** ./node_modules/core-js-pure/features/object/set-prototype-of.js ***!
  \***********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/object/set-prototype-of */ 366);

module.exports = parent;


/***/ }),
/* 366 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/es/object/set-prototype-of.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/es.object.set-prototype-of */ 367);
var path = __webpack_require__(/*! ../../internals/path */ 51);

module.exports = path.Object.setPrototypeOf;


/***/ }),
/* 367 */
/*!*************************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.object.set-prototype-of.js ***!
  \*************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ 34);
var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 159);

// `Object.setPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.setprototypeof
$({ target: 'Object', stat: true }, {
  setPrototypeOf: setPrototypeOf
});


/***/ }),
/* 368 */
/*!*****************************************************************!*\
  !*** ./node_modules/core-js-pure/features/instance/for-each.js ***!
  \*****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../stable/instance/for-each */ 369);

module.exports = parent;


/***/ }),
/* 369 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/for-each.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 161);
var forEach = __webpack_require__(/*! ../array/virtual/for-each */ 370);
var classof = __webpack_require__(/*! ../../internals/classof */ 92);
var ArrayPrototype = Array.prototype;

var DOMIterables = {
  DOMTokenList: true,
  NodeList: true
};

module.exports = function (it) {
  var own = it.forEach;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.forEach)
    // eslint-disable-next-line no-prototype-builtins
    || DOMIterables.hasOwnProperty(classof(it)) ? forEach : own;
};


/***/ }),
/* 370 */
/*!********************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/array/virtual/for-each.js ***!
  \********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../../es/array/virtual/for-each */ 371);

module.exports = parent;


/***/ }),
/* 371 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/for-each.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.for-each */ 372);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').forEach;


/***/ }),
/* 372 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.for-each.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var forEach = __webpack_require__(/*! ../internals/array-for-each */ 373);

// `Array.prototype.forEach` method
// https://tc39.es/ecma262/#sec-array.prototype.foreach
$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {
  forEach: forEach
});


/***/ }),
/* 373 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/internals/array-for-each.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $forEach = __webpack_require__(/*! ../internals/array-iteration */ 172).forEach;
var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 289);
var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 120);

var STRICT_METHOD = arrayMethodIsStrict('forEach');
var USES_TO_LENGTH = arrayMethodUsesToLength('forEach');

// `Array.prototype.forEach` method implementation
// https://tc39.es/ecma262/#sec-array.prototype.foreach
module.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {
  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
} : [].forEach;


/***/ }),
/* 374 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/features/object/keys.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/object/keys */ 375);

module.exports = parent;


/***/ }),
/* 375 */
/*!*****************************************************!*\
  !*** ./node_modules/core-js-pure/es/object/keys.js ***!
  \*****************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/es.object.keys */ 376);
var path = __webpack_require__(/*! ../../internals/path */ 51);

module.exports = path.Object.keys;


/***/ }),
/* 376 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.object.keys.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ 34);
var toObject = __webpack_require__(/*! ../internals/to-object */ 117);
var nativeKeys = __webpack_require__(/*! ../internals/object-keys */ 220);
var fails = __webpack_require__(/*! ../internals/fails */ 43);

var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });

// `Object.keys` method
// https://tc39.es/ecma262/#sec-object.keys
$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {
  keys: function keys(it) {
    return nativeKeys(toObject(it));
  }
});


/***/ }),
/* 377 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/features/instance/reduce.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/reduce */ 288);

module.exports = parent;


/***/ }),
/* 378 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/features/instance/reverse.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/reverse */ 379);

module.exports = parent;


/***/ }),
/* 379 */
/*!**********************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/reverse.js ***!
  \**********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var reverse = __webpack_require__(/*! ../array/virtual/reverse */ 380);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.reverse;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.reverse) ? reverse : own;
};


/***/ }),
/* 380 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/reverse.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.reverse */ 381);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').reverse;


/***/ }),
/* 381 */
/*!***************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.reverse.js ***!
  \***************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var isArray = __webpack_require__(/*! ../internals/is-array */ 173);

var nativeReverse = [].reverse;
var test = [1, 2];

// `Array.prototype.reverse` method
// https://tc39.es/ecma262/#sec-array.prototype.reverse
// fix for Safari 12.0 bug
// https://bugs.webkit.org/show_bug.cgi?id=188794
$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {
  reverse: function reverse() {
    // eslint-disable-next-line no-self-assign
    if (isArray(this)) this.length = this.length;
    return nativeReverse.call(this);
  }
});


/***/ }),
/* 382 */
/*!**************************************************************!*\
  !*** ./node_modules/core-js-pure/features/instance/slice.js ***!
  \**************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/instance/slice */ 383);

module.exports = parent;


/***/ }),
/* 383 */
/*!********************************************************!*\
  !*** ./node_modules/core-js-pure/es/instance/slice.js ***!
  \********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var slice = __webpack_require__(/*! ../array/virtual/slice */ 384);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.slice;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.slice) ? slice : own;
};


/***/ }),
/* 384 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/slice.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.slice */ 385);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').slice;


/***/ }),
/* 385 */
/*!*************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.array.slice.js ***!
  \*************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(/*! ../internals/export */ 34);
var isObject = __webpack_require__(/*! ../internals/is-object */ 50);
var isArray = __webpack_require__(/*! ../internals/is-array */ 173);
var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 221);
var toLength = __webpack_require__(/*! ../internals/to-length */ 91);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 80);
var createProperty = __webpack_require__(/*! ../internals/create-property */ 287);
var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 38);
var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 174);
var arrayMethodUsesToLength = __webpack_require__(/*! ../internals/array-method-uses-to-length */ 120);

var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');
var USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 });

var SPECIES = wellKnownSymbol('species');
var nativeSlice = [].slice;
var max = Math.max;

// `Array.prototype.slice` method
// https://tc39.es/ecma262/#sec-array.prototype.slice
// fallback for not array-like ES3 strings and DOM objects
$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {
  slice: function slice(start, end) {
    var O = toIndexedObject(this);
    var length = toLength(O.length);
    var k = toAbsoluteIndex(start, length);
    var fin = toAbsoluteIndex(end === undefined ? length : end, length);
    // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible
    var Constructor, result, n;
    if (isArray(O)) {
      Constructor = O.constructor;
      // cross-realm fallback
      if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {
        Constructor = undefined;
      } else if (isObject(Constructor)) {
        Constructor = Constructor[SPECIES];
        if (Constructor === null) Constructor = undefined;
      }
      if (Constructor === Array || Constructor === undefined) {
        return nativeSlice.call(O, k, fin);
      }
    }
    result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));
    for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);
    result.length = n;
    return result;
  }
});


/***/ }),
/* 386 */
/*!**********************************************************************!*\
  !*** ./node_modules/core-js-pure/features/object/define-property.js ***!
  \**********************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/object/define-property */ 387);

module.exports = parent;


/***/ }),
/* 387 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/es/object/define-property.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/es.object.define-property */ 388);
var path = __webpack_require__(/*! ../../internals/path */ 51);

var Object = path.Object;

var defineProperty = module.exports = function defineProperty(it, key, desc) {
  return Object.defineProperty(it, key, desc);
};

if (Object.defineProperty.sham) defineProperty.sham = true;


/***/ }),
/* 388 */
/*!************************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.object.define-property.js ***!
  \************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ 34);
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);
var objectDefinePropertyModile = __webpack_require__(/*! ../internals/object-define-property */ 81);

// `Object.defineProperty` method
// https://tc39.es/ecma262/#sec-object.defineproperty
$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {
  defineProperty: objectDefinePropertyModile.f
});


/***/ }),
/* 389 */
/*!********************************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/object/get-own-property-descriptor.js ***!
  \********************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../es/object/get-own-property-descriptor */ 390);

module.exports = parent;


/***/ }),
/* 390 */
/*!****************************************************************************!*\
  !*** ./node_modules/core-js-pure/es/object/get-own-property-descriptor.js ***!
  \****************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/es.object.get-own-property-descriptor */ 391);
var path = __webpack_require__(/*! ../../internals/path */ 51);

var Object = path.Object;

var getOwnPropertyDescriptor = module.exports = function getOwnPropertyDescriptor(it, key) {
  return Object.getOwnPropertyDescriptor(it, key);
};

if (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true;


/***/ }),
/* 391 */
/*!************************************************************************************!*\
  !*** ./node_modules/core-js-pure/modules/es.object.get-own-property-descriptor.js ***!
  \************************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var $ = __webpack_require__(/*! ../internals/export */ 34);
var fails = __webpack_require__(/*! ../internals/fails */ 43);
var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 80);
var nativeGetOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 157).f;
var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 53);

var FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });
var FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;

// `Object.getOwnPropertyDescriptor` method
// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {
  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {
    return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);
  }
});


/***/ }),
/* 392 */
/*!***********************************!*\
  !*** ./dev/View/Popup/Account.js ***!
  \***********************************/
/*! exports provided: AccountPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AccountPopupView", function() { return AccountPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AccountPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _class, _class2;










var AccountPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["popup"])({
  name: 'View/Popup/Account',
  templateID: 'PopupsAccount'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["command"])(function (self) {
  return !self.submitRequest();
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AccountPopupView, _AbstractViewNext);

  function AccountPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.isNew = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(true);
    _this.email = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    _this.password = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    _this.emailError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.passwordError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);

    _this.email.subscribe(function () {
      _this.emailError(false);
    });

    _this.password.subscribe(function () {
      _this.passwordError(false);
    });

    _this.submitRequest = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.submitError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    _this.submitErrorAdditional = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    _this.emailFocus = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    return _this;
  }

  var _proto = AccountPopupView.prototype;

  _proto.addAccountCommand = function addAccountCommand() {
    var _this2 = this;

    this.emailError('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["trim"])(this.email()));
    this.passwordError('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["trim"])(this.password()));

    if (this.emailError() || this.passwordError()) {
      return false;
    }

    this.submitRequest(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].accountSetup(function (result, data) {
      _this2.submitRequest(false);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === result && data) {
        if (data.Result) {
          Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_8__[/* getApp */ "a"])().accountsAndIdentities();

          _this2.cancelCommand();
        } else {
          _this2.submitError(data.ErrorCode ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_6__["getNotification"])(data.ErrorCode) : Object(Common_Translator__WEBPACK_IMPORTED_MODULE_6__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].UnknownError));

          if (data.ErrorMessageAdditional) {
            _this2.submitErrorAdditional(data.ErrorMessageAdditional);
          }
        }
      } else {
        _this2.submitError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_6__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].UnknownError));

        _this2.submitErrorAdditional('');
      }
    }, this.email(), this.password(), this.isNew());
    return true;
  };

  _proto.clearPopup = function clearPopup() {
    this.isNew(true);
    this.email('');
    this.password('');
    this.emailError(false);
    this.passwordError(false);
    this.submitRequest(false);
    this.submitError('');
    this.submitErrorAdditional('');
  };

  _proto.onShow = function onShow(account) {
    this.clearPopup();

    if (account && account.canBeEdit()) {
      this.isNew(false);
      this.email(account.email);
    }
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    this.emailFocus(true);
  };

  return AccountPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_10__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "addAccountCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "addAccountCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 393 */
/*!************************************!*\
  !*** ./dev/View/Popup/Identity.js ***!
  \************************************/
/*! exports provided: IdentityPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IdentityPopupView", function() { return IdentityPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return IdentityPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _class, _class2;












var IdentityPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["popup"])({
  name: 'View/Popup/Identity',
  templateID: 'PopupsIdentity'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["command"])(function (self) {
  return !self.submitRequest();
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(IdentityPopupView, _AbstractViewNext);

  function IdentityPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.id = '';
    _this.edit = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.owner = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.email = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('').validateEmail();
    _this.email.focused = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.name = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('');
    _this.name.focused = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.replyTo = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('').validateSimpleEmail();
    _this.replyTo.focused = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.bcc = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('').validateSimpleEmail();
    _this.bcc.focused = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.signature = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('');
    _this.signatureInsertBefore = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.showBcc = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.showReplyTo = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.submitRequest = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.submitError = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('');

    _this.bcc.subscribe(function (value) {
      if (false === _this.showBcc() && 0 < value.length) {
        _this.showBcc(true);
      }
    });

    _this.replyTo.subscribe(function (value) {
      if (false === _this.showReplyTo() && 0 < value.length) {
        _this.showReplyTo(true);
      }
    });

    return _this;
  }

  var _proto = IdentityPopupView.prototype;

  _proto.addOrEditIdentityCommand = function addOrEditIdentityCommand() {
    var _this2 = this;

    if (this.signature && this.signature.__fetchEditorValue) {
      this.signature.__fetchEditorValue();
    }

    if (!this.email.hasError()) {
      this.email.hasError('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["trim"])(this.email()));
    }

    if (this.email.hasError()) {
      if (!this.owner()) {
        this.email.focused(true);
      }

      return false;
    }

    if (this.replyTo.hasError()) {
      this.replyTo.focused(true);
      return false;
    }

    if (this.bcc.hasError()) {
      this.bcc.focused(true);
      return false;
    }

    this.submitRequest(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].identityUpdate(function (result, data) {
      _this2.submitRequest(false);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_5__["StorageResultType"].Success === result && data) {
        if (data.Result) {
          Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_10__[/* getApp */ "a"])().accountsAndIdentities();

          _this2.cancelCommand();
        } else if (data.ErrorCode) {
          _this2.submitError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["getNotification"])(data.ErrorCode));
        }
      } else {
        _this2.submitError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Notification"].UnknownError));
      }
    }, this.id, this.email(), this.name(), this.replyTo(), this.bcc(), this.signature(), this.signatureInsertBefore());
    return true;
  };

  _proto.clearPopup = function clearPopup() {
    this.id = '';
    this.edit(false);
    this.owner(false);
    this.name('');
    this.email('');
    this.replyTo('');
    this.bcc('');
    this.signature('');
    this.signatureInsertBefore(false);
    this.email.hasError(false);
    this.replyTo.hasError(false);
    this.bcc.hasError(false);
    this.showBcc(false);
    this.showReplyTo(false);
    this.submitRequest(false);
    this.submitError('');
  }
  /**
   * @param {?IdentityModel} oIdentity
   */
  ;

  _proto.onShow = function onShow(identity) {
    this.clearPopup();

    if (identity) {
      this.edit(true);
      this.id = identity.id() || '';
      this.name(identity.name());
      this.email(identity.email());
      this.replyTo(identity.replyTo());
      this.bcc(identity.bcc());
      this.signature(identity.signature());
      this.signatureInsertBefore(identity.signatureInsertBefore());
      this.owner('' === this.id);
    } else {
      this.id = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["fakeMd5"])();
    }
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    if (!this.owner() && !Common_Globals__WEBPACK_IMPORTED_MODULE_6__["bMobileDevice"]) {
      this.email.focused(true);
    }
  };

  _proto.onHideWithDelay = function onHideWithDelay() {
    this.clearPopup();
  };

  return IdentityPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_12__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "addOrEditIdentityCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "addOrEditIdentityCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 394 */
/*!**************************************!*\
  !*** ./dev/Component/SaveTrigger.js ***!
  \**************************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Component/Abstract */ 32);







var SaveTriggerComponent = /*#__PURE__*/function (_AbstractComponent) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(SaveTriggerComponent, _AbstractComponent);

  /**
   * @param {Object} params
   */
  function SaveTriggerComponent(params) {
    var _this;

    _this = _AbstractComponent.call(this) || this;
    _this.element = params.element || null;
    _this.value = params.value && params.value.subscribe ? params.value : null;

    if (_this.element) {
      if (_this.value) {
        _this.element.css('display', 'inline-block');

        if (params.verticalAlign) {
          _this.element.css('vertical-align', params.verticalAlign);
        }

        _this.setState(_this.value());

        _this.disposable.push(_this.value.subscribe(_this.setState, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this)));
      } else {
        _this.element.hide();
      }
    }

    return _this;
  }

  var _proto = SaveTriggerComponent.prototype;

  _proto.setState = function setState(value) {
    var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8;

    switch (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pInt"])(value)) {
      case Common_Enums__WEBPACK_IMPORTED_MODULE_4__["SaveSettingsStep"].TrueResult:
        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context2 = this.element).call(_context2, '.animated,.error').hide().removeClass('visible').end()).call(_context, '.success').show().addClass('visible');

        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_4__["SaveSettingsStep"].FalseResult:
        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context4 = this.element).call(_context4, '.animated,.success').hide().removeClass('visible').end()).call(_context3, '.error').show().addClass('visible');

        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_4__["SaveSettingsStep"].Animate:
        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context6 = this.element).call(_context6, '.error,.success').hide().removeClass('visible').end()).call(_context5, '.animated').show().addClass('visible');

        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_4__["SaveSettingsStep"].Idle:
      default:
        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context7 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context8 = this.element).call(_context8, '.animated').hide().end()).call(_context7, '.error,.success').removeClass('visible');

        break;
    }
  };

  return SaveTriggerComponent;
}(Component_Abstract__WEBPACK_IMPORTED_MODULE_5__[/* AbstractComponent */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_5__[/* componentExportHelper */ "b"])(SaveTriggerComponent, 'SaveTriggerComponent'));

/***/ }),
/* 395 */
/*!********************************!*\
  !*** ./dev/Component/Input.js ***!
  \********************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractInput */ 87);




var InputComponent = /*#__PURE__*/function (_AbstractInput) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(InputComponent, _AbstractInput);

  function InputComponent() {
    return _AbstractInput.apply(this, arguments) || this;
  }

  return InputComponent;
}(Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__[/* AbstractInput */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(InputComponent, 'InputComponent'));

/***/ }),
/* 396 */
/*!*********************************!*\
  !*** ./dev/Component/Select.js ***!
  \*********************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Component/AbstractInput */ 87);






var SelectComponent = /*#__PURE__*/function (_AbstractInput) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(SelectComponent, _AbstractInput);

  /**
   * @param {Object} params
   */
  function SelectComponent(params) {
    var _this;

    _this = _AbstractInput.call(this, params) || this;
    _this.options = params.options || '';
    _this.optionsText = params.optionsText || null;
    _this.optionsValue = params.optionsValue || null;
    _this.optionsCaption = params.optionsCaption || null;

    if (_this.optionsCaption) {
      _this.optionsCaption = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_1__["i18n"])(_this.optionsCaption);
    }

    _this.defautOptionsAfterRender = Common_Utils__WEBPACK_IMPORTED_MODULE_2__["defautOptionsAfterRender"];
    return _this;
  }

  return SelectComponent;
}(Component_AbstractInput__WEBPACK_IMPORTED_MODULE_4__[/* AbstractInput */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_3__[/* componentExportHelper */ "b"])(SelectComponent, 'SelectComponent'));

/***/ }),
/* 397 */
/*!********************************!*\
  !*** ./dev/Component/Radio.js ***!
  \********************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractRadio__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractRadio */ 307);




var RadioComponent = /*#__PURE__*/function (_AbstractRadio) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(RadioComponent, _AbstractRadio);

  function RadioComponent() {
    return _AbstractRadio.apply(this, arguments) || this;
  }

  return RadioComponent;
}(Component_AbstractRadio__WEBPACK_IMPORTED_MODULE_2__[/* AbstractRadio */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(RadioComponent, 'RadioComponent'));

/***/ }),
/* 398 */
/*!***********************************!*\
  !*** ./dev/Component/TextArea.js ***!
  \***********************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Component/AbstractInput */ 87);




var DEFAULT_ROWS = 5;

var TextAreaComponent = /*#__PURE__*/function (_AbstractInput) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(TextAreaComponent, _AbstractInput);

  /**
   * @param {Object} params
   */
  function TextAreaComponent(params) {
    var _this;

    _this = _AbstractInput.call(this, params) || this;
    _this.rows = params.rows || DEFAULT_ROWS;
    _this.spellcheck = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(params.spellcheck) ? false : !!params.spellcheck;
    return _this;
  }

  return TextAreaComponent;
}(Component_AbstractInput__WEBPACK_IMPORTED_MODULE_3__[/* AbstractInput */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_2__[/* componentExportHelper */ "b"])(TextAreaComponent, 'TextAreaComponent'));

/***/ }),
/* 399 */
/*!*******************************!*\
  !*** ./dev/Component/Date.js ***!
  \*******************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Component/AbstractInput */ 87);




var DateComponent = /*#__PURE__*/function (_AbstractInput) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(DateComponent, _AbstractInput);

  function DateComponent() {
    return _AbstractInput.apply(this, arguments) || this;
  }

  return DateComponent;
}(Component_AbstractInput__WEBPACK_IMPORTED_MODULE_2__[/* AbstractInput */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_1__[/* componentExportHelper */ "b"])(DateComponent, 'DateComponent'));

/***/ }),
/* 400 */
/*!*********************************!*\
  !*** ./dev/Component/Script.js ***!
  \*********************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Component/Abstract */ 32);






var ScriptComponent = /*#__PURE__*/function (_AbstractComponent) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(ScriptComponent, _AbstractComponent);

  /**
   * @param {Object} params
   */
  function ScriptComponent(params) {
    var _this;

    _this = _AbstractComponent.call(this) || this;

    if (params.component && params.component.templateNodes && params.element && params.element[0] && params.element[0].outerHTML) {
      var script = params.element[0].outerHTML;
      script = !script ? '' : script.replace(/<x-script/i, '<script').replace(/<b><\/b><\/x-script>/i, '</script>');

      if (script) {
        params.element.text('');
        params.element.replaceWith($__WEBPACK_IMPORTED_MODULE_3___default()(script).text(params.component.templateNodes[0] && params.component.templateNodes[0].nodeValue ? params.component.templateNodes[0].nodeValue : ''));
      } else {
        params.element.remove();
      }
    }

    return _this;
  }

  return ScriptComponent;
}(Component_Abstract__WEBPACK_IMPORTED_MODULE_4__[/* AbstractComponent */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_4__[/* componentExportHelper */ "b"])(ScriptComponent, 'ScriptComponent'));

/***/ }),
/* 401 */
/*!**************************************************!*\
  !*** ./dev/Component/MaterialDesign/Checkbox.js ***!
  \**************************************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Component_Abstract__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Component/Abstract */ 32);
/* harmony import */ var Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Component/AbstractCheckbox */ 177);







var CheckboxMaterialDesignComponent = /*#__PURE__*/function (_AbstractCheckbox) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(CheckboxMaterialDesignComponent, _AbstractCheckbox);

  /**
   * @param {Object} params
   */
  function CheckboxMaterialDesignComponent(params) {
    var _this;

    _this = _AbstractCheckbox.call(this, params) || this;
    _this.animationBox = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false).extend({
      falseTimeout: 200
    });
    _this.animationCheckmark = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false).extend({
      falseTimeout: 200
    });
    _this.animationBoxSetTrue = ___WEBPACK_IMPORTED_MODULE_2___default.a.bind(_this.animationBoxSetTrue, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    _this.animationCheckmarkSetTrue = ___WEBPACK_IMPORTED_MODULE_2___default.a.bind(_this.animationCheckmarkSetTrue, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));

    _this.disposable.push(_this.value.subscribe(function (value) {
      _this.triggerAnimation(value);
    }, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this)));

    return _this;
  }

  var _proto = CheckboxMaterialDesignComponent.prototype;

  _proto.animationBoxSetTrue = function animationBoxSetTrue() {
    this.animationBox(true);
  };

  _proto.animationCheckmarkSetTrue = function animationCheckmarkSetTrue() {
    this.animationCheckmark(true);
  };

  _proto.triggerAnimation = function triggerAnimation(box) {
    if (box) {
      this.animationBoxSetTrue();

      ___WEBPACK_IMPORTED_MODULE_2___default.a.delay(this.animationCheckmarkSetTrue, 200);
    } else {
      this.animationCheckmarkSetTrue();

      ___WEBPACK_IMPORTED_MODULE_2___default.a.delay(this.animationBoxSetTrue, 200);
    }
  };

  return CheckboxMaterialDesignComponent;
}(Component_AbstractCheckbox__WEBPACK_IMPORTED_MODULE_5__[/* AbstractCheckbox */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (Object(Component_Abstract__WEBPACK_IMPORTED_MODULE_4__[/* componentExportHelper */ "b"])(CheckboxMaterialDesignComponent, 'CheckboxMaterialDesignComponent'));

/***/ }),
/* 402 */
/*!*************************!*\
  !*** ./dev/App/User.js ***!
  \*************************/
/*! exports provided: default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ 85);
/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ 119);
/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-interval */ 57);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! progressJs */ 101);
/* harmony import */ var progressJs__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(progressJs__WEBPACK_IMPORTED_MODULE_12__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Common/Plugins */ 36);
/* harmony import */ var Common_Momentor__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Common/Momentor */ 61);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Common/Events */ 23);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Stores_Social__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Stores/Social */ 26);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Stores/User/Settings */ 35);
/* harmony import */ var Stores_User_Notification__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Stores/User/Notification */ 124);
/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Stores/User/Account */ 46);
/* harmony import */ var Stores_User_Contact__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Stores/User/Contact */ 103);
/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Stores/User/Identity */ 102);
/* harmony import */ var Stores_User_Template__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Stores/User/Template */ 206);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! Stores/User/Pgp */ 41);
/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! Stores/User/Message */ 13);
/* harmony import */ var Stores_User_Quota__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! Stores/User/Quota */ 239);
/* harmony import */ var Storage_Client__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! Storage/Client */ 60);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Storage_RainLoop__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! Storage/RainLoop */ 163);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! Promises/User/Ajax */ 93);
/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! Model/Email */ 82);
/* harmony import */ var Model_Account__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! Model/Account */ 442);
/* harmony import */ var Model_Identity__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! Model/Identity */ 443);
/* harmony import */ var Model_Template__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! Model/Template */ 444);
/* harmony import */ var Model_OpenPgpKey__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! Model/OpenPgpKey */ 445);
/* harmony import */ var Screen_User_Login__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! Screen/User/Login */ 446);
/* harmony import */ var Screen_User_MailBox__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! Screen/User/MailBox */ 448);
/* harmony import */ var Screen_User_Settings__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! Screen/User/Settings */ 454);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var App_Abstract__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! App/Abstract */ 305);












































 // import {AboutUserScreen} from 'Screen/User/About';







var AppUser = /*#__PURE__*/function (_AbstractApp) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(AppUser, _AbstractApp);

  function AppUser() {
    var _this;

    _this = _AbstractApp.call(this, Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"]) || this;
    _this.moveCache = {};
    _this.quotaDebounce = ___WEBPACK_IMPORTED_MODULE_10___default.a.debounce(_this.quota, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time30s);
    _this.moveOrDeleteResponseHelper = ___WEBPACK_IMPORTED_MODULE_10___default.a.bind(_this.moveOrDeleteResponseHelper, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    _this.messagesMoveTrigger = ___WEBPACK_IMPORTED_MODULE_10___default.a.debounce(_this.messagesMoveTrigger, 500);

    _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(function () {
      return Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('interval.30s');
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time30s);

    _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(function () {
      return Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('interval.1m');
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time1m);

    _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(function () {
      return Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('interval.2m');
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time2m);

    _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(function () {
      return Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('interval.3m');
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time3m);

    _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(function () {
      return Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('interval.5m');
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time5m);

    _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(function () {
      return Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('interval.10m');
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time10m);

    _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(function () {
      return Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('interval.15m');
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time15m);

    _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(function () {
      return Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('interval.20m');
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time20m);

    _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_6___default()(function () {
      return _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(function () {
        return Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('interval.2m-after5m');
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time2m);
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time5m);

    _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_6___default()(function () {
      return _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(function () {
        return Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('interval.5m-after5m');
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time5m);
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time5m);

    _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_6___default()(function () {
      return _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(function () {
        return Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('interval.10m-after5m');
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time10m);
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time5m);

    $__WEBPACK_IMPORTED_MODULE_11___default.a.wakeUp(function () {
      if (Object(Storage_RainLoop__WEBPACK_IMPORTED_MODULE_37__[/* checkTimestamp */ "a"])()) {
        _this.reload();
      }

      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].jsVersion(function (sResult, oData) {
        if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Success === sResult && oData && !oData.Result) {
          _this.reload();
        }
      }, Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["appSettingsGet"]('version'));
    }, {}, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time60m);

    if (Object(Storage_RainLoop__WEBPACK_IMPORTED_MODULE_37__[/* checkTimestamp */ "a"])()) {
      _this.reload();
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('UserBackgroundHash')) {
      ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
        $__WEBPACK_IMPORTED_MODULE_11___default()('#rl-bg').attr('style', 'background-image: none !important;').backstretch(Object(Common_Links__WEBPACK_IMPORTED_MODULE_20__[/* userBackground */ "J"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('UserBackgroundHash')), {
          fade: Common_Globals__WEBPACK_IMPORTED_MODULE_15__["bAnimationSupported"] ? Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time1s : 0,
          centeredX: true,
          centeredY: true
        }).removeAttr('style');
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time1s);
    }

    _this.socialUsers = ___WEBPACK_IMPORTED_MODULE_10___default.a.bind(_this.socialUsers, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    return _this;
  }

  var _proto = AppUser.prototype;

  _proto.remote = function remote() {
    return Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"];
  };

  _proto.reload = function reload() {
    if (window__WEBPACK_IMPORTED_MODULE_9___default.a.parent && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["appSettingsGet"]('inIframe')) {
      window__WEBPACK_IMPORTED_MODULE_9___default.a.parent.location.reload();
    } else {
      window__WEBPACK_IMPORTED_MODULE_9___default.a.location.reload();
    }
  };

  _proto.reloadFlagsCurrentMessageListAndMessageFromCache = function reloadFlagsCurrentMessageListAndMessageFromCache() {
    ___WEBPACK_IMPORTED_MODULE_10___default.a.each(Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageList(), function (message) {
      Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* initMessageFlagsFromCache */ "n"])(message);
    });

    Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* initMessageFlagsFromCache */ "n"])(Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].message());
  }
  /**
   * @param {boolean=} bDropPagePosition = false
   * @param {boolean=} bDropCurrenFolderCache = false
   */
  ;

  _proto.reloadMessageList = function reloadMessageList(bDropPagePosition, bDropCurrenFolderCache) {
    if (bDropPagePosition === void 0) {
      bDropPagePosition = false;
    }

    if (bDropCurrenFolderCache === void 0) {
      bDropCurrenFolderCache = false;
    }

    var iOffset = (Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListPage() - 1) * Stores_User_Settings__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].messagesPerPage();

    if (bDropCurrenFolderCache) {
      Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* setFolderHash */ "q"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].currentFolderFullNameRaw(), '');
    }

    if (bDropPagePosition) {
      Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListPage(1);
      Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListPageBeforeThread(1);
      iOffset = 0;
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_20__[/* mailBox */ "o"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].currentFolderFullNameHash(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListPage(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListSearch(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListThreadUid()), true, true);
    }

    Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListLoading(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].messageList(function (sResult, oData, bCached) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Success === sResult && oData && oData.Result) {
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListError('');
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListLoading(false);
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].setMessageList(oData, bCached);
      } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Unload === sResult) {
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListError('');
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListLoading(false);
      } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Abort !== sResult) {
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageList([]);
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListLoading(false);
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListError(oData && oData.ErrorCode ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_22__["getNotification"])(oData.ErrorCode) : Object(Common_Translator__WEBPACK_IMPORTED_MODULE_22__["i18n"])('NOTIFICATIONS/CANT_GET_MESSAGE_LIST'));
      }
    }, Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].currentFolderFullNameRaw(), iOffset, Stores_User_Settings__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].messagesPerPage(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListSearch(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListThreadUid());
  };

  _proto.recacheInboxMessageList = function recacheInboxMessageList() {
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].messageList(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["noop"], Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderInboxName */ "h"])(), 0, Stores_User_Settings__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].messagesPerPage(), '', '', true);
  }
  /**
   * @param {Function} fResultFunc
   * @returns {boolean}
   */
  ;

  _proto.contactsSync = function contactsSync(fResultFunc) {
    var oContacts = Stores_User_Contact__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].contacts;

    if (oContacts.importing() || oContacts.syncing() || !Stores_User_Contact__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].enableContactsSync() || !Stores_User_Contact__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].allowContactsSync()) {
      return false;
    }

    oContacts.syncing(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].contactsSync(function (sResult, oData) {
      oContacts.syncing(false);

      if (fResultFunc) {
        fResultFunc(sResult, oData);
      }
    });
    return true;
  };

  _proto.messagesMoveTrigger = function messagesMoveTrigger() {
    var _this2 = this;

    var sTrashFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].trashFolder(),
        sSpamFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].spamFolder();

    ___WEBPACK_IMPORTED_MODULE_10___default.a.each(this.moveCache, function (item) {
      var isSpam = sSpamFolder === item.To,
          isTrash = sTrashFolder === item.To,
          isHam = !isSpam && sSpamFolder === item.From && Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderInboxName */ "h"])() === item.To;
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].messagesMove(_this2.moveOrDeleteResponseHelper, item.From, item.To, item.Uid, isSpam ? 'SPAM' : isHam ? 'HAM' : '', isSpam || isTrash);
    });

    this.moveCache = {};
  };

  _proto.messagesMoveHelper = function messagesMoveHelper(fromFolderFullNameRaw, toFolderFullNameRaw, uidsForMove) {
    var hash = '$$' + fromFolderFullNameRaw + '$$' + toFolderFullNameRaw + '$$';

    if (!this.moveCache[hash]) {
      this.moveCache[hash] = {
        From: fromFolderFullNameRaw,
        To: toFolderFullNameRaw,
        Uid: []
      };
    }

    this.moveCache[hash].Uid = ___WEBPACK_IMPORTED_MODULE_10___default.a.union(this.moveCache[hash].Uid, uidsForMove);
    this.messagesMoveTrigger();
  };

  _proto.messagesCopyHelper = function messagesCopyHelper(sFromFolderFullNameRaw, sToFolderFullNameRaw, aUidForCopy) {
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].messagesCopy(this.moveOrDeleteResponseHelper, sFromFolderFullNameRaw, sToFolderFullNameRaw, aUidForCopy);
  };

  _proto.messagesDeleteHelper = function messagesDeleteHelper(sFromFolderFullNameRaw, aUidForRemove) {
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].messagesDelete(this.moveOrDeleteResponseHelper, sFromFolderFullNameRaw, aUidForRemove);
  };

  _proto.moveOrDeleteResponseHelper = function moveOrDeleteResponseHelper(sResult, oData) {
    if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Success === sResult && Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].currentFolder()) {
      if (oData && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isArray"])(oData.Result) && 2 === oData.Result.length) {
        Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* setFolderHash */ "q"])(oData.Result[0], oData.Result[1]);
      } else {
        Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* setFolderHash */ "q"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].currentFolderFullNameRaw(), '');

        if (oData && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["inArray"])(oData.ErrorCode, [Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Notification"].CantMoveMessage, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Notification"].CantCopyMessage])) {
          window__WEBPACK_IMPORTED_MODULE_9___default.a.alert(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_22__["getNotification"])(oData.ErrorCode));
        }
      }

      this.reloadMessageList(0 === Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageList().length);
      this.quotaDebounce();
    }
  }
  /**
   * @param {string} sFromFolderFullNameRaw
   * @param {Array} aUidForRemove
   */
  ;

  _proto.deleteMessagesFromFolderWithoutCheck = function deleteMessagesFromFolderWithoutCheck(sFromFolderFullNameRaw, aUidForRemove) {
    this.messagesDeleteHelper(sFromFolderFullNameRaw, aUidForRemove);
    Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].removeMessagesFromList(sFromFolderFullNameRaw, aUidForRemove);
  }
  /**
   * @param {number} iDeleteType
   * @param {string} sFromFolderFullNameRaw
   * @param {Array} aUidForRemove
   * @param {boolean=} bUseFolder = true
   */
  ;

  _proto.deleteMessagesFromFolder = function deleteMessagesFromFolder(iDeleteType, sFromFolderFullNameRaw, aUidForRemove, bUseFolder) {
    var _this3 = this;

    var oMoveFolder = null,
        nSetSystemFoldersNotification = null;

    switch (iDeleteType) {
      case Common_Enums__WEBPACK_IMPORTED_MODULE_14__["FolderType"].Spam:
        oMoveFolder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderFromCacheList */ "e"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].spamFolder());
        nSetSystemFoldersNotification = Common_Enums__WEBPACK_IMPORTED_MODULE_14__["SetSystemFoldersNotification"].Spam;
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_14__["FolderType"].NotSpam:
        oMoveFolder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderFromCacheList */ "e"])(Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderInboxName */ "h"])());
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_14__["FolderType"].Trash:
        oMoveFolder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderFromCacheList */ "e"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].trashFolder());
        nSetSystemFoldersNotification = Common_Enums__WEBPACK_IMPORTED_MODULE_14__["SetSystemFoldersNotification"].Trash;
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_14__["FolderType"].Archive:
        oMoveFolder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderFromCacheList */ "e"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].archiveFolder());
        nSetSystemFoldersNotification = Common_Enums__WEBPACK_IMPORTED_MODULE_14__["SetSystemFoldersNotification"].Archive;
        break;
      // no default
    }

    bUseFolder = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isUnd"])(bUseFolder) ? true : !!bUseFolder;

    if (bUseFolder) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["FolderType"].Spam === iDeleteType && Common_Consts__WEBPACK_IMPORTED_MODULE_16__[/* UNUSED_OPTION_VALUE */ "r"] === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].spamFolder() || Common_Enums__WEBPACK_IMPORTED_MODULE_14__["FolderType"].Trash === iDeleteType && Common_Consts__WEBPACK_IMPORTED_MODULE_16__[/* UNUSED_OPTION_VALUE */ "r"] === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].trashFolder() || Common_Enums__WEBPACK_IMPORTED_MODULE_14__["FolderType"].Archive === iDeleteType && Common_Consts__WEBPACK_IMPORTED_MODULE_16__[/* UNUSED_OPTION_VALUE */ "r"] === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].archiveFolder()) {
        bUseFolder = false;
      }
    }

    if (!oMoveFolder && bUseFolder) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 316), [nSetSystemFoldersNotification]);
    } else if (!bUseFolder || Common_Enums__WEBPACK_IMPORTED_MODULE_14__["FolderType"].Trash === iDeleteType && (sFromFolderFullNameRaw === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].spamFolder() || sFromFolderFullNameRaw === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].trashFolder())) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Ask */ 238), [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_22__["i18n"])('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'), function () {
        _this3.messagesDeleteHelper(sFromFolderFullNameRaw, aUidForRemove);

        Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].removeMessagesFromList(sFromFolderFullNameRaw, aUidForRemove);
      }]);
    } else if (oMoveFolder) {
      this.messagesMoveHelper(sFromFolderFullNameRaw, oMoveFolder.fullNameRaw, aUidForRemove);
      Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].removeMessagesFromList(sFromFolderFullNameRaw, aUidForRemove, oMoveFolder.fullNameRaw);
    }
  }
  /**
   * @param {string} sFromFolderFullNameRaw
   * @param {Array} aUidForMove
   * @param {string} sToFolderFullNameRaw
   * @param {boolean=} bCopy = false
   */
  ;

  _proto.moveMessagesToFolder = function moveMessagesToFolder(sFromFolderFullNameRaw, aUidForMove, sToFolderFullNameRaw, bCopy) {
    if (sFromFolderFullNameRaw !== sToFolderFullNameRaw && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isArray"])(aUidForMove) && 0 < aUidForMove.length) {
      var oFromFolder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderFromCacheList */ "e"])(sFromFolderFullNameRaw),
          oToFolder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderFromCacheList */ "e"])(sToFolderFullNameRaw);

      if (oFromFolder && oToFolder) {
        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isUnd"])(bCopy) ? false : !!bCopy) {
          this.messagesCopyHelper(oFromFolder.fullNameRaw, oToFolder.fullNameRaw, aUidForMove);
        } else {
          this.messagesMoveHelper(oFromFolder.fullNameRaw, oToFolder.fullNameRaw, aUidForMove);
        }

        Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].removeMessagesFromList(oFromFolder.fullNameRaw, aUidForMove, oToFolder.fullNameRaw, bCopy);
        return true;
      }
    }

    return false;
  }
  /**
   * @param {Function=} callback = null
   */
  ;

  _proto.foldersReload = function foldersReload(callback) {
    if (callback === void 0) {
      callback = null;
    }

    var prom = Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].foldersReload(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].foldersLoading);

    if (callback) {
      prom.then(function (value) {
        return !!value;
      }).then(callback).catch(function () {
        ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
          if (callback) {
            callback(false); // eslint-disable-line callback-return
          }
        }, 1);
      });
    }
  };

  _proto.foldersPromisesActionHelper = function foldersPromisesActionHelper(promise, errorDefCode) {
    Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].abort('Folders').fastResolve(true).then(function () {
      return promise;
    }).then(function () {
      Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].foldersReloadWithTimeout(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].foldersLoading);
    }, function (errorCode) {
      Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].folderList.error(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_22__["getNotification"])(errorCode, '', errorDefCode));
      Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_39__[/* default */ "a"].foldersReloadWithTimeout(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].foldersLoading);
    });
  };

  _proto.reloadOpenPgpKeys = function reloadOpenPgpKeys() {
    if (Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].capaOpenPGP()) {
      var keys = [],
          email = new Model_Email__WEBPACK_IMPORTED_MODULE_40__["EmailModel"](),
          openpgpKeyring = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].openpgpKeyring,
          openpgpKeys = openpgpKeyring ? openpgpKeyring.getAllKeys() : [];

      ___WEBPACK_IMPORTED_MODULE_10___default.a.each(openpgpKeys, function (oItem, iIndex) {
        if (oItem && oItem.primaryKey) {
          var aEmails = [],
              aUsers = [],
              primaryUser = oItem.getPrimaryUser(),
              user = primaryUser && primaryUser.user ? primaryUser.user.userId.userid : oItem.users && oItem.users[0] ? oItem.users[0].userId.userid : '';

          if (oItem.users) {
            ___WEBPACK_IMPORTED_MODULE_10___default.a.each(oItem.users, function (item) {
              if (item.userId) {
                email.clear();
                email.parse(item.userId.userid);

                if (email.validate()) {
                  aEmails.push(email.email);
                  aUsers.push(item.userId.userid);
                }
              }
            });
          }

          if (aEmails.length) {
            keys.push(new Model_OpenPgpKey__WEBPACK_IMPORTED_MODULE_44__[/* OpenPgpKeyModel */ "a"](iIndex, oItem.primaryKey.getFingerprint(), oItem.primaryKey.getKeyId().toHex().toLowerCase(), ___WEBPACK_IMPORTED_MODULE_10___default.a.uniq(___WEBPACK_IMPORTED_MODULE_10___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, oItem.getKeyIds(), function (item) {
              return item && item.toHex ? item.toHex() : null;
            }))), aUsers, aEmails, oItem.isPrivate(), oItem.armor(), user));
          }
        }
      });

      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["delegateRunOnDestroy"])(Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].openpgpkeys());
      Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].openpgpkeys(keys);
    }
  };

  _proto.accountsCounts = function accountsCounts() {
    return false; // AccountStore.accounts.loading(true);
    //
    // Remote.accountsCounts((sResult, oData) => {
    //
    // 	AccountStore.accounts.loading(false);
    //
    // 	if (StorageResultType.Success === sResult && oData.Result && oData.Result['Counts'])
    // 	{
    // 		var
    // 			sEmail = AccountStore.email(),
    // 			aAcounts = AccountStore.accounts()
    // 		;
    //
    // 		_.each(oData.Result['Counts'], (oItem) => {
    //
    // 			var oAccount = _.find(aAcounts, (oAccount) => {
    // 				return oAccount && oItem[0] === oAccount.email && sEmail !== oAccount.email;
    // 			});
    //
    // 			if (oAccount)
    // 			{
    // 				oAccount.count(pInt(oItem[1]));
    // 			}
    // 		});
    // 	}
    // });
  };

  _proto.accountsAndIdentities = function accountsAndIdentities(bBoot) {
    var _this4 = this;

    Stores_User_Account__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].accounts.loading(true);
    Stores_User_Identity__WEBPACK_IMPORTED_MODULE_29__[/* default */ "a"].identities.loading(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].accountsAndIdentities(function (sResult, oData) {
      Stores_User_Account__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].accounts.loading(false);
      Stores_User_Identity__WEBPACK_IMPORTED_MODULE_29__[/* default */ "a"].identities.loading(false);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Success === sResult && oData.Result) {
        var counts = {},
            sAccountEmail = Stores_User_Account__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].email();
        var parentEmail = Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('ParentEmail');
        parentEmail = '' === parentEmail ? sAccountEmail : parentEmail;

        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isArray"])(oData.Result.Accounts)) {
          ___WEBPACK_IMPORTED_MODULE_10___default.a.each(Stores_User_Account__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].accounts(), function (oAccount) {
            counts[oAccount.email] = oAccount.count();
          });

          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["delegateRunOnDestroy"])(Stores_User_Account__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].accounts());
          Stores_User_Account__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].accounts(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, oData.Result.Accounts, function (sValue) {
            return new Model_Account__WEBPACK_IMPORTED_MODULE_41__[/* AccountModel */ "a"](sValue, sValue !== parentEmail, counts[sValue] || 0);
          }));
        }

        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isUnd"])(bBoot) ? false : !!bBoot) {
          ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
            return _this4.accountsCounts();
          }, 1000 * 5);

          Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('interval.10m-after5m', function () {
            return _this4.accountsCounts();
          });
        }

        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isArray"])(oData.Result.Identities)) {
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["delegateRunOnDestroy"])(Stores_User_Identity__WEBPACK_IMPORTED_MODULE_29__[/* default */ "a"].identities());
          Stores_User_Identity__WEBPACK_IMPORTED_MODULE_29__[/* default */ "a"].identities(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, oData.Result.Identities, function (identityData) {
            var id = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(identityData.Id),
                email = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(identityData.Email),
                identity = new Model_Identity__WEBPACK_IMPORTED_MODULE_42__[/* IdentityModel */ "a"](id, email);
            identity.name(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(identityData.Name));
            identity.replyTo(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(identityData.ReplyTo));
            identity.bcc(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(identityData.Bcc));
            identity.signature(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(identityData.Signature));
            identity.signatureInsertBefore(!!identityData.SignatureInsertBefore);
            return identity;
          }));
        }
      }
    });
  };

  _proto.templates = function templates() {
    Stores_User_Template__WEBPACK_IMPORTED_MODULE_30__[/* default */ "a"].templates.loading(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].templates(function (result, data) {
      Stores_User_Template__WEBPACK_IMPORTED_MODULE_30__[/* default */ "a"].templates.loading(false);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Success === result && data.Result && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isArray"])(data.Result.Templates)) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["delegateRunOnDestroy"])(Stores_User_Template__WEBPACK_IMPORTED_MODULE_30__[/* default */ "a"].templates());
        Stores_User_Template__WEBPACK_IMPORTED_MODULE_30__[/* default */ "a"].templates(___WEBPACK_IMPORTED_MODULE_10___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, data.Result.Templates, function (templateData) {
          var template = new Model_Template__WEBPACK_IMPORTED_MODULE_43__[/* TemplateModel */ "a"]();
          return template.parse(templateData) ? template : null;
        })));
      }
    });
  };

  _proto.quota = function quota() {
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].quota(function (result, data) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Success === result && data && data.Result && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isArray"])(data.Result) && 1 < data.Result.length && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isPosNumeric"])(data.Result[0], true) && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isPosNumeric"])(data.Result[1], true)) {
        Stores_User_Quota__WEBPACK_IMPORTED_MODULE_34__[/* default */ "a"].populateData(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(data.Result[1]), Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(data.Result[0]));
      }
    });
  }
  /**
   * @param {string} folder
   * @param {Array=} list = []
   */
  ;

  _proto.folderInformation = function folderInformation(folder, list) {
    var _this5 = this;

    if ('' !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["trim"])(folder)) {
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].folderInformation(function (result, data) {
        if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Success === result) {
          if (data && data.Result && data.Result.Hash && data.Result.Folder) {
            var uid = '',
                check = false,
                unreadCountChange = false;
            var folderFromCache = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderFromCacheList */ "e"])(data.Result.Folder);

            if (folderFromCache) {
              folderFromCache.interval = Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_18__["momentNowUnix"])();

              if (data.Result.Hash) {
                Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* setFolderHash */ "q"])(data.Result.Folder, data.Result.Hash);
              }

              if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.MessageCount)) {
                folderFromCache.messageCountAll(data.Result.MessageCount);
              }

              if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.MessageUnseenCount)) {
                if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(folderFromCache.messageCountUnread()) !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(data.Result.MessageUnseenCount)) {
                  unreadCountChange = true;
                }

                folderFromCache.messageCountUnread(data.Result.MessageUnseenCount);
              }

              if (unreadCountChange) {
                Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* clearMessageFlagsFromCacheByFolder */ "c"])(folderFromCache.fullNameRaw);
              }

              if (data.Result.Flags) {
                for (uid in data.Result.Flags) {
                  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["has"])(data.Result.Flags, uid)) {
                    check = true;
                    var flags = data.Result.Flags[uid];
                    Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* storeMessageFlagsToCacheByFolderAndUid */ "v"])(folderFromCache.fullNameRaw, uid.toString(), [!flags.IsSeen, !!flags.IsFlagged, !!flags.IsAnswered, !!flags.IsForwarded, !!flags.IsReadReceipt]);
                  }
                }

                if (check) {
                  _this5.reloadFlagsCurrentMessageListAndMessageFromCache();
                }
              }

              Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].initUidNextAndNewMessages(folderFromCache.fullNameRaw, data.Result.UidNext, data.Result.NewMessages);
              var hash = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderHash */ "g"])(data.Result.Folder);

              if (data.Result.Hash !== hash || '' === hash || unreadCountChange) {
                if (folderFromCache.fullNameRaw === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].currentFolderFullNameRaw()) {
                  _this5.reloadMessageList();
                } else if (Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderInboxName */ "h"])() === folderFromCache.fullNameRaw) {
                  _this5.recacheInboxMessageList();
                }
              }
            }
          }
        }
      }, folder, list);
    }
  }
  /**
   * @param {boolean=} boot = false
   */
  ;

  _proto.folderInformationMultiply = function folderInformationMultiply(boot) {
    var _this6 = this;

    if (boot === void 0) {
      boot = false;
    }

    var folders = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].getNextFolderNames();

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNonEmptyArray"])(folders)) {
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].folderInformationMultiply(function (sResult, oData) {
        if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Success === sResult) {
          if (oData && oData.Result && oData.Result.List && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNonEmptyArray"])(oData.Result.List)) {
            var utc = Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_18__["momentNowUnix"])();

            ___WEBPACK_IMPORTED_MODULE_10___default.a.each(oData.Result.List, function (item) {
              var hash = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderHash */ "g"])(item.Folder),
                  folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderFromCacheList */ "e"])(item.Folder);
              var unreadCountChange = false;

              if (folder) {
                folder.interval = utc;

                if (item.Hash) {
                  Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* setFolderHash */ "q"])(item.Folder, item.Hash);
                }

                if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(item.MessageCount)) {
                  folder.messageCountAll(item.MessageCount);
                }

                if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(item.MessageUnseenCount)) {
                  if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(folder.messageCountUnread()) !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(item.MessageUnseenCount)) {
                    unreadCountChange = true;
                  }

                  folder.messageCountUnread(item.MessageUnseenCount);
                }

                if (unreadCountChange) {
                  Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* clearMessageFlagsFromCacheByFolder */ "c"])(folder.fullNameRaw);
                }

                if (item.Hash !== hash || '' === hash) {
                  if (folder.fullNameRaw === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].currentFolderFullNameRaw()) {
                    _this6.reloadMessageList();
                  }
                } else if (unreadCountChange) {
                  if (folder.fullNameRaw === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].currentFolderFullNameRaw()) {
                    var list = Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageList();

                    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNonEmptyArray"])(list)) {
                      _this6.folderInformation(folder.fullNameRaw, list);
                    }
                  }
                }
              }
            });

            if (boot) {
              ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
                return _this6.folderInformationMultiply(true);
              }, 2000);
            }
          }
        }
      }, folders);
    }
  }
  /**
   * @param {string} sFolderFullNameRaw
   * @param {number} iSetAction
   * @param {Array=} messages = null
   */
  ;

  _proto.messageListAction = function messageListAction(sFolderFullNameRaw, iSetAction, messages) {
    var folder = null,
        alreadyUnread = 0,
        rootUids = [];

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isUnd"])(messages) || !messages) {
      messages = Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].messageListChecked();
    }

    rootUids = ___WEBPACK_IMPORTED_MODULE_10___default.a.uniq(___WEBPACK_IMPORTED_MODULE_10___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, messages, function (oMessage) {
      return oMessage && oMessage.uid ? oMessage.uid : null;
    })));

    if ('' !== sFolderFullNameRaw && 0 < rootUids.length) {
      switch (iSetAction) {
        case Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessageSetAction"].SetSeen:
          ___WEBPACK_IMPORTED_MODULE_10___default.a.each(rootUids, function (sSubUid) {
            alreadyUnread += Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* storeMessageFlagsToCacheBySetAction */ "w"])(sFolderFullNameRaw, sSubUid, iSetAction);
          });

          folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderFromCacheList */ "e"])(sFolderFullNameRaw);

          if (folder) {
            folder.messageCountUnread(folder.messageCountUnread() - alreadyUnread);
          }

          Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].messageSetSeen(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["noop"], sFolderFullNameRaw, rootUids, true);
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessageSetAction"].UnsetSeen:
          ___WEBPACK_IMPORTED_MODULE_10___default.a.each(rootUids, function (sSubUid) {
            alreadyUnread += Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* storeMessageFlagsToCacheBySetAction */ "w"])(sFolderFullNameRaw, sSubUid, iSetAction);
          });

          folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderFromCacheList */ "e"])(sFolderFullNameRaw);

          if (folder) {
            folder.messageCountUnread(folder.messageCountUnread() - alreadyUnread + rootUids.length);
          }

          Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].messageSetSeen(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["noop"], sFolderFullNameRaw, rootUids, false);
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessageSetAction"].SetFlag:
          ___WEBPACK_IMPORTED_MODULE_10___default.a.each(rootUids, function (sSubUid) {
            Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* storeMessageFlagsToCacheBySetAction */ "w"])(sFolderFullNameRaw, sSubUid, iSetAction);
          });

          Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].messageSetFlagged(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["noop"], sFolderFullNameRaw, rootUids, true);
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_14__["MessageSetAction"].UnsetFlag:
          ___WEBPACK_IMPORTED_MODULE_10___default.a.each(rootUids, function (sSubUid) {
            Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* storeMessageFlagsToCacheBySetAction */ "w"])(sFolderFullNameRaw, sSubUid, iSetAction);
          });

          Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].messageSetFlagged(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["noop"], sFolderFullNameRaw, rootUids, false);
          break;
        // no default
      }

      this.reloadFlagsCurrentMessageListAndMessageFromCache();
      Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].message.viewTrigger(!Stores_User_Message__WEBPACK_IMPORTED_MODULE_33__[/* default */ "a"].message.viewTrigger());
    }
  };

  _proto.googleConnect = function googleConnect() {
    window__WEBPACK_IMPORTED_MODULE_9___default.a.open(Object(Common_Links__WEBPACK_IMPORTED_MODULE_20__[/* socialGoogle */ "B"])(), 'Google', 'left=200,top=100,width=650,height=600,menubar=no,status=no,resizable=yes,scrollbars=yes');
  };

  _proto.twitterConnect = function twitterConnect() {
    window__WEBPACK_IMPORTED_MODULE_9___default.a.open(Object(Common_Links__WEBPACK_IMPORTED_MODULE_20__[/* socialTwitter */ "C"])(), 'Twitter', 'left=200,top=100,width=650,height=350,menubar=no,status=no,resizable=yes,scrollbars=yes');
  };

  _proto.facebookConnect = function facebookConnect() {
    window__WEBPACK_IMPORTED_MODULE_9___default.a.open(Object(Common_Links__WEBPACK_IMPORTED_MODULE_20__[/* socialFacebook */ "A"])(), 'Facebook', 'left=200,top=100,width=650,height=335,menubar=no,status=no,resizable=yes,scrollbars=yes');
  }
  /**
   * @param {boolean=} fireAllActions = false
   */
  ;

  _proto.socialUsers = function socialUsers(fireAllActions) {
    if (fireAllActions === void 0) {
      fireAllActions = false;
    }

    if (true === fireAllActions) {
      Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].google.loading(true);
      Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].facebook.loading(true);
      Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].twitter.loading(true);
    }

    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].socialUsers(function (result, data) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Success === result && data && data.Result) {
        Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].google.userName(data.Result.Google || '');
        Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].facebook.userName(data.Result.Facebook || '');
        Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].twitter.userName(data.Result.Twitter || '');
      } else {
        Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].google.userName('');
        Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].facebook.userName('');
        Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].twitter.userName('');
      }

      Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].google.loading(false);
      Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].facebook.loading(false);
      Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].twitter.loading(false);
    });
  };

  _proto.googleDisconnect = function googleDisconnect() {
    Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].google.loading(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].googleDisconnect(this.socialUsers);
  };

  _proto.facebookDisconnect = function facebookDisconnect() {
    Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].facebook.loading(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].facebookDisconnect(this.socialUsers);
  };

  _proto.twitterDisconnect = function twitterDisconnect() {
    Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].twitter.loading(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].twitterDisconnect(this.socialUsers);
  }
  /**
   * @param {string} query
   * @param {Function} autocompleteCallback
   */
  ;

  _proto.getAutocomplete = function getAutocomplete(query, autocompleteCallback) {
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].suggestions(function (result, data) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Success === result && data && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isArray"])(data.Result)) {
        autocompleteCallback(___WEBPACK_IMPORTED_MODULE_10___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_7___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, data.Result, function (item) {
          return item && item[0] ? new Model_Email__WEBPACK_IMPORTED_MODULE_40__["EmailModel"](item[0], item[1]) : null;
        })));
      } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_14__["StorageResultType"].Abort !== result) {
        autocompleteCallback([]);
      }
    }, query);
  }
  /**
   * @param {string} sFullNameHash
   * @param {boolean} bExpanded
   */
  ;

  _proto.setExpandedFolder = function setExpandedFolder(sFullNameHash, bExpanded) {
    var aExpandedList = Storage_Client__WEBPACK_IMPORTED_MODULE_35__[/* get */ "a"](Common_Enums__WEBPACK_IMPORTED_MODULE_14__["ClientSideKeyName"].ExpandedFolders);

    if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isArray"])(aExpandedList)) {
      aExpandedList = [];
    }

    if (bExpanded) {
      aExpandedList.push(sFullNameHash);
      aExpandedList = ___WEBPACK_IMPORTED_MODULE_10___default.a.uniq(aExpandedList);
    } else {
      aExpandedList = ___WEBPACK_IMPORTED_MODULE_10___default.a.without(aExpandedList, sFullNameHash);
    }

    Storage_Client__WEBPACK_IMPORTED_MODULE_35__[/* set */ "b"](Common_Enums__WEBPACK_IMPORTED_MODULE_14__["ClientSideKeyName"].ExpandedFolders, aExpandedList);
  };

  _proto.initHorizontalLayoutResizer = function initHorizontalLayoutResizer(sClientSideKeyName) {
    var top = null,
        bottom = null;

    var minHeight = 200,
        maxHeight = 500,
        fSetHeight = function fSetHeight(height) {
      if (height) {
        if (top) {
          top.attr('style', 'height:' + height + 'px');
        }

        if (bottom) {
          bottom.attr('style', 'top:' + (55
          /* top toolbar */
          + height) + 'px');
        }
      }
    },
        fResizeCreateFunction = function fResizeCreateFunction(event) {
      if (event && event.target) {
        var _context;

        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context = $__WEBPACK_IMPORTED_MODULE_11___default()(event.target)).call(_context, '.ui-resizable-handle').on('mousedown', function () {
          Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].addClass('rl-resizer');
        }).on('mouseup', function () {
          Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].removeClass('rl-resizer');
        });
      }
    },
        fResizeStartFunction = function fResizeStartFunction() {
      Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].addClass('rl-resizer');
    },
        fResizeResizeFunction = ___WEBPACK_IMPORTED_MODULE_10___default.a.debounce(function () {
      Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].addClass('rl-resizer');
    }, 500, true),
        fResizeStopFunction = function fResizeStopFunction(oEvent, oObject) {
      Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].removeClass('rl-resizer');

      if (oObject && oObject.size && oObject.size.height) {
        Storage_Client__WEBPACK_IMPORTED_MODULE_35__[/* set */ "b"](sClientSideKeyName, oObject.size.height);
        fSetHeight(oObject.size.height);
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["windowResize"])();
      }
    },
        oOptions = {
      helper: 'ui-resizable-helper-h',
      minHeight: minHeight,
      maxHeight: maxHeight,
      handles: 's',
      create: fResizeCreateFunction,
      resize: fResizeResizeFunction,
      start: fResizeStartFunction,
      stop: fResizeStopFunction
    },
        fDisable = function fDisable(bDisable) {
      if (bDisable) {
        if (top && top.hasClass('ui-resizable')) {
          top.resizable('destroy').removeAttr('style');
        }

        if (bottom) {
          bottom.removeAttr('style');
        }
      } else if (Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].hasClass('rl-bottom-preview-pane')) {
        top = $__WEBPACK_IMPORTED_MODULE_11___default()('.b-message-list-wrapper');
        bottom = $__WEBPACK_IMPORTED_MODULE_11___default()('.b-message-view-wrapper');

        if (!top.hasClass('ui-resizable')) {
          top.resizable(oOptions);
        }

        var iHeight = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(Storage_Client__WEBPACK_IMPORTED_MODULE_35__[/* get */ "a"](sClientSideKeyName)) || 300;
        fSetHeight(iHeight > minHeight ? iHeight : minHeight);
      }
    };

    fDisable(false);
    Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('layout', function (layout) {
      fDisable(Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Layout"].BottomPreview !== layout);
    });
  };

  _proto.initVerticalLayoutResizer = function initVerticalLayoutResizer(sClientSideKeyName) {
    var disabledWidth = 60,
        minWidth = 155,
        lLeft = $__WEBPACK_IMPORTED_MODULE_11___default()('#rl-left'),
        right = $__WEBPACK_IMPORTED_MODULE_11___default()('#rl-right'),
        mLeftWidth = Storage_Client__WEBPACK_IMPORTED_MODULE_35__[/* get */ "a"](sClientSideKeyName) || null,
        fSetWidth = function fSetWidth(iWidth) {
      if (iWidth) {
        Object(Common_Globals__WEBPACK_IMPORTED_MODULE_15__["leftPanelWidth"])(iWidth);
        Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].removeClass('rl-resizer');
        lLeft.css({
          width: '' + iWidth + 'px'
        });
        right.css({
          left: '' + iWidth + 'px'
        });
      }
    },
        fDisable = function fDisable(bDisable) {
      if (bDisable) {
        lLeft.resizable('disable');
        fSetWidth(disabledWidth);
      } else {
        lLeft.resizable('enable');
        var width = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(Storage_Client__WEBPACK_IMPORTED_MODULE_35__[/* get */ "a"](sClientSideKeyName)) || minWidth;
        fSetWidth(width > minWidth ? width : minWidth);
      }
    },
        fResizeCreateFunction = function fResizeCreateFunction(event) {
      if (event && event.target) {
        var _context2;

        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(_context2 = $__WEBPACK_IMPORTED_MODULE_11___default()(event.target)).call(_context2, '.ui-resizable-handle').on('mousedown', function () {
          Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].addClass('rl-resizer');
        }).on('mouseup', function () {
          Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].removeClass('rl-resizer');
        });
      }
    },
        fResizeResizeFunction = ___WEBPACK_IMPORTED_MODULE_10___default.a.debounce(function () {
      Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].addClass('rl-resizer');
    }, 500, true),
        fResizeStartFunction = function fResizeStartFunction() {
      Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].addClass('rl-resizer');
    },
        fResizeStopFunction = function fResizeStopFunction(event, obj) {
      Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].removeClass('rl-resizer');

      if (obj && obj.size && obj.size.width) {
        Storage_Client__WEBPACK_IMPORTED_MODULE_35__[/* set */ "b"](sClientSideKeyName, obj.size.width);
        Object(Common_Globals__WEBPACK_IMPORTED_MODULE_15__["leftPanelWidth"])(obj.size.width);
        right.css({
          left: '' + obj.size.width + 'px'
        });
        lLeft.css({
          position: '',
          top: '',
          left: '',
          height: ''
        });
      }
    };

    if (null !== mLeftWidth) {
      fSetWidth(mLeftWidth > minWidth ? mLeftWidth : minWidth);
    }

    lLeft.resizable({
      helper: 'ui-resizable-helper-w',
      minWidth: minWidth,
      maxWidth: Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Size350px,
      handles: 'e',
      create: fResizeCreateFunction,
      resize: fResizeResizeFunction,
      start: fResizeStartFunction,
      stop: fResizeStopFunction
    });
    Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('left-panel.off', function () {
      fDisable(true);
    });
    Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('left-panel.on', function () {
      fDisable(false);
    });
  };

  _proto.logout = function logout() {
    var _this7 = this;

    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].logout(function () {
      _this7.loginAndLogoutReload(false, true, Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('ParentEmail') && 0 < Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('ParentEmail').length);
    });
  };

  _proto.bootstartTwoFactorScreen = function bootstartTwoFactorScreen() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/TwoFactorConfiguration */ 430), [true]);
  };

  _proto.bootstartWelcomePopup = function bootstartWelcomePopup(url) {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["showScreenPopup"])(__webpack_require__(/*! View/Popup/WelcomePage */ 560), [url]);
  };

  _proto.bootstartLoginScreen = function bootstartLoginScreen() {
    Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].removeClass('rl-user-auth').addClass('rl-user-no-auth');
    var customLoginLink = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["appSettingsGet"]('customLoginLink'));

    if (!customLoginLink) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["startScreens"])([Screen_User_Login__WEBPACK_IMPORTED_MODULE_45__[/* LoginUserScreen */ "a"]]);
      Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_17__[/* runHook */ "f"])('rl-start-login-screens');
      Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('rl.bootstart-login-screens');
    } else {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["routeOff"])();
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_20__[/* root */ "w"])(), true);
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["routeOff"])();

      ___WEBPACK_IMPORTED_MODULE_10___default.a.defer(function () {
        window__WEBPACK_IMPORTED_MODULE_9___default.a.location.href = customLoginLink;
      });
    }
  };

  _proto.bootend = function bootend() {
    if (progressJs__WEBPACK_IMPORTED_MODULE_12___default.a) {
      progressJs__WEBPACK_IMPORTED_MODULE_12___default.a.set(100).end();
    }

    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["hideLoading"])();
  };

  _proto.bootstart = function bootstart() {
    var _this8 = this;

    _AbstractApp.prototype.bootstart.call(this);

    Stores_User_App__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].populate();
    Stores_User_Settings__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].populate();
    Stores_User_Notification__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"].populate();
    Stores_User_Account__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].populate();
    Stores_User_Contact__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].populate();
    var contactsSyncInterval = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('ContactsSyncInterval'));
    var jsHash = Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["appSettingsGet"]('jsHash'),
        startupUrl = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('StartupUrl')),
        allowGoogle = Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('AllowGoogleSocial'),
        allowFacebook = Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('AllowFacebookSocial'),
        allowTwitter = Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('AllowTwitterSocial');

    if (progressJs__WEBPACK_IMPORTED_MODULE_12___default.a) {
      progressJs__WEBPACK_IMPORTED_MODULE_12___default.a.set(90);
    }

    Common_Globals__WEBPACK_IMPORTED_MODULE_15__["leftPanelDisabled"].subscribe(function (value) {
      Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('left-panel.' + (value ? 'off' : 'on'));
    });
    this.setWindowTitle('');

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('Auth')) {
      Common_Globals__WEBPACK_IMPORTED_MODULE_15__["$html"].addClass('rl-user-auth');

      if (Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Capa"].TwoFactor) && Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Capa"].TwoFactorForce) && Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('RequireTwoFactor')) {
        this.bootend();
        this.bootstartTwoFactorScreen();
      } else {
        this.setWindowTitle(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_22__["i18n"])('TITLES/LOADING')); // require.ensure([], function() { // require code splitting

        this.foldersReload(function (value) {
          _this8.bootend();

          if (value) {
            if ('' !== startupUrl) {
              Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["routeOff"])();
              Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_20__[/* root */ "w"])(startupUrl), true);
              Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["routeOn"])();
            }

            if (Common_Utils__WEBPACK_IMPORTED_MODULE_13__["jassl"] && window__WEBPACK_IMPORTED_MODULE_9___default.a.crypto && window__WEBPACK_IMPORTED_MODULE_9___default.a.crypto.getRandomValues && Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Capa"].OpenPGP)) {
              var openpgpCallback = function openpgpCallback(openpgp) {
                Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].openpgp = openpgp;

                if (window__WEBPACK_IMPORTED_MODULE_9___default.a.Worker) {
                  try {
                    Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].openpgp.initWorker({
                      path: Object(Common_Links__WEBPACK_IMPORTED_MODULE_20__[/* openPgpWorkerJs */ "t"])()
                    });
                  } catch (e) {
                    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["log"])(e);
                  }
                }

                Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].openpgpKeyring = new openpgp.Keyring();
                Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].capaOpenPGP(true);
                Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('openpgp.init');

                _this8.reloadOpenPgpKeys();
              };

              if (window__WEBPACK_IMPORTED_MODULE_9___default.a.openpgp) {
                openpgpCallback(window__WEBPACK_IMPORTED_MODULE_9___default.a.openpgp);
              } else {
                Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["jassl"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_20__[/* openPgpJs */ "s"])()).then(function () {
                  if (window__WEBPACK_IMPORTED_MODULE_9___default.a.openpgp) {
                    openpgpCallback(window__WEBPACK_IMPORTED_MODULE_9___default.a.openpgp);
                  }
                });
              }
            } else {
              Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_32__[/* default */ "a"].capaOpenPGP(false);
            }

            Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_48__["startScreens"])([Screen_User_MailBox__WEBPACK_IMPORTED_MODULE_46__[/* MailBoxUserScreen */ "a"], Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Capa"].Settings) ? Screen_User_Settings__WEBPACK_IMPORTED_MODULE_47__[/* SettingsUserScreen */ "a"] : null // false ? AboutUserScreen : null
            ]);

            if (allowGoogle || allowFacebook || allowTwitter) {
              _this8.socialUsers(true);
            }

            Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('interval.2m', function () {
              return _this8.folderInformation(Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderInboxName */ "h"])());
            });
            Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('interval.3m', function () {
              var sF = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].currentFolderFullNameRaw();

              if (Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderInboxName */ "h"])() !== sF) {
                _this8.folderInformation(sF);
              }
            });
            Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('interval.2m-after5m', function () {
              return _this8.folderInformationMultiply();
            });
            Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('interval.15m', function () {
              return _this8.quota();
            });
            Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('interval.20m', function () {
              return _this8.foldersReload();
            });
            contactsSyncInterval = 5 <= contactsSyncInterval ? contactsSyncInterval : 20;
            contactsSyncInterval = 320 >= contactsSyncInterval ? contactsSyncInterval : 320;

            ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
              return _this8.contactsSync();
            }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time10s);

            ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
              return _this8.folderInformationMultiply(true);
            }, Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Magics"].Time2s);

            _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(function () {
              return _this8.contactsSync();
            }, contactsSyncInterval * 60000 + 5000);

            _this8.accountsAndIdentities(true);

            ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
              var sF = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].currentFolderFullNameRaw();

              if (Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getFolderInboxName */ "h"])() !== sF) {
                _this8.folderInformation(sF);
              }
            }, 1000);

            ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
              return _this8.quota();
            }, 5000);

            ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
              return Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_38__[/* default */ "a"].appDelayStart(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["noop"]);
            }, 35000);

            Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('rl.auto-logout', function () {
              return _this8.logout();
            });
            Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_17__[/* runHook */ "f"])('rl-start-user-screens');
            Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('rl.bootstart-user-screens');

            if (Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('WelcomePageUrl')) {
              ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
                return _this8.bootstartWelcomePopup(Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('WelcomePageUrl'));
              }, 1000);
            }

            if (!!Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('AccountSignMe') && window__WEBPACK_IMPORTED_MODULE_9___default.a.navigator.registerProtocolHandler && Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_14__["Capa"].Composer)) {
              ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
                try {
                  window__WEBPACK_IMPORTED_MODULE_9___default.a.navigator.registerProtocolHandler('mailto', window__WEBPACK_IMPORTED_MODULE_9___default.a.location.protocol + '//' + window__WEBPACK_IMPORTED_MODULE_9___default.a.location.host + window__WEBPACK_IMPORTED_MODULE_9___default.a.location.pathname + '?mailto&to=%s', '' + (Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('Title') || 'RainLoop'));
                } catch (e) {} // eslint-disable-line no-empty


                if (Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('MailToEmail')) {
                  Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["mailToHelper"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_36__["settingsGet"]('MailToEmail'), __webpack_require__(/*! View/Popup/Compose */ 132));
                }
              }, 500);
            }

            if (!Common_Globals__WEBPACK_IMPORTED_MODULE_15__["bMobileDevice"]) {
              ___WEBPACK_IMPORTED_MODULE_10___default.a.defer(function () {
                return _this8.initVerticalLayoutResizer(Common_Enums__WEBPACK_IMPORTED_MODULE_14__["ClientSideKeyName"].FolderListSize);
              });
            }
          } else {
            _this8.logout();
          }
        }); // }); // require code splitting
      }
    } else {
      this.bootend();
      this.bootstartLoginScreen();
    }

    if (allowGoogle) {
      window__WEBPACK_IMPORTED_MODULE_9___default.a['rl_' + jsHash + '_google_service'] = function () {
        Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].google.loading(true);

        _this8.socialUsers();
      };
    }

    if (allowFacebook) {
      window__WEBPACK_IMPORTED_MODULE_9___default.a['rl_' + jsHash + '_facebook_service'] = function () {
        Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].facebook.loading(true);

        _this8.socialUsers();
      };
    }

    if (allowTwitter) {
      window__WEBPACK_IMPORTED_MODULE_9___default.a['rl_' + jsHash + '_twitter_service'] = function () {
        Stores_Social__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].twitter.loading(true);

        _this8.socialUsers();
      };
    }

    Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('interval.1m', function () {
      return Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_18__["reload"])();
    });
    Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_17__[/* runHook */ "f"])('rl-start-screens');
    Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('rl.bootstart-end');
  };

  return AppUser;
}(App_Abstract__WEBPACK_IMPORTED_MODULE_49__[/* AbstractApp */ "a"]);

/* harmony default export */ __webpack_exports__["default"] = (new AppUser());

/***/ }),
/* 403 */,
/* 404 */,
/* 405 */
/*!******************************!*\
  !*** ./dev/Common/Base64.js ***!
  \******************************/
/*! exports provided: decode, encode, urlsafe_encode */
/*! exports used: urlsafe_encode */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* unused harmony export decode */
/* unused harmony export encode */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return urlsafe_encode; });
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__);


// Base64 encode / decode
// http://www.webtoolkit.info/
var BASE_64_CHR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
/* eslint-disable  */

var Base64 = {
  // public method for urlsafe encoding
  urlsafe_encode: function urlsafe_encode(input) {
    return Base64.encode(input).replace(/[+]/g, '-').replace(/[\/]/g, '_').replace(/[=]/g, '');
  },
  // public method for encoding
  encode: function encode(input) {
    var output = '',
        chr1,
        chr2,
        chr3,
        enc1,
        enc2,
        enc3,
        enc4,
        i = 0;
    input = Base64._utf8_encode(input);

    while (i < input.length) {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);
      enc1 = chr1 >> 2;
      enc2 = (chr1 & 3) << 4 | chr2 >> 4;
      enc3 = (chr2 & 15) << 2 | chr3 >> 6;
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
        enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
        enc4 = 64;
      }

      output = output + BASE_64_CHR.charAt(enc1) + BASE_64_CHR.charAt(enc2) + BASE_64_CHR.charAt(enc3) + BASE_64_CHR.charAt(enc4);
    }

    return output;
  },
  // public method for decoding
  decode: function decode(input) {
    var output = '',
        chr1,
        chr2,
        chr3,
        enc1,
        enc2,
        enc3,
        enc4,
        i = 0;
    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');

    while (i < input.length) {
      enc1 = BASE_64_CHR.indexOf(input.charAt(i++));
      enc2 = BASE_64_CHR.indexOf(input.charAt(i++));
      enc3 = BASE_64_CHR.indexOf(input.charAt(i++));
      enc4 = BASE_64_CHR.indexOf(input.charAt(i++));
      chr1 = enc1 << 2 | enc2 >> 4;
      chr2 = (enc2 & 15) << 4 | enc3 >> 2;
      chr3 = (enc3 & 3) << 6 | enc4;
      output = output + String.fromCharCode(chr1);

      if (enc3 !== 64) {
        output = output + String.fromCharCode(chr2);
      }

      if (enc4 !== 64) {
        output = output + String.fromCharCode(chr3);
      }
    }

    return Base64._utf8_decode(output);
  },
  // private method for UTF-8 encoding
  _utf8_encode: function _utf8_encode(string) {
    string = string.replace(/\r\n/g, '\n');
    var utftext = '',
        n = 0,
        l = string.length,
        c = 0;

    for (; n < l; n++) {
      c = string.charCodeAt(n);

      if (c < 128) {
        utftext += String.fromCharCode(c);
      } else if (c > 127 && c < 2048) {
        utftext += String.fromCharCode(c >> 6 | 192);
        utftext += String.fromCharCode(c & 63 | 128);
      } else {
        utftext += String.fromCharCode(c >> 12 | 224);
        utftext += String.fromCharCode(c >> 6 & 63 | 128);
        utftext += String.fromCharCode(c & 63 | 128);
      }
    }

    return utftext;
  },
  // private method for UTF-8 decoding
  _utf8_decode: function _utf8_decode(utftext) {
    var string = '',
        i = 0,
        c = 0,
        c2 = 0,
        c3 = 0;

    while (i < utftext.length) {
      c = utftext.charCodeAt(i);

      if (c < 128) {
        string += String.fromCharCode(c);
        i++;
      } else if (c > 191 && c < 224) {
        c2 = utftext.charCodeAt(i + 1);
        string += String.fromCharCode((c & 31) << 6 | c2 & 63);
        i += 2;
      } else {
        c2 = utftext.charCodeAt(i + 1);
        c3 = utftext.charCodeAt(i + 2);
        string += String.fromCharCode((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
        i += 3;
      }
    }

    return string;
  }
};
var decode = Base64.decode;
var encode = Base64.encode;
var urlsafe_encode = Base64.urlsafe_encode;
/* eslint-enable */

/***/ }),
/* 406 */
/*!****************************************!*\
  !*** ./dev/Promises/User/Populator.js ***!
  \****************************************/
/*! exports provided: default */
/*! exports used: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Storage_Client__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Storage/Client */ 60);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Model_Folder__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Model/Folder */ 440);
/* harmony import */ var Promises_AbstractBasic__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Promises/AbstractBasic */ 317);














var PromisesUserPopulator = /*#__PURE__*/function (_AbstractBasicPromise) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(PromisesUserPopulator, _AbstractBasicPromise);

  function PromisesUserPopulator() {
    return _AbstractBasicPromise.apply(this, arguments) || this;
  }

  var _proto = PromisesUserPopulator.prototype;

  /**
   * @param {string} sFullNameHash
   * @param {Array?} expandedFolders
   * @returns {boolean}
   */
  _proto.isFolderExpanded = function isFolderExpanded(sFullNameHash, expandedFolders) {
    return expandedFolders && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isArray"])(expandedFolders) && -1 !== ___WEBPACK_IMPORTED_MODULE_1___default.a.indexOf(expandedFolders, sFullNameHash);
  }
  /**
   * @param {string} sFolderFullNameRaw
   * @returns {string}
   */
  ;

  _proto.normalizeFolder = function normalizeFolder(sFolderFullNameRaw) {
    return '' === sFolderFullNameRaw || Common_Consts__WEBPACK_IMPORTED_MODULE_2__[/* UNUSED_OPTION_VALUE */ "r"] === sFolderFullNameRaw || null !== Common_Cache__WEBPACK_IMPORTED_MODULE_5__[/* getFolderFromCacheList */ "e"](sFolderFullNameRaw) ? sFolderFullNameRaw : '';
  }
  /**
   * @param {string} sNamespace
   * @param {Array} aFolders
   * @param {Array?} expandedFolders
   * @returns {Array}
   */
  ;

  _proto.folderResponseParseRec = function folderResponseParseRec(sNamespace, aFolders, expandedFolders) {
    var _this = this;

    var bDisplaySpecSetting = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].displaySpecSetting(),
        aList = [];

    ___WEBPACK_IMPORTED_MODULE_1___default.a.each(aFolders, function (oFolder) {
      if (oFolder) {
        var oCacheFolder = Common_Cache__WEBPACK_IMPORTED_MODULE_5__[/* getFolderFromCacheList */ "e"](oFolder.FullNameRaw);

        if (!oCacheFolder) {
          oCacheFolder = Model_Folder__WEBPACK_IMPORTED_MODULE_11__[/* FolderModel */ "a"].newInstanceFromJson(oFolder);

          if (oCacheFolder) {
            Common_Cache__WEBPACK_IMPORTED_MODULE_5__[/* setFolderToCacheList */ "r"](oFolder.FullNameRaw, oCacheFolder);
            Common_Cache__WEBPACK_IMPORTED_MODULE_5__[/* setFolderFullNameRaw */ "p"](oCacheFolder.fullNameHash, oFolder.FullNameRaw, oCacheFolder);
          }
        }

        if (oCacheFolder) {
          if (bDisplaySpecSetting) {
            oCacheFolder.checkable(!!oFolder.Checkable);
          } else {
            oCacheFolder.checkable(true);
          }

          oCacheFolder.collapsed(!_this.isFolderExpanded(oCacheFolder.fullNameHash, expandedFolders));

          if (oFolder.Extended) {
            if (oFolder.Extended.Hash) {
              Common_Cache__WEBPACK_IMPORTED_MODULE_5__[/* setFolderHash */ "q"](oCacheFolder.fullNameRaw, oFolder.Extended.Hash);
            }

            if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isNormal"])(oFolder.Extended.MessageCount)) {
              oCacheFolder.messageCountAll(oFolder.Extended.MessageCount);
            }

            if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isNormal"])(oFolder.Extended.MessageUnseenCount)) {
              oCacheFolder.messageCountUnread(oFolder.Extended.MessageUnseenCount);
            }
          }

          if (oFolder.SubFolders && 'Collection/FolderCollection' === oFolder.SubFolders['@Object'] && oFolder.SubFolders['@Collection'] && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isArray"])(oFolder.SubFolders['@Collection'])) {
            oCacheFolder.subFolders(_this.folderResponseParseRec(sNamespace, oFolder.SubFolders['@Collection'], expandedFolders));
          }

          aList.push(oCacheFolder);
        }
      }
    });

    return aList;
  };

  _proto.foldersList = function foldersList(oData) {
    if (oData && 'Collection/FolderCollection' === oData['@Object'] && oData['@Collection'] && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isArray"])(oData['@Collection'])) {
      var expandedFolders = Storage_Client__WEBPACK_IMPORTED_MODULE_7__[/* get */ "a"](Common_Enums__WEBPACK_IMPORTED_MODULE_4__["ClientSideKeyName"].ExpandedFolders),
          cnt = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pInt"])(oData.CountRec);
      var limit = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pInt"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["appSettingsGet"]('folderSpecLimit'));
      limit = 100 < limit ? 100 : 10 > limit ? 10 : limit;
      Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].displaySpecSetting(0 >= cnt || limit < cnt);
      Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].folderList(this.folderResponseParseRec(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isUnd"])(oData.Namespace) ? '' : oData.Namespace, oData['@Collection'], expandedFolders)); // @todo optimization required
    }
  };

  _proto.foldersAdditionalParameters = function foldersAdditionalParameters(oData) {
    if (oData && oData && 'Collection/FolderCollection' === oData['@Object'] && oData['@Collection'] && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isArray"])(oData['@Collection'])) {
      if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isUnd"])(oData.Namespace)) {
        Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].namespace = oData.Namespace;
      }

      Stores_User_App__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].threadsAllowed(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["appSettingsGet"]('useImapThread') && oData.IsThreadsSupported && true);
      Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].folderList.optimized(!!oData.Optimized);
      var update = false;

      if (oData.SystemFolders && '' === '' + Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('SentFolder') + Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('DraftFolder') + Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('SpamFolder') + Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('TrashFolder') + Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('ArchiveFolder') + Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('NullFolder')) {
        Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsSet"]('SentFolder', oData.SystemFolders[Common_Enums__WEBPACK_IMPORTED_MODULE_4__["ServerFolderType"].SENT] || null);
        Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsSet"]('DraftFolder', oData.SystemFolders[Common_Enums__WEBPACK_IMPORTED_MODULE_4__["ServerFolderType"].DRAFTS] || null);
        Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsSet"]('SpamFolder', oData.SystemFolders[Common_Enums__WEBPACK_IMPORTED_MODULE_4__["ServerFolderType"].JUNK] || null);
        Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsSet"]('TrashFolder', oData.SystemFolders[Common_Enums__WEBPACK_IMPORTED_MODULE_4__["ServerFolderType"].TRASH] || null);
        Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsSet"]('ArchiveFolder', oData.SystemFolders[Common_Enums__WEBPACK_IMPORTED_MODULE_4__["ServerFolderType"].ALL] || null);
        update = true;
      }

      Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].sentFolder(this.normalizeFolder(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('SentFolder')));
      Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].draftFolder(this.normalizeFolder(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('DraftFolder')));
      Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].spamFolder(this.normalizeFolder(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('SpamFolder')));
      Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].trashFolder(this.normalizeFolder(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('TrashFolder')));
      Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].archiveFolder(this.normalizeFolder(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["settingsGet"]('ArchiveFolder')));

      if (update) {
        Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].saveSystemFolders(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["noop"], {
          SentFolder: Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].sentFolder(),
          DraftFolder: Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].draftFolder(),
          SpamFolder: Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].spamFolder(),
          TrashFolder: Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].trashFolder(),
          ArchiveFolder: Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].archiveFolder(),
          NullFolder: 'NullFolder'
        });
      }

      Storage_Client__WEBPACK_IMPORTED_MODULE_7__[/* set */ "b"](Common_Enums__WEBPACK_IMPORTED_MODULE_4__["ClientSideKeyName"].FoldersLashHash, oData.FoldersHash);
    }
  };

  return PromisesUserPopulator;
}(Promises_AbstractBasic__WEBPACK_IMPORTED_MODULE_12__[/* AbstractBasicPromises */ "a"]);

/* harmony default export */ __webpack_exports__["a"] = (new PromisesUserPopulator());

/***/ }),
/* 407 */
/*!*****************************!*\
  !*** ./dev/Model/Filter.js ***!
  \*****************************/
/*! exports provided: FilterModel, default */
/*! exports used: FilterModel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FilterModel; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/User/Account */ 46);
/* harmony import */ var Model_FilterCondition__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Model/FilterCondition */ 408);
/* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Knoin/AbstractModel */ 67);

















var FilterModel = /*#__PURE__*/function (_AbstractModel) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(FilterModel, _AbstractModel);

  function FilterModel() {
    var _this;

    _this = _AbstractModel.call(this, 'FilterModel') || this;
    _this.enabled = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(true);
    _this.id = '';
    _this.name = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable('');
    _this.name.error = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(false);
    _this.name.focused = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(false);
    _this.conditions = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observableArray([]);
    _this.conditionsType = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterRulesType"].Any); // Actions

    _this.actionValue = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable('');
    _this.actionValue.error = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(false);
    _this.actionValueSecond = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable('');
    _this.actionValueThird = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable('');
    _this.actionValueFourth = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable('');
    _this.actionValueFourth.error = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(false);
    _this.actionMarkAsRead = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(false);
    _this.actionKeep = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(true);
    _this.actionNoStop = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(false);
    _this.actionType = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].MoveTo);

    _this.actionType.subscribe(function () {
      _this.actionValue('');

      _this.actionValue.error(false);

      _this.actionValueSecond('');

      _this.actionValueThird('');

      _this.actionValueFourth('');

      _this.actionValueFourth.error(false);
    });

    var fGetRealFolderName = function fGetRealFolderName(folderFullNameRaw) {
      var folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_12__[/* getFolderFromCacheList */ "e"])(folderFullNameRaw);
      return folder ? folder.fullName.replace('.' === folder.delimiter ? /\./ : /[\\/]+/, ' / ') : folderFullNameRaw;
    };

    _this.nameSub = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].computed(function () {
      var result = '';

      var actionValue = _this.actionValue();

      switch (_this.actionType()) {
        case Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].MoveTo:
          result = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["i18n"])('SETTINGS_FILTERS/SUBNAME_MOVE_TO', {
            FOLDER: fGetRealFolderName(actionValue)
          });
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Forward:
          result = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["i18n"])('SETTINGS_FILTERS/SUBNAME_FORWARD_TO', {
            EMAIL: actionValue
          });
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Vacation:
          result = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["i18n"])('SETTINGS_FILTERS/SUBNAME_VACATION_MESSAGE');
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Reject:
          result = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["i18n"])('SETTINGS_FILTERS/SUBNAME_REJECT');
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Discard:
          result = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_11__["i18n"])('SETTINGS_FILTERS/SUBNAME_DISCARD');
          break;
        // no default
      }

      return result ? '(' + result + ')' : '';
    });
    _this.actionTemplate = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].computed(function () {
      var result = '';

      switch (_this.actionType()) {
        case Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Forward:
          result = 'SettingsFiltersActionForward';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Vacation:
          result = 'SettingsFiltersActionVacation';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Reject:
          result = 'SettingsFiltersActionReject';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].None:
          result = 'SettingsFiltersActionNone';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Discard:
          result = 'SettingsFiltersActionDiscard';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].MoveTo:
        default:
          result = 'SettingsFiltersActionMoveToFolder';
          break;
      }

      return result;
    });

    _this.regDisposables(_this.conditions.subscribe(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["windowResizeCallback"]));

    _this.regDisposables(_this.name.subscribe(function (sValue) {
      _this.name.error('' === sValue);
    }));

    _this.regDisposables(_this.actionValue.subscribe(function (sValue) {
      _this.actionValue.error('' === sValue);
    }));

    _this.regDisposables([_this.actionNoStop, _this.actionTemplate]);

    _this.deleteAccess = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(false);
    _this.canBeDeleted = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(true);
    return _this;
  }

  var _proto = FilterModel.prototype;

  _proto.generateID = function generateID() {
    this.id = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["fakeMd5"])();
  };

  _proto.verify = function verify() {
    if ('' === this.name()) {
      this.name.error(true);
      return false;
    }

    if (0 < this.conditions().length) {
      if (_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, this.conditions(), function (cond) {
        return cond && !cond.verify();
      })) {
        return false;
      }
    }

    if ('' === this.actionValue()) {
      if (-1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["inArray"])(this.actionType(), [Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].MoveTo, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Forward, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Reject, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Vacation])) {
        this.actionValue.error(true);
        return false;
      }
    }

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Forward === this.actionType() && -1 === this.actionValue().indexOf('@')) {
      this.actionValue.error(true);
      return false;
    }

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Vacation === this.actionType() && '' !== this.actionValueFourth() && -1 === this.actionValueFourth().indexOf('@')) {
      this.actionValueFourth.error(true);
      return false;
    }

    this.name.error(false);
    this.actionValue.error(false);
    return true;
  };

  _proto.toJson = function toJson() {
    return {
      ID: this.id,
      Enabled: this.enabled() ? '1' : '0',
      Name: this.name(),
      ConditionsType: this.conditionsType(),
      Conditions: _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, this.conditions(), function (item) {
        return item.toJson();
      }),
      ActionValue: this.actionValue(),
      ActionValueSecond: this.actionValueSecond(),
      ActionValueThird: this.actionValueThird(),
      ActionValueFourth: this.actionValueFourth(),
      ActionType: this.actionType(),
      Stop: this.actionNoStop() ? '0' : '1',
      Keep: this.actionKeep() ? '1' : '0',
      MarkAsRead: this.actionMarkAsRead() ? '1' : '0'
    };
  };

  _proto.addCondition = function addCondition() {
    this.conditions.push(new Model_FilterCondition__WEBPACK_IMPORTED_MODULE_14__[/* FilterConditionModel */ "a"]());
  };

  _proto.removeCondition = function removeCondition(oConditionToDelete) {
    this.conditions.remove(oConditionToDelete);
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["delegateRunOnDestroy"])(oConditionToDelete);
  };

  _proto.setRecipients = function setRecipients() {
    this.actionValueFourth(Stores_User_Account__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].accountsEmails().join(', '));
  };

  _proto.parse = function parse(json) {
    var result = false;

    if (json && 'Object/Filter' === json['@Object']) {
      this.id = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["pString"])(json.ID);
      this.name(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["pString"])(json.Name));
      this.enabled(!!json.Enabled);
      this.conditionsType(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["pString"])(json.ConditionsType));
      this.conditions([]);

      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["isNonEmptyArray"])(json.Conditions)) {
        this.conditions(___WEBPACK_IMPORTED_MODULE_7___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, json.Conditions, function (aData) {
          var filterCondition = new Model_FilterCondition__WEBPACK_IMPORTED_MODULE_14__[/* FilterConditionModel */ "a"]();
          return filterCondition && filterCondition.parse(aData) ? filterCondition : null;
        })));
      }

      this.actionType(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["pString"])(json.ActionType));
      this.actionValue(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["pString"])(json.ActionValue));
      this.actionValueSecond(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["pString"])(json.ActionValueSecond));
      this.actionValueThird(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["pString"])(json.ActionValueThird));
      this.actionValueFourth(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_10__["pString"])(json.ActionValueFourth));
      this.actionNoStop(!json.Stop);
      this.actionKeep(!!json.Keep);
      this.actionMarkAsRead(!!json.MarkAsRead);
      result = true;
    }

    return result;
  };

  _proto.cloneSelf = function cloneSelf() {
    var filter = new FilterModel();
    filter.id = this.id;
    filter.enabled(this.enabled());
    filter.name(this.name());
    filter.name.error(this.name.error());
    filter.conditionsType(this.conditionsType());
    filter.actionMarkAsRead(this.actionMarkAsRead());
    filter.actionType(this.actionType());
    filter.actionValue(this.actionValue());
    filter.actionValue.error(this.actionValue.error());
    filter.actionValueSecond(this.actionValueSecond());
    filter.actionValueThird(this.actionValueThird());
    filter.actionValueFourth(this.actionValueFourth());
    filter.actionKeep(this.actionKeep());
    filter.actionNoStop(this.actionNoStop());
    filter.conditions(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, this.conditions(), function (item) {
      return item.cloneSelf();
    }));
    return filter;
  };

  return FilterModel;
}(Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_15__[/* AbstractModel */ "a"]);



/***/ }),
/* 408 */
/*!**************************************!*\
  !*** ./dev/Model/FilterCondition.js ***!
  \**************************************/
/*! exports provided: FilterConditionModel, default */
/*! exports used: FilterConditionModel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FilterConditionModel; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Knoin/AbstractModel */ 67);







var FilterConditionModel = /*#__PURE__*/function (_AbstractModel) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(FilterConditionModel, _AbstractModel);

  function FilterConditionModel() {
    var _this;

    _this = _AbstractModel.call(this, 'FilterConditionModel') || this;
    _this.field = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_3__["FilterConditionField"].From);
    _this.type = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_3__["FilterConditionType"].Contains);
    _this.value = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    _this.value.error = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    _this.valueSecond = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    _this.valueSecond.error = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    _this.template = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      var template = '';

      switch (_this.field()) {
        case Common_Enums__WEBPACK_IMPORTED_MODULE_3__["FilterConditionField"].Size:
          template = 'SettingsFiltersConditionSize';
          break;

        case Common_Enums__WEBPACK_IMPORTED_MODULE_3__["FilterConditionField"].Header:
          template = 'SettingsFiltersConditionMore';
          break;

        default:
          template = 'SettingsFiltersConditionDefault';
          break;
      }

      return template;
    }, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));

    _this.field.subscribe(function () {
      _this.value('');

      _this.valueSecond('');
    });

    _this.regDisposables([_this.template]);

    return _this;
  }

  var _proto = FilterConditionModel.prototype;

  _proto.verify = function verify() {
    if ('' === this.value()) {
      this.value.error(true);
      return false;
    }

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_3__["FilterConditionField"].Header === this.field() && '' === this.valueSecond()) {
      this.valueSecond.error(true);
      return false;
    }

    return true;
  };

  _proto.parse = function parse(json) {
    if (json && json.Field && json.Type) {
      this.field(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pString"])(json.Field));
      this.type(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pString"])(json.Type));
      this.value(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pString"])(json.Value));
      this.valueSecond(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pString"])(json.ValueSecond));
      return true;
    }

    return false;
  };

  _proto.toJson = function toJson() {
    return {
      Field: this.field(),
      Type: this.type(),
      Value: this.value(),
      ValueSecond: this.valueSecond()
    };
  };

  _proto.cloneSelf = function cloneSelf() {
    var filterCond = new FilterConditionModel();
    filterCond.field(this.field());
    filterCond.type(this.type());
    filterCond.value(this.value());
    filterCond.valueSecond(this.valueSecond());
    return filterCond;
  };

  return FilterConditionModel;
}(Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_5__[/* AbstractModel */ "a"]);



/***/ }),
/* 409 */
/*!****************************!*\
  !*** external "window.qr" ***!
  \****************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports) {

module.exports = window.qr;

/***/ }),
/* 410 */,
/* 411 */,
/* 412 */,
/* 413 */,
/* 414 */,
/* 415 */,
/* 416 */,
/* 417 */,
/* 418 */,
/* 419 */,
/* 420 */,
/* 421 */,
/* 422 */,
/* 423 */,
/* 424 */,
/* 425 */,
/* 426 */
/*!*************************************************!*\
  !*** ./dev/View/Popup/KeyboardShortcutsHelp.js ***!
  \*************************************************/
/*! exports provided: KeyboardShortcutsHelpPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeyboardShortcutsHelpPopupView", function() { return KeyboardShortcutsHelpPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return KeyboardShortcutsHelpPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;








var KeyboardShortcutsHelpPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["popup"])({
  name: 'View/Popup/KeyboardShortcutsHelp',
  templateID: 'PopupsKeyboardShortcutsHelp'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(KeyboardShortcutsHelpPopupView, _AbstractViewNext);

  function KeyboardShortcutsHelpPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_5__["KeyState"].PopupKeyboardShortcutsHelp;
    return _this;
  }

  var _proto = KeyboardShortcutsHelpPopupView.prototype;

  _proto.onBuild = function onBuild(dom) {
    key__WEBPACK_IMPORTED_MODULE_4___default()('tab, shift+tab, left, right', Common_Enums__WEBPACK_IMPORTED_MODULE_5__["KeyState"].PopupKeyboardShortcutsHelp, ___WEBPACK_IMPORTED_MODULE_3___default.a.throttle(function (event, handler) {
      if (event && handler) {
        var _context;

        var $tabs = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(dom).call(dom, '.nav.nav-tabs > li'),
            isNext = handler && ('tab' === handler.shortcut || 'right' === handler.shortcut);

        var index = $tabs.index(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()($tabs).call($tabs, '.active'));

        if (!isNext && 0 < index) {
          index -= 1;
        } else if (isNext && index < $tabs.length - 1) {
          index += 1;
        } else {
          index = isNext ? 0 : $tabs.length - 1;
        }

        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(_context = $tabs.eq(index)).call(_context, 'a[data-toggle="tab"]').tab('show');

        return false;
      }

      return true;
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].Time100ms));
  };

  return KeyboardShortcutsHelpPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_7__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 427 */
/*!************************************!*\
  !*** ./dev/View/Popup/Contacts.js ***!
  \************************************/
/*! exports provided: ContactsPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContactsPopupView", function() { return ContactsPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ContactsPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.search.js */ 315);
/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Jua */ 205);
/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(Jua__WEBPACK_IMPORTED_MODULE_14__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Selector__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Common/Selector */ 319);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Stores/User/Settings */ 35);
/* harmony import */ var Stores_User_Contact__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Stores/User/Contact */ 103);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Model/Email */ 82);
/* harmony import */ var Model_Contact__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Model/Contact */ 451);
/* harmony import */ var Model_ContactProperty__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Model/ContactProperty */ 310);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _class, _class2;































var ContactsPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__["popup"])({
  name: 'View/Popup/Contacts',
  templateID: 'PopupsContacts'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__["command"])(), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__["command"])(function (self) {
  return 0 < self.contactsCheckedOrSelected().length;
}), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__["command"])(function (self) {
  return 0 < self.contactsCheckedOrSelected().length;
}), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__["command"])(), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__["command"])(function (self) {
  var bV = self.viewHasNonEmptyRequiredProperties(),
      bReadOnly = self.viewReadOnly();
  return !self.viewSaving() && bV && !bReadOnly;
}), _dec7 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__["command"])(function (self) {
  return !self.contacts.syncing() && !self.contacts.importing();
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(ContactsPopupView, _AbstractViewNext);

  function ContactsPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;

    var fFastClearEmptyListHelper = function fFastClearEmptyListHelper(list) {
      if (list && 0 < list.length) {
        _this.viewProperties.removeAll(list);

        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["delegateRunOnDestroy"])(list);
      }
    };

    _this.bBackToCompose = false;
    _this.sLastComposeFocusedField = '';
    _this.allowContactsSync = Stores_User_Contact__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].allowContactsSync;
    _this.enableContactsSync = Stores_User_Contact__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].enableContactsSync;
    _this.allowExport = !Common_Globals__WEBPACK_IMPORTED_MODULE_18__["bMobileDevice"];
    _this.search = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable('');
    _this.contactsCount = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(0);
    _this.contacts = Stores_User_Contact__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].contacts;
    _this.currentContact = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(null);
    _this.importUploaderButton = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(null);
    _this.contactsPage = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(1);
    _this.contactsPageCount = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      var iPage = window__WEBPACK_IMPORTED_MODULE_9___default.a.Math.ceil(_this.contactsCount() / Common_Consts__WEBPACK_IMPORTED_MODULE_17__[/* CONTACTS_PER_PAGE */ "c"]);
      return 0 >= iPage ? 1 : iPage;
    });
    _this.contactsPagenator = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["computedPagenatorHelper"])(_this.contactsPage, _this.contactsPageCount));
    _this.emptySelection = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(true);
    _this.viewClearSearch = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(false);
    _this.viewID = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable('');
    _this.viewReadOnly = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(false);
    _this.viewProperties = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observableArray([]);
    _this.viewSaveTrigger = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["SaveSettingsStep"].Idle);
    _this.viewPropertiesNames = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.viewProperties(), function (property) {
        return -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["inArray"])(property.type(), [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].FirstName, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].LastName]);
      });
    });
    _this.viewPropertiesOther = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.viewProperties(), function (property) {
        return -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["inArray"])(property.type(), [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].Nick]);
      });
    });
    _this.viewPropertiesEmails = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.viewProperties(), function (property) {
        return Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].Email === property.type();
      });
    });
    _this.viewPropertiesWeb = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.viewProperties(), function (property) {
        return Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].Web === property.type();
      });
    });
    _this.viewHasNonEmptyRequiredProperties = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      var names = _this.viewPropertiesNames(),
          emails = _this.viewPropertiesEmails(),
          fFilter = function fFilter(property) {
        return '' !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["trim"])(property.value());
      };

      return !!(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, names, fFilter) || _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, emails, fFilter));
    });
    _this.viewPropertiesPhones = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.viewProperties(), function (property) {
        return Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].Phone === property.type();
      });
    });
    _this.viewPropertiesEmailsNonEmpty = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.viewPropertiesNames(), function (property) {
        return '' !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["trim"])(property.value());
      });
    });

    var propertyFocused = function propertyFocused(property) {
      var focused = property.focused();
      return '' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["trim"])(property.value()) && !focused;
    };

    _this.viewPropertiesEmailsEmptyAndOnFocused = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.viewPropertiesEmails(), propertyFocused);
    });
    _this.viewPropertiesPhonesEmptyAndOnFocused = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.viewPropertiesPhones(), propertyFocused);
    });
    _this.viewPropertiesWebEmptyAndOnFocused = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.viewPropertiesWeb(), propertyFocused);
    });
    _this.viewPropertiesOtherEmptyAndOnFocused = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.viewPropertiesOther(), propertyFocused);
    });

    _this.viewPropertiesEmailsEmptyAndOnFocused.subscribe(fFastClearEmptyListHelper);

    _this.viewPropertiesPhonesEmptyAndOnFocused.subscribe(fFastClearEmptyListHelper);

    _this.viewPropertiesWebEmptyAndOnFocused.subscribe(fFastClearEmptyListHelper);

    _this.viewPropertiesOtherEmptyAndOnFocused.subscribe(fFastClearEmptyListHelper);

    _this.viewSaving = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(false);
    _this.useCheckboxesInList = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_22__[/* default */ "a"].useCheckboxesInList;

    _this.search.subscribe(function () {
      _this.reloadContactList();
    });

    _this.contacts.subscribe(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["windowResizeCallback"]);

    _this.viewProperties.subscribe(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["windowResizeCallback"]);

    _this.contactsChecked = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.contacts(), function (item) {
        return item.checked();
      });
    });
    _this.contactsCheckedOrSelected = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      var checked = _this.contactsChecked(),
          selected = _this.currentContact();

      return ___WEBPACK_IMPORTED_MODULE_10___default.a.union(checked, selected ? [selected] : []);
    });
    _this.contactsCheckedOrSelectedUids = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.contactsCheckedOrSelected(), function (contact) {
        return contact.idContact;
      });
    });
    _this.selector = new Common_Selector__WEBPACK_IMPORTED_MODULE_19__[/* Selector */ "a"](_this.contacts, _this.currentContact, null, '.e-contact-item .actionHandle', '.e-contact-item.selected', '.e-contact-item .checkboxItem', '.e-contact-item.focused');

    _this.selector.on('onItemSelect', function (contact) {
      _this.populateViewContact(contact ? contact : null);

      if (!contact) {
        _this.emptySelection(true);
      }
    });

    _this.selector.on('onItemGetUid', function (contact) {
      return contact ? contact.generateUid() : '';
    });

    _this.bDropPageAfterDelete = false;
    _this.watchDirty = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(false);
    _this.watchHash = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(false);
    _this.viewHash = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return '' + _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.viewProperties(), function (oItem) {
        return oItem.value();
      }).join('');
    }); // this.saveCommandDebounce = _.debounce(_.bind(this.saveCommand, this), 1000);

    _this.viewHash.subscribe(function () {
      if (_this.watchHash() && !_this.viewReadOnly() && !_this.watchDirty()) {
        _this.watchDirty(true);
      }
    });

    _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].ContactList;
    return _this;
  }

  var _proto = ContactsPopupView.prototype;

  _proto.newCommand = function newCommand() {
    this.populateViewContact(null);
    this.currentContact(null);
  };

  _proto.deleteCommand = function deleteCommand() {
    this.deleteSelectedContacts();
    this.emptySelection(true);
  };

  _proto.newMessageCommand = function newMessageCommand() {
    if (!Storage_Settings__WEBPACK_IMPORTED_MODULE_25__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Composer)) {
      return false;
    }

    var aE = [],
        toEmails = null,
        ccEmails = null,
        bccEmails = null;
    var aC = this.contactsCheckedOrSelected();

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["isNonEmptyArray"])(aC)) {
      aE = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, aC, function (oItem) {
        if (oItem) {
          var data = oItem.getNameAndEmailHelper(),
              email = data ? new Model_Email__WEBPACK_IMPORTED_MODULE_26__["EmailModel"](data[0], data[1]) : null;

          if (email && email.validate()) {
            return email;
          }
        }

        return null;
      });
      aE = ___WEBPACK_IMPORTED_MODULE_10___default.a.compact(aE);
    }

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["isNonEmptyArray"])(aE)) {
      this.bBackToCompose = false;
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__["hideScreenPopup"])(ContactsPopupView);

      switch (this.sLastComposeFocusedField) {
        case 'cc':
          ccEmails = aE;
          break;

        case 'bcc':
          bccEmails = aE;
          break;

        case 'to':
        default:
          toEmails = aE;
          break;
      }

      this.sLastComposeFocusedField = '';

      ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 132), [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ComposeType"].Empty, null, toEmails, ccEmails, bccEmails]);
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time200ms);
    }

    return true;
  };

  _proto.clearCommand = function clearCommand() {
    this.search('');
  };

  _proto.saveCommand = function saveCommand() {
    var _this2 = this;

    this.viewSaving(true);
    this.viewSaveTrigger(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["SaveSettingsStep"].Animate);
    var requestUid = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["fakeMd5"])(),
        properties = [];

    ___WEBPACK_IMPORTED_MODULE_10___default.a.each(this.viewProperties(), function (oItem) {
      if (oItem.type() && oItem.type() !== Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].FullName && '' !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["trim"])(oItem.value())) {
        properties.push([oItem.type(), oItem.value(), oItem.typeStr()]);
      }
    });

    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].contactSave(function (sResult, oData) {
      var res = false;

      _this2.viewSaving(false);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_15__["StorageResultType"].Success === sResult && oData && oData.Result && oData.Result.RequestUid === requestUid && 0 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["pInt"])(oData.Result.ResultID)) {
        if ('' === _this2.viewID()) {
          _this2.viewID(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["pInt"])(oData.Result.ResultID));
        }

        _this2.reloadContactList();

        res = true;
      }

      ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
        _this2.viewSaveTrigger(res ? Common_Enums__WEBPACK_IMPORTED_MODULE_15__["SaveSettingsStep"].TrueResult : Common_Enums__WEBPACK_IMPORTED_MODULE_15__["SaveSettingsStep"].FalseResult);
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time350ms);

      if (res) {
        _this2.watchDirty(false);

        ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
          _this2.viewSaveTrigger(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["SaveSettingsStep"].Idle);
        }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time1s);
      }
    }, requestUid, this.viewID(), properties);
  };

  _proto.syncCommand = function syncCommand() {
    var _this3 = this;

    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_29__[/* getApp */ "a"])().contactsSync(function (result, data) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_15__["StorageResultType"].Success !== result || !data || !data.Result) {
        window__WEBPACK_IMPORTED_MODULE_9___default.a.alert(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_21__["getNotification"])(data && data.ErrorCode ? data.ErrorCode : Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Notification"].ContactsSyncError));
      }

      _this3.reloadContactList(true);
    });
  };

  _proto.getPropertyPlaceholder = function getPropertyPlaceholder(type) {
    var result = '';

    switch (type) {
      case Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].LastName:
        result = 'CONTACTS/PLACEHOLDER_ENTER_LAST_NAME';
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].FirstName:
        result = 'CONTACTS/PLACEHOLDER_ENTER_FIRST_NAME';
        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].Nick:
        result = 'CONTACTS/PLACEHOLDER_ENTER_NICK_NAME';
        break;
      // no default
    }

    return result;
  };

  _proto.addNewProperty = function addNewProperty(type, typeStr) {
    this.viewProperties.push(new Model_ContactProperty__WEBPACK_IMPORTED_MODULE_28__[/* ContactPropertyModel */ "a"](type, typeStr || '', '', true, this.getPropertyPlaceholder(type)));
  };

  _proto.addNewOrFocusProperty = function addNewOrFocusProperty(type, typeStr) {
    var item = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, this.viewProperties(), function (prop) {
      return type === prop.type();
    });

    if (item) {
      item.focused(true);
    } else {
      this.addNewProperty(type, typeStr);
    }
  };

  _proto.addNewEmail = function addNewEmail() {
    this.addNewProperty(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].Email, 'Home');
  };

  _proto.addNewPhone = function addNewPhone() {
    this.addNewProperty(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].Phone, 'Mobile');
  };

  _proto.addNewWeb = function addNewWeb() {
    this.addNewProperty(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].Web);
  };

  _proto.addNewNickname = function addNewNickname() {
    this.addNewOrFocusProperty(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].Nick);
  };

  _proto.addNewNotes = function addNewNotes() {
    this.addNewOrFocusProperty(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].Note);
  };

  _proto.addNewBirthday = function addNewBirthday() {
    this.addNewOrFocusProperty(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].Birthday);
  };

  _proto.exportVcf = function exportVcf() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_29__[/* getApp */ "a"])().download(Object(Common_Links__WEBPACK_IMPORTED_MODULE_20__[/* exportContactsVcf */ "l"])());
  };

  _proto.exportCsv = function exportCsv() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_29__[/* getApp */ "a"])().download(Object(Common_Links__WEBPACK_IMPORTED_MODULE_20__[/* exportContactsCsv */ "k"])());
  };

  _proto.initUploader = function initUploader() {
    var _this4 = this;

    if (this.importUploaderButton()) {
      var j = new Jua__WEBPACK_IMPORTED_MODULE_14___default.a({
        'action': Object(Common_Links__WEBPACK_IMPORTED_MODULE_20__[/* uploadContacts */ "I"])(),
        'name': 'uploader',
        'queueSize': 1,
        'multipleSizeLimit': 1,
        'disableDragAndDrop': true,
        'disableMultiple': true,
        'disableDocumentDropPrevent': true,
        'clickElement': this.importUploaderButton()
      });

      if (j) {
        j.on('onStart', function () {
          _this4.contacts.importing(true);
        }).on('onComplete', function (id, result, data) {
          _this4.contacts.importing(false);

          _this4.reloadContactList();

          if (!id || !result || !data || !data.Result) {
            window__WEBPACK_IMPORTED_MODULE_9___default.a.alert(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_21__["i18n"])('CONTACTS/ERROR_IMPORT_FILE'));
          }
        });
      }
    }
  };

  _proto.removeCheckedOrSelectedContactsFromList = function removeCheckedOrSelectedContactsFromList() {
    var _this5 = this;

    var koContacts = this.contacts,
        contacts = this.contactsCheckedOrSelected();
    var currentContact = this.currentContact(),
        count = this.contacts().length;

    if (0 < contacts.length) {
      ___WEBPACK_IMPORTED_MODULE_10___default.a.each(contacts, function (contact) {
        if (currentContact && currentContact.idContact === contact.idContact) {
          currentContact = null;

          _this5.currentContact(null);
        }

        contact.deleted(true);
        count -= 1;
      });

      if (0 >= count) {
        this.bDropPageAfterDelete = true;
      }

      ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
        ___WEBPACK_IMPORTED_MODULE_10___default.a.each(contacts, function (contact) {
          koContacts.remove(contact);
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["delegateRunOnDestroy"])(contact);
        });
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time500ms);
    }
  };

  _proto.deleteSelectedContacts = function deleteSelectedContacts() {
    if (0 < this.contactsCheckedOrSelected().length) {
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].contactsDelete(___WEBPACK_IMPORTED_MODULE_10___default.a.bind(this.deleteResponse, this), this.contactsCheckedOrSelectedUids());
      this.removeCheckedOrSelectedContactsFromList();
    }
  }
  /**
   * @param {string} sResult
   * @param {AjaxJsonDefaultResponse} oData
   */
  ;

  _proto.deleteResponse = function deleteResponse(sResult, oData) {
    var _this6 = this;

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time500ms < (Common_Enums__WEBPACK_IMPORTED_MODULE_15__["StorageResultType"].Success === sResult && oData && oData.Time ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["pInt"])(oData.Time) : 0)) {
      this.reloadContactList(this.bDropPageAfterDelete);
    } else {
      ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
        _this6.reloadContactList(_this6.bDropPageAfterDelete);
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time500ms);
    }
  };

  _proto.removeProperty = function removeProperty(oProp) {
    this.viewProperties.remove(oProp);
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["delegateRunOnDestroy"])(oProp);
  }
  /**
   * @param {?ContactModel} contact
   */
  ;

  _proto.populateViewContact = function populateViewContact(contact) {
    var id = '',
        lastName = '',
        firstName = '';
    var list = [];
    this.watchHash(false);
    this.emptySelection(false);
    this.viewReadOnly(false);

    if (contact) {
      id = contact.idContact;

      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["isNonEmptyArray"])(contact.properties)) {
        ___WEBPACK_IMPORTED_MODULE_10___default.a.each(contact.properties, function (property) {
          if (property && property[0]) {
            if (Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].LastName === property[0]) {
              lastName = property[1];
            } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].FirstName === property[0]) {
              firstName = property[1];
            } else {
              list.push(new Model_ContactProperty__WEBPACK_IMPORTED_MODULE_28__[/* ContactPropertyModel */ "a"](property[0], property[2] || '', property[1]));
            }
          }
        });
      }

      this.viewReadOnly(!!contact.readOnly);
    }

    list.unshift(new Model_ContactProperty__WEBPACK_IMPORTED_MODULE_28__[/* ContactPropertyModel */ "a"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].LastName, '', lastName, false, this.getPropertyPlaceholder(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].LastName)));
    list.unshift(new Model_ContactProperty__WEBPACK_IMPORTED_MODULE_28__[/* ContactPropertyModel */ "a"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].FirstName, '', firstName, !contact, this.getPropertyPlaceholder(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ContactPropertyType"].FirstName)));
    this.viewID(id);
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["delegateRunOnDestroy"])(this.viewProperties());
    this.viewProperties([]);
    this.viewProperties(list);
    this.watchDirty(false);
    this.watchHash(true);
  }
  /**
   * @param {boolean=} dropPagePosition = false
   */
  ;

  _proto.reloadContactList = function reloadContactList(dropPagePosition) {
    var _this7 = this;

    if (dropPagePosition === void 0) {
      dropPagePosition = false;
    }

    var offset = (this.contactsPage() - 1) * Common_Consts__WEBPACK_IMPORTED_MODULE_17__[/* CONTACTS_PER_PAGE */ "c"];
    this.bDropPageAfterDelete = false;

    if (dropPagePosition) {
      this.contactsPage(1);
      offset = 0;
    }

    this.contacts.loading(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].contacts(function (result, data) {
      var count = 0,
          list = [];

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_15__["StorageResultType"].Success === result && data && data.Result && data.Result.List) {
        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["isNonEmptyArray"])(data.Result.List)) {
          list = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, data.Result.List, function (item) {
            var contact = new Model_Contact__WEBPACK_IMPORTED_MODULE_27__[/* ContactModel */ "a"]();
            return contact.parse(item) ? contact : null;
          });
          list = ___WEBPACK_IMPORTED_MODULE_10___default.a.compact(list);
          count = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["pInt"])(data.Result.Count);
          count = 0 < count ? count : 0;
        }
      }

      _this7.contactsCount(count);

      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["delegateRunOnDestroy"])(_this7.contacts());

      _this7.contacts(list);

      _this7.contacts.loading(false);

      _this7.viewClearSearch('' !== _this7.search());
    }, offset, Common_Consts__WEBPACK_IMPORTED_MODULE_17__[/* CONTACTS_PER_PAGE */ "c"], this.search());
  };

  _proto.onBuild = function onBuild(dom) {
    var _this8 = this;

    this.oContentVisible = $__WEBPACK_IMPORTED_MODULE_11___default()('.b-list-content', dom);
    this.oContentScrollable = $__WEBPACK_IMPORTED_MODULE_11___default()('.content', this.oContentVisible);
    this.selector.init(this.oContentVisible, this.oContentScrollable, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].ContactList);
    key__WEBPACK_IMPORTED_MODULE_13___default()('delete', Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].ContactList, function () {
      _this8.deleteCommand();

      return false;
    });
    key__WEBPACK_IMPORTED_MODULE_13___default()('c, w', Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].ContactList, function () {
      _this8.newMessageCommand();

      return false;
    });
    var self = this;
    dom.on('click', '.e-pagenator .e-page', function () {
      // eslint-disable-line prefer-arrow-callback
      var page = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].dataFor(this); // eslint-disable-line no-invalid-this

      if (page) {
        self.contactsPage(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["pInt"])(page.value));
        self.reloadContactList();
      }
    });
    this.initUploader();
  };

  _proto.onShow = function onShow(bBackToCompose, sLastComposeFocusedField) {
    this.bBackToCompose = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["isUnd"])(bBackToCompose) ? false : !!bBackToCompose;
    this.sLastComposeFocusedField = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["isUnd"])(sLastComposeFocusedField) ? '' : sLastComposeFocusedField;
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__["routeOff"])();
    this.reloadContactList(true);
  };

  _proto.onHide = function onHide() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__["routeOn"])();
    this.currentContact(null);
    this.emptySelection(true);
    this.search('');
    this.contactsCount(0);
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_16__["delegateRunOnDestroy"])(this.contacts());
    this.contacts([]);
    this.sLastComposeFocusedField = '';

    if (this.bBackToCompose) {
      this.bBackToCompose = false;

      if (Storage_Settings__WEBPACK_IMPORTED_MODULE_25__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Composer)) {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_30__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 132));
      }
    }
  };

  return ContactsPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_31__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "newCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default()(_class2.prototype, "newCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "deleteCommand", [_dec3], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default()(_class2.prototype, "deleteCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "newMessageCommand", [_dec4], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default()(_class2.prototype, "newMessageCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "clearCommand", [_dec5], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default()(_class2.prototype, "clearCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "saveCommand", [_dec6], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default()(_class2.prototype, "saveCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "syncCommand", [_dec7], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default()(_class2.prototype, "syncCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 428 */
/*!****************************************!*\
  !*** ./dev/View/Popup/FolderCreate.js ***!
  \****************************************/
/*! exports provided: FolderCreateView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FolderCreateView", function() { return FolderCreateView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FolderCreateView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Promises/User/Ajax */ 93);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _class, _class2;













var FolderCreateView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["popup"])({
  name: 'View/Popup/FolderCreate',
  templateID: 'PopupsFolderCreate'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["command"])(function (self) {
  return self.simpleFolderNameValidation(self.folderName());
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(FolderCreateView, _AbstractViewNext);

  function FolderCreateView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.folderName = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('');
    _this.folderName.focused = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.selectedParentValue = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* UNUSED_OPTION_VALUE */ "r"]);
    _this.parentFolderSelectList = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].computed(function () {
      var top = [],
          list = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].folderList(),
          fRenameCallback = function fRenameCallback(oItem) {
        return oItem ? oItem.isSystemFolder() ? oItem.name() + ' ' + oItem.manageFolderSystemName() : oItem.name() : '';
      };

      top.push(['', '']);
      var fDisableCallback = null;

      if ('' !== Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].namespace) {
        fDisableCallback = function fDisableCallback(item) {
          return Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].namespace !== item.fullNameRaw.substr(0, Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].namespace.length);
        };
      }

      return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["folderListOptionsBuilder"])([], list, [], top, null, fDisableCallback, null, fRenameCallback);
    });
    _this.defautOptionsAfterRender = Common_Utils__WEBPACK_IMPORTED_MODULE_8__["defautOptionsAfterRender"];
    return _this;
  }

  var _proto = FolderCreateView.prototype;

  _proto.createFolderCommand = function createFolderCommand() {
    var parentFolderName = this.selectedParentValue();

    if ('' === parentFolderName && 1 < Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].namespace.length) {
      parentFolderName = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].namespace.substr(0, Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].namespace.length - 1);
    }

    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_11__[/* getApp */ "a"])().foldersPromisesActionHelper(Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].folderCreate(this.folderName(), parentFolderName, Stores_User_Folder__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].foldersCreating), Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Notification"].CantCreateFolder);
    this.cancelCommand();
  };

  _proto.simpleFolderNameValidation = function simpleFolderNameValidation(sName) {
    return /^[^\\/]+$/g.test(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(sName));
  };

  _proto.clearPopup = function clearPopup() {
    this.folderName('');
    this.selectedParentValue('');
    this.folderName.focused(false);
  };

  _proto.onShow = function onShow() {
    this.clearPopup();
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    if (!Common_Globals__WEBPACK_IMPORTED_MODULE_7__["bMobileDevice"]) {
      this.folderName.focused(true);
    }
  };

  return FolderCreateView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_13__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "createFolderCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "createFolderCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 429 */
/*!**********************************!*\
  !*** ./dev/View/Popup/Filter.js ***!
  \**********************************/
/*! exports provided: FilterPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FilterPopupView", function() { return FilterPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FilterPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.filter.js */ 314);
/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Stores_User_Filter__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/User/Filter */ 232);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);




var _dec, _dec2, _class, _class2;















var FilterPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__["popup"])({
  name: 'View/Popup/Filter',
  templateID: 'PopupsFilter'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_15__["command"])(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(FilterPopupView, _AbstractViewNext);

  function FilterPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.isNew = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(true);
    _this.modules = Stores_User_Filter__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].modules;
    _this.fTrueCallback = null;
    _this.filter = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(null);
    _this.allowMarkAsRead = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(false);
    _this.defautOptionsAfterRender = Common_Utils__WEBPACK_IMPORTED_MODULE_11__["defautOptionsAfterRender"];
    _this.folderSelectList = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].folderMenuForFilters;
    _this.selectedFolderValue = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable('');

    _this.selectedFolderValue.subscribe(function () {
      if (_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_this).call(_this)) {
        _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_this).call(_this).actionValue.error(false);
      }
    });

    _this.actionTypeOptions = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observableArray([]);
    _this.fieldOptions = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observableArray([]);
    _this.typeOptions = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observableArray([]);
    _this.typeOptionsSize = ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observableArray([]);
    Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["initOnStartOrLangChange"])(___WEBPACK_IMPORTED_MODULE_7___default.a.bind(_this.populateOptions, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this)));

    _this.modules.subscribe(_this.populateOptions, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));

    return _this;
  }

  var _proto = FilterPopupView.prototype;

  _proto.saveFilterCommand = function saveFilterCommand() {
    var _context;

    if (_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_context = this).call(_context)) {
      var _context2, _context4;

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].MoveTo === _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_context2 = this).call(_context2).actionType()) {
        var _context3;

        _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_context3 = this).call(_context3).actionValue(this.selectedFolderValue());
      }

      if (!_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_context4 = this).call(_context4).verify()) {
        return false;
      }

      if (this.fTrueCallback) {
        var _context5;

        this.fTrueCallback(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_context5 = this).call(_context5));
      }

      if (this.modalVisibility()) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["delegateRun"])(this, 'closeCommand');
      }
    }

    return true;
  };

  _proto.populateOptions = function populateOptions() {
    this.actionTypeOptions([]); // this.actionTypeOptions.push({'id': FiltersAction.None,
    // 'name': i18n('POPUPS_FILTER/SELECT_ACTION_NONE')});

    var modules = this.modules();

    if (modules) {
      if (modules.markasread) {
        this.allowMarkAsRead(true);
      }

      if (modules.moveto) {
        this.actionTypeOptions.push({
          'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].MoveTo,
          'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_ACTION_MOVE_TO')
        });
      }

      if (modules.redirect) {
        this.actionTypeOptions.push({
          'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Forward,
          'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_ACTION_FORWARD_TO')
        });
      }

      if (modules.reject) {
        this.actionTypeOptions.push({
          'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Reject,
          'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_ACTION_REJECT')
        });
      }

      if (modules.vacation) {
        this.actionTypeOptions.push({
          'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Vacation,
          'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_ACTION_VACATION_MESSAGE')
        });
      }
    }

    this.actionTypeOptions.push({
      'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FiltersAction"].Discard,
      'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_ACTION_DISCARD')
    });
    this.fieldOptions([{
      'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterConditionField"].From,
      'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_FIELD_FROM')
    }, {
      'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterConditionField"].Recipient,
      'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_FIELD_RECIPIENTS')
    }, {
      'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterConditionField"].Subject,
      'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_FIELD_SUBJECT')
    }, {
      'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterConditionField"].Size,
      'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_FIELD_SIZE')
    }, {
      'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterConditionField"].Header,
      'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_FIELD_HEADER')
    }]);
    this.typeOptions([{
      'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterConditionType"].Contains,
      'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_TYPE_CONTAINS')
    }, {
      'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterConditionType"].NotContains,
      'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_TYPE_NOT_CONTAINS')
    }, {
      'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterConditionType"].EqualTo,
      'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_TYPE_EQUAL_TO')
    }, {
      'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterConditionType"].NotEqualTo,
      'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_TYPE_NOT_EQUAL_TO')
    }]);

    if (modules && modules.regex) {
      this.typeOptions.push({
        'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterConditionType"].Regex,
        'name': 'Regex'
      });
    }

    this.typeOptionsSize([{
      'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterConditionType"].Over,
      'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_TYPE_OVER')
    }, {
      'id': Common_Enums__WEBPACK_IMPORTED_MODULE_9__["FilterConditionType"].Under,
      'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_FILTER/SELECT_TYPE_UNDER')
    }]);
  };

  _proto.removeCondition = function removeCondition(oConditionToDelete) {
    var _context6;

    if (_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_context6 = this).call(_context6)) {
      var _context7;

      _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_context7 = this).call(_context7).removeCondition(oConditionToDelete);
    }
  };

  _proto.clearPopup = function clearPopup() {
    var _context8;

    this.isNew(true);
    this.fTrueCallback = null;

    _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_context8 = this).call(_context8, null);
  };

  _proto.onShow = function onShow(oFilter, fTrueCallback, bEdit) {
    var _context9;

    this.clearPopup();
    this.fTrueCallback = fTrueCallback;

    _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_context9 = this).call(_context9, oFilter);

    if (oFilter) {
      this.selectedFolderValue(oFilter.actionValue());
    }

    this.isNew(!bEdit);

    if (!bEdit && oFilter) {
      oFilter.name.focused(true);
    }
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    var _context10;

    if (this.isNew() && _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_context10 = this).call(_context10) && !Common_Globals__WEBPACK_IMPORTED_MODULE_10__["bMobileDevice"]) {
      var _context11;

      _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_3___default()(_context11 = this).call(_context11).name.focused(true);
    }
  };

  return FilterPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_16__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "saveFilterCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_4___default()(_class2.prototype, "saveFilterCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 430 */
/*!**************************************************!*\
  !*** ./dev/View/Popup/TwoFactorConfiguration.js ***!
  \**************************************************/
/*! exports provided: TwoFactorConfigurationPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TwoFactorConfigurationPopupView", function() { return TwoFactorConfigurationPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TwoFactorConfigurationPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var qr__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! qr */ 409);
/* harmony import */ var qr__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(qr__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _class;















var TwoFactorConfigurationPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["popup"])({
  name: 'View/Popup/TwoFactorConfiguration',
  templateID: 'PopupsTwoFactorConfiguration'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(TwoFactorConfigurationPopupView, _AbstractViewNext);

  function TwoFactorConfigurationPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.lock = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
    _this.capaTwoFactor = Storage_Settings__WEBPACK_IMPORTED_MODULE_11__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Capa"].TwoFactor);
    _this.processing = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
    _this.clearing = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
    _this.secreting = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
    _this.viewUser = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable('');
    _this.twoFactorStatus = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
    _this.twoFactorTested = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
    _this.viewSecret = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable('');
    _this.viewBackupCodes = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable('');
    _this.viewUrlTitle = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable('');
    _this.viewUrl = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable('');
    _this.viewEnable_ = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].observable(false);
    _this.viewEnable = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].computed({
      read: _this.viewEnable_,
      write: function write(value) {
        value = !!value;

        if (value && _this.twoFactorTested()) {
          _this.viewEnable_(value);

          Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].enableTwoFactor(function (result, data) {
            if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["StorageResultType"].Success !== result || !data || !data.Result) {
              _this.viewEnable_(false);
            }
          }, true);
        } else {
          if (!value) {
            _this.viewEnable_(value);
          }

          Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].enableTwoFactor(function (result, data) {
            if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["StorageResultType"].Success !== result || !data || !data.Result) {
              _this.viewEnable_(false);
            }
          }, false);
        }
      }
    });
    _this.viewTwoFactorEnableTooltip = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].computed(function () {
      Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["trigger"])();
      return _this.twoFactorTested() || _this.viewEnable_() ? '' : Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_SECRET_TEST_BEFORE_DESC');
    });
    _this.viewTwoFactorStatus = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].computed(function () {
      Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["trigger"])();
      return Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])(_this.twoFactorStatus() ? 'POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_SECRET_CONFIGURED_DESC' : 'POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC');
    });
    _this.twoFactorAllowedEnable = ko__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].computed(function () {
      return _this.viewEnable() || _this.twoFactorTested();
    });
    _this.onResult = ___WEBPACK_IMPORTED_MODULE_5___default.a.bind(_this.onResult, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    _this.onShowSecretResult = ___WEBPACK_IMPORTED_MODULE_5___default.a.bind(_this.onShowSecretResult, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    return _this;
  }

  var _proto = TwoFactorConfigurationPopupView.prototype;

  _proto.showSecret = function showSecret() {
    this.secreting(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].showTwoFactorSecret(this.onShowSecretResult);
  };

  _proto.hideSecret = function hideSecret() {
    this.viewSecret('');
    this.viewBackupCodes('');
    this.viewUrlTitle('');
    this.viewUrl('');
  };

  _proto.createTwoFactor = function createTwoFactor() {
    this.processing(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].createTwoFactor(this.onResult);
  };

  _proto.logout = function logout() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_13__[/* getApp */ "a"])().logout();
  };

  _proto.testTwoFactor = function testTwoFactor() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["showScreenPopup"])(__webpack_require__(/*! View/Popup/TwoFactorTest */ 556), [this.twoFactorTested]);
  };

  _proto.clearTwoFactor = function clearTwoFactor() {
    this.viewSecret('');
    this.viewBackupCodes('');
    this.viewUrlTitle('');
    this.viewUrl('');
    this.twoFactorTested(false);
    this.clearing(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].clearTwoFactor(this.onResult);
  };

  _proto.onShow = function onShow(bLock) {
    this.lock(!!bLock);
    this.viewSecret('');
    this.viewBackupCodes('');
    this.viewUrlTitle('');
    this.viewUrl('');
  };

  _proto.onHide = function onHide() {
    if (this.lock()) {
      window__WEBPACK_IMPORTED_MODULE_4___default.a.location.reload();
    }
  };

  _proto.getQr = function getQr() {
    return 'otpauth://totp/' + window__WEBPACK_IMPORTED_MODULE_4___default.a.encodeURIComponent(this.viewUser()) + '?secret=' + window__WEBPACK_IMPORTED_MODULE_4___default.a.encodeURIComponent(this.viewSecret()) + '&issuer=' + window__WEBPACK_IMPORTED_MODULE_4___default.a.encodeURIComponent('');
  };

  _proto.onResult = function onResult(sResult, oData) {
    this.processing(false);
    this.clearing(false);

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["StorageResultType"].Success === sResult && oData && oData.Result) {
      this.viewUser(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["pString"])(oData.Result.User));
      this.viewEnable_(!!oData.Result.Enable);
      this.twoFactorStatus(!!oData.Result.IsSet);
      this.twoFactorTested(!!oData.Result.Tested);
      this.viewSecret(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["pString"])(oData.Result.Secret));
      this.viewBackupCodes(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["pString"])(oData.Result.BackupCodes).replace(/[\s]+/g, '  '));
      this.viewUrlTitle(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["pString"])(oData.Result.UrlTitle));
      this.viewUrl(qr__WEBPACK_IMPORTED_MODULE_7___default.a.toDataURL({
        level: 'M',
        size: 8,
        value: this.getQr()
      }));
    } else {
      this.viewUser('');
      this.viewEnable_(false);
      this.twoFactorStatus(false);
      this.twoFactorTested(false);
      this.viewSecret('');
      this.viewBackupCodes('');
      this.viewUrlTitle('');
      this.viewUrl('');
    }
  };

  _proto.onShowSecretResult = function onShowSecretResult(result, data) {
    this.secreting(false);

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["StorageResultType"].Success === result && data && data.Result) {
      this.viewSecret(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["pString"])(data.Result.Secret));
      this.viewUrlTitle(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["pString"])(data.Result.UrlTitle));
      this.viewUrl(qr__WEBPACK_IMPORTED_MODULE_7___default.a.toDataURL({
        level: 'M',
        size: 6,
        value: this.getQr()
      }));
    } else {
      this.viewSecret('');
      this.viewUrlTitle('');
      this.viewUrl('');
    }
  };

  _proto.onBuild = function onBuild() {
    if (this.capaTwoFactor) {
      this.processing(true);
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].getTwoFactor(this.onResult);
    }
  };

  return TwoFactorConfigurationPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_15__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 431 */
/*!************************************!*\
  !*** ./dev/View/Popup/Template.js ***!
  \************************************/
/*! exports provided: TemplatePopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TemplatePopupView", function() { return TemplatePopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TemplatePopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_HtmlEditor__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/HtmlEditor */ 226);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _class, _class2;












var TemplatePopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["popup"])({
  name: 'View/Popup/Template',
  templateID: 'PopupsTemplate'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["command"])(function (self) {
  return !self.submitRequest();
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(TemplatePopupView, _AbstractViewNext);

  function TemplatePopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.editor = null;
    _this.signatureDom = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(null);
    _this.id = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('');
    _this.name = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('');
    _this.name.error = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.name.focus = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.body = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('');
    _this.body.loading = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.body.error = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);

    _this.name.subscribe(function () {
      _this.name.error(false);
    });

    _this.body.subscribe(function () {
      _this.body.error(false);
    });

    _this.submitRequest = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    _this.submitError = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('');
    return _this;
  }

  var _proto = TemplatePopupView.prototype;

  _proto.addTemplateCommand = function addTemplateCommand() {
    var _this2 = this;

    this.populateBodyFromEditor();
    this.name.error('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["trim"])(this.name()));
    this.body.error('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["trim"])(this.body()) || ':HTML:' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["trim"])(this.body()));

    if (this.name.error() || this.body.error()) {
      return false;
    }

    this.submitRequest(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].templateSetup(function (result, data) {
      _this2.submitRequest(false);

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_5__["StorageResultType"].Success === result && data) {
        if (data.Result) {
          Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_10__[/* getApp */ "a"])().templates();

          _this2.cancelCommand();
        } else if (data.ErrorCode) {
          _this2.submitError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["getNotification"])(data.ErrorCode));
        }
      } else {
        _this2.submitError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Notification"].UnknownError));
      }
    }, this.id(), this.name(), this.body());
    return true;
  };

  _proto.clearPopup = function clearPopup() {
    this.id('');
    this.name('');
    this.name.error(false);
    this.body('');
    this.body.loading(false);
    this.body.error(false);
    this.submitRequest(false);
    this.submitError('');

    if (this.editor) {
      this.editor.setPlain('', false);
    }
  };

  _proto.populateBodyFromEditor = function populateBodyFromEditor() {
    if (this.editor) {
      this.body(this.editor.getDataWithHtmlMark());
    }
  };

  _proto.editorSetBody = function editorSetBody(sBody) {
    var _this3 = this;

    if (!this.editor && this.signatureDom()) {
      this.editor = new Common_HtmlEditor__WEBPACK_IMPORTED_MODULE_8__["HtmlEditor"](this.signatureDom(), function () {
        _this3.populateBodyFromEditor();
      }, function () {
        _this3.editor.setHtmlOrPlain(sBody);
      });
    } else {
      this.editor.setHtmlOrPlain(sBody);
    }
  };

  _proto.onShow = function onShow(template) {
    var _this4 = this;

    this.clearPopup();

    if (template && template.id) {
      this.id(template.id);
      this.name(template.name);
      this.body(template.body);

      if (template.populated) {
        this.editorSetBody(this.body());
      } else {
        this.body.loading(true);
        this.body.error(false);
        Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].templateGetById(function (result, data) {
          _this4.body.loading(false);

          if (Common_Enums__WEBPACK_IMPORTED_MODULE_5__["StorageResultType"].Success === result && data && data.Result && 'Object/Template' === data.Result['@Object'] && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["isNormal"])(data.Result.Body)) {
            template.body = data.Result.Body;
            template.populated = true;

            _this4.body(template.body);

            _this4.body.error(false);
          } else {
            _this4.body('');

            _this4.body.error(true);
          }

          _this4.editorSetBody(_this4.body());
        }, this.id());
      }
    } else {
      this.editorSetBody('');
    }
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    this.name.focus(true);
  };

  return TemplatePopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_12__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "addTemplateCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "addTemplateCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 432 */,
/* 433 */,
/* 434 */,
/* 435 */,
/* 436 */
/*!******************************************!*\
  !*** ./node_modules/classnames/index.js ***!
  \******************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
  Copyright (c) 2018 Jed Watson.
  Licensed under the MIT License (MIT), see
  http://jedwatson.github.io/classnames
*/
/* global define */

(function () {
	'use strict';

	var hasOwn = {}.hasOwnProperty;

	function classNames() {
		var classes = [];

		for (var i = 0; i < arguments.length; i++) {
			var arg = arguments[i];
			if (!arg) continue;

			var argType = typeof arg;

			if (argType === 'string' || argType === 'number') {
				classes.push(arg);
			} else if (Array.isArray(arg)) {
				if (arg.length) {
					var inner = classNames.apply(null, arg);
					if (inner) {
						classes.push(inner);
					}
				}
			} else if (argType === 'object') {
				if (arg.toString === Object.prototype.toString) {
					for (var key in arg) {
						if (hasOwn.call(arg, key) && arg[key]) {
							classes.push(key);
						}
					}
				} else {
					classes.push(arg.toString());
				}
			}
		}

		return classes.join(' ');
	}

	if ( true && module.exports) {
		classNames.default = classNames;
		module.exports = classNames;
	} else if (true) {
		// register as 'classnames', consistent with npm package name
		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
			return classNames;
		}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	} else {}
}());


/***/ }),
/* 437 */
/*!**********************************************!*\
  !*** ./node_modules/lozad/dist/lozad.min.js ***!
  \**********************************************/
/*! no static exports found */
/*! exports used: default */
/***/ (function(module, exports, __webpack_require__) {

/*! lozad.js - v1.16.0 - 2020-09-06
* https://github.com/ApoorvSaxena/lozad.js
* Copyright (c) 2020 Apoorv Saxena; Licensed MIT */
!function(t,e){ true?module.exports=e():undefined}(this,function(){"use strict";
/**
   * Detect IE browser
   * @const {boolean}
   * @private
   */var g="undefined"!=typeof document&&document.documentMode,f={rootMargin:"0px",threshold:0,load:function(t){if("picture"===t.nodeName.toLowerCase()){var e=t.querySelector("img"),r=!1;null===e&&(e=document.createElement("img"),r=!0),g&&t.getAttribute("data-iesrc")&&(e.src=t.getAttribute("data-iesrc")),t.getAttribute("data-alt")&&(e.alt=t.getAttribute("data-alt")),r&&t.append(e)}if("video"===t.nodeName.toLowerCase()&&!t.getAttribute("data-src")&&t.children){for(var a=t.children,o=void 0,i=0;i<=a.length-1;i++)(o=a[i].getAttribute("data-src"))&&(a[i].src=o);t.load()}t.getAttribute("data-poster")&&(t.poster=t.getAttribute("data-poster")),t.getAttribute("data-src")&&(t.src=t.getAttribute("data-src")),t.getAttribute("data-srcset")&&t.setAttribute("srcset",t.getAttribute("data-srcset"));var n=",";if(t.getAttribute("data-background-delimiter")&&(n=t.getAttribute("data-background-delimiter")),t.getAttribute("data-background-image"))t.style.backgroundImage="url('"+t.getAttribute("data-background-image").split(n).join("'),url('")+"')";else if(t.getAttribute("data-background-image-set")){var d=t.getAttribute("data-background-image-set").split(n),u=d[0].substr(0,d[0].indexOf(" "))||d[0];// Substring before ... 1x
u=-1===u.indexOf("url(")?"url("+u+")":u,1===d.length?t.style.backgroundImage=u:t.setAttribute("style",(t.getAttribute("style")||"")+"background-image: "+u+"; background-image: -webkit-image-set("+d+"); background-image: image-set("+d+")")}t.getAttribute("data-toggle-class")&&t.classList.toggle(t.getAttribute("data-toggle-class"))},loaded:function(){}};function A(t){t.setAttribute("data-loaded",!0)}var m=function(t){return"true"===t.getAttribute("data-loaded")},v=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:document;return t instanceof Element?[t]:t instanceof NodeList?t:e.querySelectorAll(t)};return function(){var r,a,o=0<arguments.length&&void 0!==arguments[0]?arguments[0]:".lozad",t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},e=Object.assign({},f,t),i=e.root,n=e.rootMargin,d=e.threshold,u=e.load,g=e.loaded,s=void 0;"undefined"!=typeof window&&window.IntersectionObserver&&(s=new IntersectionObserver((r=u,a=g,function(t,e){t.forEach(function(t){(0<t.intersectionRatio||t.isIntersecting)&&(e.unobserve(t.target),m(t.target)||(r(t.target),A(t.target),a(t.target)))})}),{root:i,rootMargin:n,threshold:d}));for(var c,l=v(o,i),b=0;b<l.length;b++)(c=l[b]).getAttribute("data-placeholder-background")&&(c.style.background=c.getAttribute("data-placeholder-background"));return{observe:function(){for(var t=v(o,i),e=0;e<t.length;e++)m(t[e])||(s?s.observe(t[e]):(u(t[e]),A(t[e]),g(t[e])))},triggerLoad:function(t){m(t)||(u(t),A(t),g(t))},observer:s}}});


/***/ }),
/* 438 */
/*!**************************************************!*\
  !*** ./dev/Common/ClientStorageDriver/Cookie.js ***!
  \**************************************************/
/*! exports provided: CookieDriver, default */
/*! exports used: CookieDriver */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CookieDriver; });
/* unused harmony export default */
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! js-cookie */ 321);
/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(js_cookie__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Consts */ 24);





var CookieDriver = /*#__PURE__*/function () {
  function CookieDriver() {}

  var _proto = CookieDriver.prototype;

  /**
   * @param {string} key
   * @param {*} data
   * @returns {boolean}
   */
  _proto.set = function set(key, data) {
    var result = false,
        storageResult = null;

    try {
      storageResult = js_cookie__WEBPACK_IMPORTED_MODULE_1___default.a.getJSON(Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* CLIENT_SIDE_STORAGE_INDEX_NAME */ "b"]);
    } catch (e) {} // eslint-disable-line no-empty


    (storageResult || (storageResult = {}))[key] = data;

    try {
      js_cookie__WEBPACK_IMPORTED_MODULE_1___default.a.set(Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* CLIENT_SIDE_STORAGE_INDEX_NAME */ "b"], storageResult, {
        expires: 30
      });
      result = true;
    } catch (e) {} // eslint-disable-line no-empty


    return result;
  }
  /**
   * @param {string} key
   * @returns {*}
   */
  ;

  _proto.get = function get(key) {
    var result = null;

    try {
      var storageResult = js_cookie__WEBPACK_IMPORTED_MODULE_1___default.a.getJSON(Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* CLIENT_SIDE_STORAGE_INDEX_NAME */ "b"]);
      result = storageResult && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["isUnd"])(storageResult[key]) ? storageResult[key] : null;
    } catch (e) {} // eslint-disable-line no-empty


    return result;
  }
  /**
   * @returns {boolean}
   */
  ;

  CookieDriver.supported = function supported() {
    return !!(window__WEBPACK_IMPORTED_MODULE_0___default.a.navigator && window__WEBPACK_IMPORTED_MODULE_0___default.a.navigator.cookieEnabled);
  };

  return CookieDriver;
}();



/***/ }),
/* 439 */
/*!********************************************************!*\
  !*** ./dev/Common/ClientStorageDriver/LocalStorage.js ***!
  \********************************************************/
/*! exports provided: LocalStorageDriver, default */
/*! exports used: LocalStorageDriver */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LocalStorageDriver; });
/* unused harmony export default */
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Storage_RainLoop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Storage/RainLoop */ 163);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Consts */ 24);





var LocalStorageDriver = /*#__PURE__*/function () {
  function LocalStorageDriver() {
    this.s = null;
    this.s = window__WEBPACK_IMPORTED_MODULE_0___default.a.localStorage || null;
  }
  /**
   * @param {string} key
   * @param {*} data
   * @returns {boolean}
   */


  var _proto = LocalStorageDriver.prototype;

  _proto.set = function set(key, data) {
    if (!this.s) {
      return false;
    }

    var storageResult = null;

    try {
      var storageValue = this.s.getItem(Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* CLIENT_SIDE_STORAGE_INDEX_NAME */ "b"]) || null;
      storageResult = null === storageValue ? null : window__WEBPACK_IMPORTED_MODULE_0___default.a.JSON.parse(storageValue);
    } catch (e) {} // eslint-disable-line no-empty


    (storageResult || (storageResult = {}))[key] = data;

    try {
      this.s.setItem(Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* CLIENT_SIDE_STORAGE_INDEX_NAME */ "b"], window__WEBPACK_IMPORTED_MODULE_0___default.a.JSON.stringify(storageResult));
      return true;
    } catch (e) {} // eslint-disable-line no-empty


    return false;
  }
  /**
   * @param {string} key
   * @returns {*}
   */
  ;

  _proto.get = function get(key) {
    if (!this.s) {
      return null;
    }

    try {
      var storageValue = this.s.getItem(Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* CLIENT_SIDE_STORAGE_INDEX_NAME */ "b"]) || null,
          storageResult = null === storageValue ? null : window__WEBPACK_IMPORTED_MODULE_0___default.a.JSON.parse(storageValue);
      return storageResult && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["isUnd"])(storageResult[key]) ? storageResult[key] : null;
    } catch (e) {} // eslint-disable-line no-empty


    return null;
  }
  /**
   * @returns {boolean}
   */
  ;

  LocalStorageDriver.supported = function supported() {
    return Object(Storage_RainLoop__WEBPACK_IMPORTED_MODULE_2__[/* isStorageSupported */ "d"])('localStorage');
  };

  return LocalStorageDriver;
}();



/***/ }),
/* 440 */
/*!*****************************!*\
  !*** ./dev/Model/Folder.js ***!
  \*****************************/
/*! exports provided: FolderModel, default */
/*! exports used: FolderModel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FolderModel; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ 203);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Events */ 23);
/* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Knoin/AbstractModel */ 67);















var FolderModel = /*#__PURE__*/function (_AbstractModel) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(FolderModel, _AbstractModel);

  function FolderModel() {
    var _this;

    _this = _AbstractModel.call(this, 'FolderModel') || this;
    _this.name = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.fullName = '';
    _this.fullNameRaw = '';
    _this.fullNameHash = '';
    _this.delimiter = '';
    _this.namespace = '';
    _this.deep = 0;
    _this.interval = 0;
    _this.selectable = false;
    _this.existen = true;
    _this.type = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].User);
    _this.focused = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.selected = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.edited = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.subScribed = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(true);
    _this.checkable = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.subFolders = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observableArray([]);
    _this.deleteAccess = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.actionBlink = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false).extend({
      falseTimeout: 1000
    });
    _this.nameForEdit = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.privateMessageCountAll = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(0);
    _this.privateMessageCountUnread = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(0);
    _this.collapsedPrivate = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(true);
    return _this;
  }
  /**
   * @static
   * @param {AjaxJsonFolder} json
   * @returns {?FolderModel}
   */


  FolderModel.newInstanceFromJson = function newInstanceFromJson(json) {
    var folder = new FolderModel();
    return folder.initByJson(json) ? folder.initComputed() : null;
  }
  /**
   * @returns {FolderModel}
   */
  ;

  var _proto = FolderModel.prototype;

  _proto.initComputed = function initComputed() {
    var _this2 = this;

    var inboxFolderName = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_11__[/* getFolderInboxName */ "h"])();
    this.isInbox = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Inbox === _this2.type();
    });
    this.hasSubScribedSubfolders = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return !!_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, _this2.subFolders(), function (oFolder) {
        return (oFolder.subScribed() || oFolder.hasSubScribedSubfolders()) && !oFolder.isSystemFolder();
      });
    });
    this.canBeEdited = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].User === _this2.type() && _this2.existen && _this2.selectable;
    });
    this.visible = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      var isSubScribed = _this2.subScribed(),
          isSubFolders = _this2.hasSubScribedSubfolders();

      return isSubScribed || isSubFolders && (!_this2.existen || !_this2.selectable);
    });
    this.isSystemFolder = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].User !== _this2.type();
    });
    this.hidden = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      var isSystem = _this2.isSystemFolder(),
          isSubFolders = _this2.hasSubScribedSubfolders();

      return isSystem && !isSubFolders || !_this2.selectable && !isSubFolders;
    });
    this.selectableForFolderList = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return !_this2.isSystemFolder() && _this2.selectable;
    });
    this.messageCountAll = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed({
      read: this.privateMessageCountAll,
      write: function write(iValue) {
        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isPosNumeric"])(iValue, true)) {
          _this2.privateMessageCountAll(iValue);
        } else {
          _this2.privateMessageCountAll.valueHasMutated();
        }
      }
    }).extend({
      notify: 'always'
    });
    this.messageCountUnread = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed({
      read: this.privateMessageCountUnread,
      write: function write(value) {
        if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isPosNumeric"])(value, true)) {
          _this2.privateMessageCountUnread(value);
        } else {
          _this2.privateMessageCountUnread.valueHasMutated();
        }
      }
    }).extend({
      notify: 'always'
    });
    this.printableUnreadCount = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      var count = _this2.messageCountAll(),
          unread = _this2.messageCountUnread(),
          type = _this2.type();

      if (0 < count) {
        if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Draft === type) {
          return '' + count;
        } else if (0 < unread && Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Trash !== type && Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Archive !== type && Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].SentItems !== type) {
          return '' + unread;
        }
      }

      return '';
    });
    this.canBeDeleted = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      var bSystem = _this2.isSystemFolder();

      return !bSystem && 0 === _this2.subFolders().length && inboxFolderName !== _this2.fullNameRaw;
    });
    this.canBeSubScribed = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return !_this2.isSystemFolder() && _this2.selectable && inboxFolderName !== _this2.fullNameRaw;
    });
    this.canBeChecked = this.canBeSubScribed;
    this.localName = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["trigger"])();

      var name = _this2.name();

      var type = _this2.type();

      if (_this2.isSystemFolder()) {
        switch (type) {
          case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Inbox:
            name = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('FOLDER_LIST/INBOX_NAME');
            break;

          case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].SentItems:
            name = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('FOLDER_LIST/SENT_NAME');
            break;

          case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Draft:
            name = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('FOLDER_LIST/DRAFTS_NAME');
            break;

          case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Spam:
            name = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('FOLDER_LIST/SPAM_NAME');
            break;

          case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Trash:
            name = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('FOLDER_LIST/TRASH_NAME');
            break;

          case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Archive:
            name = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('FOLDER_LIST/ARCHIVE_NAME');
            break;
          // no default
        }
      }

      return name;
    });
    this.manageFolderSystemName = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["trigger"])();
      var suffix = '';

      var type = _this2.type(),
          name = _this2.name();

      if (_this2.isSystemFolder()) {
        switch (type) {
          case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Inbox:
            suffix = '(' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('FOLDER_LIST/INBOX_NAME') + ')';
            break;

          case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].SentItems:
            suffix = '(' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('FOLDER_LIST/SENT_NAME') + ')';
            break;

          case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Draft:
            suffix = '(' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('FOLDER_LIST/DRAFTS_NAME') + ')';
            break;

          case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Spam:
            suffix = '(' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('FOLDER_LIST/SPAM_NAME') + ')';
            break;

          case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Trash:
            suffix = '(' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('FOLDER_LIST/TRASH_NAME') + ')';
            break;

          case Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Archive:
            suffix = '(' + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["i18n"])('FOLDER_LIST/ARCHIVE_NAME') + ')';
            break;
          // no default
        }
      }

      if ('' !== suffix && '(' + name + ')' === suffix || '(inbox)' === suffix.toLowerCase()) {
        suffix = '';
      }

      return suffix;
    });
    this.collapsed = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed({
      read: function read() {
        return !_this2.hidden() && _this2.collapsedPrivate();
      },
      write: function write(value) {
        _this2.collapsedPrivate(value);
      }
    });
    this.hasUnreadMessages = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return 0 < _this2.messageCountUnread() && '' !== _this2.printableUnreadCount();
    });
    this.hasSubScribedUnreadMessagesSubfolders = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      return !!_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, _this2.subFolders(), function (folder) {
        return folder.hasUnreadMessages() || folder.hasSubScribedUnreadMessagesSubfolders();
      });
    }); // subscribe

    this.name.subscribe(function (value) {
      _this2.nameForEdit(value);
    });
    this.edited.subscribe(function (value) {
      if (value) {
        _this2.nameForEdit(_this2.name());
      }
    });
    this.messageCountUnread.subscribe(function (unread) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Inbox === _this2.type()) {
        Common_Events__WEBPACK_IMPORTED_MODULE_12__[/* pub */ "a"]('mailbox.inbox-unread-count', [unread]);
      }
    });
    return this;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.collapsedCss = function collapsedCss() {
    return this.hasSubScribedSubfolders() ? this.collapsed() ? 'icon-right-mini e-collapsed-sign' : 'icon-down-mini e-collapsed-sign' : 'icon-none e-collapsed-sign';
  }
  /**
   * @param {AjaxJsonFolder} json
   * @returns {boolean}
   */
  ;

  _proto.initByJson = function initByJson(json) {
    var bResult = false;
    var sInboxFolderName = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_11__[/* getFolderInboxName */ "h"])();

    if (json && 'Object/Folder' === json['@Object']) {
      this.name(json.Name);
      this.delimiter = json.Delimiter;
      this.fullName = json.FullName;
      this.fullNameRaw = json.FullNameRaw;
      this.fullNameHash = json.FullNameHash;
      this.deep = json.FullNameRaw.split(this.delimiter).length - 1;
      this.selectable = !!json.IsSelectable;
      this.existen = !!json.IsExists;
      this.subScribed(!!json.IsSubscribed);
      this.checkable(!!json.Checkable);
      this.type(sInboxFolderName === this.fullNameRaw ? Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].Inbox : Common_Enums__WEBPACK_IMPORTED_MODULE_8__["FolderType"].User);
      bResult = true;
    }

    return bResult;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.printableFullName = function printableFullName() {
    return this.fullName.split(this.delimiter).join(' / ');
  };

  return FolderModel;
}(Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_13__[/* AbstractModel */ "a"]);



/***/ }),
/* 441 */
/*!**************************************!*\
  !*** ./dev/Promises/AbstractAjax.js ***!
  \**************************************/
/*! exports provided: AbstractAjaxPromises, default */
/*! exports used: AbstractAjaxPromises */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractAjaxPromises; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/promise */ 62);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Plugins */ 36);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Promises_AbstractBasic__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Promises/AbstractBasic */ 317);













var AbstractAjaxPromises = /*#__PURE__*/function (_AbstractBasicPromise) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AbstractAjaxPromises, _AbstractBasicPromise);

  function AbstractAjaxPromises() {
    var _this;

    _this = _AbstractBasicPromise.call(this) || this;
    _this.oRequests = {};

    _this.clear();

    return _this;
  }

  var _proto = AbstractAjaxPromises.prototype;

  _proto.clear = function clear() {
    this.oRequests = {};
  };

  _proto.abort = function abort(sAction, bClearOnly) {
    if (this.oRequests[sAction]) {
      if (!bClearOnly && this.oRequests[sAction].abort) {
        this.oRequests[sAction].__aborted__ = true;
        this.oRequests[sAction].abort();
      }

      this.oRequests[sAction] = null;
      delete this.oRequests[sAction];
    }

    return this;
  };

  _proto.ajaxRequest = function ajaxRequest(action, isPost, timeOut, params, additionalGetString, fTrigger) {
    var _this2 = this;

    return new _babel_runtime_corejs3_core_js_stable_promise__WEBPACK_IMPORTED_MODULE_1___default.a(function (resolve, reject) {
      var start = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["microtime"])();
      timeOut = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["isNormal"])(timeOut) ? timeOut : Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* DEFAULT_AJAX_TIMEOUT */ "g"];
      additionalGetString = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["isUnd"])(additionalGetString) ? '' : Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pString"])(additionalGetString);

      if (isPost) {
        params.XToken = Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["appSettingsGet"]('token');
      }

      Common_Plugins__WEBPACK_IMPORTED_MODULE_9__[/* runHook */ "f"]('ajax-default-request', [action, params, additionalGetString]);

      _this2.setTrigger(fTrigger, true);

      var oH = $__WEBPACK_IMPORTED_MODULE_3___default.a.ajax({
        type: isPost ? 'POST' : 'GET',
        url: Object(Common_Links__WEBPACK_IMPORTED_MODULE_4__[/* ajax */ "a"])(additionalGetString),
        async: true,
        dataType: 'json',
        data: isPost ? params || {} : {},
        timeout: timeOut,
        global: true
      }).always(function (data, textStatus) {
        var isCached = false,
            errorData = null;

        if (data && data.Time) {
          isCached = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pInt"])(data.Time) > Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["microtime"])() - start;
        }

        if (data && data.UpdateToken) {
          if (Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].__APP__ && Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].__APP__.setClientSideToken) {
            Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].__APP__.setClientSideToken(data.UpdateToken);
          }
        } // backward capability


        var type = '';

        switch (true) {
          case 'success' === textStatus && data && data.Result && action === data.Action:
            type = Common_Enums__WEBPACK_IMPORTED_MODULE_7__["StorageResultType"].Success;
            break;

          case 'abort' === textStatus && (!data || !data.__aborted__):
            type = Common_Enums__WEBPACK_IMPORTED_MODULE_7__["StorageResultType"].Abort;
            break;

          default:
            type = Common_Enums__WEBPACK_IMPORTED_MODULE_7__["StorageResultType"].Error;
            break;
        }

        Common_Plugins__WEBPACK_IMPORTED_MODULE_9__[/* runHook */ "f"]('ajax-default-response', [action, Common_Enums__WEBPACK_IMPORTED_MODULE_7__["StorageResultType"].Success === type ? data : null, type, isCached, params]);

        if ('success' === textStatus) {
          if (data && data.Result && action === data.Action) {
            data.__cached__ = isCached;
            resolve(data);
          } else if (data && data.Action) {
            errorData = data;
            reject(data.ErrorCode ? data.ErrorCode : Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].AjaxFalse);
          } else {
            errorData = data;
            reject(Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].AjaxParse);
          }
        } else if ('timeout' === textStatus) {
          errorData = data;
          reject(Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].AjaxTimeout);
        } else if ('abort' === textStatus) {
          if (!data || !data.__aborted__) {
            reject(Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].AjaxAbort);
          }
        } else {
          errorData = data;
          reject(Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].AjaxParse);
        }

        if (_this2.oRequests[action]) {
          _this2.oRequests[action] = null;
          delete _this2.oRequests[action];
        }

        _this2.setTrigger(fTrigger, false);

        if (errorData) {
          if (-1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["inArray"])(errorData.ErrorCode, [Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].AuthError, Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].AccessError, Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].ConnectionError, Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].DomainNotAllowed, Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].AccountNotAllowed, Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].MailServerError, Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].UnknownNotification, Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].UnknownError])) {
            Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].iAjaxErrorCount += 1;
          }

          if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].InvalidToken === errorData.ErrorCode) {
            Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].iTokenErrorCount += 1;
          }

          if (Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* TOKEN_ERROR_LIMIT */ "q"] < Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].iTokenErrorCount) {
            if (Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].__APP__ && Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].__APP__.loginAndLogoutReload) {
              Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].__APP__.loginAndLogoutReload(false, true);
            }
          }

          if (errorData.ClearAuth || errorData.Logout || Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* AJAX_ERROR_LIMIT */ "a"] < Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].iAjaxErrorCount) {
            if (Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].__APP__ && Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].__APP__.clearClientSideToken) {
              Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].__APP__.clearClientSideToken();
            }

            if (Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].__APP__ && !errorData.ClearAuth && Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].__APP__.loginAndLogoutReload) {
              Common_Globals__WEBPACK_IMPORTED_MODULE_8__["data"].__APP__.loginAndLogoutReload(false, true);
            }
          }
        }
      });

      if (oH) {
        if (_this2.oRequests[action]) {
          _this2.oRequests[action] = null;
          delete _this2.oRequests[action];
        }

        _this2.oRequests[action] = oH;
      }
    });
  };

  _proto.getRequest = function getRequest(sAction, fTrigger, sAdditionalGetString, iTimeOut) {
    sAdditionalGetString = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["isUnd"])(sAdditionalGetString) ? '' : Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pString"])(sAdditionalGetString);
    sAdditionalGetString = sAction + '/' + sAdditionalGetString;
    return this.ajaxRequest(sAction, false, iTimeOut, null, sAdditionalGetString, fTrigger);
  };

  _proto.postRequest = function postRequest(action, fTrigger, params, timeOut) {
    params = params || {};
    params.Action = action;
    return this.ajaxRequest(action, true, timeOut, params, '', fTrigger);
  };

  return AbstractAjaxPromises;
}(Promises_AbstractBasic__WEBPACK_IMPORTED_MODULE_11__[/* AbstractBasicPromises */ "a"]);



/***/ }),
/* 442 */
/*!******************************!*\
  !*** ./dev/Model/Account.js ***!
  \******************************/
/*! exports provided: AccountModel, default */
/*! exports used: AccountModel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AccountModel; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Knoin/AbstractModel */ 67);





var AccountModel = /*#__PURE__*/function (_AbstractModel) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AccountModel, _AbstractModel);

  /**
   * @param {string} email
   * @param {boolean=} canBeDelete = true
   * @param {number=} count = 0
   */
  function AccountModel(email, canBeDelete, count) {
    var _this;

    if (canBeDelete === void 0) {
      canBeDelete = true;
    }

    if (count === void 0) {
      count = 0;
    }

    _this = _AbstractModel.call(this, 'AccountModel') || this;
    _this.email = email;
    _this.count = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(count);
    _this.deleteAccess = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    _this.canBeDeleted = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(!!canBeDelete);
    _this.canBeEdit = _this.canBeDeleted;
    return _this;
  }
  /**
   * @returns {string}
   */


  var _proto = AccountModel.prototype;

  _proto.changeAccountLink = function changeAccountLink() {
    return Object(Common_Links__WEBPACK_IMPORTED_MODULE_2__[/* change */ "i"])(this.email);
  };

  return AccountModel;
}(Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_3__[/* AbstractModel */ "a"]);



/***/ }),
/* 443 */
/*!*******************************!*\
  !*** ./dev/Model/Identity.js ***!
  \*******************************/
/*! exports provided: IdentityModel, default */
/*! exports used: IdentityModel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return IdentityModel; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Knoin/AbstractModel */ 67);





var IdentityModel = /*#__PURE__*/function (_AbstractModel) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(IdentityModel, _AbstractModel);

  /**
   * @param {string} id
   * @param {string} email
   */
  function IdentityModel(id, email) {
    var _this;

    _this = _AbstractModel.call(this, 'IdentityModel') || this;
    _this.id = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(id || '');
    _this.email = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(email);
    _this.name = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    _this.replyTo = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    _this.bcc = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    _this.signature = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable('');
    _this.signatureInsertBefore = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    _this.deleteAccess = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    _this.canBeDeleted = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return '' !== _this.id();
    });
    return _this;
  }
  /**
   * @returns {string}
   */


  var _proto = IdentityModel.prototype;

  _proto.formattedName = function formattedName() {
    var name = this.name(),
        email = this.email();
    return '' !== name ? name + ' (' + email + ')' : email;
  };

  return IdentityModel;
}(Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_3__[/* AbstractModel */ "a"]);



/***/ }),
/* 444 */
/*!*******************************!*\
  !*** ./dev/Model/Template.js ***!
  \*******************************/
/*! exports provided: TemplateModel, default */
/*! exports used: TemplateModel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TemplateModel; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Knoin/AbstractModel */ 67);






var TemplateModel = /*#__PURE__*/function (_AbstractModel) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(TemplateModel, _AbstractModel);

  /**
   * @param {string} id
   * @param {string} name
   * @param {string} body
   */
  function TemplateModel(id, name, body) {
    var _this;

    _this = _AbstractModel.call(this, 'TemplateModel') || this;
    _this.id = id;
    _this.name = name;
    _this.body = body;
    _this.populated = true;
    _this.deleteAccess = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    return _this;
  }
  /**
   * @returns {boolean}
   */


  var _proto = TemplateModel.prototype;

  _proto.parse = function parse(json) {
    var result = false;

    if (json && 'Object/Template' === json['@Object']) {
      this.id = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pString"])(json.ID);
      this.name = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pString"])(json.Name);
      this.body = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["pString"])(json.Body);
      this.populated = !!json.Populated;
      result = true;
    }

    return result;
  };

  return TemplateModel;
}(Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_4__[/* AbstractModel */ "a"]);



/***/ }),
/* 445 */
/*!*********************************!*\
  !*** ./dev/Model/OpenPgpKey.js ***!
  \*********************************/
/*! exports provided: OpenPgpKeyModel, default */
/*! exports used: OpenPgpKeyModel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return OpenPgpKeyModel; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/keys */ 308);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Knoin/AbstractModel */ 67);
/* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/User/Pgp */ 41);







var OpenPgpKeyModel = /*#__PURE__*/function (_AbstractModel) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(OpenPgpKeyModel, _AbstractModel);

  /**
   * @param {string} index
   * @param {string} guID
   * @param {string} ID
   * @param {array} IDs
   * @param {array} userIDs
   * @param {array} emails
   * @param {boolean} isPrivate
   * @param {string} armor
   * @param {string} userID
   */
  function OpenPgpKeyModel(index, guID, ID, IDs, userIDs, emails, isPrivate, armor, userID) {
    var _this;

    _this = _AbstractModel.call(this, 'OpenPgpKeyModel') || this;
    _this.index = index;
    _this.id = ID;
    _this.ids = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["isNonEmptyArray"])(IDs) ? IDs : [ID];
    _this.guid = guID;
    _this.user = '';
    _this.users = userIDs;
    _this.email = '';
    _this.emails = emails;
    _this.armor = armor;
    _this.isPrivate = !!isPrivate;

    _this.selectUser(userID);

    _this.deleteAccess = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(false);
    return _this;
  }

  var _proto = OpenPgpKeyModel.prototype;

  _proto.getNativeKey = function getNativeKey() {
    var key = null;

    try {
      key = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].openpgp.key.readArmored(this.armor);

      if (key && !key.err && _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_1___default()(key) && _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_1___default()(key)[0]) {
        return key;
      }
    } catch (e) {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["log"])(e);
    }

    return null;
  };

  _proto.getNativeKeys = function getNativeKeys() {
    var key = this.getNativeKey();
    return key && _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_1___default()(key) ? _babel_runtime_corejs3_core_js_stable_instance_keys__WEBPACK_IMPORTED_MODULE_1___default()(key) : null;
  };

  _proto.select = function select(pattern, property) {
    if (this[property]) {
      var index = this[property].indexOf(pattern);

      if (-1 !== index) {
        this.user = this.users[index];
        this.email = this.emails[index];
      }
    }
  };

  _proto.selectUser = function selectUser(user) {
    this.select(user, 'users');
  };

  _proto.selectEmail = function selectEmail(email) {
    this.select(email, 'emails');
  };

  return OpenPgpKeyModel;
}(Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_4__[/* AbstractModel */ "a"]);



/***/ }),
/* 446 */
/*!**********************************!*\
  !*** ./dev/Screen/User/Login.js ***!
  \**********************************/
/*! exports provided: LoginUserScreen, default */
/*! exports used: LoginUserScreen */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LoginUserScreen; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Knoin/AbstractScreen */ 152);
/* harmony import */ var View_User_Login__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! View/User/Login */ 447);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Helper/Apps/User */ 22);





var LoginUserScreen = /*#__PURE__*/function (_AbstractScreen) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(LoginUserScreen, _AbstractScreen);

  function LoginUserScreen() {
    return _AbstractScreen.call(this, 'login', [View_User_Login__WEBPACK_IMPORTED_MODULE_2__[/* LoginUserView */ "a"]]) || this;
  }

  var _proto = LoginUserScreen.prototype;

  _proto.onShow = function onShow() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_3__[/* getApp */ "a"])().setWindowTitle('');
  };

  return LoginUserScreen;
}(Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_1__[/* AbstractScreen */ "a"]);



/***/ }),
/* 447 */
/*!********************************!*\
  !*** ./dev/View/User/Login.js ***!
  \********************************/
/*! exports provided: LoginUserView, default */
/*! exports used: LoginUserView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LoginUserView; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Plugins */ 36);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/Language */ 72);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Storage_Client__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Storage/Client */ 60);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _class, _class2;



















var LoginUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["view"])({
  name: ['View/App/Login', 'View/User/Login'],
  type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["ViewType"].Center,
  templateID: 'Login'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["command"])(function (self) {
  return !self.submitRequest() && self.facebookLoginEnabled();
}), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["command"])(function (self) {
  return !self.submitRequest() && self.googleLoginEnabled();
}), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["command"])(function (self) {
  return !self.submitRequest() && self.googleGmailLoginEnabled();
}), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["command"])(function (self) {
  return !self.submitRequest() && self.twitterLoginEnabled();
}), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["command"])(function (self) {
  return !self.submitRequest();
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(LoginUserView, _AbstractViewNext);

  function LoginUserView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.hideSubmitButton = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["appSettingsGet"]('hideSubmitButton');
    _this.welcome = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["settingsGet"]('UseLoginWelcomePage'));
    _this.email = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    _this.password = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    _this.signMe = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.additionalCode = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    _this.additionalCode.error = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.additionalCode.errorAnimation = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false).extend({
      falseTimeout: 500
    });
    _this.additionalCode.focused = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.additionalCode.visibility = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.additionalCodeSignMe = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.logoImg = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["trim"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["settingsGet"]('LoginLogo'));
    _this.loginDescription = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["trim"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["settingsGet"]('LoginDescription'));
    _this.mobile = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["appSettingsGet"]('mobile');
    _this.mobileDevice = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["appSettingsGet"]('mobileDevice');
    _this.forgotPasswordLinkUrl = Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["appSettingsGet"]('forgotPasswordLinkUrl');
    _this.registrationLinkUrl = Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["appSettingsGet"]('registrationLinkUrl');
    _this.emailError = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.passwordError = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.emailErrorAnimation = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false).extend({
      falseTimeout: 500
    });
    _this.passwordErrorAnimation = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false).extend({
      falseTimeout: 500
    });
    _this.formHidden = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.formError = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].computed(function () {
      return _this.emailErrorAnimation() || _this.passwordErrorAnimation() || _this.additionalCode.visibility() && _this.additionalCode.errorAnimation();
    });
    _this.emailFocus = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.passwordFocus = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);

    _this.email.subscribe(function () {
      _this.emailError(false);

      _this.additionalCode('');

      _this.additionalCode.visibility(false);
    });

    _this.password.subscribe(function () {
      _this.passwordError(false);
    });

    _this.additionalCode.subscribe(function () {
      _this.additionalCode.error(false);
    });

    _this.additionalCode.visibility.subscribe(function () {
      _this.additionalCode.error(false);
    });

    _this.emailError.subscribe(function (bV) {
      _this.emailErrorAnimation(!!bV);
    });

    _this.passwordError.subscribe(function (bV) {
      _this.passwordErrorAnimation(!!bV);
    });

    _this.additionalCode.error.subscribe(function (bV) {
      _this.additionalCode.errorAnimation(!!bV);
    });

    _this.submitRequest = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.submitError = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    _this.submitErrorAddidional = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');

    _this.submitError.subscribe(function (value) {
      if ('' === value) {
        _this.submitErrorAddidional('');
      }
    });

    _this.allowLanguagesOnLogin = Stores_User_App__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].allowLanguagesOnLogin;
    _this.langRequest = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.language = Stores_Language__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].language;
    _this.languages = Stores_Language__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].languages;
    _this.bSendLanguage = false;
    _this.languageFullName = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].computed(function () {
      return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["convertLangName"])(_this.language());
    });
    _this.signMeType = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["LoginSignMeType"].Unused);

    _this.signMeType.subscribe(function (iValue) {
      _this.signMe(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["LoginSignMeType"].DefaultOn === iValue);
    });

    _this.signMeVisibility = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].computed(function () {
      return Common_Enums__WEBPACK_IMPORTED_MODULE_6__["LoginSignMeType"].Unused !== _this.signMeType();
    });
    _this.facebookLoginEnabled = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.googleLoginEnabled = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.googleGmailLoginEnabled = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.twitterLoginEnabled = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.socialLoginEnabled = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].computed(function () {
      var bF = _this.facebookLoginEnabled(),
          bG = _this.googleLoginEnabled(),
          bT = _this.twitterLoginEnabled();

      return bF || bG || bT;
    });

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["settingsGet"]('AdditionalLoginError') && !_this.submitError()) {
      _this.submitError(Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["settingsGet"]('AdditionalLoginError'));
    }

    return _this;
  }

  var _proto = LoginUserView.prototype;

  _proto.windowOpenFeatures = function windowOpenFeatures(wh) {
    return "left=200,top=100,width=" + wh + ",height=" + wh + ",menubar=no,status=no,resizable=yes,scrollbars=yes";
  };

  _proto.facebookCommand = function facebookCommand() {
    window__WEBPACK_IMPORTED_MODULE_3___default.a.open(Object(Common_Links__WEBPACK_IMPORTED_MODULE_9__[/* socialFacebook */ "A"])(), 'Facebook', this.windowOpenFeatures(500));
    return true;
  };

  _proto.googleCommand = function googleCommand() {
    window__WEBPACK_IMPORTED_MODULE_3___default.a.open(Object(Common_Links__WEBPACK_IMPORTED_MODULE_9__[/* socialGoogle */ "B"])(), 'Google', this.windowOpenFeatures(550));
    return true;
  };

  _proto.googleGmailCommand = function googleGmailCommand() {
    window__WEBPACK_IMPORTED_MODULE_3___default.a.open(Object(Common_Links__WEBPACK_IMPORTED_MODULE_9__[/* socialGoogle */ "B"])(true), 'Google', this.windowOpenFeatures(550));
    return true;
  };

  _proto.twitterCommand = function twitterCommand() {
    window__WEBPACK_IMPORTED_MODULE_3___default.a.open(Object(Common_Links__WEBPACK_IMPORTED_MODULE_9__[/* socialTwitter */ "C"])(), 'Twitter', this.windowOpenFeatures(500));
    return true;
  };

  _proto.submitCommand = function submitCommand() {
    var _this2 = this;

    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["triggerAutocompleteInputChange"])();
    this.emailError(false);
    this.passwordError(false);
    this.emailError('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["trim"])(this.email()));
    this.passwordError('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["trim"])(this.password()));

    if (this.additionalCode.visibility()) {
      this.additionalCode.error(false);
      this.additionalCode.error('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["trim"])(this.additionalCode()));
    }

    if (this.emailError() || this.passwordError() || this.additionalCode.visibility() && this.additionalCode.error()) {
      switch (true) {
        case this.emailError():
          this.emailFocus(true);
          break;

        case this.passwordError():
          this.passwordFocus(true);
          break;

        case this.additionalCode.visibility() && this.additionalCode.error():
          this.additionalCode.focused(true);
          break;
        // no default
      }

      return false;
    }

    var pluginResultCode = 0,
        pluginResultMessage = '';

    var fSubmitResult = function fSubmitResult(iResultCode, sResultMessage) {
      pluginResultCode = iResultCode || 0;
      pluginResultMessage = sResultMessage || '';
    };

    Common_Plugins__WEBPACK_IMPORTED_MODULE_11__[/* runHook */ "f"]('user-login-submit', [fSubmitResult]);

    if (0 < pluginResultCode) {
      this.submitError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["getNotification"])(pluginResultCode));
      return false;
    } else if ('' !== pluginResultMessage) {
      this.submitError(pluginResultMessage);
      return false;
    }

    this.submitRequest(true);
    Common_Globals__WEBPACK_IMPORTED_MODULE_8__["$win"].trigger('rl.tooltips.diactivate');

    var fLoginRequest = function fLoginRequest(sLoginPassword) {
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_16__[/* default */ "a"].login(function (sResult, oData) {
        Common_Globals__WEBPACK_IMPORTED_MODULE_8__["$win"].trigger('rl.tooltips.diactivate');
        Common_Globals__WEBPACK_IMPORTED_MODULE_8__["$win"].trigger('rl.tooltips.activate');

        if (Common_Enums__WEBPACK_IMPORTED_MODULE_6__["StorageResultType"].Success === sResult && oData && 'Login' === oData.Action) {
          if (oData.Result) {
            if (oData.TwoFactorAuth) {
              _this2.additionalCode('');

              _this2.additionalCode.visibility(true);

              _this2.submitRequest(false);

              ___WEBPACK_IMPORTED_MODULE_4___default.a.delay(function () {
                return _this2.additionalCode.focused(true);
              }, Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Magics"].Time100ms);
            } else if (oData.Admin) {
              Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_17__[/* getApp */ "a"])().redirectToAdminPanel();
            } else {
              Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_17__[/* getApp */ "a"])().loginAndLogoutReload(false);
            }
          } else if (oData.ErrorCode) {
            _this2.submitRequest(false);

            if (-1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["inArray"])(oData.ErrorCode, [Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Notification"].InvalidInputArgument])) {
              oData.ErrorCode = Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Notification"].AuthError;
            }

            _this2.submitError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["getNotificationFromResponse"])(oData));

            if ('' === _this2.submitError()) {
              _this2.submitError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Notification"].UnknownError));
            } else if (oData.ErrorMessageAdditional) {
              _this2.submitErrorAddidional(oData.ErrorMessageAdditional);
            }
          } else {
            _this2.submitRequest(false);
          }
        } else {
          _this2.submitRequest(false);

          _this2.submitError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Notification"].UnknownError));
        }
      }, _this2.email(), '', sLoginPassword, !!_this2.signMe(), _this2.bSendLanguage ? _this2.language() : '', _this2.additionalCode.visibility() ? _this2.additionalCode() : '', _this2.additionalCode.visibility() ? !!_this2.additionalCodeSignMe() : false);
      Storage_Client__WEBPACK_IMPORTED_MODULE_15__[/* set */ "b"](Common_Enums__WEBPACK_IMPORTED_MODULE_6__["ClientSideKeyName"].LastSignMe, _this2.signMe() ? '-1-' : '-0-');
    };

    fLoginRequest(this.password());
    return true;
  };

  _proto.displayMainForm = function displayMainForm() {
    this.welcome(false);
  };

  _proto.onShow = function onShow() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["routeOff"])();
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    if ('' !== this.email() && '' !== this.password()) {
      this.passwordFocus(true);
    } else if ('' === this.email()) {
      this.emailFocus(true);
    } else if ('' === this.password()) {
      this.passwordFocus(true);
    } else {
      this.emailFocus(true);
    }
  };

  _proto.onHide = function onHide() {
    this.emailFocus(false);
    this.passwordFocus(false);
  };

  _proto.onBuild = function onBuild() {
    var _this3 = this;

    var signMeLocal = Storage_Client__WEBPACK_IMPORTED_MODULE_15__[/* get */ "a"](Common_Enums__WEBPACK_IMPORTED_MODULE_6__["ClientSideKeyName"].LastSignMe),
        signMe = (Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["settingsGet"]('SignMe') || 'unused').toLowerCase(),
        jsHash = Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["appSettingsGet"]('jsHash'),
        fSocial = function fSocial(iErrorCode) {
      iErrorCode = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["pInt"])(iErrorCode);

      if (0 === iErrorCode) {
        _this3.submitRequest(true);

        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_17__[/* getApp */ "a"])().loginAndLogoutReload(false);
      } else {
        _this3.submitError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["getNotification"])(iErrorCode));
      }
    };

    this.facebookLoginEnabled(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["settingsGet"]('AllowFacebookSocial'));
    this.twitterLoginEnabled(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["settingsGet"]('AllowTwitterSocial'));
    this.googleLoginEnabled(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["settingsGet"]('AllowGoogleSocial') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["settingsGet"]('AllowGoogleSocialAuth'));
    this.googleGmailLoginEnabled(!!Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["settingsGet"]('AllowGoogleSocial') && !!Storage_Settings__WEBPACK_IMPORTED_MODULE_14__["settingsGet"]('AllowGoogleSocialAuthGmail'));

    switch (signMe) {
      case Common_Enums__WEBPACK_IMPORTED_MODULE_6__["LoginSignMeTypeAsString"].DefaultOff:
      case Common_Enums__WEBPACK_IMPORTED_MODULE_6__["LoginSignMeTypeAsString"].DefaultOn:
        this.signMeType(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["LoginSignMeTypeAsString"].DefaultOn === signMe ? Common_Enums__WEBPACK_IMPORTED_MODULE_6__["LoginSignMeType"].DefaultOn : Common_Enums__WEBPACK_IMPORTED_MODULE_6__["LoginSignMeType"].DefaultOff);

        switch (signMeLocal) {
          case '-1-':
            this.signMeType(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["LoginSignMeType"].DefaultOn);
            break;

          case '-0-':
            this.signMeType(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["LoginSignMeType"].DefaultOff);
            break;
          // no default
        }

        break;

      case Common_Enums__WEBPACK_IMPORTED_MODULE_6__["LoginSignMeTypeAsString"].Unused:
      default:
        this.signMeType(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["LoginSignMeType"].Unused);
        break;
    }

    this.email(Stores_User_App__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].devEmail);
    this.password(Stores_User_App__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].devPassword);

    if (this.googleLoginEnabled() || this.googleGmailLoginEnabled()) {
      window__WEBPACK_IMPORTED_MODULE_3___default.a['rl_' + jsHash + '_google_login_service'] = fSocial;
    }

    if (this.facebookLoginEnabled()) {
      window__WEBPACK_IMPORTED_MODULE_3___default.a['rl_' + jsHash + '_facebook_login_service'] = fSocial;
    }

    if (this.twitterLoginEnabled()) {
      window__WEBPACK_IMPORTED_MODULE_3___default.a['rl_' + jsHash + '_twitter_login_service'] = fSocial;
    }

    ___WEBPACK_IMPORTED_MODULE_4___default.a.delay(function () {
      Stores_Language__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].language.subscribe(function (value) {
        _this3.langRequest(true);

        Object(Common_Translator__WEBPACK_IMPORTED_MODULE_10__["reload"])(false, value).then(function () {
          _this3.langRequest(false);

          _this3.bSendLanguage = true;
        }, function () {
          _this3.langRequest(false);
        });
      });
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Magics"].Time50ms);

    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["triggerAutocompleteInputChange"])(true);
  };

  _proto.submitForm = function submitForm() {
    this.submitCommand();
  };

  _proto.selectLanguage = function selectLanguage() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Languages */ 291), [this.language, this.languages(), Stores_Language__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].userLanguage()]);
  };

  _proto.selectLanguageOnTab = function selectLanguageOnTab(bShift) {
    var _this4 = this;

    if (!bShift) {
      ___WEBPACK_IMPORTED_MODULE_4___default.a.delay(function () {
        _this4.emailFocus(true);
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Magics"].Time50ms);

      return false;
    }

    return true;
  };

  return LoginUserView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_19__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "facebookCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "facebookCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "googleCommand", [_dec3], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "googleCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "googleGmailCommand", [_dec4], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "googleGmailCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "twitterCommand", [_dec5], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "twitterCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "submitCommand", [_dec6], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "submitCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 448 */
/*!************************************!*\
  !*** ./dev/Screen/User/MailBox.js ***!
  \************************************/
/*! exports provided: MailBoxUserScreen, default */
/*! exports used: MailBoxUserScreen */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MailBoxUserScreen; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Events */ 23);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/User/Account */ 46);
/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/User/Settings */ 35);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/User/Message */ 13);
/* harmony import */ var View_User_MailBox_SystemDropDown__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! View/User/MailBox/SystemDropDown */ 449);
/* harmony import */ var View_User_MailBox_FolderList__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! View/User/MailBox/FolderList */ 450);
/* harmony import */ var View_User_MailBox_MessageList__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! View/User/MailBox/MessageList */ 452);
/* harmony import */ var View_User_MailBox_MessageView__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! View/User/MailBox/MessageView */ 453);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Knoin/AbstractScreen */ 152);
























var MailBoxUserScreen = /*#__PURE__*/function (_AbstractScreen) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(MailBoxUserScreen, _AbstractScreen);

  function MailBoxUserScreen() {
    return _AbstractScreen.call(this, 'mailbox', [View_User_MailBox_SystemDropDown__WEBPACK_IMPORTED_MODULE_16__[/* SystemDropDownMailBoxUserView */ "a"], View_User_MailBox_FolderList__WEBPACK_IMPORTED_MODULE_17__[/* FolderListMailBoxUserView */ "a"], View_User_MailBox_MessageList__WEBPACK_IMPORTED_MODULE_18__[/* MessageListMailBoxUserView */ "a"], View_User_MailBox_MessageView__WEBPACK_IMPORTED_MODULE_19__[/* MessageViewMailBoxUserView */ "a"]]) || this;
  }
  /**
   * @returns {void}
   */


  var _proto = MailBoxUserScreen.prototype;

  _proto.updateWindowTitle = function updateWindowTitle() {
    var foldersInboxUnreadCount = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].foldersInboxUnreadCount();
    var email = Stores_User_Account__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].email();

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["appSettingsGet"]('listPermanentFiltered')) {
      foldersInboxUnreadCount = 0;
    }

    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_20__[/* getApp */ "a"])().setWindowTitle(('' === email ? '' : '' + (0 < foldersInboxUnreadCount ? '(' + foldersInboxUnreadCount + ') ' : ' ') + email + ' - ') + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["i18n"])('TITLES/MAILBOX'));
  }
  /**
   * @returns {void}
   */
  ;

  _proto.onShow = function onShow() {
    this.updateWindowTitle();
    Stores_User_App__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Focused"].None);
    Stores_User_App__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Focused"].MessageList);

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["appSettingsGet"]('mobile')) {
      Object(Common_Globals__WEBPACK_IMPORTED_MODULE_5__["leftPanelDisabled"])(true);
    }

    if (!Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Capa"].Folders)) {
      Object(Common_Globals__WEBPACK_IMPORTED_MODULE_5__["leftPanelType"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Capa"].Composer) || Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Capa"].Contacts) ? 'short' : 'none');
    } else {
      Object(Common_Globals__WEBPACK_IMPORTED_MODULE_5__["leftPanelType"])('');
    }
  }
  /**
   * @param {string} folderHash
   * @param {number} page
   * @param {string} search
   * @returns {void}
   */
  ;

  _proto.onRoute = function onRoute(folderHash, page, search) {
    var threadUid = folderHash.replace(/^(.+)~([\d]+)$/, '$2');
    var folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_7__[/* getFolderFromCacheList */ "e"])(Object(Common_Cache__WEBPACK_IMPORTED_MODULE_7__[/* getFolderFullNameRaw */ "f"])(folderHash.replace(/~([\d]+)$/, '')));

    if (folder) {
      if (folderHash === threadUid) {
        threadUid = '';
      }

      Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].currentFolder(folder);
      Stores_User_Message__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].messageListPage(page);
      Stores_User_Message__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].messageListSearch(search);
      Stores_User_Message__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].messageListThreadUid(threadUid);
      Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_20__[/* getApp */ "a"])().reloadMessageList();
    }
  }
  /**
   * @returns {void}
   */
  ;

  _proto.onStart = function onStart() {
    var _this = this;

    Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].folderList.subscribe(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["windowResizeCallback"]);
    Stores_User_Message__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].messageList.subscribe(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["windowResizeCallback"]);
    Stores_User_Message__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].message.subscribe(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["windowResizeCallback"]);

    ___WEBPACK_IMPORTED_MODULE_3___default.a.delay(function () {
      return Stores_User_Settings__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].layout.valueHasMutated();
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time50ms);

    ___WEBPACK_IMPORTED_MODULE_3___default.a.delay(function () {
      return Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_21__["warmUpScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 132));
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time500ms);

    Common_Events__WEBPACK_IMPORTED_MODULE_9__[/* sub */ "b"]('mailbox.inbox-unread-count', function (count) {
      Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].foldersInboxUnreadCount(count);
      var email = Stores_User_Account__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].email();

      ___WEBPACK_IMPORTED_MODULE_3___default.a.each(Stores_User_Account__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].accounts(), function (item) {
        if (item && email === item.email) {
          item.count(count);
        }
      });

      _this.updateWindowTitle();
    });
  }
  /**
   * @returns {void}
   */
  ;

  _proto.onBuild = function onBuild() {
    if (!Common_Globals__WEBPACK_IMPORTED_MODULE_5__["bMobileDevice"] && !Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["appSettingsGet"]('mobile')) {
      ___WEBPACK_IMPORTED_MODULE_3___default.a.defer(function () {
        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_20__[/* getApp */ "a"])().initHorizontalLayoutResizer(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["ClientSideKeyName"].MessageListSize);
      });
    }

    Common_Globals__WEBPACK_IMPORTED_MODULE_5__["$html"].on('click', '#rl-right', function () {
      Object(Common_Globals__WEBPACK_IMPORTED_MODULE_5__["moveAction"])(false);
    });
  }
  /**
   * @returns {Array}
   */
  ;

  _proto.routes = function routes() {
    var inboxFolderName = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_7__[/* getFolderInboxName */ "h"])(),
        fNormS = function fNormS(request, vals) {
      vals[0] = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["pString"])(vals[0]);
      vals[1] = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["pInt"])(vals[1]);
      vals[1] = 0 >= vals[1] ? 1 : vals[1];
      vals[2] = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["pString"])(vals[2]);

      if ('' === request) {
        vals[0] = inboxFolderName;
        vals[1] = 1;
      }

      return [Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["decodeURI"])(vals[0]), vals[1], Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["decodeURI"])(vals[2])];
    },
        fNormD = function fNormD(request, vals) {
      vals[0] = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["pString"])(vals[0]);
      vals[1] = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["pString"])(vals[1]);

      if ('' === request) {
        vals[0] = inboxFolderName;
      }

      return [Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["decodeURI"])(vals[0]), 1, Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["decodeURI"])(vals[1])];
    };

    return [[/^([a-zA-Z0-9~]+)\/p([1-9][0-9]*)\/(.+)\/?$/, {
      'normalize_': fNormS
    }], [/^([a-zA-Z0-9~]+)\/p([1-9][0-9]*)$/, {
      'normalize_': fNormS
    }], [/^([a-zA-Z0-9~]+)\/(.+)\/?$/, {
      'normalize_': fNormD
    }], [/^([^/]*)$/, {
      'normalize_': fNormS
    }]];
  };

  return MailBoxUserScreen;
}(Knoin_AbstractScreen__WEBPACK_IMPORTED_MODULE_22__[/* AbstractScreen */ "a"]);



/***/ }),
/* 449 */
/*!*************************************************!*\
  !*** ./dev/View/User/MailBox/SystemDropDown.js ***!
  \*************************************************/
/*! exports provided: SystemDropDownMailBoxUserView, default */
/*! exports used: SystemDropDownMailBoxUserView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SystemDropDownMailBoxUserView; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var View_User_AbstractSystemDropDown__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! View/User/AbstractSystemDropDown */ 318);


var _dec, _class;



var SystemDropDownMailBoxUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["view"])({
  name: 'View/User/MailBox/SystemDropDown',
  type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["ViewType"].Right,
  templateID: 'SystemDropDown'
}), _dec(_class = /*#__PURE__*/function (_AbstractSystemDropDo) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(SystemDropDownMailBoxUserView, _AbstractSystemDropDo);

  function SystemDropDownMailBoxUserView() {
    return _AbstractSystemDropDo.apply(this, arguments) || this;
  }

  return SystemDropDownMailBoxUserView;
}(View_User_AbstractSystemDropDown__WEBPACK_IMPORTED_MODULE_2__[/* AbstractSystemDropDownUserView */ "a"])) || _class);


/***/ }),
/* 450 */
/*!*********************************************!*\
  !*** ./dev/View/User/MailBox/FolderList.js ***!
  \*********************************************/
/*! exports provided: FolderListMailBoxUserView, default */
/*! exports used: FolderListMailBoxUserView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FolderListMailBoxUserView; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/User/Settings */ 35);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Stores/User/Message */ 13);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;




















var FolderListMailBoxUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["view"])({
  name: 'View/User/MailBox/FolderList',
  type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["ViewType"].Left,
  templateID: 'MailFolderList'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(FolderListMailBoxUserView, _AbstractViewNext);

  function FolderListMailBoxUserView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.oContentVisible = null;
    _this.oContentScrollable = null;
    _this.composeInEdit = Stores_User_App__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].composeInEdit;
    _this.messageList = Stores_User_Message__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].messageList;
    _this.folderList = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].folderList;
    _this.folderListSystem = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].folderListSystem;
    _this.foldersChanging = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].foldersChanging;
    _this.moveAction = Common_Globals__WEBPACK_IMPORTED_MODULE_9__["moveAction"];
    _this.foldersListWithSingleInboxRootFolder = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].foldersListWithSingleInboxRootFolder;
    _this.leftPanelDisabled = Common_Globals__WEBPACK_IMPORTED_MODULE_9__["leftPanelDisabled"];
    _this.iDropOverTimer = 0;
    _this.allowComposer = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_16__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Capa"].Composer);
    _this.allowContacts = !!Stores_User_App__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].contactsIsAllowed();
    _this.allowFolders = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_16__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Capa"].Folders);
    _this.folderListFocused = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].computed(function () {
      return Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Focused"].FolderList === Stores_User_App__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].focusedState();
    });
    _this.isInboxStarred = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].computed(function () {
      return Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].currentFolder() && Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].currentFolder().isInbox() && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["trim"])(Stores_User_Message__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].messageListSearch()).indexOf('is:flagged');
    });
    return _this;
  }

  var _proto = FolderListMailBoxUserView.prototype;

  _proto.onBuild = function onBuild(dom) {
    this.oContentVisible = $__WEBPACK_IMPORTED_MODULE_4___default()('.b-content', dom);
    this.oContentScrollable = $__WEBPACK_IMPORTED_MODULE_4___default()('.content', this.oContentVisible);

    var self = this,
        isMobile = Storage_Settings__WEBPACK_IMPORTED_MODULE_16__["appSettingsGet"]('mobile'),
        fSelectFolder = function fSelectFolder(el, event, starred) {
      var isMove = Object(Common_Globals__WEBPACK_IMPORTED_MODULE_9__["moveAction"])();

      if (isMobile) {
        Object(Common_Globals__WEBPACK_IMPORTED_MODULE_9__["leftPanelDisabled"])(true);
      }

      event.preventDefault();

      if (starred) {
        event.stopPropagation();
      }

      var folder = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].dataFor(el);

      if (folder) {
        if (isMove) {
          Object(Common_Globals__WEBPACK_IMPORTED_MODULE_9__["moveAction"])(false);
          Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_17__[/* getApp */ "a"])().moveMessagesToFolder(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].currentFolderFullNameRaw(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].messageListCheckedOrSelectedUidsWithSubMails(), folder.fullNameRaw, false);
        } else {
          if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Layout"].NoPreview === Stores_User_Settings__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].layout()) {
            Stores_User_Message__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].message(null);
          }

          if (folder.fullNameRaw === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].currentFolderFullNameRaw()) {
            Object(Common_Cache__WEBPACK_IMPORTED_MODULE_11__[/* setFolderHash */ "q"])(folder.fullNameRaw, '');
          }

          if (starred) {
            Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* mailBox */ "o"])(folder.fullNameHash, 1, 'is:flagged'));
          } else {
            Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* mailBox */ "o"])(folder.fullNameHash));
          }
        }

        Stores_User_App__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Focused"].MessageList);
      }
    };

    dom.on('click', '.b-folders .e-item .e-link .e-collapsed-sign', function (event) {
      // eslint-disable-line prefer-arrow-callback
      var folder = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].dataFor(this); // eslint-disable-line no-invalid-this

      if (folder && event) {
        var collapsed = folder.collapsed();
        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_17__[/* getApp */ "a"])().setExpandedFolder(folder.fullNameHash, collapsed);
        folder.collapsed(!collapsed);
        event.preventDefault();
        event.stopPropagation();
      }
    }).on('click', '.b-folders .e-item .e-link.selectable .inbox-star-icon', function (event) {
      // eslint-disable-line prefer-arrow-callback
      fSelectFolder(this, event, !self.isInboxStarred()); // eslint-disable-line no-invalid-this
    }).on('click', '.b-folders .e-item .e-link.selectable', function (event) {
      // eslint-disable-line prefer-arrow-callback
      fSelectFolder(this, event, false); // eslint-disable-line no-invalid-this
    });
    key__WEBPACK_IMPORTED_MODULE_6___default()('up, down', Common_Enums__WEBPACK_IMPORTED_MODULE_8__["KeyState"].FolderList, function (event, handler) {
      var keyCode = handler && 'up' === handler.shortcut ? Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Up : Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Down,
          $items = $__WEBPACK_IMPORTED_MODULE_4___default()('.b-folders .e-item .e-link:not(.hidden):visible', dom);

      if (event && $items.length) {
        var index = $items.index(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1___default()($items).call($items, '.focused'));

        if (-1 < index) {
          $items.eq(index).removeClass('focused');
        }

        if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Up === keyCode && 0 < index) {
          index -= 1;
        } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["EventKeyCode"].Down === keyCode && index < $items.length - 1) {
          index += 1;
        }

        $items.eq(index).addClass('focused');
        self.scrollToFocused();
      }

      return false;
    });
    key__WEBPACK_IMPORTED_MODULE_6___default()('enter', Common_Enums__WEBPACK_IMPORTED_MODULE_8__["KeyState"].FolderList, function () {
      var $items = $__WEBPACK_IMPORTED_MODULE_4___default()('.b-folders .e-item .e-link:not(.hidden).focused', dom);

      if ($items.length && $items[0]) {
        Stores_User_App__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Focused"].MessageList);
        $items.click();
      }

      return false;
    });
    key__WEBPACK_IMPORTED_MODULE_6___default()('space', Common_Enums__WEBPACK_IMPORTED_MODULE_8__["KeyState"].FolderList, function () {
      var $items = $__WEBPACK_IMPORTED_MODULE_4___default()('.b-folders .e-item .e-link:not(.hidden).focused', dom);

      if ($items.length && $items[0]) {
        var folder = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].dataFor($items[0]);

        if (folder) {
          var collapsed = folder.collapsed();
          Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_17__[/* getApp */ "a"])().setExpandedFolder(folder.fullNameHash, collapsed);
          folder.collapsed(!collapsed);
        }
      }

      return false;
    });
    key__WEBPACK_IMPORTED_MODULE_6___default()('esc, tab, shift+tab, right', Common_Enums__WEBPACK_IMPORTED_MODULE_8__["KeyState"].FolderList, function () {
      Stores_User_App__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Focused"].MessageList);
      Object(Common_Globals__WEBPACK_IMPORTED_MODULE_9__["moveAction"])(false);
      return false;
    });
    Stores_User_App__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].focusedState.subscribe(function (value) {
      $__WEBPACK_IMPORTED_MODULE_4___default()('.b-folders .e-item .e-link.focused', dom).removeClass('focused');

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Focused"].FolderList === value) {
        $__WEBPACK_IMPORTED_MODULE_4___default()('.b-folders .e-item .e-link.selected', dom).addClass('focused');
      }
    });
  };

  _proto.messagesDropOver = function messagesDropOver(folder) {
    window__WEBPACK_IMPORTED_MODULE_3___default.a.clearTimeout(this.iDropOverTimer);

    if (folder && folder.collapsed()) {
      this.iDropOverTimer = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_2___default()(function () {
        folder.collapsed(false);
        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_17__[/* getApp */ "a"])().setExpandedFolder(folder.fullNameHash, true);
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["windowResize"])();
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Magics"].Time500ms);
    }
  };

  _proto.messagesDropOut = function messagesDropOut() {
    window__WEBPACK_IMPORTED_MODULE_3___default.a.clearTimeout(this.iDropOverTimer);
  };

  _proto.scrollToFocused = function scrollToFocused() {
    if (!this.oContentVisible || !this.oContentScrollable) {
      return false;
    }

    var offset = 20,
        focused = $__WEBPACK_IMPORTED_MODULE_4___default()('.e-item .e-link.focused', this.oContentScrollable),
        pos = focused.position(),
        visibleHeight = this.oContentVisible.height(),
        focusedHeight = focused.outerHeight();

    if (pos && (0 > pos.top || pos.top + focusedHeight > visibleHeight)) {
      if (0 > pos.top) {
        this.oContentScrollable.scrollTop(this.oContentScrollable.scrollTop() + pos.top - offset);
      } else {
        this.oContentScrollable.scrollTop(this.oContentScrollable.scrollTop() + pos.top - visibleHeight + focusedHeight + offset);
      }

      return true;
    }

    return false;
  }
  /**
   * @param {FolderModel} toFolder
   * @param {{helper:jQuery}} ui
   * @returns {void}
   */
  ;

  _proto.messagesDrop = function messagesDrop(toFolder, ui) {
    if (toFolder && ui && ui.helper) {
      var fromFolderFullNameRaw = ui.helper.data('rl-folder'),
          copy = Common_Globals__WEBPACK_IMPORTED_MODULE_9__["$html"].hasClass('rl-ctrl-key-pressed'),
          uids = ui.helper.data('rl-uids');

      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["isNormal"])(fromFolderFullNameRaw) && '' !== fromFolderFullNameRaw && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["isArray"])(uids)) {
        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_17__[/* getApp */ "a"])().moveMessagesToFolder(fromFolderFullNameRaw, uids, toFolder.fullNameRaw, copy);
      }
    }
  };

  _proto.composeClick = function composeClick() {
    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_16__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_8__["Capa"].Composer)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 132));
    }
  };

  _proto.createFolder = function createFolder() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderCreate */ 428));
  };

  _proto.configureFolders = function configureFolders() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_10__[/* settings */ "z"])('folders'));
  };

  _proto.contactsClick = function contactsClick() {
    if (this.allowContacts) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_18__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Contacts */ 427));
    }
  };

  return FolderListMailBoxUserView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_19__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 451 */
/*!******************************!*\
  !*** ./dev/Model/Contact.js ***!
  \******************************/
/*! exports provided: ContactModel, default */
/*! exports used: ContactModel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ContactModel; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Knoin/AbstractModel */ 67);









var ContactModel = /*#__PURE__*/function (_AbstractModel) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(ContactModel, _AbstractModel);

  function ContactModel() {
    var _this;

    _this = _AbstractModel.call(this, 'ContactModel') || this;
    _this.idContact = 0;
    _this.display = '';
    _this.properties = [];
    _this.readOnly = false;
    _this.focused = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.selected = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.checked = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.deleted = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    return _this;
  }
  /**
   * @returns {Array|null}
   */


  var _proto = ContactModel.prototype;

  _proto.getNameAndEmailHelper = function getNameAndEmailHelper() {
    var name = '',
        email = '';

    if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["isNonEmptyArray"])(this.properties)) {
      ___WEBPACK_IMPORTED_MODULE_2___default.a.each(this.properties, function (property) {
        if (property) {
          if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["ContactPropertyType"].FirstName === property[0]) {
            name = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["trim"])(property[1] + ' ' + name);
          } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["ContactPropertyType"].LastName === property[0]) {
            name = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["trim"])(name + ' ' + property[1]);
          } else if ('' === email && Common_Enums__WEBPACK_IMPORTED_MODULE_4__["ContactPropertyType"].Email === property[0]) {
            email = property[1];
          }
        }
      });
    }

    return '' === email ? null : [email, name];
  }
  /**
   * @param {Object} oItem
   * @returns {boolean}
   */
  ;

  _proto.parse = function parse(json) {
    var _this2 = this;

    var result = false;

    if (json && 'Object/Contact' === json['@Object']) {
      this.idContact = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pInt"])(json.IdContact);
      this.display = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pString"])(json.Display);
      this.readOnly = !!json.ReadOnly;

      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["isNonEmptyArray"])(json.Properties)) {
        ___WEBPACK_IMPORTED_MODULE_2___default.a.each(json.Properties, function (property) {
          if (property && property.Type && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["isNormal"])(property.Value) && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["isNormal"])(property.TypeStr)) {
            _this2.properties.push([Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pInt"])(property.Type), Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pString"])(property.Value), Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pString"])(property.TypeStr)]);
          }
        });
      }

      result = true;
    }

    return result;
  }
  /**
   * @returns {string}
   */
  ;

  _proto.srcAttr = function srcAttr() {
    return Object(Common_Links__WEBPACK_IMPORTED_MODULE_6__[/* emptyContactPic */ "j"])();
  }
  /**
   * @returns {string}
   */
  ;

  _proto.generateUid = function generateUid() {
    return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pString"])(this.idContact);
  }
  /**
   * @return string
   */
  ;

  _proto.lineAsCss = function lineAsCss() {
    var result = [];

    if (this.deleted()) {
      result.push('deleted');
    }

    if (this.selected()) {
      result.push('selected');
    }

    if (this.checked()) {
      result.push('checked');
    }

    if (this.focused()) {
      result.push('focused');
    }

    return result.join(' ');
  };

  return ContactModel;
}(Knoin_AbstractModel__WEBPACK_IMPORTED_MODULE_7__[/* AbstractModel */ "a"]);



/***/ }),
/* 452 */
/*!**********************************************!*\
  !*** ./dev/View/User/MailBox/MessageList.js ***!
  \**********************************************/
/*! exports provided: MessageListMailBoxUserView, default */
/*! exports used: MessageListMailBoxUserView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MessageListMailBoxUserView; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/set-timeout */ 33);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 28);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_12__);
/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Jua */ 205);
/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(Jua__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var ifvisible__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ifvisible */ 240);
/* harmony import */ var ifvisible__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(ifvisible__WEBPACK_IMPORTED_MODULE_14__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Selector__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Common/Selector */ 319);
/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Common/Events */ 23);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_User_Quota__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Stores/User/Quota */ 239);
/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Stores/User/Settings */ 35);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Stores/User/Message */ 13);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);




var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _class, _class2;

































var canBeMovedHelper = function canBeMovedHelper(self) {
  return self.canBeMoved();
};

var MessageListMailBoxUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["view"])({
  name: 'View/User/MailBox/MessageList',
  type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["ViewType"].Right,
  templateID: 'MailMessageList'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["command"])(), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["command"])(), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["command"])(canBeMovedHelper), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["command"])(canBeMovedHelper), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["command"])(canBeMovedHelper), _dec7 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["command"])(canBeMovedHelper), _dec8 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["command"])(canBeMovedHelper), _dec9 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["command"])(canBeMovedHelper), _dec10 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["command"])(canBeMovedHelper), _dec11 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["command"])(canBeMovedHelper), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(MessageListMailBoxUserView, _AbstractViewNext);

  function MessageListMailBoxUserView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.sLastUid = null;
    _this.bPrefetch = false;
    _this.emptySubjectValue = '';
    _this.iGoToUpUpOrDownDownTimeout = 0;
    _this.mobile = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["appSettingsGet"]('mobile');
    _this.newMoveToFolder = Stores_User_App__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].newMoveToFolder;
    _this.allowReload = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Reload);
    _this.allowSearch = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Search);
    _this.allowSearchAdv = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].SearchAdv);
    _this.allowComposer = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Composer);
    _this.allowMessageListActions = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].MessageListActions);
    _this.allowDangerousActions = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].DangerousActions);
    _this.allowFolders = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Folders);
    _this.popupVisibility = Common_Globals__WEBPACK_IMPORTED_MODULE_17__["popupVisibility"];
    _this.message = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].message;
    _this.messageList = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageList;
    _this.messageListDisableAutoSelect = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListDisableAutoSelect;
    _this.folderList = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].folderList;
    _this.composeInEdit = Stores_User_App__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].composeInEdit;
    _this.leftPanelDisabled = Common_Globals__WEBPACK_IMPORTED_MODULE_17__["leftPanelDisabled"];
    _this.selectorMessageSelected = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].selectorMessageSelected;
    _this.selectorMessageFocused = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].selectorMessageFocused;
    _this.isMessageSelected = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].isMessageSelected;
    _this.messageListSearch = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListSearch;
    _this.messageListThreadUid = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListThreadUid;
    _this.messageListError = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListError;
    _this.folderMenuForMove = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].folderMenuForMove;
    _this.useCheckboxesInList = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"].useCheckboxesInList;
    _this.mainMessageListSearch = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].mainMessageListSearch;
    _this.messageListEndFolder = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListEndFolder;
    _this.messageListEndThreadUid = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListEndThreadUid;
    _this.messageListChecked = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListChecked;
    _this.messageListCheckedOrSelected = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelected;
    _this.messageListCheckedOrSelectedUidsWithSubMails = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelectedUidsWithSubMails;
    _this.messageListCompleteLoadingThrottle = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCompleteLoadingThrottle;
    _this.messageListCompleteLoadingThrottleForAnimation = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCompleteLoadingThrottleForAnimation;
    Object(Common_Translator__WEBPACK_IMPORTED_MODULE_22__["initOnStartOrLangChange"])(function () {
      _this.emptySubjectValue = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_22__["i18n"])('MESSAGE_LIST/EMPTY_SUBJECT_TEXT');
    });
    _this.userQuota = Stores_User_Quota__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].quota;
    _this.userUsageSize = Stores_User_Quota__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].usage;
    _this.userUsageProc = Stores_User_Quota__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].percentage;
    _this.moveDropdownTrigger = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].observable(false);
    _this.moreDropdownTrigger = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].observable(false); // append drag and drop

    _this.dragOver = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].observable(false).extend({
      'throttle': 1
    });
    _this.dragOverEnter = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].observable(false).extend({
      'throttle': 1
    });
    _this.dragOverArea = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].observable(null);
    _this.dragOverBodyArea = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].observable(null);
    _this.messageListItemTemplate = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return _this.mobile || Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Layout"].SidePreview === Stores_User_Settings__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"].layout() ? 'MailMessageListItem' : 'MailMessageListItemNoPreviewPane';
    });
    _this.messageListSearchDesc = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      var value = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListEndSearch();
      return '' === value ? '' : Object(Common_Translator__WEBPACK_IMPORTED_MODULE_22__["i18n"])('MESSAGE_LIST/SEARCH_RESULT_FOR', {
        'SEARCH': value
      });
    });
    _this.messageListPagenator = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_18__["computedPagenatorHelper"])(Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListPage, Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListPageCount));
    _this.checkAll = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed({
      read: function read() {
        return 0 < Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListChecked().length;
      },
      write: function write(value) {
        value = !!value;

        ___WEBPACK_IMPORTED_MODULE_9___default.a.each(Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageList(), function (message) {
          message.checked(value);
        });
      }
    });
    _this.inputMessageListSearchFocus = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].observable(false);
    _this.sLastSearchValue = '';
    _this.inputProxyMessageListSearch = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed({
      read: _this.mainMessageListSearch,
      write: function write(value) {
        _this.sLastSearchValue = value;
      }
    });
    _this.isIncompleteChecked = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      var m = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageList().length,
          c = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListChecked().length;
      return 0 < m && 0 < c && m > c;
    });
    _this.hasMessages = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return 0 < _this.messageList().length;
    });
    _this.hasCheckedOrSelectedLines = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return 0 < _this.messageListCheckedOrSelected().length;
    });
    _this.isSpamFolder = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].spamFolder() === _this.messageListEndFolder() && '' !== Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].spamFolder();
    });
    _this.isSpamDisabled = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return Common_Consts__WEBPACK_IMPORTED_MODULE_16__[/* UNUSED_OPTION_VALUE */ "r"] === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].spamFolder();
    });
    _this.isTrashFolder = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].trashFolder() === _this.messageListEndFolder() && '' !== Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].trashFolder();
    });
    _this.isDraftFolder = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].draftFolder() === _this.messageListEndFolder() && '' !== Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].draftFolder();
    });
    _this.isSentFolder = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].sentFolder() === _this.messageListEndFolder() && '' !== Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].sentFolder();
    });
    _this.isArchiveFolder = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].archiveFolder() === _this.messageListEndFolder() && '' !== Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].archiveFolder();
    });
    _this.isArchiveDisabled = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return Common_Consts__WEBPACK_IMPORTED_MODULE_16__[/* UNUSED_OPTION_VALUE */ "r"] === Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].archiveFolder();
    });
    _this.isArchiveVisible = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return !_this.isArchiveFolder() && !_this.isArchiveDisabled() && !_this.isDraftFolder();
    });
    _this.isSpamVisible = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return !_this.isSpamFolder() && !_this.isSpamDisabled() && !_this.isDraftFolder() && !_this.isSentFolder();
    });
    _this.isUnSpamVisible = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return _this.isSpamFolder() && !_this.isSpamDisabled() && !_this.isDraftFolder() && !_this.isSentFolder();
    });
    _this.mobileCheckedStateShow = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      var checked = 0 < _this.messageListChecked().length;

      return _this.mobile ? checked : true;
    });
    _this.mobileCheckedStateHide = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      var checked = 0 < _this.messageListChecked().length;

      return _this.mobile ? !checked : true;
    });
    _this.messageListFocused = ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].computed(function () {
      return Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Focused"].MessageList === Stores_User_App__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].focusedState();
    });
    _this.canBeMoved = _this.hasCheckedOrSelectedLines;
    _this.quotaTooltip = ___WEBPACK_IMPORTED_MODULE_9___default.a.bind(_this.quotaTooltip, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    _this.selector = new Common_Selector__WEBPACK_IMPORTED_MODULE_20__[/* Selector */ "a"](_this.messageList, _this.selectorMessageSelected, _this.selectorMessageFocused, '.messageListItem .actionHandle', '.messageListItem.selected', '.messageListItem .checkboxMessage', '.messageListItem.focused');

    _this.selector.on('onItemSelect', function (message) {
      Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].selectMessage(message);
    });

    _this.selector.on('onItemGetUid', function (message) {
      return message ? message.generateUid() : '';
    });

    _this.selector.on('onAutoSelect', function () {
      return _this.useAutoSelect();
    });

    _this.selector.on('onUpUpOrDownDown', function (v) {
      _this.goToUpUpOrDownDown(v);
    });

    Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('mailbox.message-list.selector.go-down', function (select) {
      _this.selector.goDown(select);
    });
    Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('mailbox.message-list.selector.go-up', function (select) {
      _this.selector.goUp(select);
    });
    Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* sub */ "b"]('mailbox.message.show', function (sFolder, sUid) {
      var message = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, _this.messageList(), function (item) {
        return item && sFolder === item.folderFullNameRaw && sUid === item.uid;
      });

      if ('INBOX' === sFolder) {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_19__[/* mailBox */ "o"])(sFolder, 1));
      }

      if (message) {
        _this.selector.selectMessageItem(message);
      } else {
        if ('INBOX' !== sFolder) {
          Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_19__[/* mailBox */ "o"])(sFolder, 1));
        }

        Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].selectMessageByFolderAndUid(sFolder, sUid);
      }
    });
    Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListEndHash.subscribe(function () {
      _this.selector.scrollToTop();
    });
    return _this;
  }

  var _proto = MessageListMailBoxUserView.prototype;

  _proto.clearCommand = function clearCommand() {
    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].DangerousActions)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderClear */ 554), [Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolder()]);
    }
  };

  _proto.reloadCommand = function reloadCommand() {
    if (!Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCompleteLoadingThrottleForAnimation() && this.allowReload) {
      Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__[/* getApp */ "a"])().reloadMessageList(false, true);
    }
  };

  _proto.multyForwardCommand = function multyForwardCommand() {
    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Composer)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 132), [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["ComposeType"].ForwardAsAttachment, Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelected()]);
    }
  };

  _proto.deleteWithoutMoveCommand = function deleteWithoutMoveCommand() {
    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].DangerousActions)) {
      Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__[/* getApp */ "a"])().deleteMessagesFromFolder(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["FolderType"].Trash, Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelectedUidsWithSubMails(), false);
    }
  };

  _proto.deleteCommand = function deleteCommand() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__[/* getApp */ "a"])().deleteMessagesFromFolder(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["FolderType"].Trash, Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelectedUidsWithSubMails(), true);
  };

  _proto.archiveCommand = function archiveCommand() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__[/* getApp */ "a"])().deleteMessagesFromFolder(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["FolderType"].Archive, Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelectedUidsWithSubMails(), true);
  };

  _proto.spamCommand = function spamCommand() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__[/* getApp */ "a"])().deleteMessagesFromFolder(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["FolderType"].Spam, Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelectedUidsWithSubMails(), true);
  };

  _proto.notSpamCommand = function notSpamCommand() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__[/* getApp */ "a"])().deleteMessagesFromFolder(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["FolderType"].NotSpam, Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelectedUidsWithSubMails(), true);
  };

  _proto.moveCommand = function moveCommand() {} // eslint-disable-line no-empty-function
  ;

  _proto.moveNewCommand = function moveNewCommand(vm, event) {
    if (this.newMoveToFolder() && this.mobileCheckedStateShow()) {
      if (vm && event && event.preventDefault) {
        event.preventDefault();

        if (event.stopPropagation) {
          event.stopPropagation();
        }
      }

      if (Object(Common_Globals__WEBPACK_IMPORTED_MODULE_17__["moveAction"])()) {
        Stores_User_App__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Focused"].MessageList);
        Object(Common_Globals__WEBPACK_IMPORTED_MODULE_17__["moveAction"])(false);
      } else {
        Stores_User_App__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Focused"].FolderList);
        Object(Common_Globals__WEBPACK_IMPORTED_MODULE_17__["moveAction"])(true);
      }
    }
  };

  _proto.hideLeft = function hideLeft(item, event) {
    event.preventDefault();
    event.stopPropagation();
    Object(Common_Globals__WEBPACK_IMPORTED_MODULE_17__["leftPanelDisabled"])(true);
  };

  _proto.showLeft = function showLeft(item, event) {
    event.preventDefault();
    event.stopPropagation();
    Object(Common_Globals__WEBPACK_IMPORTED_MODULE_17__["leftPanelDisabled"])(false);
  };

  _proto.composeClick = function composeClick() {
    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Composer)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 132));
    }
  };

  _proto.goToUpUpOrDownDown = function goToUpUpOrDownDown(up) {
    var _this2 = this;

    if (0 < this.messageListChecked().length) {
      return false;
    }

    window__WEBPACK_IMPORTED_MODULE_8___default.a.clearTimeout(this.iGoToUpUpOrDownDownTimeout);
    this.iGoToUpUpOrDownDownTimeout = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_4___default()(function () {
      var prev = null,
          next = null,
          temp = null,
          current = null;

      _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, _this2.messageListPagenator(), function (item) {
        if (item) {
          if (current) {
            next = item;
          }

          if (item.current) {
            current = item;
            prev = temp;
          }

          if (next) {
            return true;
          }

          temp = item;
        }

        return false;
      });

      if (Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Layout"].NoPreview === Stores_User_Settings__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"].layout() && !_this2.message()) {
        _this2.selector.iFocusedNextHelper = up ? -1 : 1;
      } else {
        _this2.selector.iSelectNextHelper = up ? -1 : 1;
      }

      if (up ? prev : next) {
        _this2.selector.unselect();

        _this2.gotoPage(up ? prev : next);
      }
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time350ms);
    return true;
  };

  _proto.useAutoSelect = function useAutoSelect() {
    if (this.messageListDisableAutoSelect()) {
      return false;
    }

    if (/is:unseen/.test(this.mainMessageListSearch())) {
      return false;
    }

    return Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Layout"].NoPreview !== Stores_User_Settings__WEBPACK_IMPORTED_MODULE_26__[/* default */ "a"].layout();
  };

  _proto.searchEnterAction = function searchEnterAction() {
    this.mainMessageListSearch(this.sLastSearchValue);
    this.inputMessageListSearchFocus(false);
  }
  /**
   * @returns {string}
   */
  ;

  _proto.printableMessageCountForDeletion = function printableMessageCountForDeletion() {
    var cnt = this.messageListCheckedOrSelectedUidsWithSubMails().length;
    return 1 < cnt ? ' (' + (100 > cnt ? cnt : '99+') + ')' : ''; // eslint-disable-line no-magic-numbers
  };

  _proto.cancelSearch = function cancelSearch() {
    this.mainMessageListSearch('');
    this.inputMessageListSearchFocus(false);
  };

  _proto.cancelThreadUid = function cancelThreadUid() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_19__[/* mailBox */ "o"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameHash(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListPageBeforeThread(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListSearch()));
  }
  /**
   * @param {string} sToFolderFullNameRaw
   * @param {boolean} bCopy
   * @returns {boolean}
   */
  ;

  _proto.moveSelectedMessagesToFolder = function moveSelectedMessagesToFolder(sToFolderFullNameRaw, bCopy) {
    if (this.canBeMoved()) {
      Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__[/* getApp */ "a"])().moveMessagesToFolder(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelectedUidsWithSubMails(), sToFolderFullNameRaw, bCopy);
    }

    return false;
  };

  _proto.dragAndDronHelper = function dragAndDronHelper(oMessageListItem) {
    if (oMessageListItem) {
      oMessageListItem.checked(true);
    }

    var el = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_18__["draggablePlace"])(),
        updateUidsInfo = function updateUidsInfo() {
      var uids = Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelectedUidsWithSubMails();
      el.data('rl-uids', uids);

      _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(el).call(el, '.text').text('' + uids.length);
    };

    el.data('rl-folder', Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw());
    updateUidsInfo();

    ___WEBPACK_IMPORTED_MODULE_9___default.a.defer(updateUidsInfo);

    return el;
  }
  /**
   * @param {string} sFolderFullNameRaw
   * @param {number} iSetAction
   * @param {Array=} aMessages = null
   * @returns {void}
   */
  ;

  _proto.setAction = function setAction(sFolderFullNameRaw, iSetAction, aMessages) {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__[/* getApp */ "a"])().messageListAction(sFolderFullNameRaw, iSetAction, aMessages);
  }
  /**
   * @param {string} sFolderFullNameRaw
   * @param {number} iSetAction
   * @param {string} sThreadUid = ''
   * @returns {void}
   */
  ;

  _proto.setActionForAll = function setActionForAll(sFolderFullNameRaw, iSetAction, sThreadUid) {
    if (sThreadUid === void 0) {
      sThreadUid = '';
    }

    if ('' !== sFolderFullNameRaw) {
      var cnt = 0;
      var uids = [];
      var folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_23__[/* getFolderFromCacheList */ "e"])(sFolderFullNameRaw);

      if (folder) {
        switch (iSetAction) {
          case Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].SetSeen:
            folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_23__[/* getFolderFromCacheList */ "e"])(sFolderFullNameRaw);

            if (folder) {
              ___WEBPACK_IMPORTED_MODULE_9___default.a.each(Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageList(), function (message) {
                if (message.unseen()) {
                  cnt += 1;
                }

                message.unseen(false);
                uids.push(message.uid);
              });

              if (sThreadUid) {
                folder.messageCountUnread(folder.messageCountUnread() - cnt);

                if (0 > folder.messageCountUnread()) {
                  folder.messageCountUnread(0);
                }
              } else {
                folder.messageCountUnread(0);
              }

              Object(Common_Cache__WEBPACK_IMPORTED_MODULE_23__[/* clearMessageFlagsFromCacheByFolder */ "c"])(sFolderFullNameRaw);
            }

            Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_30__[/* default */ "a"].messageSetSeenToAll(Common_Utils__WEBPACK_IMPORTED_MODULE_18__["noop"], sFolderFullNameRaw, true, sThreadUid ? uids : null);
            break;

          case Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].UnsetSeen:
            folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_23__[/* getFolderFromCacheList */ "e"])(sFolderFullNameRaw);

            if (folder) {
              ___WEBPACK_IMPORTED_MODULE_9___default.a.each(Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageList(), function (message) {
                if (!message.unseen()) {
                  cnt += 1;
                }

                message.unseen(true);
                uids.push(message.uid);
              });

              if (sThreadUid) {
                folder.messageCountUnread(folder.messageCountUnread() + cnt);

                if (folder.messageCountAll() < folder.messageCountUnread()) {
                  folder.messageCountUnread(folder.messageCountAll());
                }
              } else {
                folder.messageCountUnread(folder.messageCountAll());
              }

              Object(Common_Cache__WEBPACK_IMPORTED_MODULE_23__[/* clearMessageFlagsFromCacheByFolder */ "c"])(sFolderFullNameRaw);
            }

            Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_30__[/* default */ "a"].messageSetSeenToAll(Common_Utils__WEBPACK_IMPORTED_MODULE_18__["noop"], sFolderFullNameRaw, false, sThreadUid ? uids : null);
            break;
          // no default
        }

        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__[/* getApp */ "a"])().reloadFlagsCurrentMessageListAndMessageFromCache();
      }
    }
  };

  _proto.listSetSeen = function listSetSeen() {
    this.setAction(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw(), Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].SetSeen, Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelected());
  };

  _proto.listSetAllSeen = function listSetAllSeen() {
    this.setActionForAll(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw(), Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].SetSeen, this.messageListEndThreadUid());
  };

  _proto.listUnsetSeen = function listUnsetSeen() {
    this.setAction(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw(), Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].UnsetSeen, Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelected());
  };

  _proto.listSetFlags = function listSetFlags() {
    this.setAction(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw(), Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].SetFlag, Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelected());
  };

  _proto.listUnsetFlags = function listUnsetFlags() {
    this.setAction(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw(), Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].UnsetFlag, Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelected());
  };

  _proto.flagMessages = function flagMessages(currentMessage) {
    var checked = this.messageListCheckedOrSelected();

    if (currentMessage) {
      var checkedUids = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, checked, function (message) {
        return message.uid;
      });

      if (0 < checkedUids.length && -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_18__["inArray"])(currentMessage.uid, checkedUids)) {
        this.setAction(currentMessage.folderFullNameRaw, currentMessage.flagged() ? Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].UnsetFlag : Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].SetFlag, checked);
      } else {
        this.setAction(currentMessage.folderFullNameRaw, currentMessage.flagged() ? Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].UnsetFlag : Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].SetFlag, [currentMessage]);
      }
    }
  };

  _proto.flagMessagesFast = function flagMessagesFast(bFlag) {
    var checked = this.messageListCheckedOrSelected();

    if (0 < checked.length) {
      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_18__["isUnd"])(bFlag)) {
        var flagged = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, checked, function (message) {
          return message.flagged();
        });

        this.setAction(checked[0].folderFullNameRaw, checked.length === flagged.length ? Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].UnsetFlag : Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].SetFlag, checked);
      } else {
        this.setAction(checked[0].folderFullNameRaw, !bFlag ? Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].UnsetFlag : Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].SetFlag, checked);
      }
    }
  };

  _proto.seenMessagesFast = function seenMessagesFast(seen) {
    var checked = this.messageListCheckedOrSelected();

    if (0 < checked.length) {
      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_18__["isUnd"])(seen)) {
        var unseen = _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, checked, function (message) {
          return message.unseen();
        });

        this.setAction(checked[0].folderFullNameRaw, 0 < unseen.length ? Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].SetSeen : Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].UnsetSeen, checked);
      } else {
        this.setAction(checked[0].folderFullNameRaw, seen ? Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].SetSeen : Common_Enums__WEBPACK_IMPORTED_MODULE_15__["MessageSetAction"].UnsetSeen, checked);
      }
    }
  };

  _proto.gotoPage = function gotoPage(page) {
    if (page) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_19__[/* mailBox */ "o"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameHash(), page.value, Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListSearch(), Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListThreadUid()));
    }
  };

  _proto.gotoThread = function gotoThread(message) {
    if (message && 0 < message.threadsLen()) {
      Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListPageBeforeThread(Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListPage());
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_19__[/* mailBox */ "o"])(Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameHash(), 1, Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListSearch(), message.uid));
    }
  };

  _proto.clearListIsVisible = function clearListIsVisible() {
    return '' === this.messageListSearchDesc() && '' === this.messageListError() && '' === this.messageListEndThreadUid() && 0 < this.messageList().length && (this.isSpamFolder() || this.isTrashFolder());
  };

  _proto.onBuild = function onBuild(dom) {
    var _this3 = this;

    var self = this;
    this.oContentVisible = $__WEBPACK_IMPORTED_MODULE_10___default()('.b-content', dom);
    this.oContentScrollable = $__WEBPACK_IMPORTED_MODULE_10___default()('.content', this.oContentVisible);
    this.selector.init(this.oContentVisible, this.oContentScrollable, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList);

    if (this.mobile) {
      dom.on('click', function () {
        Object(Common_Globals__WEBPACK_IMPORTED_MODULE_17__["leftPanelDisabled"])(true);
      });
    }

    dom.on('click', '.messageList .b-message-list-wrapper', function () {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Focused"].MessageView === Stores_User_App__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].focusedState()) {
        Stores_User_App__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Focused"].MessageList);
      }
    }).on('click', '.e-pagenator .e-page', function () {
      // eslint-disable-line prefer-arrow-callback
      self.gotoPage(ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].dataFor(this)); // eslint-disable-line no-invalid-this
    }).on('click', '.messageList .checkboxCkeckAll', function () {
      _this3.checkAll(!_this3.checkAll());
    }).on('click', '.messageList .messageListItem .flagParent', function () {
      // eslint-disable-line prefer-arrow-callback
      self.flagMessages(ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].dataFor(this)); // eslint-disable-line no-invalid-this
    }).on('click', '.messageList .messageListItem .threads-len', function () {
      // eslint-disable-line prefer-arrow-callback
      self.gotoThread(ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].dataFor(this)); // eslint-disable-line no-invalid-this
    }).on('dblclick', '.messageList .messageListItem .actionHandle', function () {
      // eslint-disable-line prefer-arrow-callback
      self.gotoThread(ko__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].dataFor(this)); // eslint-disable-line no-invalid-this
    });
    this.initUploaderForAppend();
    this.initShortcuts();

    if (!Common_Globals__WEBPACK_IMPORTED_MODULE_17__["bMobileDevice"] && ifvisible__WEBPACK_IMPORTED_MODULE_14___default.a && Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Prefetch)) {
      ifvisible__WEBPACK_IMPORTED_MODULE_14___default.a.setIdleDuration(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].ifvisibleIdle10s);
      ifvisible__WEBPACK_IMPORTED_MODULE_14___default.a.idle(function () {
        _this3.prefetchNextTick();
      });
    }
  };

  _proto.initShortcuts = function initShortcuts() {
    var _this4 = this;

    key__WEBPACK_IMPORTED_MODULE_12___default()('enter', Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, function () {
      if (_this4.message() && _this4.useAutoSelect()) {
        Common_Events__WEBPACK_IMPORTED_MODULE_21__[/* pub */ "a"]('mailbox.message-view.toggle-full-screen');
        return false;
      }

      return true;
    });

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].MessageListActions)) {
      // archive (zip)
      key__WEBPACK_IMPORTED_MODULE_12___default()('z', [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageView], function () {
        _this4.archiveCommand();

        return false;
      }); // delete

      key__WEBPACK_IMPORTED_MODULE_12___default()('delete, shift+delete, shift+3', Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, function (event, handler) {
        if (event) {
          if (0 < Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListCheckedOrSelected().length) {
            if (handler && 'shift+delete' === handler.shortcut) {
              _this4.deleteWithoutMoveCommand();
            } else {
              _this4.deleteCommand();
            }
          }

          return false;
        }

        return true;
      });
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Reload)) {
      // check mail
      key__WEBPACK_IMPORTED_MODULE_12___default()('ctrl+r, command+r', [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].FolderList, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageView], function () {
        _this4.reloadCommand();

        return false;
      });
    } // check all


    key__WEBPACK_IMPORTED_MODULE_12___default()('ctrl+a, command+a', Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, function () {
      _this4.checkAll(!(_this4.checkAll() && !_this4.isIncompleteChecked()));

      return false;
    });

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Composer)) {
      // write/compose (open compose popup)
      key__WEBPACK_IMPORTED_MODULE_12___default()('w,c', [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageView], function () {
        Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 132));
        return false;
      });
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].MessageListActions)) {
      // important - star/flag messages
      key__WEBPACK_IMPORTED_MODULE_12___default()('i', [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageView], function () {
        _this4.flagMessagesFast();

        return false;
      });
    }

    key__WEBPACK_IMPORTED_MODULE_12___default()('t', [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList], function () {
      var message = _this4.selectorMessageSelected();

      if (!message) {
        message = _this4.selectorMessageFocused();
      }

      if (message && 0 < message.threadsLen()) {
        _this4.gotoThread(message);
      }

      return false;
    });

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].MessageListActions)) {
      // move
      key__WEBPACK_IMPORTED_MODULE_12___default()('m', Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, function () {
        if (_this4.newMoveToFolder()) {
          _this4.moveNewCommand();
        } else {
          _this4.moveDropdownTrigger(true);
        }

        return false;
      });
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].MessageListActions)) {
      // read
      key__WEBPACK_IMPORTED_MODULE_12___default()('q', [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageView], function () {
        _this4.seenMessagesFast(true);

        return false;
      }); // unread

      key__WEBPACK_IMPORTED_MODULE_12___default()('u', [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageView], function () {
        _this4.seenMessagesFast(false);

        return false;
      });
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Composer)) {
      key__WEBPACK_IMPORTED_MODULE_12___default()('shift+f', [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageView], function () {
        _this4.multyForwardCommand();

        return false;
      });
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].Search)) {
      // search input focus
      key__WEBPACK_IMPORTED_MODULE_12___default()('/', [Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageView], function () {
        _this4.inputMessageListSearchFocus(true);

        return false;
      });
    } // cancel search


    key__WEBPACK_IMPORTED_MODULE_12___default()('esc', Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, function () {
      if ('' !== _this4.messageListSearchDesc()) {
        _this4.cancelSearch();

        return false;
      } else if ('' !== _this4.messageListEndThreadUid()) {
        _this4.cancelThreadUid();

        return false;
      }

      return true;
    }); // change focused state

    key__WEBPACK_IMPORTED_MODULE_12___default()('tab, shift+tab, left, right', Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageList, function (event, handler) {
      if (event && handler && ('shift+tab' === handler.shortcut || 'left' === handler.shortcut)) {
        Stores_User_App__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Focused"].FolderList);
      } else if (_this4.message()) {
        Stores_User_App__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Focused"].MessageView);
      }

      return false;
    });
    key__WEBPACK_IMPORTED_MODULE_12___default()('ctrl+left, command+left', Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageView, Common_Utils__WEBPACK_IMPORTED_MODULE_18__["noopFalse"]);
    key__WEBPACK_IMPORTED_MODULE_12___default()('ctrl+right, command+right', Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].MessageView, Common_Utils__WEBPACK_IMPORTED_MODULE_18__["noopFalse"]);
  };

  _proto.prefetchNextTick = function prefetchNextTick() {
    var _this5 = this;

    if (ifvisible__WEBPACK_IMPORTED_MODULE_14___default.a && !this.bPrefetch && !ifvisible__WEBPACK_IMPORTED_MODULE_14___default.a.now() && this.viewModelVisibility()) {
      var message = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, this.messageList(), function (item) {
        return item && !Object(Common_Cache__WEBPACK_IMPORTED_MODULE_23__[/* hasRequestedMessage */ "m"])(item.folderFullNameRaw, item.uid);
      });

      if (message) {
        this.bPrefetch = true;
        Object(Common_Cache__WEBPACK_IMPORTED_MODULE_23__[/* addRequestedMessage */ "b"])(message.folderFullNameRaw, message.uid);
        Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_30__[/* default */ "a"].message(function (result, data) {
          var next = !!(Common_Enums__WEBPACK_IMPORTED_MODULE_15__["StorageResultType"].Success === result && data && data.Result);

          ___WEBPACK_IMPORTED_MODULE_9___default.a.delay(function () {
            _this5.bPrefetch = false;

            if (next) {
              _this5.prefetchNextTick();
            }
          }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time1s);
        }, message.folderFullNameRaw, message.uid);
      }
    }
  };

  _proto.advancedSearchClick = function advancedSearchClick() {
    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Capa"].SearchAdv)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_32__["showScreenPopup"])(__webpack_require__(/*! View/Popup/AdvancedSearch */ 555), [this.mainMessageListSearch()]);
    }
  };

  _proto.quotaTooltip = function quotaTooltip() {
    return Object(Common_Translator__WEBPACK_IMPORTED_MODULE_22__["i18n"])('MESSAGE_LIST/QUOTA_SIZE', {
      'SIZE': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_18__["friendlySize"])(this.userUsageSize()),
      'PROC': this.userUsageProc(),
      'LIMIT': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_18__["friendlySize"])(this.userQuota())
    });
  };

  _proto.initUploaderForAppend = function initUploaderForAppend() {
    var _this6 = this;

    if (!Storage_Settings__WEBPACK_IMPORTED_MODULE_29__["appSettingsGet"]('allowAppendMessage') || !this.dragOverArea()) {
      return false;
    }

    var oJua = new Jua__WEBPACK_IMPORTED_MODULE_13___default.a({
      action: Object(Common_Links__WEBPACK_IMPORTED_MODULE_19__[/* append */ "b"])(),
      name: 'AppendFile',
      queueSize: 1,
      multipleSizeLimit: 1,
      hidden: {
        Folder: function Folder() {
          return Stores_User_Folder__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].currentFolderFullNameRaw();
        }
      },
      dragAndDropElement: this.dragOverArea(),
      dragAndDropBodyElement: this.dragOverBodyArea()
    });
    this.dragOver.subscribe(function (value) {
      if (value) {
        _this6.selector.scrollToTop();
      }
    });
    oJua.on('onDragEnter', function () {
      _this6.dragOverEnter(true);
    }).on('onDragLeave', function () {
      _this6.dragOverEnter(false);
    }).on('onBodyDragEnter', function () {
      _this6.dragOver(true);
    }).on('onBodyDragLeave', function () {
      _this6.dragOver(false);
    }).on('onSelect', function (sUid, oData) {
      if (sUid && oData && 'message/rfc822' === oData.Type) {
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messageListLoading(true);
        return true;
      }

      return false;
    }).on('onComplete', function () {
      Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_31__[/* getApp */ "a"])().reloadMessageList(true, true);
    });
    return !!oJua;
  };

  return MessageListMailBoxUserView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_33__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "clearCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7___default()(_class2.prototype, "clearCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "reloadCommand", [_dec3], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7___default()(_class2.prototype, "reloadCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "multyForwardCommand", [_dec4], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7___default()(_class2.prototype, "multyForwardCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "deleteWithoutMoveCommand", [_dec5], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7___default()(_class2.prototype, "deleteWithoutMoveCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "deleteCommand", [_dec6], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7___default()(_class2.prototype, "deleteCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "archiveCommand", [_dec7], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7___default()(_class2.prototype, "archiveCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "spamCommand", [_dec8], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7___default()(_class2.prototype, "spamCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "notSpamCommand", [_dec9], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7___default()(_class2.prototype, "notSpamCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "moveCommand", [_dec10], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7___default()(_class2.prototype, "moveCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "moveNewCommand", [_dec11], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_7___default()(_class2.prototype, "moveNewCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 453 */
/*!**********************************************!*\
  !*** ./dev/View/User/MailBox/MessageView.js ***!
  \**********************************************/
/*! exports provided: MessageViewMailBoxUserView, default */
/*! exports used: MessageViewMailBoxUserView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MessageViewMailBoxUserView; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Audio__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Common/Audio */ 83);
/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Common/Events */ 23);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Stores_Social__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Stores/Social */ 26);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Stores/User/Settings */ 35);
/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Stores/User/Account */ 46);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Stores/User/Message */ 13);
/* harmony import */ var Storage_Client__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Storage/Client */ 60);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! Promises/User/Ajax */ 93);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);




var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _class, _class2;































var MessageViewMailBoxUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["view"])({
  name: 'View/User/MailBox/MessageView',
  type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["ViewType"].Right,
  templateID: 'MailMessageView'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["command"])(), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["command"])(function (self) {
  return self.messageVisibility();
}), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["command"])(function (self) {
  return self.messageVisibility();
}), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["command"])(function (self) {
  return !self.messageListAndMessageViewLoading();
}), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["command"])(function (self) {
  return !self.messageListAndMessageViewLoading();
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(MessageViewMailBoxUserView, _AbstractViewNext);

  function MessageViewMailBoxUserView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    var lastEmail = '';

    var createCommandReplyHelper = function createCommandReplyHelper(type) {
      return Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["createCommand"])(function () {
        _this.lastReplyAction(type);

        _this.replyOrforward(type);
      }, _this.canBeRepliedOrForwarded);
    };

    var createCommandActionHelper = function createCommandActionHelper(folderType, useFolder) {
      return Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["createCommand"])(function () {
        var message = _this.message();

        if (message && _this.allowMessageListActions) {
          _this.message(null);

          Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__[/* getApp */ "a"])().deleteMessagesFromFolder(folderType, message.folderFullNameRaw, [message.uid], useFolder);
        }
      }, _this.messageVisibility);
    };

    _this.oDom = null;
    _this.oHeaderDom = null;
    _this.oMessageScrollerDom = null;
    _this.bodyBackgroundColor = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.pswp = null;
    _this.moveAction = Common_Globals__WEBPACK_IMPORTED_MODULE_13__["moveAction"];
    _this.allowComposer = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_27__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Capa"].Composer);
    _this.allowMessageActions = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_27__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Capa"].MessageActions);
    _this.allowMessageListActions = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_27__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Capa"].MessageListActions);
    _this.logoImg = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["trim"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_27__["settingsGet"]('UserLogoMessage'));
    _this.logoIframe = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["trim"])(Storage_Settings__WEBPACK_IMPORTED_MODULE_27__["settingsGet"]('UserIframeMessage'));
    _this.mobile = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_27__["appSettingsGet"]('mobile');
    _this.attachmentsActions = Stores_User_App__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].attachmentsActions;
    _this.message = Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message;
    _this.messageListChecked = Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].messageListChecked;
    _this.hasCheckedMessages = Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].hasCheckedMessages;
    _this.messageListCheckedOrSelectedUidsWithSubMails = Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].messageListCheckedOrSelectedUidsWithSubMails;
    _this.messageLoadingThrottle = Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].messageLoadingThrottle;
    _this.messagesBodiesDom = Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].messagesBodiesDom;
    _this.useThreads = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_22__[/* default */ "a"].useThreads;
    _this.replySameFolder = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_22__[/* default */ "a"].replySameFolder;
    _this.layout = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_22__[/* default */ "a"].layout;
    _this.usePreviewPane = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_22__[/* default */ "a"].usePreviewPane;
    _this.isMessageSelected = Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].isMessageSelected;
    _this.messageActiveDom = Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].messageActiveDom;
    _this.messageError = Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].messageError;
    _this.fullScreenMode = Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].messageFullScreenMode;
    _this.messageListOfThreadsLoading = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false).extend({
      rateLimit: 1
    });
    _this.highlightUnselectedAttachments = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false).extend({
      falseTimeout: 2000
    });
    _this.showAttachmnetControls = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false);

    _this.showAttachmnetControlsState = function (v) {
      Storage_Client__WEBPACK_IMPORTED_MODULE_26__[/* set */ "b"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ClientSideKeyName"].MessageAttachmnetControls, !!v);
    };

    _this.allowAttachmnetControls = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].computed(function () {
      return 0 < _this.attachmentsActions().length && Storage_Settings__WEBPACK_IMPORTED_MODULE_27__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Capa"].AttachmentsActions);
    });
    _this.downloadAsZipAllowed = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].computed(function () {
      return -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["inArray"])('zip', _this.attachmentsActions()) && _this.allowAttachmnetControls();
    });
    _this.downloadAsZipLoading = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false);
    _this.downloadAsZipError = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false).extend({
      falseTimeout: 7000
    });
    _this.saveToOwnCloudAllowed = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].computed(function () {
      return -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["inArray"])('owncloud', _this.attachmentsActions()) && _this.allowAttachmnetControls();
    });
    _this.saveToOwnCloudLoading = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false);
    _this.saveToOwnCloudSuccess = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false).extend({
      falseTimeout: 2000
    });
    _this.saveToOwnCloudError = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false).extend({
      falseTimeout: 7000
    });

    _this.saveToOwnCloudSuccess.subscribe(function (v) {
      if (v) {
        _this.saveToOwnCloudError(false);
      }
    });

    _this.saveToOwnCloudError.subscribe(function (v) {
      if (v) {
        _this.saveToOwnCloudSuccess(false);
      }
    });

    _this.saveToDropboxAllowed = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].computed(function () {
      return -1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["inArray"])('dropbox', _this.attachmentsActions()) && _this.allowAttachmnetControls();
    });
    _this.saveToDropboxLoading = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false);
    _this.saveToDropboxSuccess = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false).extend({
      falseTimeout: 2000
    });
    _this.saveToDropboxError = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false).extend({
      falseTimeout: 7000
    });

    _this.saveToDropboxSuccess.subscribe(function (v) {
      if (v) {
        _this.saveToDropboxError(false);
      }
    });

    _this.saveToDropboxError.subscribe(function (v) {
      if (v) {
        _this.saveToDropboxSuccess(false);
      }
    });

    _this.showAttachmnetControls.subscribe(function (v) {
      if (_this.message()) {
        ___WEBPACK_IMPORTED_MODULE_7___default.a.each(_this.message().attachments(), function (item) {
          if (item) {
            item.checked(!!v);
          }
        });
      }
    });

    _this.lastReplyAction_ = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.lastReplyAction = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].computed({
      read: _this.lastReplyAction_,
      write: function write(value) {
        _this.lastReplyAction_(-1 === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["inArray"])(value, [Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ComposeType"].Reply, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ComposeType"].ReplyAll, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ComposeType"].Forward]) ? Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ComposeType"].Reply : value);
      }
    });

    _this.lastReplyAction(Storage_Client__WEBPACK_IMPORTED_MODULE_26__[/* get */ "a"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ClientSideKeyName"].LastReplyAction) || Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ComposeType"].Reply);

    _this.lastReplyAction_.subscribe(function (value) {
      Storage_Client__WEBPACK_IMPORTED_MODULE_26__[/* set */ "b"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ClientSideKeyName"].LastReplyAction, value);
    });

    _this.showFullInfo = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('1' === Storage_Client__WEBPACK_IMPORTED_MODULE_26__[/* get */ "a"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ClientSideKeyName"].MessageHeaderFullInfo));
    _this.moreDropdownTrigger = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false);
    _this.messageDomFocused = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false).extend({
      rateLimit: 0
    });
    _this.messageVisibility = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].computed(function () {
      return !_this.messageLoadingThrottle() && !!_this.message();
    });

    _this.message.subscribe(function (message) {
      if (!message) {
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].selectorMessageSelected(null);
      }
    });

    _this.canBeRepliedOrForwarded = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].computed(function () {
      var v = _this.messageVisibility();

      return !_this.isDraftFolder() && v;
    }); // commands

    _this.replyCommand = createCommandReplyHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ComposeType"].Reply);
    _this.replyAllCommand = createCommandReplyHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ComposeType"].ReplyAll);
    _this.forwardCommand = createCommandReplyHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ComposeType"].Forward);
    _this.forwardAsAttachmentCommand = createCommandReplyHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ComposeType"].ForwardAsAttachment);
    _this.editAsNewCommand = createCommandReplyHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ComposeType"].EditAsNew);
    _this.deleteCommand = createCommandActionHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["FolderType"].Trash, true);
    _this.deleteWithoutMoveCommand = createCommandActionHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["FolderType"].Trash, false);
    _this.archiveCommand = createCommandActionHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["FolderType"].Archive, true);
    _this.spamCommand = createCommandActionHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["FolderType"].Spam, true);
    _this.notSpamCommand = createCommandActionHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["FolderType"].NotSpam, true);
    _this.dropboxEnabled = Stores_Social__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].dropbox.enabled;
    _this.dropboxApiKey = Stores_Social__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].dropbox.apiKey; // viewer

    _this.viewBodyTopValue = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(0);
    _this.viewFolder = '';
    _this.viewUid = '';
    _this.viewHash = '';
    _this.viewSubject = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewFromShort = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewFromDkimData = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(['none', '']);
    _this.viewToShort = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewFrom = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewTo = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewCc = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewBcc = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewReplyTo = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewTimeStamp = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(0);
    _this.viewSize = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewLineAsCss = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewViewLink = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewUnsubscribeLink = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewDownloadLink = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable('');
    _this.viewUserPic = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(Common_Consts__WEBPACK_IMPORTED_MODULE_11__[/* DATA_IMAGE_USER_DOT_PIC */ "f"]);
    _this.viewUserPicVisible = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false);
    _this.viewIsImportant = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false);
    _this.viewIsFlagged = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].observable(false);
    _this.viewFromDkimVisibility = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].computed(function () {
      return 'none' !== _this.viewFromDkimData()[0];
    });
    _this.viewFromDkimStatusIconClass = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].computed(function () {
      switch (_this.viewFromDkimData()[0]) {
        case 'none':
          return 'icon-none iconcolor-display-none';

        case 'pass':
          return 'icon-ok iconcolor-green';

        default:
          return 'icon-warning-alt iconcolor-red';
      }
    });
    _this.viewFromDkimStatusTitle = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].computed(function () {
      var status = _this.viewFromDkimData();

      if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNonEmptyArray"])(status)) {
        if (status[0] && status[1]) {
          return status[1];
        } else if (status[0]) {
          return 'DKIM: ' + status[0];
        }
      }

      return '';
    });

    _this.messageActiveDom.subscribe(function (dom) {
      _this.bodyBackgroundColor(dom ? _this.detectDomBackgroundColor(dom) : '');
    }, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));

    _this.message.subscribe(function (message) {
      _this.messageActiveDom(null);

      if (message) {
        _this.showAttachmnetControls(false);

        if (Storage_Client__WEBPACK_IMPORTED_MODULE_26__[/* get */ "a"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ClientSideKeyName"].MessageAttachmnetControls)) {
          ___WEBPACK_IMPORTED_MODULE_7___default.a.delay(function () {
            _this.showAttachmnetControls(true);
          }, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Time50ms);
        }

        if (_this.viewHash !== message.hash) {
          _this.scrollMessageToTop();
        }

        _this.viewFolder = message.folderFullNameRaw;
        _this.viewUid = message.uid;
        _this.viewHash = message.hash;

        _this.viewSubject(message.subject());

        _this.viewFromShort(message.fromToLine(true, true));

        _this.viewFromDkimData(message.fromDkimData());

        _this.viewToShort(message.toToLine(true, true));

        _this.viewFrom(message.fromToLine(false));

        _this.viewTo(message.toToLine(false));

        _this.viewCc(message.ccToLine(false));

        _this.viewBcc(message.bccToLine(false));

        _this.viewReplyTo(message.replyToToLine(false));

        _this.viewTimeStamp(message.dateTimeStampInUTC());

        _this.viewSize(message.friendlySize());

        _this.viewLineAsCss(message.lineAsCss());

        _this.viewViewLink(message.viewLink());

        _this.viewUnsubscribeLink(message.getFirstUnsubsribeLink());

        _this.viewDownloadLink(message.downloadLink());

        _this.viewIsImportant(message.isImportant());

        _this.viewIsFlagged(message.flagged());

        lastEmail = message.fromAsSingleEmail();
        Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* getUserPic */ "k"])(lastEmail, function (pic, email) {
          if (pic !== _this.viewUserPic() && lastEmail === email) {
            _this.viewUserPicVisible(false);

            _this.viewUserPic(Common_Consts__WEBPACK_IMPORTED_MODULE_11__[/* DATA_IMAGE_USER_DOT_PIC */ "f"]);

            if ('' !== pic) {
              _this.viewUserPicVisible(true);

              _this.viewUserPic(pic);
            }
          }
        });
      } else {
        _this.viewFolder = '';
        _this.viewUid = '';
        _this.viewHash = '';

        _this.scrollMessageToTop();
      }
    });

    _this.message.viewTrigger.subscribe(function () {
      var message = _this.message();

      if (message) {
        _this.viewIsFlagged(message.flagged());
      } else {
        _this.viewIsFlagged(false);
      }
    });

    _this.fullScreenMode.subscribe(function (value) {
      Common_Globals__WEBPACK_IMPORTED_MODULE_13__["$html"].toggleClass('rl-message-fullscreen', value);
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["windowResize"])();
    });

    _this.messageLoadingThrottle.subscribe(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["windowResizeCallback"]);

    _this.messageFocused = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].computed(function () {
      return Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Focused"].MessageView === Stores_User_App__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].focusedState();
    });
    _this.messageListAndMessageViewLoading = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].computed(function () {
      return Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].messageListCompleteLoadingThrottle() || Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].messageLoadingThrottle();
    });
    Common_Events__WEBPACK_IMPORTED_MODULE_16__[/* sub */ "b"]('mailbox.message-view.toggle-full-screen', function () {
      _this.toggleFullScreen();
    });
    _this.attachmentPreview = ___WEBPACK_IMPORTED_MODULE_7___default.a.bind(_this.attachmentPreview, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    return _this;
  }

  var _proto = MessageViewMailBoxUserView.prototype;

  _proto.closeMessageCommand = function closeMessageCommand() {
    Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message(null);
  };

  _proto.messageVisibilityCommand = function messageVisibilityCommand() {} // eslint-disable-line no-empty-function
  ;

  _proto.messageEditCommand = function messageEditCommand() {
    this.editMessage();
  };

  _proto.goUpCommand = function goUpCommand() {
    Common_Events__WEBPACK_IMPORTED_MODULE_16__[/* pub */ "a"]('mailbox.message-list.selector.go-up', [Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Layout"].NoPreview === this.layout() ? !!this.message() : true]);
  };

  _proto.goDownCommand = function goDownCommand() {
    Common_Events__WEBPACK_IMPORTED_MODULE_16__[/* pub */ "a"]('mailbox.message-list.selector.go-down', [Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Layout"].NoPreview === this.layout() ? !!this.message() : true]);
  };

  _proto.detectDomBackgroundColor = function detectDomBackgroundColor(dom) {
    var limit = 5,
        result = '';

    var fFindDom = function fFindDom(inputDom) {
      var children = inputDom ? inputDom.children() : null;
      return children && 1 === children.length && children.is('table,div,center') ? children : null;
    },
        fFindColor = function fFindColor(inputDom) {
      var color = '';

      if (inputDom) {
        color = inputDom.css('background-color') || '';

        if (!inputDom.is('table')) {
          color = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isTransparent"])(color) ? '' : color;
        }
      }

      return color;
    };

    if (dom && 1 === dom.length) {
      var aC = dom;

      while ('' === result) {
        limit -= 1;

        if (0 >= limit) {
          break;
        }

        aC = fFindDom(aC);

        if (aC) {
          result = fFindColor(aC);
        } else {
          break;
        }
      }

      result = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isTransparent"])(result) ? '' : result;
    }

    return result;
  };

  _proto.fullScreen = function fullScreen() {
    this.fullScreenMode(true);
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["windowResize"])();
  };

  _proto.unFullScreen = function unFullScreen() {
    this.fullScreenMode(false);
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["windowResize"])();
  };

  _proto.toggleFullScreen = function toggleFullScreen() {
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["removeSelection"])();
    this.fullScreenMode(!this.fullScreenMode());
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["windowResize"])();
  }
  /**
   * @param {string} sType
   * @returns {void}
   */
  ;

  _proto.replyOrforward = function replyOrforward(sType) {
    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_27__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Capa"].Composer)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 132), [sType, Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message()]);
    }
  };

  _proto.checkHeaderHeight = function checkHeaderHeight() {
    if (this.oHeaderDom) {
      this.viewBodyTopValue(this.message() ? this.oHeaderDom.height() + Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Size20px
      /* padding-(top/bottom): 20px */
      + Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Size1px
      /* borded-bottom: 1px */
      : 0);
    }
  } //  displayMailToPopup(sMailToUrl) {
  //		sMailToUrl = sMailToUrl.replace(/\?.+$/, '');
  //
  //		var
  //			sResult = '',
  //			aTo = [],
  //			EmailModel = require('Model/Email').default,
  //			fParseEmailLine = function(sLine) {
  //				return sLine ? _.compact(_.map([window.decodeURIComponent(sLine)], function(sItem) {
  //						var oEmailModel = new EmailModel();
  //						oEmailModel.parse(sItem);
  //						return '' !== oEmailModel.email ? oEmailModel : null;
  //					})) : null;
  //			}
  //		;
  //
  //		aTo = fParseEmailLine(sMailToUrl);
  //		sResult = aTo && aTo[0] ? aTo[0].email : '';
  //
  //		return sResult;
  //	}

  /**
   * @param {Object} oAttachment
   * @returns {boolean}
   */
  ;

  _proto.attachmentPreview = function attachmentPreview(attachment) {
    if (attachment && attachment.isImage() && !attachment.isLinked && this.message() && this.message().attachments()) {
      var index = 0,
          listIndex = 0;

      var div = $__WEBPACK_IMPORTED_MODULE_8___default()('<div>'),
          dynamicEls = ___WEBPACK_IMPORTED_MODULE_7___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, this.message().attachments(), function (item) {
        if (item && !item.isLinked && item.isImage()) {
          if (item === attachment) {
            index = listIndex;
          }

          listIndex += 1;
          return {
            src: item.linkPreview(),
            thumb: item.linkThumbnail(),
            subHtml: item.fileName,
            downloadUrl: item.linkPreview()
          };
        }

        return null;
      }));

      if (0 < dynamicEls.length) {
        div.on('onBeforeOpen.lg', function () {
          Object(Common_Globals__WEBPACK_IMPORTED_MODULE_13__["useKeyboardShortcuts"])(false);
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["removeInFocus"])(true);
        });
        div.on('onCloseAfter.lg', function () {
          Object(Common_Globals__WEBPACK_IMPORTED_MODULE_13__["useKeyboardShortcuts"])(true);
        });
        div.lightGallery({
          dynamic: true,
          loadYoutubeThumbnail: false,
          loadVimeoThumbnail: false,
          thumbWidth: 80,
          thumbContHeight: 95,
          showThumbByDefault: false,
          mode: 'lg-lollipop',
          // 'lg-slide',
          index: index,
          dynamicEl: dynamicEls
        });
      }

      return false;
    }

    return true;
  };

  _proto.onBuild = function onBuild(dom) {
    var _this2 = this;

    var self = this,
        fCheckHeaderHeight = ___WEBPACK_IMPORTED_MODULE_7___default.a.bind(this.checkHeaderHeight, this);

    this.oDom = dom;
    this.fullScreenMode.subscribe(function (value) {
      if (value && _this2.message()) {
        Stores_User_App__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Focused"].MessageView);
      }
    });
    this.showAttachmnetControls.subscribe(fCheckHeaderHeight);
    this.fullScreenMode.subscribe(fCheckHeaderHeight);
    this.showFullInfo.subscribe(fCheckHeaderHeight);
    this.message.subscribe(fCheckHeaderHeight);
    Common_Events__WEBPACK_IMPORTED_MODULE_16__[/* sub */ "b"]('window.resize', ___WEBPACK_IMPORTED_MODULE_7___default.a.throttle(function () {
      ___WEBPACK_IMPORTED_MODULE_7___default.a.delay(fCheckHeaderHeight, 1);

      ___WEBPACK_IMPORTED_MODULE_7___default.a.delay(fCheckHeaderHeight, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Time200ms);

      ___WEBPACK_IMPORTED_MODULE_7___default.a.delay(fCheckHeaderHeight, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Time500ms);
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Time50ms));
    this.showFullInfo.subscribe(function (value) {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["windowResize"])();
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["windowResize"])(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Time200ms);
      Storage_Client__WEBPACK_IMPORTED_MODULE_26__[/* set */ "b"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ClientSideKeyName"].MessageHeaderFullInfo, value ? '1' : '0');
    });
    Stores_Social__WEBPACK_IMPORTED_MODULE_20__[/* default */ "a"].appendDropbox();
    this.oHeaderDom = $__WEBPACK_IMPORTED_MODULE_8___default()('.messageItemHeader', dom);
    this.oHeaderDom = this.oHeaderDom[0] ? this.oHeaderDom : null;

    if (this.mobile) {
      dom.on('click', function () {
        Object(Common_Globals__WEBPACK_IMPORTED_MODULE_13__["leftPanelDisabled"])(true);
      });
    }

    dom.on('click', 'a', function (event) {
      // eslint-disable-line prefer-arrow-callback
      // setup maito protocol
      return !(!!event && Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].EventWhichMouseMiddle !== event.which && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["mailToHelper"])($__WEBPACK_IMPORTED_MODULE_8___default()(this).attr('href'), Storage_Settings__WEBPACK_IMPORTED_MODULE_27__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Capa"].Composer) ? __webpack_require__(/*! View/Popup/Compose */ 132) : null // eslint-disable-line no-invalid-this
      ));
    }).on('click', '.attachmentsPlace .attachmentIconParent', function (event) {
      if (event && event.stopPropagation) {
        event.stopPropagation();
      }
    }).on('click', '.attachmentsPlace .showPreplay', function (event) {
      // eslint-disable-line prefer-arrow-callback
      if (event && event.stopPropagation) {
        event.stopPropagation();
      }

      var attachment = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].dataFor(this); // eslint-disable-line no-invalid-this

      if (attachment && Common_Audio__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].supported) {
        switch (true) {
          case Common_Audio__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].supportedMp3 && attachment.isMp3():
            Common_Audio__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].playMp3(attachment.linkDownload(), attachment.fileName);
            break;

          case Common_Audio__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].supportedOgg && attachment.isOgg():
            Common_Audio__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].playOgg(attachment.linkDownload(), attachment.fileName);
            break;

          case Common_Audio__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].supportedWav && attachment.isWav():
            Common_Audio__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].playWav(attachment.linkDownload(), attachment.fileName);
            break;
          // no default
        }
      }
    }).on('click', '.attachmentsPlace .attachmentItem .attachmentNameParent', function () {
      // eslint-disable-line prefer-arrow-callback
      var attachment = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].dataFor(this); // eslint-disable-line no-invalid-this

      if (attachment && attachment.download) {
        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__[/* getApp */ "a"])().download(attachment.linkDownload());
      }
    }).on('click', '.messageItemHeader .subjectParent .flagParent', function () {
      // eslint-disable-line prefer-arrow-callback
      var message = self.message();

      if (message) {
        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__[/* getApp */ "a"])().messageListAction(message.folderFullNameRaw, message.flagged() ? Common_Enums__WEBPACK_IMPORTED_MODULE_12__["MessageSetAction"].UnsetFlag : Common_Enums__WEBPACK_IMPORTED_MODULE_12__["MessageSetAction"].SetFlag, [message]);
      }
    }).on('click', '.thread-list .flagParent', function () {
      // eslint-disable-line prefer-arrow-callback
      var message = ko__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].dataFor(this); // eslint-disable-line no-invalid-this

      if (message && message.folder && message.uid) {
        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__[/* getApp */ "a"])().messageListAction(message.folder, message.flagged() ? Common_Enums__WEBPACK_IMPORTED_MODULE_12__["MessageSetAction"].UnsetFlag : Common_Enums__WEBPACK_IMPORTED_MODULE_12__["MessageSetAction"].SetFlag, [message]);
      }

      self.threadsDropdownTrigger(true);
      return false;
    });
    Stores_User_App__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].focusedState.subscribe(function (value) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Focused"].MessageView !== value) {
        _this2.scrollMessageToTop();

        _this2.scrollMessageToLeft();
      }
    });
    Common_Globals__WEBPACK_IMPORTED_MODULE_13__["keyScopeReal"].subscribe(function (value) {
      _this2.messageDomFocused(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView === value && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["inFocus"])());
    });
    this.oMessageScrollerDom = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()(dom).call(dom, '.messageItem .content');
    this.oMessageScrollerDom = this.oMessageScrollerDom && this.oMessageScrollerDom[0] ? this.oMessageScrollerDom : null;
    this.initShortcuts();
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.escShortcuts = function escShortcuts() {
    if (this.viewModelVisibility() && this.message()) {
      if (this.fullScreenMode()) {
        this.fullScreenMode(false);

        if (Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Layout"].NoPreview !== this.layout()) {
          Stores_User_App__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Focused"].MessageList);
        }
      } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Layout"].NoPreview === this.layout()) {
        this.message(null);
      } else {
        Stores_User_App__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Focused"].MessageList);
      }

      return false;
    }

    return true;
  };

  _proto.initShortcuts = function initShortcuts() {
    var _this3 = this;

    // exit fullscreen, back
    key__WEBPACK_IMPORTED_MODULE_10___default()('esc, backspace', Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView, ___WEBPACK_IMPORTED_MODULE_7___default.a.bind(this.escShortcuts, this)); // fullscreen

    key__WEBPACK_IMPORTED_MODULE_10___default()('enter', Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView, function () {
      _this3.toggleFullScreen();

      return false;
    }); // reply

    key__WEBPACK_IMPORTED_MODULE_10___default()('r', [Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView], function () {
      if (Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message()) {
        _this3.replyCommand();

        return false;
      }

      return true;
    }); // replaAll

    key__WEBPACK_IMPORTED_MODULE_10___default()('a', [Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView], function () {
      if (Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message()) {
        _this3.replyAllCommand();

        return false;
      }

      return true;
    }); // forward

    key__WEBPACK_IMPORTED_MODULE_10___default()('f', [Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView], function () {
      if (Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message()) {
        _this3.forwardCommand();

        return false;
      }

      return true;
    }); // message information

    key__WEBPACK_IMPORTED_MODULE_10___default()('ctrl+i, command+i', [Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView], function () {
      if (Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message()) {
        _this3.showFullInfo(!_this3.showFullInfo());
      }

      return false;
    }); // toggle message blockquotes

    key__WEBPACK_IMPORTED_MODULE_10___default()('b', [Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView], function () {
      if (Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message() && Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message().body) {
        var _context;

        _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_4___default()(_context = Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message().body).call(_context, '.rlBlockquoteSwitcher').click();

        return false;
      }

      return true;
    });
    key__WEBPACK_IMPORTED_MODULE_10___default()('ctrl+up, command+up, ctrl+left, command+left', [Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView], function () {
      _this3.goUpCommand();

      return false;
    });
    key__WEBPACK_IMPORTED_MODULE_10___default()('ctrl+down, command+down, ctrl+right, command+right', [Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageList, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView], function () {
      _this3.goDownCommand();

      return false;
    }); // print

    key__WEBPACK_IMPORTED_MODULE_10___default()('ctrl+p, command+p', [Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageList], function () {
      if (_this3.message()) {
        _this3.message().printMessage();
      }

      return false;
    }); // delete

    key__WEBPACK_IMPORTED_MODULE_10___default()('delete, shift+delete', Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView, function (event, handler) {
      if (event) {
        if (handler && 'shift+delete' === handler.shortcut) {
          _this3.deleteWithoutMoveCommand();
        } else {
          _this3.deleteCommand();
        }

        return false;
      }

      return true;
    }); // change focused state

    key__WEBPACK_IMPORTED_MODULE_10___default()('tab, shift+tab, left', Common_Enums__WEBPACK_IMPORTED_MODULE_12__["KeyState"].MessageView, function (event, handler) {
      if (!_this3.fullScreenMode() && _this3.message() && Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Layout"].NoPreview !== _this3.layout()) {
        if (event && handler && 'left' === handler.shortcut) {
          if (_this3.oMessageScrollerDom && 0 < _this3.oMessageScrollerDom.scrollLeft()) {
            return true;
          }

          Stores_User_App__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Focused"].MessageList);
        } else {
          Stores_User_App__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].focusedState(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Focused"].MessageList);
        }
      } else if (_this3.message() && Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Layout"].NoPreview === _this3.layout() && event && handler && 'left' === handler.shortcut) {
        return true;
      }

      return false;
    });
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isDraftFolder = function isDraftFolder() {
    return Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message() && Stores_User_Folder__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].draftFolder() === Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message().folderFullNameRaw;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isSentFolder = function isSentFolder() {
    return Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message() && Stores_User_Folder__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].sentFolder() === Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message().folderFullNameRaw;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isSpamFolder = function isSpamFolder() {
    return Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message() && Stores_User_Folder__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].spamFolder() === Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message().folderFullNameRaw;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isSpamDisabled = function isSpamDisabled() {
    return Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message() && Stores_User_Folder__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].spamFolder() === Common_Consts__WEBPACK_IMPORTED_MODULE_11__[/* UNUSED_OPTION_VALUE */ "r"];
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isArchiveFolder = function isArchiveFolder() {
    return Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message() && Stores_User_Folder__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].archiveFolder() === Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message().folderFullNameRaw;
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isArchiveDisabled = function isArchiveDisabled() {
    return Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message() && Stores_User_Folder__WEBPACK_IMPORTED_MODULE_24__[/* default */ "a"].archiveFolder() === Common_Consts__WEBPACK_IMPORTED_MODULE_11__[/* UNUSED_OPTION_VALUE */ "r"];
  }
  /**
   * @returns {boolean}
   */
  ;

  _proto.isDraftOrSentFolder = function isDraftOrSentFolder() {
    return this.isDraftFolder() || this.isSentFolder();
  };

  _proto.composeClick = function composeClick() {
    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_27__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Capa"].Composer)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 132));
    }
  };

  _proto.editMessage = function editMessage() {
    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_27__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Capa"].Composer) && Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message()) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_31__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Compose */ 132), [Common_Enums__WEBPACK_IMPORTED_MODULE_12__["ComposeType"].Draft, Stores_User_Message__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"].message()]);
    }
  };

  _proto.scrollMessageToTop = function scrollMessageToTop() {
    if (this.oMessageScrollerDom) {
      if (Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Size50px < this.oMessageScrollerDom.scrollTop()) {
        this.oMessageScrollerDom.scrollTop(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Size50px).animate({
          'scrollTop': 0
        }, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Magics"].Time200ms);
      } else {
        this.oMessageScrollerDom.scrollTop(0);
      }

      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["windowResize"])();
    }
  };

  _proto.scrollMessageToLeft = function scrollMessageToLeft() {
    if (this.oMessageScrollerDom) {
      this.oMessageScrollerDom.scrollLeft(0);
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["windowResize"])();
    }
  };

  _proto.getAttachmentsHashes = function getAttachmentsHashes() {
    var atts = this.message() ? this.message().attachments() : [];
    return ___WEBPACK_IMPORTED_MODULE_7___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, atts, function (item) {
      return item && !item.isLinked && item.checked() ? item.download : '';
    }));
  };

  _proto.downloadAsZip = function downloadAsZip() {
    var _this4 = this;

    var hashes = this.getAttachmentsHashes();

    if (0 < hashes.length) {
      Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_29__[/* default */ "a"].attachmentsActions('Zip', hashes, this.downloadAsZipLoading).then(function (result) {
        if (result && result.Result && result.Result.Files && result.Result.Files[0] && result.Result.Files[0].Hash) {
          Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__[/* getApp */ "a"])().download(Object(Common_Links__WEBPACK_IMPORTED_MODULE_18__[/* attachmentDownload */ "c"])(result.Result.Files[0].Hash));
        } else {
          _this4.downloadAsZipError(true);
        }
      }).catch(function () {
        _this4.downloadAsZipError(true);
      });
    } else {
      this.highlightUnselectedAttachments(true);
    }
  };

  _proto.saveToOwnCloud = function saveToOwnCloud() {
    var _this5 = this;

    var hashes = this.getAttachmentsHashes();

    if (0 < hashes.length) {
      Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_29__[/* default */ "a"].attachmentsActions('OwnCloud', hashes, this.saveToOwnCloudLoading).then(function (result) {
        if (result && result.Result) {
          _this5.saveToOwnCloudSuccess(true);
        } else {
          _this5.saveToOwnCloudError(true);
        }
      }).catch(function () {
        _this5.saveToOwnCloudError(true);
      });
    } else {
      this.highlightUnselectedAttachments(true);
    }
  };

  _proto.saveToDropbox = function saveToDropbox() {
    var _this6 = this;

    var files = [],
        hashes = this.getAttachmentsHashes();

    if (0 < hashes.length) {
      if (window__WEBPACK_IMPORTED_MODULE_6___default.a.Dropbox) {
        Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_29__[/* default */ "a"].attachmentsActions('Dropbox', hashes, this.saveToDropboxLoading).then(function (result) {
          if (result && result.Result && result.Result.Url && result.Result.ShortLife && result.Result.Files) {
            if (window__WEBPACK_IMPORTED_MODULE_6___default.a.Dropbox && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isArray"])(result.Result.Files)) {
              ___WEBPACK_IMPORTED_MODULE_7___default.a.each(result.Result.Files, function (item) {
                files.push({
                  url: result.Result.Url + Object(Common_Links__WEBPACK_IMPORTED_MODULE_18__[/* attachmentDownload */ "c"])(item.Hash, result.Result.ShortLife),
                  filename: item.FileName
                });
              });

              window__WEBPACK_IMPORTED_MODULE_6___default.a.Dropbox.save({
                files: files,
                progress: function progress() {
                  _this6.saveToDropboxLoading(true);

                  _this6.saveToDropboxError(false);

                  _this6.saveToDropboxSuccess(false);
                },
                cancel: function cancel() {
                  _this6.saveToDropboxSuccess(false);

                  _this6.saveToDropboxError(false);

                  _this6.saveToDropboxLoading(false);
                },
                success: function success() {
                  _this6.saveToDropboxSuccess(true);

                  _this6.saveToDropboxLoading(false);
                },
                error: function error() {
                  _this6.saveToDropboxError(true);

                  _this6.saveToDropboxLoading(false);
                }
              });
            } else {
              _this6.saveToDropboxError(true);
            }
          }
        }).catch(function () {
          _this6.saveToDropboxError(true);
        });
      }
    } else {
      this.highlightUnselectedAttachments(true);
    }
  }
  /**
   * @param {MessageModel} oMessage
   * @returns {void}
   */
  ;

  _proto.showImages = function showImages(message) {
    if (message && message.showExternalImages) {
      message.showExternalImages(true);
    }

    this.checkHeaderHeight();
  }
  /**
   * @returns {string}
   */
  ;

  _proto.printableCheckedMessageCount = function printableCheckedMessageCount() {
    var cnt = this.messageListCheckedOrSelectedUidsWithSubMails().length;
    return 0 < cnt ? 100 > cnt ? cnt : '99+' : ''; // eslint-disable-line no-magic-numbers
  }
  /**
   * @param {MessageModel} oMessage
   * @returns {void}
   */
  ;

  _proto.readReceipt = function readReceipt(oMessage) {
    if (oMessage && '' !== oMessage.readReceipt()) {
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].sendReadReceiptMessage(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["noop"], oMessage.folderFullNameRaw, oMessage.uid, oMessage.readReceipt(), Object(Common_Translator__WEBPACK_IMPORTED_MODULE_17__["i18n"])('READ_RECEIPT/SUBJECT', {
        'SUBJECT': oMessage.subject()
      }), Object(Common_Translator__WEBPACK_IMPORTED_MODULE_17__["i18n"])('READ_RECEIPT/BODY', {
        'READ-RECEIPT': Stores_User_Account__WEBPACK_IMPORTED_MODULE_23__[/* default */ "a"].email()
      }));
      oMessage.isReadReceipt(true);
      Object(Common_Cache__WEBPACK_IMPORTED_MODULE_19__[/* storeMessageFlagsToCache */ "u"])(oMessage);
      Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__[/* getApp */ "a"])().reloadFlagsCurrentMessageListAndMessageFromCache();
    }

    this.checkHeaderHeight();
  };

  return MessageViewMailBoxUserView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_32__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "closeMessageCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default()(_class2.prototype, "closeMessageCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "messageVisibilityCommand", [_dec3], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default()(_class2.prototype, "messageVisibilityCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "messageEditCommand", [_dec4], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default()(_class2.prototype, "messageEditCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "goUpCommand", [_dec5], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default()(_class2.prototype, "goUpCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "goDownCommand", [_dec6], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_5___default()(_class2.prototype, "goDownCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 454 */
/*!*************************************!*\
  !*** ./dev/Screen/User/Settings.js ***!
  \*************************************/
/*! exports provided: SettingsUserScreen, default */
/*! exports used: SettingsUserScreen */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SettingsUserScreen; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Plugins */ 36);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/User/Account */ 46);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Screen_AbstractSettings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Screen/AbstractSettings */ 304);
/* harmony import */ var Settings_User_General__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Settings/User/General */ 455);
/* harmony import */ var Settings_User_Contacts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Settings/User/Contacts */ 456);
/* harmony import */ var Settings_User_Accounts__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Settings/User/Accounts */ 457);
/* harmony import */ var Settings_User_Filters__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Settings/User/Filters */ 458);
/* harmony import */ var Settings_User_Security__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Settings/User/Security */ 459);
/* harmony import */ var Settings_User_Social__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Settings/User/Social */ 460);
/* harmony import */ var Settings_User_ChangePassword__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Settings/User/ChangePassword */ 461);
/* harmony import */ var Settings_User_Templates__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Settings/User/Templates */ 462);
/* harmony import */ var Settings_User_Folders__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Settings/User/Folders */ 463);
/* harmony import */ var Settings_User_Themes__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Settings/User/Themes */ 464);
/* harmony import */ var Settings_User_OpenPgp__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Settings/User/OpenPgp */ 465);
/* harmony import */ var View_User_Settings_SystemDropDown__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! View/User/Settings/SystemDropDown */ 466);
/* harmony import */ var View_User_Settings_Menu__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! View/User/Settings/Menu */ 467);
/* harmony import */ var View_User_Settings_Pane__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! View/User/Settings/Pane */ 468);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Helper/Apps/User */ 22);


























var SettingsUserScreen = /*#__PURE__*/function (_AbstractSettingsScre) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(SettingsUserScreen, _AbstractSettingsScre);

  function SettingsUserScreen() {
    var _this;

    _this = _AbstractSettingsScre.call(this, [View_User_Settings_SystemDropDown__WEBPACK_IMPORTED_MODULE_21__[/* SystemDropDownSettingsUserView */ "a"], View_User_Settings_Menu__WEBPACK_IMPORTED_MODULE_22__[/* MenuSettingsUserView */ "a"], View_User_Settings_Pane__WEBPACK_IMPORTED_MODULE_23__[/* PaneSettingsUserView */ "a"]]) || this;
    Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["initOnStartOrLangChange"])(function () {
      _this.sSettingsTitle = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TITLES/SETTINGS');
    }, function () {
      _this.setSettingsTitle();
    });
    return _this;
  }
  /**
   * @param {Function=} fCallback
   */


  var _proto = SettingsUserScreen.prototype;

  _proto.setupSettings = function setupSettings(fCallback) {
    if (fCallback === void 0) {
      fCallback = null;
    }

    if (!Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].Settings)) {
      if (fCallback) {
        fCallback();
      }

      return false;
    }

    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["addSettingsViewModel"])(Settings_User_General__WEBPACK_IMPORTED_MODULE_10__[/* GeneralUserSettings */ "a"], 'SettingsGeneral', 'SETTINGS_LABELS/LABEL_GENERAL_NAME', 'general', true);

    if (Stores_User_App__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].contactsIsAllowed()) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["addSettingsViewModel"])(Settings_User_Contacts__WEBPACK_IMPORTED_MODULE_11__[/* ContactsUserSettings */ "a"], 'SettingsContacts', 'SETTINGS_LABELS/LABEL_CONTACTS_NAME', 'contacts');
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].AdditionalAccounts) || Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].Identities)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["addSettingsViewModel"])(Settings_User_Accounts__WEBPACK_IMPORTED_MODULE_12__[/* AccountsUserSettings */ "a"], 'SettingsAccounts', Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].AdditionalAccounts) ? 'SETTINGS_LABELS/LABEL_ACCOUNTS_NAME' : 'SETTINGS_LABELS/LABEL_IDENTITIES_NAME', 'accounts');
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].Sieve)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["addSettingsViewModel"])(Settings_User_Filters__WEBPACK_IMPORTED_MODULE_13__[/* FiltersUserSettings */ "a"], 'SettingsFilters', 'SETTINGS_LABELS/LABEL_FILTERS_NAME', 'filters');
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].AutoLogout) || Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].TwoFactor)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["addSettingsViewModel"])(Settings_User_Security__WEBPACK_IMPORTED_MODULE_14__[/* SecurityUserSettings */ "a"], 'SettingsSecurity', 'SETTINGS_LABELS/LABEL_SECURITY_NAME', 'security');
    }

    if (Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].isRootAccount() && (Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"]('AllowGoogleSocial') && Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"]('AllowGoogleSocialAuth') || Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"]('AllowFacebookSocial') || Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"]('AllowTwitterSocial'))) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["addSettingsViewModel"])(Settings_User_Social__WEBPACK_IMPORTED_MODULE_15__[/* SocialUserSettings */ "a"], 'SettingsSocial', 'SETTINGS_LABELS/LABEL_SOCIAL_NAME', 'social');
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"]('ChangePasswordIsAllowed')) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["addSettingsViewModel"])(Settings_User_ChangePassword__WEBPACK_IMPORTED_MODULE_16__[/* ChangePasswordUserSettings */ "a"], 'SettingsChangePassword', 'SETTINGS_LABELS/LABEL_CHANGE_PASSWORD_NAME', 'change-password');
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].Templates)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["addSettingsViewModel"])(Settings_User_Templates__WEBPACK_IMPORTED_MODULE_17__[/* TemplatesUserSettings */ "a"], 'SettingsTemplates', 'SETTINGS_LABELS/LABEL_TEMPLATES_NAME', 'templates');
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].Folders)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["addSettingsViewModel"])(Settings_User_Folders__WEBPACK_IMPORTED_MODULE_18__[/* FoldersUserSettings */ "a"], 'SettingsFolders', 'SETTINGS_LABELS/LABEL_FOLDERS_NAME', 'folders');
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].Themes)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["addSettingsViewModel"])(Settings_User_Themes__WEBPACK_IMPORTED_MODULE_19__[/* ThemesUserSettings */ "a"], 'SettingsThemes', 'SETTINGS_LABELS/LABEL_THEMES_NAME', 'themes');
    }

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["capa"](Common_Enums__WEBPACK_IMPORTED_MODULE_1__["Capa"].OpenPGP)) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["addSettingsViewModel"])(Settings_User_OpenPgp__WEBPACK_IMPORTED_MODULE_20__[/* OpenPgpUserSettings */ "a"], 'SettingsOpenPGP', 'SETTINGS_LABELS/LABEL_OPEN_PGP_NAME', 'openpgp');
    }

    Object(Common_Plugins__WEBPACK_IMPORTED_MODULE_3__[/* runSettingsViewModelHooks */ "g"])(false);

    if (fCallback) {
      fCallback();
    }

    return true;
  };

  _proto.onShow = function onShow() {
    this.setSettingsTitle();
    Object(Common_Globals__WEBPACK_IMPORTED_MODULE_2__["keyScope"])(Common_Enums__WEBPACK_IMPORTED_MODULE_1__["KeyState"].Settings);
    Object(Common_Globals__WEBPACK_IMPORTED_MODULE_2__["leftPanelType"])('');

    if (Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["appSettingsGet"]('mobile')) {
      Object(Common_Globals__WEBPACK_IMPORTED_MODULE_2__["leftPanelDisabled"])(true);
    }
  };

  _proto.setSettingsTitle = function setSettingsTitle() {
    var sEmail = Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].email();
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_24__[/* getApp */ "a"])().setWindowTitle(('' === sEmail ? '' : sEmail + ' - ') + this.sSettingsTitle);
  };

  return SettingsUserScreen;
}(Screen_AbstractSettings__WEBPACK_IMPORTED_MODULE_9__[/* AbstractSettingsScreen */ "a"]);



/***/ }),
/* 455 */
/*!**************************************!*\
  !*** ./dev/Settings/User/General.js ***!
  \**************************************/
/*! exports provided: GeneralUserSettings, default */
/*! exports used: GeneralUserSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return GeneralUserSettings; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Consts */ 24);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_Language__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/Language */ 72);
/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/User/Settings */ 35);
/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/User/Identity */ 102);
/* harmony import */ var Stores_User_Notification__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Stores/User/Notification */ 124);
/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Stores/User/Message */ 13);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Remote/User/Ajax */ 16);

















var GeneralUserSettings = /*#__PURE__*/function () {
  function GeneralUserSettings() {
    var _this = this;

    this.language = Stores_Language__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].language;
    this.languages = Stores_Language__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].languages;
    this.messagesPerPage = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].messagesPerPage;
    this.messagesPerPageArray = Common_Consts__WEBPACK_IMPORTED_MODULE_3__[/* MESSAGES_PER_PAGE_VALUES */ "j"];
    this.editorDefaultType = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].editorDefaultType;
    this.layout = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].layout;
    this.usePreviewPane = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].usePreviewPane;
    this.soundNotificationIsSupported = Stores_User_Notification__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].soundNotificationIsSupported;
    this.enableSoundNotification = Stores_User_Notification__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].enableSoundNotification;
    this.enableDesktopNotification = Stores_User_Notification__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].enableDesktopNotification;
    this.isDesktopNotificationSupported = Stores_User_Notification__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].isDesktopNotificationSupported;
    this.isDesktopNotificationDenied = Stores_User_Notification__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].isDesktopNotificationDenied;
    this.showImages = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].showImages;
    this.useCheckboxesInList = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].useCheckboxesInList;
    this.threadsAllowed = Stores_User_App__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].threadsAllowed;
    this.useThreads = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].useThreads;
    this.replySameFolder = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].replySameFolder;
    this.allowLanguagesOnSettings = Stores_User_App__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].allowLanguagesOnSettings;
    this.languageFullName = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["convertLangName"])(_this.language());
    });
    this.languageTrigger = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].Idle).extend({
      throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].Time100ms
    });
    this.mppTrigger = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].Idle);
    this.editorDefaultTypeTrigger = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].Idle);
    this.layoutTrigger = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].Idle);
    this.isAnimationSupported = Common_Globals__WEBPACK_IMPORTED_MODULE_4__["bAnimationSupported"];
    this.identities = Stores_User_Identity__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].identities;
    this.identityMain = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      var list = _this.identities();

      return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["isArray"])(list) ? _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_1___default.a).call(___WEBPACK_IMPORTED_MODULE_1___default.a, list, function (item) {
        return item && '' === item.id();
      }) : null;
    });
    this.identityMainDesc = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      var identity = _this.identityMain();

      return identity ? identity.formattedName() : '---';
    });
    this.editorDefaultTypes = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["trigger"])();
      return [{
        'id': Common_Enums__WEBPACK_IMPORTED_MODULE_5__["EditorDefaultType"].Html,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('SETTINGS_GENERAL/LABEL_EDITOR_HTML')
      }, {
        'id': Common_Enums__WEBPACK_IMPORTED_MODULE_5__["EditorDefaultType"].Plain,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('SETTINGS_GENERAL/LABEL_EDITOR_PLAIN')
      }, {
        'id': Common_Enums__WEBPACK_IMPORTED_MODULE_5__["EditorDefaultType"].HtmlForced,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('SETTINGS_GENERAL/LABEL_EDITOR_HTML_FORCED')
      }, {
        'id': Common_Enums__WEBPACK_IMPORTED_MODULE_5__["EditorDefaultType"].PlainForced,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('SETTINGS_GENERAL/LABEL_EDITOR_PLAIN_FORCED')
      }];
    });
    this.layoutTypes = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].computed(function () {
      Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["trigger"])();
      return [{
        'id': Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Layout"].NoPreview,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('SETTINGS_GENERAL/LABEL_LAYOUT_NO_SPLIT')
      }, {
        'id': Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Layout"].SidePreview,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('SETTINGS_GENERAL/LABEL_LAYOUT_VERTICAL_SPLIT')
      }, {
        'id': Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Layout"].BottomPreview,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('SETTINGS_GENERAL/LABEL_LAYOUT_HORIZONTAL_SPLIT')
      }];
    });
  }

  var _proto = GeneralUserSettings.prototype;

  _proto.editMainIdentity = function editMainIdentity() {
    var identity = this.identityMain();

    if (identity) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Identity */ 393), [identity]);
    }
  };

  _proto.testSoundNotification = function testSoundNotification() {
    Stores_User_Notification__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].playSoundNotification(true);
  };

  _proto.onBuild = function onBuild() {
    var _this2 = this;

    ___WEBPACK_IMPORTED_MODULE_1___default.a.delay(function () {
      var f0 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["settingsSaveHelperSimpleFunction"])(_this2.editorDefaultTypeTrigger, _this2),
          f1 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["settingsSaveHelperSimpleFunction"])(_this2.mppTrigger, _this2),
          f2 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["settingsSaveHelperSimpleFunction"])(_this2.layoutTrigger, _this2),
          fReloadLanguageHelper = function fReloadLanguageHelper(saveSettingsStep) {
        return function () {
          _this2.languageTrigger(saveSettingsStep);

          ___WEBPACK_IMPORTED_MODULE_1___default.a.delay(function () {
            return _this2.languageTrigger(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].Idle);
          }, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].Time1s);
        };
      };

      _this2.language.subscribe(function (value) {
        _this2.languageTrigger(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].Animate);

        Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["reload"])(false, value).then(fReloadLanguageHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].TrueResult), fReloadLanguageHelper(Common_Enums__WEBPACK_IMPORTED_MODULE_5__["SaveSettingsStep"].FalseResult)).then(function () {
          Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].saveSettings(null, {
            'Language': value
          });
        });
      });

      _this2.editorDefaultType.subscribe(Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].saveSettingsHelper('EditorDefaultType', null, f0));

      _this2.messagesPerPage.subscribe(Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].saveSettingsHelper('MPP', null, f1));

      _this2.showImages.subscribe(Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].saveSettingsHelper('ShowImages', Common_Utils__WEBPACK_IMPORTED_MODULE_6__["boolToAjax"]));

      _this2.useCheckboxesInList.subscribe(Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].saveSettingsHelper('UseCheckboxesInList', Common_Utils__WEBPACK_IMPORTED_MODULE_6__["boolToAjax"]));

      _this2.enableDesktopNotification.subscribe(function (value) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["timeOutAction"])('SaveDesktopNotifications', function () {
          Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].saveSettings(null, {
            'DesktopNotifications': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["boolToAjax"])(value)
          });
        }, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].Time3s);
      });

      _this2.enableSoundNotification.subscribe(function (value) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["timeOutAction"])('SaveSoundNotification', function () {
          Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].saveSettings(null, {
            'SoundNotification': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["boolToAjax"])(value)
          });
        }, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].Time3s);
      });

      _this2.replySameFolder.subscribe(function (value) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["timeOutAction"])('SaveReplySameFolder', function () {
          Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].saveSettings(null, {
            'ReplySameFolder': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["boolToAjax"])(value)
          });
        }, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].Time3s);
      });

      _this2.useThreads.subscribe(function (value) {
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].messageList([]);
        Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].saveSettings(null, {
          'UseThreads': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["boolToAjax"])(value)
        });
      });

      _this2.layout.subscribe(function (value) {
        Stores_User_Message__WEBPACK_IMPORTED_MODULE_14__[/* default */ "a"].messageList([]);
        Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_15__[/* default */ "a"].saveSettings(f2, {
          'Layout': value
        });
      });
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_5__["Magics"].Time50ms);
  };

  _proto.onShow = function onShow() {
    this.enableDesktopNotification.valueHasMutated();
  };

  _proto.selectLanguage = function selectLanguage() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Languages */ 291), [this.language, this.languages(), Stores_Language__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].userLanguage()]);
  };

  return GeneralUserSettings;
}();



/***/ }),
/* 456 */
/*!***************************************!*\
  !*** ./dev/Settings/User/Contacts.js ***!
  \***************************************/
/*! exports provided: ContactsUserSettings, default */
/*! exports used: ContactsUserSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ContactsUserSettings; });
/* unused harmony export default */
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Stores/User/App */ 27);
/* harmony import */ var Stores_User_Contact__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/User/Contact */ 103);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Remote/User/Ajax */ 16);








var ContactsUserSettings = /*#__PURE__*/function () {
  function ContactsUserSettings() {
    var _this = this;

    this.contactsAutosave = Stores_User_App__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].contactsAutosave;
    this.allowContactsSync = Stores_User_Contact__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].allowContactsSync;
    this.enableContactsSync = Stores_User_Contact__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].enableContactsSync;
    this.contactsSyncUrl = Stores_User_Contact__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].contactsSyncUrl;
    this.contactsSyncUser = Stores_User_Contact__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].contactsSyncUser;
    this.contactsSyncPass = Stores_User_Contact__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].contactsSyncPass;
    this.saveTrigger = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      return [_this.enableContactsSync() ? '1' : '0', _this.contactsSyncUrl(), _this.contactsSyncUser(), _this.contactsSyncPass()].join('|');
    }).extend({
      throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Magics"].Time500ms
    });
  }

  var _proto = ContactsUserSettings.prototype;

  _proto.onBuild = function onBuild() {
    var _this2 = this;

    this.contactsAutosave.subscribe(function (value) {
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].saveSettings(null, {
        'ContactsAutosave': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["boolToAjax"])(value)
      });
    });
    this.saveTrigger.subscribe(function () {
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].saveContactsSyncData(null, _this2.enableContactsSync(), _this2.contactsSyncUrl(), _this2.contactsSyncUser(), _this2.contactsSyncPass());
    });
  };

  return ContactsUserSettings;
}();



/***/ }),
/* 457 */
/*!***************************************!*\
  !*** ./dev/Settings/User/Accounts.js ***!
  \***************************************/
/*! exports provided: AccountsUserSettings, default */
/*! exports used: AccountsUserSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AccountsUserSettings; });
/* unused harmony export default */
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! window */ 4);
/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/User/Account */ 46);
/* harmony import */ var Stores_User_Identity__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Stores/User/Identity */ 102);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/Knoin */ 8);












var AccountsUserSettings = /*#__PURE__*/function () {
  function AccountsUserSettings() {
    this.allowAdditionalAccount = Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["capa"])(Common_Enums__WEBPACK_IMPORTED_MODULE_3__["Capa"].AdditionalAccounts);
    this.allowIdentities = Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["capa"])(Common_Enums__WEBPACK_IMPORTED_MODULE_3__["Capa"].Identities);
    this.accounts = Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].accounts;
    this.identities = Stores_User_Identity__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].identities;
    this.accountForDeletion = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(null).deleteAccessHelper();
    this.identityForDeletion = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(null).deleteAccessHelper();
  }

  var _proto = AccountsUserSettings.prototype;

  _proto.scrollableOptions = function scrollableOptions(wrapper) {
    return {
      handle: '.drag-handle',
      containment: wrapper || 'parent',
      axis: 'y'
    };
  };

  _proto.addNewAccount = function addNewAccount() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Account */ 392));
  };

  _proto.editAccount = function editAccount(account) {
    if (account && account.canBeEdit()) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Account */ 392), [account]);
    }
  };

  _proto.addNewIdentity = function addNewIdentity() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Identity */ 393));
  };

  _proto.editIdentity = function editIdentity(identity) {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Identity */ 393), [identity]);
  }
  /**
   * @param {AccountModel} accountToRemove
   * @returns {void}
   */
  ;

  _proto.deleteAccount = function deleteAccount(accountToRemove) {
    if (accountToRemove && accountToRemove.deleteAccess()) {
      this.accountForDeletion(null);

      if (accountToRemove) {
        this.accounts.remove(function (account) {
          return accountToRemove === account;
        });
        Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].accountDelete(function (result, data) {
          if (Common_Enums__WEBPACK_IMPORTED_MODULE_3__["StorageResultType"].Success === result && data && data.Result && data.Reload) {
            Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["routeOff"])();
            Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_4__[/* root */ "w"])(), true);
            Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["routeOff"])();

            ___WEBPACK_IMPORTED_MODULE_1___default.a.defer(function () {
              return window__WEBPACK_IMPORTED_MODULE_0___default.a.location.reload();
            });
          } else {
            Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_9__[/* getApp */ "a"])().accountsAndIdentities();
          }
        }, accountToRemove.email);
      }
    }
  }
  /**
   * @param {IdentityModel} identityToRemove
   * @returns {void}
   */
  ;

  _proto.deleteIdentity = function deleteIdentity(identityToRemove) {
    if (identityToRemove && identityToRemove.deleteAccess()) {
      this.identityForDeletion(null);

      if (identityToRemove) {
        Stores_User_Identity__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].identities.remove(function (oIdentity) {
          return identityToRemove === oIdentity;
        });
        Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].identityDelete(function () {
          Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_9__[/* getApp */ "a"])().accountsAndIdentities();
        }, identityToRemove.id);
      }
    }
  };

  _proto.accountsAndIdentitiesAfterMove = function accountsAndIdentitiesAfterMove() {
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].accountsAndIdentitiesSortOrder(null, Stores_User_Account__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].accountsEmails.peek(), Stores_User_Identity__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].identitiesIDS.peek());
  };

  _proto.onBuild = function onBuild(oDom) {
    var self = this;
    oDom.on('click', '.accounts-list .account-item .e-action', function () {
      // eslint-disable-line prefer-arrow-callback
      var account = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].dataFor(this); // eslint-disable-line no-invalid-this

      if (account) {
        self.editAccount(account);
      }
    }).on('click', '.identities-list .identity-item .e-action', function () {
      // eslint-disable-line prefer-arrow-callback
      var identity = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].dataFor(this); // eslint-disable-line no-invalid-this

      if (identity) {
        self.editIdentity(identity);
      }
    });
  };

  return AccountsUserSettings;
}();



/***/ }),
/* 458 */
/*!**************************************!*\
  !*** ./dev/Settings/User/Filters.js ***!
  \**************************************/
/*! exports provided: FiltersUserSettings, default */
/*! exports used: FiltersUserSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FiltersUserSettings; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Stores_User_Filter__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/User/Filter */ 232);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Model_Filter__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Model/Filter */ 407);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Knoin/Knoin */ 8);


var _dec, _class;













var FiltersUserSettings = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["command"])(function (self) {
  return self.haveChanges();
}), (_class = /*#__PURE__*/function () {
  function FiltersUserSettings() {
    var _this = this;

    this.modules = Stores_User_Filter__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].modules;
    this.filters = Stores_User_Filter__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].filters;
    this.inited = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    this.serverError = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    this.serverErrorDesc = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    this.haveChanges = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    this.saveErrorText = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    this.filters.subscribe(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["windowResizeCallback"]);
    this.serverError.subscribe(function (value) {
      if (!value) {
        _this.serverErrorDesc('');
      }
    }, this);
    this.filterRaw = Stores_User_Filter__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].raw;
    this.filterRaw.capa = Stores_User_Filter__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].capa;
    this.filterRaw.active = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    this.filterRaw.allow = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    this.filterRaw.error = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    this.filterForDeletion = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(null).deleteAccessHelper();
    this.filters.subscribe(function () {
      _this.haveChanges(true);
    });
    this.filterRaw.subscribe(function () {
      _this.haveChanges(true);

      _this.filterRaw.error(false);
    });
    this.haveChanges.subscribe(function () {
      _this.saveErrorText('');
    });
    this.filterRaw.active.subscribe(function () {
      _this.haveChanges(true);

      _this.filterRaw.error(false);
    });
  }

  var _proto = FiltersUserSettings.prototype;

  _proto.saveChangesCommand = function saveChangesCommand() {
    var _this2 = this;

    if (!this.filters.saving()) {
      if (this.filterRaw.active() && '' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["trim"])(this.filterRaw())) {
        this.filterRaw.error(true);
        return false;
      }

      this.filters.saving(true);
      this.saveErrorText('');
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].filtersSave(function (result, data) {
        _this2.filters.saving(false);

        if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["StorageResultType"].Success === result && data && data.Result) {
          _this2.haveChanges(false);

          _this2.updateList();
        } else if (data && data.ErrorCode) {
          _this2.saveErrorText(data.ErrorMessageAdditional || Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["getNotification"])(data.ErrorCode));
        } else {
          _this2.saveErrorText(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].CantSaveFilters));
        }
      }, this.filters(), this.filterRaw(), this.filterRaw.active());
    }

    return true;
  };

  _proto.scrollableOptions = function scrollableOptions(wrapper) {
    return {
      handle: '.drag-handle',
      containment: wrapper || 'parent',
      axis: 'y'
    };
  };

  _proto.updateList = function updateList() {
    var _this3 = this;

    if (!this.filters.loading()) {
      this.filters.loading(true);
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].filtersGet(function (result, data) {
        _this3.filters.loading(false);

        _this3.serverError(false);

        if (Common_Enums__WEBPACK_IMPORTED_MODULE_7__["StorageResultType"].Success === result && data && data.Result && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["isArray"])(data.Result.Filters)) {
          _this3.inited(true);

          _this3.serverError(false);

          _this3.filters(___WEBPACK_IMPORTED_MODULE_4___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_4___default.a).call(___WEBPACK_IMPORTED_MODULE_4___default.a, data.Result.Filters, function (aItem) {
            var filter = new Model_Filter__WEBPACK_IMPORTED_MODULE_11__[/* FilterModel */ "a"]();
            return filter && filter.parse(aItem) ? filter : null;
          })));

          _this3.modules(data.Result.Modules ? data.Result.Modules : {});

          _this3.filterRaw(data.Result.Raw || '');

          _this3.filterRaw.capa(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["isArray"])(data.Result.Capa) ? data.Result.Capa.join(' ') : '');

          _this3.filterRaw.active(!!data.Result.RawIsActive);

          _this3.filterRaw.allow(!!data.Result.RawIsAllow);
        } else {
          _this3.filters([]);

          _this3.modules({});

          _this3.filterRaw('');

          _this3.filterRaw.capa({});

          _this3.serverError(true);

          _this3.serverErrorDesc(data && data.ErrorCode ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["getNotification"])(data.ErrorCode) : Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_7__["Notification"].CantGetFilters));
        }

        _this3.haveChanges(false);
      });
    }
  };

  _proto.deleteFilter = function deleteFilter(filter) {
    this.filters.remove(filter);
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRunOnDestroy"])(filter);
  };

  _proto.addFilter = function addFilter() {
    var _this4 = this;

    var filter = new Model_Filter__WEBPACK_IMPORTED_MODULE_11__[/* FilterModel */ "a"]();
    filter.generateID();
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Filter */ 429), [filter, function () {
      _this4.filters.push(filter);

      _this4.filterRaw.active(false);
    }, false]);
  };

  _proto.editFilter = function editFilter(filter) {
    var _this5 = this;

    var clonedFilter = filter.cloneSelf();
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Filter */ 429), [clonedFilter, function () {
      var filters = _this5.filters(),
          index = filters.indexOf(filter);

      if (-1 < index && filters[index]) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRunOnDestroy"])(filters[index]);
        filters[index] = clonedFilter;

        _this5.filters(filters);

        _this5.haveChanges(true);
      }
    }, true]);
  };

  _proto.onBuild = function onBuild(oDom) {
    var self = this;
    oDom.on('click', '.filter-item .e-action', function () {
      // eslint-disable-line prefer-arrow-callback
      var filter = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].dataFor(this); // eslint-disable-line no-invalid-this

      if (filter) {
        self.editFilter(filter);
      }
    });
  };

  _proto.onShow = function onShow() {
    this.updateList();
  };

  return FiltersUserSettings;
}(), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_class.prototype, "saveChangesCommand", [_dec], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default()(_class.prototype, "saveChangesCommand"), _class.prototype)), _class));


/***/ }),
/* 459 */
/*!***************************************!*\
  !*** ./dev/Settings/User/Security.js ***!
  \***************************************/
/*! exports provided: SecurityUserSettings, default */
/*! exports used: SecurityUserSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SecurityUserSettings; });
/* unused harmony export default */
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Stores/User/Settings */ 35);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Remote/User/Ajax */ 16);










var SecurityUserSettings = /*#__PURE__*/function () {
  function SecurityUserSettings() {
    this.capaAutoLogout = Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["capa"])(Common_Enums__WEBPACK_IMPORTED_MODULE_3__["Capa"].AutoLogout);
    this.capaTwoFactor = Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_5__["capa"])(Common_Enums__WEBPACK_IMPORTED_MODULE_3__["Capa"].TwoFactor);
    this.autoLogout = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].autoLogout;
    this.autoLogout.trigger = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_3__["SaveSettingsStep"].Idle);
    this.autoLogoutOptions = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["trigger"])();
      return [{
        'id': 0,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('SETTINGS_SECURITY/AUTOLOGIN_NEVER_OPTION_NAME')
      }, {
        'id': 5,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('SETTINGS_SECURITY/AUTOLOGIN_MINUTES_OPTION_NAME', {
          'MINUTES': 5
        })
      }, {
        'id': 10,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('SETTINGS_SECURITY/AUTOLOGIN_MINUTES_OPTION_NAME', {
          'MINUTES': 10
        })
      }, {
        'id': 30,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('SETTINGS_SECURITY/AUTOLOGIN_MINUTES_OPTION_NAME', {
          'MINUTES': 30
        })
      }, {
        'id': 60,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('SETTINGS_SECURITY/AUTOLOGIN_MINUTES_OPTION_NAME', {
          'MINUTES': 60
        })
      }, {
        'id': 60 * 2,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('SETTINGS_SECURITY/AUTOLOGIN_HOURS_OPTION_NAME', {
          'HOURS': 2
        })
      }, {
        'id': 60 * 5,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('SETTINGS_SECURITY/AUTOLOGIN_HOURS_OPTION_NAME', {
          'HOURS': 5
        })
      }, {
        'id': 60 * 10,
        'name': Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('SETTINGS_SECURITY/AUTOLOGIN_HOURS_OPTION_NAME', {
          'HOURS': 10
        })
      }];
    });
  }

  var _proto = SecurityUserSettings.prototype;

  _proto.configureTwoFactor = function configureTwoFactor() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["showScreenPopup"])(__webpack_require__(/*! View/Popup/TwoFactorConfiguration */ 430));
  };

  _proto.onBuild = function onBuild() {
    var _this = this;

    if (this.capaAutoLogout) {
      ___WEBPACK_IMPORTED_MODULE_0___default.a.delay(function () {
        var f0 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["settingsSaveHelperSimpleFunction"])(_this.autoLogout.trigger, _this);

        _this.autoLogout.subscribe(Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].saveSettingsHelper('AutoLogout', Common_Utils__WEBPACK_IMPORTED_MODULE_2__["pInt"], f0));
      });
    }
  };

  return SecurityUserSettings;
}();



/***/ }),
/* 460 */
/*!*************************************!*\
  !*** ./dev/Settings/User/Social.js ***!
  \*************************************/
/*! exports provided: SocialUserSettings, default */
/*! exports used: SocialUserSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SocialUserSettings; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var Stores_Social__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Stores/Social */ 26);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Knoin/Knoin */ 8);


var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _class;





var SocialUserSettings = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["command"])(function (self) {
  return !self.googleLoggined() && !self.googleActions();
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["command"])(), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["command"])(function (self) {
  return !self.facebookLoggined() && !self.facebookActions();
}), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["command"])(), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["command"])(function (self) {
  return !self.twitterLoggined() && !self.twitterActions();
}), _dec6 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_4__["command"])(), (_class = /*#__PURE__*/function () {
  function SocialUserSettings() {
    this.googleEnable = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].google.enabled;
    this.googleEnableAuth = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].google.capa.auth;
    this.googleEnableAuthGmail = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].google.capa.authGmail;
    this.googleEnableDrive = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].google.capa.drive;
    this.googleEnablePreview = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].google.capa.preview;
    this.googleActions = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].google.loading;
    this.googleLoggined = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].google.loggined;
    this.googleUserName = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].google.userName;
    this.facebookEnable = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].facebook.enabled;
    this.facebookActions = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].facebook.loading;
    this.facebookLoggined = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].facebook.loggined;
    this.facebookUserName = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].facebook.userName;
    this.twitterEnable = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].twitter.enabled;
    this.twitterActions = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].twitter.loading;
    this.twitterLoggined = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].twitter.loggined;
    this.twitterUserName = Stores_Social__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].twitter.userName;
  }

  var _proto = SocialUserSettings.prototype;

  _proto.connectGoogleCommand = function connectGoogleCommand() {
    if (!this.googleLoggined()) {
      Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_3__[/* getApp */ "a"])().googleConnect();
    }
  };

  _proto.disconnectGoogleCommand = function disconnectGoogleCommand() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_3__[/* getApp */ "a"])().googleDisconnect();
  };

  _proto.connectFacebookCommand = function connectFacebookCommand() {
    if (!this.facebookLoggined()) {
      Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_3__[/* getApp */ "a"])().facebookConnect();
    }
  };

  _proto.disconnectFacebookCommand = function disconnectFacebookCommand() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_3__[/* getApp */ "a"])().facebookDisconnect();
  };

  _proto.connectTwitterCommand = function connectTwitterCommand() {
    if (!this.twitterLoggined()) {
      Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_3__[/* getApp */ "a"])().twitterConnect();
    }
  };

  _proto.disconnectTwitterCommand = function disconnectTwitterCommand() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_3__[/* getApp */ "a"])().twitterDisconnect();
  };

  return SocialUserSettings;
}(), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_class.prototype, "connectGoogleCommand", [_dec], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype, "connectGoogleCommand"), _class.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_class.prototype, "disconnectGoogleCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype, "disconnectGoogleCommand"), _class.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_class.prototype, "connectFacebookCommand", [_dec3], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype, "connectFacebookCommand"), _class.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_class.prototype, "disconnectFacebookCommand", [_dec4], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype, "disconnectFacebookCommand"), _class.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_class.prototype, "connectTwitterCommand", [_dec5], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype, "connectTwitterCommand"), _class.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_class.prototype, "disconnectTwitterCommand", [_dec6], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype, "disconnectTwitterCommand"), _class.prototype)), _class));


/***/ }),
/* 461 */
/*!*********************************************!*\
  !*** ./dev/Settings/User/ChangePassword.js ***!
  \*********************************************/
/*! exports provided: ChangePasswordUserSettings, default */
/*! exports used: ChangePasswordUserSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ChangePasswordUserSettings; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Knoin/Knoin */ 8);


var _dec, _class;









var ChangePasswordUserSettings = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_8__["command"])(function (self) {
  return !self.changeProcess() && '' !== self.currentPassword() && '' !== self.newPassword() && '' !== self.newPassword2();
}), (_class = /*#__PURE__*/function () {
  function ChangePasswordUserSettings() {
    var _this = this;

    this.changeProcess = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    this.errorDescription = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    this.passwordMismatch = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    this.passwordUpdateError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    this.passwordUpdateSuccess = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    this.currentPassword = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    this.currentPassword.error = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    this.newPassword = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    this.newPassword2 = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    this.currentPassword.subscribe(function () {
      _this.passwordUpdateError(false);

      _this.passwordUpdateSuccess(false);

      _this.currentPassword.error(false);
    });
    this.newPassword.subscribe(function () {
      _this.passwordUpdateError(false);

      _this.passwordUpdateSuccess(false);

      _this.passwordMismatch(false);
    });
    this.newPassword2.subscribe(function () {
      _this.passwordUpdateError(false);

      _this.passwordUpdateSuccess(false);

      _this.passwordMismatch(false);
    });
    this.onChangePasswordResponse = ___WEBPACK_IMPORTED_MODULE_2___default.a.bind(this.onChangePasswordResponse, this);
  }

  var _proto = ChangePasswordUserSettings.prototype;

  _proto.saveNewPasswordCommand = function saveNewPasswordCommand() {
    if (this.newPassword() !== this.newPassword2()) {
      this.passwordMismatch(true);
      this.errorDescription(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_5__["i18n"])('SETTINGS_CHANGE_PASSWORD/ERROR_PASSWORD_MISMATCH'));
    } else {
      this.changeProcess(true);
      this.passwordUpdateError(false);
      this.passwordUpdateSuccess(false);
      this.currentPassword.error(false);
      this.passwordMismatch(false);
      this.errorDescription('');
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].changePassword(this.onChangePasswordResponse, this.currentPassword(), this.newPassword());
    }
  };

  _proto.onHide = function onHide() {
    this.changeProcess(false);
    this.currentPassword('');
    this.newPassword('');
    this.newPassword2('');
    this.errorDescription('');
    this.passwordMismatch(false);
    this.currentPassword.error(false);
  };

  _proto.onChangePasswordResponse = function onChangePasswordResponse(result, data) {
    this.changeProcess(false);
    this.passwordMismatch(false);
    this.errorDescription('');
    this.currentPassword.error(false);

    if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === result && data && data.Result) {
      this.currentPassword('');
      this.newPassword('');
      this.newPassword2('');
      this.passwordUpdateSuccess(true);
      this.currentPassword.error(false);
      Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_7__[/* getApp */ "a"])().setClientSideToken(data.Result);
    } else {
      if (data && Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].CurrentPasswordIncorrect === data.ErrorCode) {
        this.currentPassword.error(true);
      }

      this.passwordUpdateError(true);
      this.errorDescription(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_5__["getNotificationFromResponse"])(data, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].CouldNotSaveNewPassword));
    }
  };

  return ChangePasswordUserSettings;
}(), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_class.prototype, "saveNewPasswordCommand", [_dec], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype, "saveNewPasswordCommand"), _class.prototype)), _class));


/***/ }),
/* 462 */
/*!****************************************!*\
  !*** ./dev/Settings/User/Templates.js ***!
  \****************************************/
/*! exports provided: TemplatesUserSettings, default */
/*! exports used: TemplatesUserSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TemplatesUserSettings; });
/* unused harmony export default */
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Stores_User_Template__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Stores/User/Template */ 206);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Knoin/Knoin */ 8);







var TemplatesUserSettings = /*#__PURE__*/function () {
  function TemplatesUserSettings() {
    var _this = this;

    this.templates = Stores_User_Template__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].templates;
    this.processText = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].computed(function () {
      return Stores_User_Template__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].templates.loading() ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_1__["i18n"])('SETTINGS_TEMPLETS/LOADING_PROCESS') : '';
    });
    this.visibility = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].computed(function () {
      return '' === _this.processText() ? 'hidden' : 'visible';
    });
    this.templateForDeletion = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].observable(null).deleteAccessHelper();
  }

  var _proto = TemplatesUserSettings.prototype;

  _proto.scrollableOptions = function scrollableOptions(sWrapper) {
    return {
      handle: '.drag-handle',
      containment: sWrapper || 'parent',
      axis: 'y'
    };
  };

  _proto.addNewTemplate = function addNewTemplate() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Template */ 431));
  };

  _proto.editTemplate = function editTemplate(oTemplateItem) {
    if (oTemplateItem) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["showScreenPopup"])(__webpack_require__(/*! View/Popup/Template */ 431), [oTemplateItem]);
    }
  };

  _proto.deleteTemplate = function deleteTemplate(templateToRemove) {
    var _this2 = this;

    if (templateToRemove && templateToRemove.deleteAccess()) {
      this.templateForDeletion(null);

      if (templateToRemove) {
        this.templates.remove(function (template) {
          return templateToRemove === template;
        });
        Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].templateDelete(function () {
          _this2.reloadTemplates();
        }, templateToRemove.id);
      }
    }
  };

  _proto.reloadTemplates = function reloadTemplates() {
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_4__[/* getApp */ "a"])().templates();
  };

  _proto.onBuild = function onBuild(oDom) {
    var self = this;
    oDom.on('click', '.templates-list .template-item .e-action', function () {
      // eslint-disable-line prefer-arrow-callback
      var template = ko__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].dataFor(this); // eslint-disable-line no-invalid-this

      if (template) {
        self.editTemplate(template);
      }
    });
    this.reloadTemplates();
  };

  return TemplatesUserSettings;
}();



/***/ }),
/* 463 */
/*!**************************************!*\
  !*** ./dev/Settings/User/Folders.js ***!
  \**************************************/
/*! exports provided: FoldersUserSettings, default */
/*! exports used: FoldersUserSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FoldersUserSettings; });
/* unused harmony export default */
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Storage_Client__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Storage/Client */ 60);
/* harmony import */ var Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Stores/User/Folder */ 11);
/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Promises/User/Ajax */ 93);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Knoin/Knoin */ 8);














var FoldersUserSettings = /*#__PURE__*/function () {
  function FoldersUserSettings() {
    this.displaySpecSetting = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].displaySpecSetting;
    this.folderList = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].folderList;
    this.folderListHelp = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('').extend({
      throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Magics"].Time100ms
    });
    this.loading = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () {
      var loading = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].foldersLoading(),
          creating = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].foldersCreating(),
          deleting = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].foldersDeleting(),
          renaming = Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].foldersRenaming();
      return loading || creating || deleting || renaming;
    });
    this.folderForDeletion = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(null).deleteAccessHelper();
    this.folderForEdit = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(null).extend({
      toggleSubscribeProperty: [this, 'edited']
    });
    this.useImapSubscribe = !!Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_6__["appSettingsGet"])('useImapSubscribe');
  }

  var _proto = FoldersUserSettings.prototype;

  _proto.folderEditOnEnter = function folderEditOnEnter(folder) {
    var nameToEdit = folder ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(folder.nameForEdit()) : '';

    if ('' !== nameToEdit && folder.name() !== nameToEdit) {
      Storage_Client__WEBPACK_IMPORTED_MODULE_7__[/* set */ "b"](Common_Enums__WEBPACK_IMPORTED_MODULE_2__["ClientSideKeyName"].FoldersLashHash, '');
      Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_11__[/* getApp */ "a"])().foldersPromisesActionHelper(Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].folderRename(folder.fullNameRaw, nameToEdit, Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].foldersRenaming), Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Notification"].CantRenameFolder);
      Object(Common_Cache__WEBPACK_IMPORTED_MODULE_5__[/* removeFolderFromCacheList */ "o"])(folder.fullNameRaw);
      folder.name(nameToEdit);
    }

    folder.edited(false);
  };

  _proto.folderEditOnEsc = function folderEditOnEsc(folder) {
    if (folder) {
      folder.edited(false);
    }
  };

  _proto.onShow = function onShow() {
    Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].folderList.error('');
  };

  _proto.onBuild = function onBuild(oDom) {
    var _this = this;

    oDom.on('mouseover', '.delete-folder-parent', function () {
      _this.folderListHelp(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('SETTINGS_FOLDERS/HELP_DELETE_FOLDER'));
    }).on('mouseover', '.subscribe-folder-parent', function () {
      _this.folderListHelp(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('SETTINGS_FOLDERS/HELP_SHOW_HIDE_FOLDER'));
    }).on('mouseover', '.check-folder-parent', function () {
      _this.folderListHelp(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('SETTINGS_FOLDERS/HELP_CHECK_FOR_NEW_MESSAGES'));
    }).on('mouseout', '.subscribe-folder-parent, .check-folder-parent, .delete-folder-parent', function () {
      _this.folderListHelp('');
    });
  };

  _proto.createFolder = function createFolder() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderCreate */ 428));
  };

  _proto.systemFolder = function systemFolder() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["showScreenPopup"])(__webpack_require__(/*! View/Popup/FolderSystem */ 316));
  };

  _proto.deleteFolder = function deleteFolder(folderToRemove) {
    if (folderToRemove && folderToRemove.canBeDeleted() && folderToRemove.deleteAccess() && 0 === folderToRemove.privateMessageCountAll()) {
      this.folderForDeletion(null);

      if (folderToRemove) {
        var fRemoveFolder = function fRemoveFolder(folder) {
          if (folderToRemove === folder) {
            return true;
          }

          folder.subFolders.remove(fRemoveFolder);
          return false;
        };

        Storage_Client__WEBPACK_IMPORTED_MODULE_7__[/* set */ "b"](Common_Enums__WEBPACK_IMPORTED_MODULE_2__["ClientSideKeyName"].FoldersLashHash, '');
        Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].folderList.remove(fRemoveFolder);
        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_11__[/* getApp */ "a"])().foldersPromisesActionHelper(Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].folderDelete(folderToRemove.fullNameRaw, Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].foldersDeleting), Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Notification"].CantDeleteFolder);
        Object(Common_Cache__WEBPACK_IMPORTED_MODULE_5__[/* removeFolderFromCacheList */ "o"])(folderToRemove.fullNameRaw);
      }
    } else if (0 < folderToRemove.privateMessageCountAll()) {
      Stores_User_Folder__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].folderList.error(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Notification"].CantDeleteNonEmptyFolder));
    }
  };

  _proto.subscribeFolder = function subscribeFolder(folder) {
    Storage_Client__WEBPACK_IMPORTED_MODULE_7__[/* set */ "b"](Common_Enums__WEBPACK_IMPORTED_MODULE_2__["ClientSideKeyName"].FoldersLashHash, '');
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].folderSetSubscribe(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["noop"], folder.fullNameRaw, true);
    folder.subScribed(true);
  };

  _proto.unSubscribeFolder = function unSubscribeFolder(folder) {
    Storage_Client__WEBPACK_IMPORTED_MODULE_7__[/* set */ "b"](Common_Enums__WEBPACK_IMPORTED_MODULE_2__["ClientSideKeyName"].FoldersLashHash, '');
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].folderSetSubscribe(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["noop"], folder.fullNameRaw, false);
    folder.subScribed(false);
  };

  _proto.checkableTrueFolder = function checkableTrueFolder(folder) {
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].folderSetCheckable(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["noop"], folder.fullNameRaw, true);
    folder.checkable(true);
  };

  _proto.checkableFalseFolder = function checkableFalseFolder(folder) {
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].folderSetCheckable(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["noop"], folder.fullNameRaw, false);
    folder.checkable(false);
  };

  return FoldersUserSettings;
}();



/***/ }),
/* 464 */
/*!*************************************!*\
  !*** ./dev/Settings/User/Themes.js ***!
  \*************************************/
/*! exports provided: ThemesUserSettings, default */
/*! exports used: ThemesUserSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ThemesUserSettings; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Jua */ 205);
/* harmony import */ var Jua__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(Jua__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_Theme__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/Theme */ 123);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Remote/User/Ajax */ 16);














var ThemesUserSettings = /*#__PURE__*/function () {
  function ThemesUserSettings() {
    var _this = this;

    this.theme = Stores_Theme__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].theme;
    this.themes = Stores_Theme__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].themes;
    this.themesObjects = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observableArray([]);
    this.background = {};
    this.background.name = Stores_Theme__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].themeBackgroundName;
    this.background.hash = Stores_Theme__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].themeBackgroundHash;
    this.background.uploaderButton = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(null);
    this.background.loading = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false);
    this.background.error = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable('');
    this.capaUserBackground = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["capa"])(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Capa"].UserBackground));
    this.themeTrigger = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["SaveSettingsStep"].Idle).extend({
      throttle: Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Magics"].Time100ms
    });
    this.iTimer = 0;
    this.oThemeAjaxRequest = null;
    this.theme.subscribe(function (value) {
      ___WEBPACK_IMPORTED_MODULE_2___default.a.each(_this.themesObjects(), function (theme) {
        theme.selected(value === theme.name);
      });

      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["changeTheme"])(value, _this.themeTrigger);
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].saveSettings(null, {
        'Theme': value
      });
    });
    this.background.hash.subscribe(function (value) {
      var $bg = $__WEBPACK_IMPORTED_MODULE_3___default()('#rl-bg');

      if (!value) {
        if ($bg.data('backstretch')) {
          $bg.backstretch('destroy').attr('style', '');
        }
      } else {
        $bg.attr('style', 'background-image: none !important;').backstretch(Object(Common_Links__WEBPACK_IMPORTED_MODULE_8__[/* userBackground */ "J"])(value), {
          fade: Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Magics"].Time1s,
          centeredX: true,
          centeredY: true
        }).removeAttr('style');
      }
    });
  }

  var _proto = ThemesUserSettings.prototype;

  _proto.onBuild = function onBuild() {
    var currentTheme = this.theme();
    this.themesObjects(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_2___default.a).call(___WEBPACK_IMPORTED_MODULE_2___default.a, this.themes(), function (theme) {
      return {
        name: theme,
        nameDisplay: Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["convertThemeName"])(theme),
        selected: ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(theme === currentTheme),
        themePreviewSrc: Object(Common_Links__WEBPACK_IMPORTED_MODULE_8__[/* themePreviewLink */ "F"])(theme)
      };
    }));
    this.initUploader();
  };

  _proto.onShow = function onShow() {
    this.background.error('');
  };

  _proto.clearBackground = function clearBackground() {
    var _this2 = this;

    if (this.capaUserBackground()) {
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].clearUserBackground(function () {
        _this2.background.name('');

        _this2.background.hash('');
      });
    }
  };

  _proto.initUploader = function initUploader() {
    var _this3 = this;

    if (this.background.uploaderButton() && this.capaUserBackground()) {
      var oJua = new Jua__WEBPACK_IMPORTED_MODULE_5___default.a({
        'action': Object(Common_Links__WEBPACK_IMPORTED_MODULE_8__[/* uploadBackground */ "H"])(),
        'name': 'uploader',
        'queueSize': 1,
        'multipleSizeLimit': 1,
        'disableDragAndDrop': true,
        'disableMultiple': true,
        'clickElement': this.background.uploaderButton()
      });
      oJua.on('onStart', function () {
        _this3.background.loading(true);

        _this3.background.error('');

        return true;
      }).on('onComplete', function (id, result, data) {
        _this3.background.loading(false);

        if (result && id && data && data.Result && data.Result.Name && data.Result.Hash) {
          _this3.background.name(data.Result.Name);

          _this3.background.hash(data.Result.Hash);
        } else {
          _this3.background.name('');

          _this3.background.hash('');

          var errorMsg = '';

          if (data.ErrorCode) {
            switch (data.ErrorCode) {
              case Common_Enums__WEBPACK_IMPORTED_MODULE_6__["UploadErrorCode"].FileIsTooBig:
                errorMsg = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_9__["i18n"])('SETTINGS_THEMES/ERROR_FILE_IS_TOO_BIG');
                break;

              case Common_Enums__WEBPACK_IMPORTED_MODULE_6__["UploadErrorCode"].FileType:
                errorMsg = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_9__["i18n"])('SETTINGS_THEMES/ERROR_FILE_TYPE_ERROR');
                break;
              // no default
            }
          }

          if (!errorMsg && data.ErrorMessage) {
            errorMsg = data.ErrorMessage;
          }

          _this3.background.error(errorMsg || Object(Common_Translator__WEBPACK_IMPORTED_MODULE_9__["i18n"])('SETTINGS_THEMES/ERROR_UNKNOWN'));
        }

        return true;
      });
    }
  };

  return ThemesUserSettings;
}();



/***/ }),
/* 465 */
/*!**************************************!*\
  !*** ./dev/Settings/User/OpenPgp.js ***!
  \**************************************/
/*! exports provided: OpenPgpUserSettings, default */
/*! exports used: OpenPgpUserSettings */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return OpenPgpUserSettings; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/User/Pgp */ 41);
/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Stores/User/Settings */ 35);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/Knoin */ 8);












var OpenPgpUserSettings = /*#__PURE__*/function () {
  function OpenPgpUserSettings() {
    this.openpgpkeys = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].openpgpkeys;
    this.openpgpkeysPublic = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].openpgpkeysPublic;
    this.openpgpkeysPrivate = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].openpgpkeysPrivate;
    this.openPgpKeyForDeletion = ko__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].observable(null).deleteAccessHelper();
    this.allowDraftAutosave = Stores_User_Settings__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].allowDraftAutosave;
    this.isHttps = Common_Globals__WEBPACK_IMPORTED_MODULE_5__["bIsHttps"];
  }

  var _proto = OpenPgpUserSettings.prototype;

  _proto.addOpenPgpKey = function addOpenPgpKey() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/AddOpenPgpKey */ 557));
  };

  _proto.generateOpenPgpKey = function generateOpenPgpKey() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/NewOpenPgpKey */ 558));
  };

  _proto.viewOpenPgpKey = function viewOpenPgpKey(openPgpKey) {
    if (openPgpKey) {
      Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/ViewOpenPgpKey */ 559), [openPgpKey]);
    }
  }
  /**
   * @param {OpenPgpKeyModel} openPgpKeyToRemove
   * @returns {void}
   */
  ;

  _proto.deleteOpenPgpKey = function deleteOpenPgpKey(openPgpKeyToRemove) {
    if (openPgpKeyToRemove && openPgpKeyToRemove.deleteAccess()) {
      this.openPgpKeyForDeletion(null);

      if (openPgpKeyToRemove && Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].openpgpKeyring) {
        var findedItem = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_0___default()(___WEBPACK_IMPORTED_MODULE_1___default.a).call(___WEBPACK_IMPORTED_MODULE_1___default.a, Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].openpgpkeys(), function (key) {
          return openPgpKeyToRemove === key;
        });

        if (findedItem) {
          Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].openpgpkeys.remove(findedItem);
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["delegateRunOnDestroy"])(findedItem);
          Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].openpgpKeyring[findedItem.isPrivate ? 'privateKeys' : 'publicKeys'].removeForId(findedItem.guid);
          Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].openpgpKeyring.store();
        }

        Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_9__[/* getApp */ "a"])().reloadOpenPgpKeys();
      }
    }
  };

  _proto.onBuild = function onBuild() {
    var _this = this;

    ___WEBPACK_IMPORTED_MODULE_1___default.a.delay(function () {
      _this.allowDraftAutosave.subscribe(Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].saveSettingsHelper('AllowDraftAutosave', Common_Utils__WEBPACK_IMPORTED_MODULE_3__["boolToAjax"]));
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time50ms);
  };

  return OpenPgpUserSettings;
}();



/***/ }),
/* 466 */
/*!**************************************************!*\
  !*** ./dev/View/User/Settings/SystemDropDown.js ***!
  \**************************************************/
/*! exports provided: SystemDropDownSettingsUserView, default */
/*! exports used: SystemDropDownSettingsUserView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SystemDropDownSettingsUserView; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var View_User_AbstractSystemDropDown__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! View/User/AbstractSystemDropDown */ 318);


var _dec, _class;



var SystemDropDownSettingsUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["view"])({
  name: 'View/User/Settings/SystemDropDown',
  type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_1__["ViewType"].Right,
  templateID: 'SystemDropDown'
}), _dec(_class = /*#__PURE__*/function (_AbstractSystemDropDo) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(SystemDropDownSettingsUserView, _AbstractSystemDropDo);

  function SystemDropDownSettingsUserView() {
    return _AbstractSystemDropDo.apply(this, arguments) || this;
  }

  return SystemDropDownSettingsUserView;
}(View_User_AbstractSystemDropDown__WEBPACK_IMPORTED_MODULE_2__[/* AbstractSystemDropDownUserView */ "a"])) || _class);


/***/ }),
/* 467 */
/*!****************************************!*\
  !*** ./dev/View/User/Settings/Menu.js ***!
  \****************************************/
/*! exports provided: MenuSettingsUserView, default */
/*! exports used: MenuSettingsUserView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MenuSettingsUserView; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.link.js */ 204);
/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;











var MenuSettingsUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["view"])({
  name: 'View/User/Settings/Menu',
  type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["ViewType"].Left,
  templateID: 'SettingsMenu'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(MenuSettingsUserView, _AbstractViewNext);

  /**
   * @param {Object} screen
   */
  function MenuSettingsUserView(screen) {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.leftPanelDisabled = Common_Globals__WEBPACK_IMPORTED_MODULE_5__["leftPanelDisabled"];
    _this.mobile = Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["appSettingsGet"]('mobile');
    _this.menu = screen.menu;
    return _this;
  }

  var _proto = MenuSettingsUserView.prototype;

  _proto.onBuild = function onBuild(dom) {
    if (this.mobile) {
      dom.on('click', '.b-settings-menu .e-item.selectable', function () {
        Object(Common_Globals__WEBPACK_IMPORTED_MODULE_5__["leftPanelDisabled"])(true);
      });
    }

    key__WEBPACK_IMPORTED_MODULE_3___default()('up, down', Common_Enums__WEBPACK_IMPORTED_MODULE_4__["KeyState"].Settings, Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["settingsMenuKeysHandler"])($__WEBPACK_IMPORTED_MODULE_2___default()('.b-settings-menu .e-item', dom)));
  };

  _proto.link = function link(route) {
    return Object(Common_Links__WEBPACK_IMPORTED_MODULE_6__[/* settings */ "z"])(route);
  };

  _proto.backToMailBoxClick = function backToMailBoxClick() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_6__[/* inbox */ "m"])(Object(Common_Cache__WEBPACK_IMPORTED_MODULE_7__[/* getFolderInboxName */ "h"])()));
  };

  return MenuSettingsUserView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_10__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 468 */
/*!****************************************!*\
  !*** ./dev/View/User/Settings/Pane.js ***!
  \****************************************/
/*! exports provided: PaneSettingsUserView, default */
/*! exports used: PaneSettingsUserView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PaneSettingsUserView; });
/* unused harmony export default */
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Links */ 15);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Storage/Settings */ 5);
/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Stores/User/Message */ 13);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;








var PaneSettingsUserView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["view"])({
  name: 'View/User/Settings/Pane',
  type: Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["ViewType"].Right,
  templateID: 'SettingsPane'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(PaneSettingsUserView, _AbstractViewNext);

  function PaneSettingsUserView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.mobile = Storage_Settings__WEBPACK_IMPORTED_MODULE_4__["appSettingsGet"]('mobile');
    _this.leftPanelDisabled = Common_Globals__WEBPACK_IMPORTED_MODULE_3__["leftPanelDisabled"];
    return _this;
  }

  var _proto = PaneSettingsUserView.prototype;

  _proto.onShow = function onShow() {
    Stores_User_Message__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].message(null);
  };

  _proto.hideLeft = function hideLeft(item, event) {
    event.preventDefault();
    event.stopPropagation();
    Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["leftPanelDisabled"])(true);
  };

  _proto.showLeft = function showLeft(item, event) {
    event.preventDefault();
    event.stopPropagation();
    Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["leftPanelDisabled"])(false);
  };

  _proto.onBuild = function onBuild(dom) {
    if (this.mobile) {
      dom.on('click', function () {
        Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["leftPanelDisabled"])(true);
      });
    }
  };

  _proto.backToMailBoxClick = function backToMailBoxClick() {
    Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_6__["setHash"])(Object(Common_Links__WEBPACK_IMPORTED_MODULE_1__[/* inbox */ "m"])(Object(Common_Cache__WEBPACK_IMPORTED_MODULE_2__[/* getFolderInboxName */ "h"])()));
  };

  return PaneSettingsUserView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_7__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 469 */,
/* 470 */,
/* 471 */,
/* 472 */,
/* 473 */,
/* 474 */,
/* 475 */,
/* 476 */,
/* 477 */,
/* 478 */,
/* 479 */,
/* 480 */,
/* 481 */,
/* 482 */,
/* 483 */,
/* 484 */,
/* 485 */,
/* 486 */,
/* 487 */,
/* 488 */,
/* 489 */,
/* 490 */,
/* 491 */,
/* 492 */,
/* 493 */,
/* 494 */,
/* 495 */,
/* 496 */,
/* 497 */,
/* 498 */,
/* 499 */,
/* 500 */,
/* 501 */,
/* 502 */,
/* 503 */,
/* 504 */,
/* 505 */,
/* 506 */,
/* 507 */,
/* 508 */,
/* 509 */,
/* 510 */,
/* 511 */,
/* 512 */,
/* 513 */,
/* 514 */,
/* 515 */,
/* 516 */,
/* 517 */,
/* 518 */,
/* 519 */,
/* 520 */,
/* 521 */,
/* 522 */,
/* 523 */,
/* 524 */,
/* 525 */,
/* 526 */,
/* 527 */,
/* 528 */,
/* 529 */,
/* 530 */,
/* 531 */,
/* 532 */,
/* 533 */,
/* 534 */,
/* 535 */,
/* 536 */,
/* 537 */,
/* 538 */,
/* 539 */,
/* 540 */,
/* 541 */,
/* 542 */,
/* 543 */,
/* 544 */,
/* 545 */,
/* 546 */,
/* 547 */,
/* 548 */
/*!********************!*\
  !*** ./dev/app.js ***!
  \********************/
/*! no exports provided */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap */ 292);
/* harmony import */ var App_User__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! App/User */ 402);


Object(bootstrap__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(App_User__WEBPACK_IMPORTED_MODULE_1__["default"]);

/***/ }),
/* 549 */
/*!******************************************!*\
  !*** ./dev/View/Popup/MessageOpenPgp.js ***!
  \******************************************/
/*! exports provided: MessageOpenPgpPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MessageOpenPgpPopupView", function() { return MessageOpenPgpPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return MessageOpenPgpPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _class, _class2;











var MessageOpenPgpPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["popup"])({
  name: 'View/Popup/MessageOpenPgp',
  templateID: 'PopupsMessageOpenPgp'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["command"])(function (self) {
  return !self.submitRequest();
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(MessageOpenPgpPopupView, _AbstractViewNext);

  function MessageOpenPgpPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.notification = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    _this.selectedKey = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(null);
    _this.privateKeys = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observableArray([]);
    _this.password = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    _this.password.focus = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.buttonFocus = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.resultCallback = null;
    _this.submitRequest = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_9__["KeyState"].PopupMessageOpenPGP;
    return _this;
  }

  var _proto = MessageOpenPgpPopupView.prototype;

  _proto.doCommand = function doCommand() {
    var _this2 = this;

    this.submitRequest(true);

    ___WEBPACK_IMPORTED_MODULE_4___default.a.delay(function () {
      var privateKey = null;

      try {
        if (_this2.resultCallback && _this2.selectedKey()) {
          var privateKeys = _this2.selectedKey().getNativeKeys();

          privateKey = privateKeys && privateKeys[0] ? privateKeys[0] : null;

          if (privateKey) {
            try {
              if (!privateKey.decrypt(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["pString"])(_this2.password()))) {
                Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["log"])('Error: Private key cannot be decrypted');
                privateKey = null;
              }
            } catch (e) {
              Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["log"])(e);
              privateKey = null;
            }
          } else {
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["log"])('Error: Private key cannot be found');
          }
        }
      } catch (e) {
        Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["log"])(e);
        privateKey = null;
      }

      _this2.submitRequest(false);

      _this2.cancelCommand();

      _this2.resultCallback(privateKey);
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_9__["Magics"].Time100ms);
  };

  _proto.clearPopup = function clearPopup() {
    this.notification('');
    this.password('');
    this.password.focus(false);
    this.buttonFocus(false);
    this.selectedKey(false);
    this.submitRequest(false);
    this.resultCallback = null;
    this.privateKeys([]);
  };

  _proto.onBuild = function onBuild(oDom) {
    var _this3 = this;

    key__WEBPACK_IMPORTED_MODULE_6___default()('tab,shift+tab', Common_Enums__WEBPACK_IMPORTED_MODULE_9__["KeyState"].PopupMessageOpenPGP, function () {
      switch (true) {
        case _this3.password.focus():
          _this3.buttonFocus(true);

          break;

        case _this3.buttonFocus():
          _this3.password.focus(true);

          break;
        // no default
      }

      return false;
    });
    var self = this;
    oDom.on('click', '.key-list__item', function () {
      var _context;

      // eslint-disable-line prefer-arrow-callback
      _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(oDom).call(oDom, '.key-list__item .key-list__item__radio').addClass('icon-radio-unchecked').removeClass('icon-radio-checked');

      _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context = $__WEBPACK_IMPORTED_MODULE_7___default()(this)).call(_context, '.key-list__item__radio') // eslint-disable-line no-invalid-this
      .removeClass('icon-radio-unchecked').addClass('icon-radio-checked');

      self.selectedKey(ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].dataFor(this)); // eslint-disable-line no-invalid-this

      self.password.focus(true);
    });
  };

  _proto.onHideWithDelay = function onHideWithDelay() {
    this.clearPopup();
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    this.password.focus(true); //		this.buttonFocus(true);
  };

  _proto.onShow = function onShow(fCallback, privateKeys) {
    this.clearPopup();
    this.resultCallback = fCallback;
    this.privateKeys(privateKeys);

    if (this.viewModelDom) {
      var _context2;

      _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_context2 = this.viewModelDom).call(_context2, '.key-list__item').first().click();
    }
  };

  return MessageOpenPgpPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_11__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "doCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_3___default()(_class2.prototype, "doCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 550 */
/*!***********************************************************!*\
  !*** ./node_modules/core-js-pure/stable/instance/keys.js ***!
  \***********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../modules/web.dom-collections.iterator */ 161);
var keys = __webpack_require__(/*! ../array/virtual/keys */ 551);
var classof = __webpack_require__(/*! ../../internals/classof */ 92);
var ArrayPrototype = Array.prototype;

var DOMIterables = {
  DOMTokenList: true,
  NodeList: true
};

module.exports = function (it) {
  var own = it.keys;
  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.keys)
    // eslint-disable-next-line no-prototype-builtins
    || DOMIterables.hasOwnProperty(classof(it)) ? keys : own;
};


/***/ }),
/* 551 */
/*!****************************************************************!*\
  !*** ./node_modules/core-js-pure/stable/array/virtual/keys.js ***!
  \****************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

var parent = __webpack_require__(/*! ../../../es/array/virtual/keys */ 552);

module.exports = parent;


/***/ }),
/* 552 */
/*!************************************************************!*\
  !*** ./node_modules/core-js-pure/es/array/virtual/keys.js ***!
  \************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! ../../../modules/es.array.iterator */ 201);
var entryVirtual = __webpack_require__(/*! ../../../internals/entry-virtual */ 71);

module.exports = entryVirtual('Array').keys;


/***/ }),
/* 553 */
/*!******************************************!*\
  !*** ./dev/View/Popup/ComposeOpenPgp.js ***!
  \******************************************/
/*! exports provided: ComposeOpenPgpPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComposeOpenPgpPopupView", function() { return ComposeOpenPgpPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ComposeOpenPgpPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/assertThisInitialized */ 29);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ 203);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 17);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 175);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! $ */ 7);
/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_11__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_13__);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! Stores/User/Pgp */ 41);
/* harmony import */ var Model_Email__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! Model/Email */ 82);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);




var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2;



















var KEY_NAME_SUBSTR = -8;
var ComposeOpenPgpPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["popup"])({
  name: 'View/Popup/ComposeOpenPgp',
  templateID: 'PopupsComposeOpenPgp'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["command"])(function (self) {
  return !self.submitRequest() && (self.sign() || self.encrypt());
}), _dec3 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["command"])(), _dec4 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["command"])(), _dec5 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_19__["command"])(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(ComposeOpenPgpPopupView, _AbstractViewNext);

  function ComposeOpenPgpPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.publicKeysOptionsCaption = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_16__["i18n"])('PGP_NOTIFICATIONS/ADD_A_PUBLICK_KEY');
    _this.privateKeysOptionsCaption = Object(Common_Translator__WEBPACK_IMPORTED_MODULE_16__["i18n"])('PGP_NOTIFICATIONS/SELECT_A_PRIVATE_KEY');
    _this.notification = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable('');
    _this.sign = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(false);
    _this.encrypt = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(false);
    _this.password = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable('');
    _this.password.focus = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(false);
    _this.buttonFocus = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(false);
    _this.text = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable('');
    _this.selectedPrivateKey = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(null);
    _this.selectedPublicKey = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(null);
    _this.signKey = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(null);
    _this.encryptKeys = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observableArray([]);
    _this.encryptKeysView = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      return ___WEBPACK_IMPORTED_MODULE_10___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, _this.encryptKeys(), function (oKey) {
        return oKey ? oKey.key : null;
      }));
    });
    _this.privateKeysOptions = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      var opts = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_17__[/* default */ "a"].openpgpkeysPrivate(), function (oKey, iIndex) {
        if (_this.signKey() && _this.signKey().key.id === oKey.id) {
          return null;
        }

        return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, oKey.users, function (user) {
          return {
            'id': oKey.guid,
            'name': '(' + oKey.id.substr(KEY_NAME_SUBSTR).toUpperCase() + ') ' + user,
            'key': oKey,
            'class': iIndex % 2 ? 'odd' : 'even'
          };
        });
      });

      return ___WEBPACK_IMPORTED_MODULE_10___default.a.compact(___WEBPACK_IMPORTED_MODULE_10___default.a.flatten(opts, true));
    });
    _this.publicKeysOptions = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].computed(function () {
      var opts = _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_17__[/* default */ "a"].openpgpkeysPublic(), function (oKey, index) {
        if (-1 < Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["inArray"])(oKey, _this.encryptKeysView())) {
          return null;
        }

        return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, oKey.users, function (user) {
          return {
            'id': oKey.guid,
            'name': '(' + oKey.id.substr(KEY_NAME_SUBSTR).toUpperCase() + ') ' + user,
            'key': oKey,
            'class': index % 2 ? 'odd' : 'even'
          };
        });
      });

      return ___WEBPACK_IMPORTED_MODULE_10___default.a.compact(___WEBPACK_IMPORTED_MODULE_10___default.a.flatten(opts, true));
    });
    _this.submitRequest = ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(false);
    _this.resultCallback = null;

    _this.selectedPrivateKey.subscribe(function (value) {
      if (value) {
        _this.selectCommand();

        _this.updateCommand();
      }
    });

    _this.selectedPublicKey.subscribe(function (value) {
      if (value) {
        _this.addCommand();
      }
    });

    _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].PopupComposeOpenPGP;
    _this.defautOptionsAfterRender = Common_Utils__WEBPACK_IMPORTED_MODULE_14__["defautOptionsAfterRender"];

    _this.addOptionClass = function (domOption, item) {
      _this.defautOptionsAfterRender(domOption, item);

      if (item && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isUnd"])(item.class) && domOption) {
        $__WEBPACK_IMPORTED_MODULE_11___default()(domOption).addClass(item.class);
      }
    };

    _this.deletePublickKey = ___WEBPACK_IMPORTED_MODULE_10___default.a.bind(_this.deletePublickKey, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(_this));
    return _this;
  }

  var _proto = ComposeOpenPgpPopupView.prototype;

  _proto.doCommand = function doCommand() {
    var _this2 = this;

    var result = true,
        privateKey = null,
        aPublicKeys = [];
    this.submitRequest(true);

    if (result && this.sign()) {
      if (!this.signKey()) {
        this.notification(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_16__["i18n"])('PGP_NOTIFICATIONS/NO_PRIVATE_KEY_FOUND'));
        result = false;
      } else if (!this.signKey().key) {
        this.notification(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_16__["i18n"])('PGP_NOTIFICATIONS/NO_PRIVATE_KEY_FOUND_FOR', {
          'EMAIL': this.signKey().email
        }));
        result = false;
      }

      if (result) {
        var privateKeys = this.signKey().key.getNativeKeys();
        privateKey = privateKeys[0] || null;

        try {
          if (privateKey) {
            privateKey.decrypt(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["pString"])(this.password()));
          }
        } catch (e) {
          privateKey = null;
        }

        if (!privateKey) {
          this.notification(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_16__["i18n"])('PGP_NOTIFICATIONS/NO_PRIVATE_KEY_FOUND'));
          result = false;
        }
      }
    }

    if (result && this.encrypt()) {
      if (0 === this.encryptKeys().length) {
        this.notification(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_16__["i18n"])('PGP_NOTIFICATIONS/NO_PUBLIC_KEYS_FOUND'));
        result = false;
      } else if (this.encryptKeys()) {
        aPublicKeys = [];

        ___WEBPACK_IMPORTED_MODULE_10___default.a.each(this.encryptKeys(), function (oKey) {
          if (oKey && oKey.key) {
            aPublicKeys = _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_7___default()(aPublicKeys).call(aPublicKeys, ___WEBPACK_IMPORTED_MODULE_10___default.a.compact(___WEBPACK_IMPORTED_MODULE_10___default.a.flatten(oKey.key.getNativeKeys())));
          } else if (oKey && oKey.email) {
            _this2.notification(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_16__["i18n"])('PGP_NOTIFICATIONS/NO_PUBLIC_KEYS_FOUND_FOR', {
              'EMAIL': oKey.email
            }));

            result = false;
          }
        });

        if (result && (0 === aPublicKeys.length || this.encryptKeys().length !== aPublicKeys.length)) {
          result = false;
        }
      }
    }

    if (result && this.resultCallback) {
      ___WEBPACK_IMPORTED_MODULE_10___default.a.delay(function () {
        var pgpPromise = null;

        try {
          if (privateKey && 0 === aPublicKeys.length) {
            pgpPromise = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_17__[/* default */ "a"].openpgp.sign({
              data: _this2.text(),
              privateKeys: [privateKey]
            });
          } else if (privateKey && 0 < aPublicKeys.length) {
            pgpPromise = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_17__[/* default */ "a"].openpgp.encrypt({
              data: _this2.text(),
              publicKeys: aPublicKeys,
              privateKeys: [privateKey]
            });
          } else if (!privateKey && 0 < aPublicKeys.length) {
            pgpPromise = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_17__[/* default */ "a"].openpgp.encrypt({
              data: _this2.text(),
              publicKeys: aPublicKeys
            });
          }
        } catch (e) {
          Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["log"])(e);

          _this2.notification(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_16__["i18n"])('PGP_NOTIFICATIONS/PGP_ERROR', {
            'ERROR': '' + e
          }));
        }

        if (pgpPromise) {
          try {
            pgpPromise.then(function (mData) {
              _this2.resultCallback(mData.data);

              _this2.cancelCommand();
            }).catch(function (e) {
              _this2.notification(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_16__["i18n"])('PGP_NOTIFICATIONS/PGP_ERROR', {
                'ERROR': '' + e
              }));
            });
          } catch (e) {
            _this2.notification(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_16__["i18n"])('PGP_NOTIFICATIONS/PGP_ERROR', {
              'ERROR': '' + e
            }));
          }
        }

        _this2.submitRequest(false);
      }, Common_Enums__WEBPACK_IMPORTED_MODULE_15__["Magics"].Time20ms);
    } else {
      this.submitRequest(false);
    }

    return result;
  };

  _proto.selectCommand = function selectCommand() {
    var keyId = this.selectedPrivateKey(),
        option = keyId ? _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, this.privateKeysOptions(), function (item) {
      return item && keyId === item.id;
    }) : null;

    if (option) {
      this.signKey({
        'empty': !option.key,
        'selected': ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(!!option.key),
        'users': option.key.users,
        'hash': option.key.id.substr(KEY_NAME_SUBSTR).toUpperCase(),
        'key': option.key
      });
    }
  };

  _proto.addCommand = function addCommand() {
    var keyId = this.selectedPublicKey(),
        keys = this.encryptKeys(),
        option = keyId ? _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_8___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, this.publicKeysOptions(), function (item) {
      return item && keyId === item.id;
    }) : null;

    if (option) {
      keys.push({
        'empty': !option.key,
        'selected': ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(!!option.key),
        'removable': ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(!this.sign() || !this.signKey() || this.signKey().key.id !== option.key.id),
        'users': option.key.users,
        'hash': option.key.id.substr(KEY_NAME_SUBSTR).toUpperCase(),
        'key': option.key
      });
      this.encryptKeys(keys);
    }
  };

  _proto.updateCommand = function updateCommand() {
    var _this3 = this;

    ___WEBPACK_IMPORTED_MODULE_10___default.a.each(this.encryptKeys(), function (oKey) {
      oKey.removable(!_this3.sign() || !_this3.signKey() || _this3.signKey().key.id !== oKey.key.id);
    });
  };

  _proto.deletePublickKey = function deletePublickKey(publicKey) {
    this.encryptKeys.remove(publicKey);
  };

  _proto.clearPopup = function clearPopup() {
    this.notification('');
    this.sign(false);
    this.encrypt(false);
    this.password('');
    this.password.focus(false);
    this.buttonFocus(false);
    this.signKey(null);
    this.encryptKeys([]);
    this.text('');
    this.resultCallback = null;
  };

  _proto.onBuild = function onBuild() {
    var _this4 = this;

    key__WEBPACK_IMPORTED_MODULE_13___default()('tab,shift+tab', Common_Enums__WEBPACK_IMPORTED_MODULE_15__["KeyState"].PopupComposeOpenPGP, function () {
      switch (true) {
        case _this4.password.focus():
          _this4.buttonFocus(true);

          break;

        case _this4.buttonFocus():
          _this4.password.focus(true);

          break;
        // no default
      }

      return false;
    });
  };

  _proto.onHideWithDelay = function onHideWithDelay() {
    this.clearPopup();
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    if (this.sign()) {
      this.password.focus(true);
    } else {
      this.buttonFocus(true);
    }
  };

  _proto.onShow = function onShow(fCallback, sText, identity, sTo, sCc, sBcc) {
    var _this5 = this;

    this.clearPopup();
    var rec = [],
        emailLine = '';
    var email = new Model_Email__WEBPACK_IMPORTED_MODULE_18__["EmailModel"]();
    this.resultCallback = fCallback;

    if ('' !== sTo) {
      rec.push(sTo);
    }

    if ('' !== sCc) {
      rec.push(sCc);
    }

    if ('' !== sBcc) {
      rec.push(sBcc);
    }

    rec = rec.join(', ').split(',');
    rec = ___WEBPACK_IMPORTED_MODULE_10___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, rec, function (value) {
      email.clear();
      email.parse(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["trim"])(value));
      return '' === email.email ? false : email.email;
    }));

    if (identity && identity.email()) {
      emailLine = identity.email();
      rec.unshift(emailLine);
      var keys = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_17__[/* default */ "a"].findAllPrivateKeysByEmailNotNative(emailLine);

      if (keys && keys[0]) {
        this.signKey({
          'users': keys[0].users || [emailLine],
          'hash': keys[0].id.substr(KEY_NAME_SUBSTR).toUpperCase(),
          'key': keys[0]
        });
      }
    }

    if (this.signKey()) {
      this.sign(true);
    }

    if (rec && 0 < rec.length) {
      this.encryptKeys(___WEBPACK_IMPORTED_MODULE_10___default.a.uniq(___WEBPACK_IMPORTED_MODULE_10___default.a.compact(___WEBPACK_IMPORTED_MODULE_10___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, rec, function (recEmail) {
        var keys = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_17__[/* default */ "a"].findAllPublicKeysByEmailNotNative(recEmail);
        return keys ? _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, keys, function (publicKey) {
          return {
            'empty': !publicKey,
            'selected': ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(!!publicKey),
            'removable': ko__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].observable(!_this5.sign() || !_this5.signKey() || _this5.signKey().key.id !== publicKey.id),
            'users': publicKey ? publicKey.users || [recEmail] : [recEmail],
            'hash': publicKey ? publicKey.id.substr(KEY_NAME_SUBSTR).toUpperCase() : '',
            'key': publicKey
          };
        }) : [];
      }), true)), function (encryptKey) {
        return encryptKey.hash;
      }));

      if (0 < this.encryptKeys().length) {
        this.encrypt(true);
      }
    }

    this.text(sText);
  };

  return ComposeOpenPgpPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_20__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "doCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9___default()(_class2.prototype, "doCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "selectCommand", [_dec3], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9___default()(_class2.prototype, "selectCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "addCommand", [_dec4], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9___default()(_class2.prototype, "addCommand"), _class2.prototype), Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_class2.prototype, "updateCommand", [_dec5], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_9___default()(_class2.prototype, "updateCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 554 */
/*!***************************************!*\
  !*** ./dev/View/Popup/FolderClear.js ***!
  \***************************************/
/*! exports provided: FolderClearPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FolderClearPopupView", function() { return FolderClearPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FolderClearPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Cache */ 14);
/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Stores/User/Message */ 13);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _class, _class2;











var FolderClearPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["popup"])({
  name: 'View/Popup/FolderClear',
  templateID: 'PopupsFolderClear'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["command"])(function (self) {
  var folder = self.selectedFolder(),
      isClearing = self.clearingProcess();
  return !isClearing && null !== folder;
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(FolderClearPopupView, _AbstractViewNext);

  function FolderClearPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.selectedFolder = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(null);
    _this.clearingProcess = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.clearingError = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    _this.folderFullNameForClear = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      var folder = _this.selectedFolder();

      return folder ? folder.printableFullName() : '';
    });
    _this.folderNameForClear = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      var folder = _this.selectedFolder();

      return folder ? folder.localName() : '';
    });
    _this.dangerDescHtml = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].computed(function () {
      return Object(Common_Translator__WEBPACK_IMPORTED_MODULE_5__["i18n"])('POPUPS_CLEAR_FOLDER/DANGER_DESC_HTML_1', {
        'FOLDER': _this.folderNameForClear()
      });
    });
    return _this;
  }

  var _proto = FolderClearPopupView.prototype;

  _proto.clearCommand = function clearCommand() {
    var _this2 = this;

    var folderToClear = this.selectedFolder();

    if (folderToClear) {
      Stores_User_Message__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].message(null);
      Stores_User_Message__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].messageList([]);
      this.clearingProcess(true);
      folderToClear.messageCountAll(0);
      folderToClear.messageCountUnread(0);
      Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* setFolderHash */ "q"])(folderToClear.fullNameRaw, '');
      Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].folderClear(function (result, data) {
        _this2.clearingProcess(false);

        if (Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === result && data && data.Result) {
          Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_9__[/* getApp */ "a"])().reloadMessageList(true);

          _this2.cancelCommand();
        } else {
          if (data && data.ErrorCode) {
            _this2.clearingError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_5__["getNotification"])(data.ErrorCode));
          } else {
            _this2.clearingError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_5__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Notification"].MailServerError));
          }
        }
      }, folderToClear.fullNameRaw);
    }
  };

  _proto.clearPopup = function clearPopup() {
    this.clearingProcess(false);
    this.selectedFolder(null);
  };

  _proto.onShow = function onShow(folder) {
    this.clearPopup();

    if (folder) {
      this.selectedFolder(folder);
    }
  };

  return FolderClearPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_11__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "clearCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "clearCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 555 */
/*!******************************************!*\
  !*** ./dev/View/Popup/AdvancedSearch.js ***!
  \******************************************/
/*! exports provided: AdvancedSearchPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AdvancedSearchPopupView", function() { return AdvancedSearchPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AdvancedSearchPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ 203);
/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Translator */ 9);
/* harmony import */ var Common_Momentor__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Common/Momentor */ 61);
/* harmony import */ var Stores_User_Message__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/User/Message */ 13);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _class, _class2;













var AdvancedSearchPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["popup"])({
  name: 'View/Popup/AdvancedSearch',
  templateID: 'PopupsAdvancedSearch'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_12__["command"])(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AdvancedSearchPopupView, _AbstractViewNext);

  function AdvancedSearchPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.fromFocus = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.from = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.to = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.subject = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.text = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable('');
    _this.selectedDateValue = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(-1);
    _this.hasAttachment = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.starred = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.unseen = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].observable(false);
    _this.selectedDates = ko__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].computed(function () {
      Object(Common_Translator__WEBPACK_IMPORTED_MODULE_9__["trigger"])();
      return [{
        id: -1,
        name: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_9__["i18n"])('SEARCH/LABEL_ADV_DATE_ALL')
      }, {
        id: 3,
        name: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_9__["i18n"])('SEARCH/LABEL_ADV_DATE_3_DAYS')
      }, {
        id: 7,
        name: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_9__["i18n"])('SEARCH/LABEL_ADV_DATE_7_DAYS')
      }, {
        id: 30,
        name: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_9__["i18n"])('SEARCH/LABEL_ADV_DATE_MONTH')
      }, {
        id: 90,
        name: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_9__["i18n"])('SEARCH/LABEL_ADV_DATE_3_MONTHS')
      }, {
        id: 180,
        name: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_9__["i18n"])('SEARCH/LABEL_ADV_DATE_6_MONTHS')
      }, {
        id: 365,
        name: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_9__["i18n"])('SEARCH/LABEL_ADV_DATE_YEAR')
      }];
    });
    return _this;
  }

  var _proto = AdvancedSearchPopupView.prototype;

  _proto.searchCommand = function searchCommand() {
    var search = this.buildSearchString();

    if ('' !== search) {
      Stores_User_Message__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].mainMessageListSearch(search);
    }

    this.cancelCommand();
  };

  _proto.parseSearchStringValue = function parseSearchStringValue(search) {
    var _this2 = this;

    var parts = (search || '').split(/[\s]+/g);

    ___WEBPACK_IMPORTED_MODULE_6___default.a.each(parts, function (part) {
      switch (part) {
        case 'has:attachment':
          _this2.hasAttachment(true);

          break;

        case 'is:unseen,flagged':
          _this2.starred(true);

        /* falls through */

        case 'is:unseen':
          _this2.unseen(true);

          break;
        // no default
      }
    });
  };

  _proto.buildSearchStringValue = function buildSearchStringValue(value) {
    if (-1 < value.indexOf(' ')) {
      value = '"' + value + '"';
    }

    return value;
  };

  _proto.buildSearchString = function buildSearchString() {
    var result = [],
        from_ = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(this.from()),
        to = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(this.to()),
        subject = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(this.subject()),
        text = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(this.text()),
        isPart = [],
        hasPart = [];

    if (from_ && '' !== from_) {
      result.push('from:' + this.buildSearchStringValue(from_));
    }

    if (to && '' !== to) {
      result.push('to:' + this.buildSearchStringValue(to));
    }

    if (subject && '' !== subject) {
      result.push('subject:' + this.buildSearchStringValue(subject));
    }

    if (this.hasAttachment()) {
      hasPart.push('attachment');
    }

    if (this.unseen()) {
      isPart.push('unseen');
    }

    if (this.starred()) {
      isPart.push('flagged');
    }

    if (0 < hasPart.length) {
      result.push('has:' + hasPart.join(','));
    }

    if (0 < isPart.length) {
      result.push('is:' + isPart.join(','));
    }

    if (-1 < this.selectedDateValue()) {
      result.push('date:' + Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_10__["searchSubtractFormatDateHelper"])(this.selectedDateValue()) + '/');
    }

    if (text && '' !== text) {
      result.push('text:' + this.buildSearchStringValue(text));
    }

    return Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(result.join(' '));
  };

  _proto.clearPopup = function clearPopup() {
    this.from('');
    this.to('');
    this.subject('');
    this.text('');
    this.selectedDateValue(-1);
    this.hasAttachment(false);
    this.starred(false);
    this.unseen(false);
    this.fromFocus(true);
  };

  _proto.onShow = function onShow(search) {
    this.clearPopup();
    this.parseSearchStringValue(search);
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    this.fromFocus(true);
  };

  return AdvancedSearchPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_13__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "searchCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "searchCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 556 */
/*!*****************************************!*\
  !*** ./dev/View/Popup/TwoFactorTest.js ***!
  \*****************************************/
/*! exports provided: TwoFactorTestPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TwoFactorTestPopupView", function() { return TwoFactorTestPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TwoFactorTestPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Globals */ 6);
/* harmony import */ var Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Remote/User/Ajax */ 16);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _class, _class2;








var TwoFactorTestPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_7__["popup"])({
  name: 'View/Popup/TwoFactorTest',
  templateID: 'PopupsTwoFactorTest'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_7__["command"])(function (self) {
  return '' !== self.code() && !self.testing();
}), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(TwoFactorTestPopupView, _AbstractViewNext);

  function TwoFactorTestPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.code = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable('');
    _this.code.focused = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    _this.code.status = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(null);
    _this.koTestedTrigger = null;
    _this.testing = ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].observable(false);
    return _this;
  }

  var _proto = TwoFactorTestPopupView.prototype;

  _proto.testCodeCommand = function testCodeCommand() {
    var _this2 = this;

    this.testing(true);
    Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].testTwoFactor(function (result, data) {
      _this2.testing(false);

      _this2.code.status(Common_Enums__WEBPACK_IMPORTED_MODULE_4__["StorageResultType"].Success === result && data && !!data.Result);

      if (_this2.koTestedTrigger && _this2.code.status()) {
        _this2.koTestedTrigger(true);
      }
    }, this.code());
  };

  _proto.clearPopup = function clearPopup() {
    this.code('');
    this.code.focused(false);
    this.code.status(null);
    this.testing(false);
    this.koTestedTrigger = null;
  };

  _proto.onShow = function onShow(koTestedTrigger) {
    this.clearPopup();
    this.koTestedTrigger = koTestedTrigger;
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    if (!Common_Globals__WEBPACK_IMPORTED_MODULE_5__["bMobileDevice"]) {
      this.code.focused(true);
    }
  };

  return TwoFactorTestPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_8__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "testCodeCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "testCodeCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 557 */
/*!*****************************************!*\
  !*** ./dev/View/Popup/AddOpenPgpKey.js ***!
  \*****************************************/
/*! exports provided: AddOpenPgpKeyPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AddOpenPgpKeyPopupView", function() { return AddOpenPgpKeyPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AddOpenPgpKeyPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ 45);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ 59);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Stores/User/Pgp */ 41);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _class, _class2;










var AddOpenPgpKeyPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["popup"])({
  name: 'View/Popup/AddOpenPgpKey',
  templateID: 'PopupsAddOpenPgpKey'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_9__["command"])(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(AddOpenPgpKeyPopupView, _AbstractViewNext);

  function AddOpenPgpKeyPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.key = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    _this.key.focus = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.key.error = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.key.errorMessage = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');

    _this.key.subscribe(function () {
      _this.key.error(false);

      _this.key.errorMessage('');
    });

    return _this;
  }

  var _proto = AddOpenPgpKeyPopupView.prototype;

  _proto.addOpenPgpKeyCommand = function addOpenPgpKeyCommand() {
    // eslint-disable-next-line max-len
    var reg = /[-]{3,6}BEGIN[\s]PGP[\s](PRIVATE|PUBLIC)[\s]KEY[\s]BLOCK[-]{3,6}[\s\S]+?[-]{3,6}END[\s]PGP[\s](PRIVATE|PUBLIC)[\s]KEY[\s]BLOCK[-]{3,6}/gi,
        openpgpKeyring = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].openpgpKeyring;
    var keyTrimmed = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["trim"])(this.key());

    if (/[\n]/.test(keyTrimmed)) {
      keyTrimmed = keyTrimmed.replace(/[\r]+/g, '').replace(/[\n]{2,}/g, '\n\n');
    }

    this.key.error('' === keyTrimmed);
    this.key.errorMessage('');

    if (!openpgpKeyring || this.key.error()) {
      return false;
    }

    var match = null,
        count = 30,
        done = false;

    do {
      match = reg.exec(keyTrimmed);

      if (match && 0 < count) {
        if (match[0] && match[1] && match[2] && match[1] === match[2]) {
          var err = null;

          if ('PRIVATE' === match[1]) {
            err = openpgpKeyring.privateKeys.importKey(match[0]);
          } else if ('PUBLIC' === match[1]) {
            err = openpgpKeyring.publicKeys.importKey(match[0]);
          }

          if (err) {
            this.key.error(true);
            this.key.errorMessage(err && err[0] ? '' + err[0] : '');
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["log"])(err);
          }
        }

        count -= 1;
        done = false;
      } else {
        done = true;
      }
    } while (!done);

    openpgpKeyring.store();
    Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_8__[/* getApp */ "a"])().reloadOpenPgpKeys();

    if (this.key.error()) {
      return false;
    }

    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_6__["delegateRun"])(this, 'cancelCommand');
    return true;
  };

  _proto.clearPopup = function clearPopup() {
    this.key('');
    this.key.error(false);
    this.key.errorMessage('');
  };

  _proto.onShow = function onShow() {
    this.clearPopup();
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    this.key.focus(true);
  };

  return AddOpenPgpKeyPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_10__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "addOpenPgpKeyCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "addOpenPgpKeyCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 558 */
/*!*****************************************!*\
  !*** ./dev/View/Popup/NewOpenPgpKey.js ***!
  \*****************************************/
/*! exports provided: NewOpenPgpKeyPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NewOpenPgpKeyPopupView", function() { return NewOpenPgpKeyPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return NewOpenPgpKeyPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor */ 19);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor */ 20);
/* harmony import */ var _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ 48);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! _ */ 3);
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Stores/User/Pgp */ 41);
/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Helper/Apps/User */ 22);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);



var _dec, _dec2, _class, _class2;











var NewOpenPgpKeyPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["popup"])({
  name: 'View/Popup/NewOpenPgpKey',
  templateID: 'PopupsNewOpenPgpKey'
}), _dec2 = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["command"])(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(NewOpenPgpKeyPopupView, _AbstractViewNext);

  function NewOpenPgpKeyPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.email = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    _this.email.focus = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    _this.email.error = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.name = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    _this.password = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');
    _this.keyBitLength = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Magics"].BitLength2048);
    _this.submitRequest = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false);
    _this.submitError = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable('');

    _this.email.subscribe(function () {
      _this.email.error(false);
    });

    return _this;
  }

  var _proto = NewOpenPgpKeyPopupView.prototype;

  _proto.generateOpenPgpKeyCommand = function generateOpenPgpKeyCommand() {
    var _this2 = this;

    var userId = {},
        openpgpKeyring = Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].openpgpKeyring;
    this.email.error('' === Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["trim"])(this.email()));

    if (!openpgpKeyring || this.email.error()) {
      return false;
    }

    userId.email = this.email();

    if ('' !== this.name()) {
      userId.name = this.name();
    }

    this.submitRequest(true);
    this.submitError('');

    ___WEBPACK_IMPORTED_MODULE_4___default.a.delay(function () {
      try {
        Stores_User_Pgp__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].openpgp.generateKey({
          userIds: [userId],
          numBits: Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["pInt"])(_this2.keyBitLength()),
          passphrase: Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["trim"])(_this2.password())
        }).then(function (keyPair) {
          _this2.submitRequest(false);

          if (keyPair && keyPair.privateKeyArmored) {
            openpgpKeyring.privateKeys.importKey(keyPair.privateKeyArmored);
            openpgpKeyring.publicKeys.importKey(keyPair.publicKeyArmored);
            openpgpKeyring.store();
            Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_9__[/* getApp */ "a"])().reloadOpenPgpKeys();
            Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["delegateRun"])(_this2, 'cancelCommand');
          }
        }).catch(function (e) {
          _this2.submitRequest(false);

          _this2.showError(e);
        });
      } catch (e) {
        _this2.submitRequest(false);

        _this2.showError(e);
      }
    }, Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Magics"].Time100ms);

    return true;
  };

  _proto.showError = function showError(e) {
    Object(Common_Utils__WEBPACK_IMPORTED_MODULE_7__["log"])(e);

    if (e && e.message) {
      this.submitError(e.message);
    }
  };

  _proto.clearPopup = function clearPopup() {
    this.name('');
    this.password('');
    this.email('');
    this.email.error(false);
    this.keyBitLength(Common_Enums__WEBPACK_IMPORTED_MODULE_6__["Magics"].BitLength2048);
    this.submitError('');
  };

  _proto.onShow = function onShow() {
    this.clearPopup();
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    this.email.focus(true);
  };

  return NewOpenPgpKeyPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_11__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(_class2.prototype, "generateOpenPgpKeyCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_2___default()(_class2.prototype, "generateOpenPgpKeyCommand"), _class2.prototype)), _class2)) || _class);


/***/ }),
/* 559 */
/*!******************************************!*\
  !*** ./dev/View/Popup/ViewOpenPgpKey.js ***!
  \******************************************/
/*! exports provided: ViewOpenPgpKeyPopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewOpenPgpKeyPopupView", function() { return ViewOpenPgpKeyPopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ViewOpenPgpKeyPopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! key */ 21);
/* harmony import */ var key__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(key__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0);
/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;







var ViewOpenPgpKeyPopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_5__["popup"])({
  name: 'View/Popup/ViewOpenPgpKey',
  templateID: 'PopupsViewOpenPgpKey'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(ViewOpenPgpKeyPopupView, _AbstractViewNext);

  function ViewOpenPgpKeyPopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.key = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    _this.keyDom = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(null);
    _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].PopupViewOpenPGP;
    return _this;
  }

  var _proto = ViewOpenPgpKeyPopupView.prototype;

  _proto.clearPopup = function clearPopup() {
    this.key('');
  };

  _proto.selectKey = function selectKey() {
    var el = this.keyDom();

    if (el) {
      Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["selectElement"])(el);
    }
  };

  _proto.onShow = function onShow(openPgpKey) {
    this.clearPopup();

    if (openPgpKey) {
      this.key(openPgpKey.armor);
    }
  };

  _proto.onBuild = function onBuild() {
    var _this2 = this;

    key__WEBPACK_IMPORTED_MODULE_2___default()('ctrl+a, command+a', Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].PopupViewOpenPGP, function () {
      _this2.selectKey();

      return false;
    });
  };

  return ViewOpenPgpKeyPopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_6__[/* AbstractViewNext */ "a"])) || _class);


/***/ }),
/* 560 */
/*!***************************************!*\
  !*** ./dev/View/Popup/WelcomePage.js ***!
  \***************************************/
/*! exports provided: WelcomePagePopupView, default */
/*! all exports used */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WelcomePagePopupView", function() { return WelcomePagePopupView; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return WelcomePagePopupView; });
/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10);
/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1);
/* harmony import */ var Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Promises/User/Ajax */ 93);
/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Knoin/Knoin */ 8);
/* harmony import */ var Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Knoin/AbstractViewNext */ 25);


var _dec, _class;





var WelcomePagePopupView = (_dec = Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_3__["popup"])({
  name: 'View/Popup/WelcomePage',
  templateID: 'PopupsWelcomePage'
}), _dec(_class = /*#__PURE__*/function (_AbstractViewNext) {
  Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(WelcomePagePopupView, _AbstractViewNext);

  function WelcomePagePopupView() {
    var _this;

    _this = _AbstractViewNext.call(this) || this;
    _this.welcomePageURL = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable('');
    _this.closeFocused = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false);
    return _this;
  }

  var _proto = WelcomePagePopupView.prototype;

  _proto.clearPopup = function clearPopup() {
    this.welcomePageURL('');
    this.closeFocused(false);
  }
  /**
   * @param {string} sUrl
   * @returns {void}
   */
  ;

  _proto.onShow = function onShow(sUrl) {
    this.clearPopup();
    this.welcomePageURL(sUrl);
  };

  _proto.onShowWithDelay = function onShowWithDelay() {
    this.closeFocused(true);
  };

  _proto.onHide = function onHide() {
    Promises_User_Ajax__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].welcomeClose();
  };

  return WelcomePagePopupView;
}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_4__[/* AbstractViewNext */ "a"])) || _class);


/***/ })
/******/ ]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9FbnVtcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwva28uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9VdGlscy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuX1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvd1wiIiwid2VicGFjazovLy8uL2Rldi9TdG9yYWdlL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vR2xvYmFscy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cualF1ZXJ5XCIiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0tub2luLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vVHJhbnNsYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9Gb2xkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1VzZXIvTWVzc2FnZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NhY2hlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vTGlua3MuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1JlbW90ZS9Vc2VyL0FqYXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5rZXlcIiIsIndlYnBhY2s6Ly8vLi9kZXYvSGVscGVyL0FwcHMvVXNlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NvbnN0cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vQWJzdHJhY3RWaWV3TmV4dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1NvY2lhbC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1VzZXIvQXBwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zZXQtdGltZW91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Vc2VyL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vUGx1Z2lucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9QZ3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mYWlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Vc2VyL0FjY291bnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3NldC1pbnRlcnZhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmFnZS9DbGllbnQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9Nb21lbnRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9wcm9taXNlLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5oYXNoZXJcIiIsIndlYnBhY2s6Ly8vLi9kZXYvSGVscGVyL01lc3NhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vQWJzdHJhY3RNb2RlbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVkZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnRyeS12aXJ0dWFsLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvTGFuZ3VhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0VtYWlsLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vQXVkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvUHJvbWlzZXMvVXNlci9BamF4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93Lm1vbWVudFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5wcm9ncmVzc0pzXCIiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Vc2VyL0lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9Db250YWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcmVkZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9KYXNzbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9UaGVtZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1VzZXIvTm90aWZpY2F0aW9uLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvQ29tcG9zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0U2NyZWVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LnNzbVwiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3JhZ2UvUmFpbkxvb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmNyb3Nzcm9hZHNcIiIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0Q2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VtYWlsanMtYWRkcmVzc3BhcnNlci9kaXN0L2FkZHJlc3NwYXJzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2h0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93Lkp1YVwiIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVXNlci9UZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvTW9kZWwvQXR0YWNobWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb20taXRlcmFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcubWF0Y2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9DaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0h0bWxFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL2Rldi9FeHRlcm5hbC9PcGVudGlwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9waWthZGF5L3Bpa2FkYXkuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LkF1dG9saW5rZXJcIiIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL01pbWUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Vc2VyL0ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0Fzay5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1VzZXIvUXVvdGEuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmlmdmlzaWJsZVwiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcHJvbWlzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbWljcm90YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LWludGVydmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzLmpzIiwid2VicGFjazovLy8uL2Rldi9ib290c3RyYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BYnN0cmFjdEFwcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL2Rldi9SZW1vdGUvQWJzdHJhY3RBamF4LmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWJzdHJhY3RTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQXBwL0Fic3RyYWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9Lbm9pbi9BYnN0cmFjdEJvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdFJhZGlvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0NvbXBvc2VBdHRhY2htZW50LmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9Db250YWN0UHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc2VhcmNoLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0ZvbGRlclN5c3RlbS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvUHJvbWlzZXMvQWJzdHJhY3RCYXNpYy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Vc2VyL0Fic3RyYWN0U3lzdGVtRHJvcERvd24uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9TZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvTW9kZWwvTWVzc2FnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanMtY29va2llL3NyYy9qcy5jb29raWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zdHJpbmcvdmlydHVhbC90cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2FtZS12YWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvSHRtbC9QcmV2aWV3TWVzc2FnZS5odG1sIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0FjY291bnQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvSWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9TYXZlVHJpZ2dlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0lucHV0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2VsZWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvUmFkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9UZXh0QXJlYS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9TY3JpcHQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9NYXRlcmlhbERlc2lnbi9DaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQXBwL1VzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9CYXNlNjQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1Byb21pc2VzL1VzZXIvUG9wdWxhdG9yLmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9GaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0ZpbHRlckNvbmRpdGlvbi5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cucXJcIiIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9LZXlib2FyZFNob3J0Y3V0c0hlbHAuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvQ29udGFjdHMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvRm9sZGVyQ3JlYXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Ud29GYWN0b3JDb25maWd1cmF0aW9uLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL1RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb3phZC9kaXN0L2xvemFkLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NsaWVudFN0b3JhZ2VEcml2ZXIvQ29va2llLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vQ2xpZW50U3RvcmFnZURyaXZlci9Mb2NhbFN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL0ZvbGRlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvUHJvbWlzZXMvQWJzdHJhY3RBamF4LmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9BY2NvdW50LmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9JZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvTW9kZWwvVGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L01vZGVsL09wZW5QZ3BLZXkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NjcmVlbi9Vc2VyL0xvZ2luLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1VzZXIvTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NjcmVlbi9Vc2VyL01haWxCb3guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvVXNlci9NYWlsQm94L1N5c3RlbURyb3BEb3duLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1VzZXIvTWFpbEJveC9Gb2xkZXJMaXN0LmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9Db250YWN0LmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1VzZXIvTWFpbEJveC9NZXNzYWdlTGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Vc2VyL01haWxCb3gvTWVzc2FnZVZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NjcmVlbi9Vc2VyL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9Vc2VyL0dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvQ29udGFjdHMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvQWNjb3VudHMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvRmlsdGVycy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvVXNlci9TZWN1cml0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvVXNlci9Tb2NpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvQ2hhbmdlUGFzc3dvcmQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvVGVtcGxhdGVzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9Vc2VyL0ZvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL1VzZXIvVGhlbWVzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9Vc2VyL09wZW5QZ3AuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvVXNlci9TZXR0aW5ncy9TeXN0ZW1Ecm9wRG93bi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Vc2VyL1NldHRpbmdzL01lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvVXNlci9TZXR0aW5ncy9QYW5lLmpzIiwid2VicGFjazovLy8uL2Rldi9hcHAuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvTWVzc2FnZU9wZW5QZ3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvQ29tcG9zZU9wZW5QZ3AuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvRm9sZGVyQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvQWR2YW5jZWRTZWFyY2guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvVHdvRmFjdG9yVGVzdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9BZGRPcGVuUGdwS2V5LmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL05ld09wZW5QZ3BLZXkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvVmlld09wZW5QZ3BLZXkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvUG9wdXAvV2VsY29tZVBhZ2UuanMiXSwibmFtZXMiOlsiRmlsZVR5cGUiLCJTdG9yYWdlUmVzdWx0VHlwZSIsIkZvY3VzZWQiLCJTdGF0ZSIsIlN0YXRlVHlwZSIsIkNhcGEiLCJLZXlTdGF0ZSIsIkZvbGRlclR5cGUiLCJTZXJ2ZXJGb2xkZXJUeXBlIiwiTG9naW5TaWduTWVUeXBlQXNTdHJpbmciLCJMb2dpblNpZ25NZVR5cGUiLCJDb21wb3NlVHlwZSIsIlVwbG9hZEVycm9yQ29kZSIsIlNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24iLCJDbGllbnRTaWRlS2V5TmFtZSIsIkV2ZW50S2V5Q29kZSIsIk1lc3NhZ2VTZXRBY3Rpb24iLCJNZXNzYWdlU2VsZWN0QWN0aW9uIiwiRGVza3RvcE5vdGlmaWNhdGlvbiIsIk1lc3NhZ2VQcmlvcml0eSIsIkVkaXRvckRlZmF1bHRUeXBlIiwiU2VydmVyU2VjdXJlIiwiU2VhcmNoRGF0ZVR5cGUiLCJTYXZlU2V0dGluZ3NTdGVwIiwiTGF5b3V0IiwiRmlsdGVyQ29uZGl0aW9uRmllbGQiLCJGaWx0ZXJDb25kaXRpb25UeXBlIiwiRmlsdGVyc0FjdGlvbiIsIkZpbHRlclJ1bGVzVHlwZSIsIlNpZ25lZFZlcmlmeVN0YXR1cyIsIkNvbnRhY3RQcm9wZXJ0eVR5cGUiLCJNYWdpY3MiLCJQb3J0cyIsIk5vdGlmaWNhdGlvbiIsImtvIiwid2luZG93IiwiJHdpbiIsIiQiLCJmRGlzcG9zYWxUb29sdGlwSGVscGVyIiwiZWxlbWVudCIsInV0aWxzIiwiZG9tTm9kZURpc3Bvc2FsIiwiYWRkRGlzcG9zZUNhbGxiYWNrIiwiX19vcGVudGlwIiwiZGVhY3RpdmF0ZSIsImJpbmRpbmdIYW5kbGVycyIsInVwZGF0ZVdpZHRoIiwiaW5pdCIsImZWYWx1ZUFjY2Vzc29yIiwiJGVsIiwiZlZhbHVlIiwiZkluaXQiLCJ3aWR0aCIsIlRpbWU1MDBtcyIsIm9uIiwib2ZmIiwiZWRpdG9yIiwiSHRtbEVkaXRvciIsInJlcXVpcmUiLCJkZWZhdWx0IiwiZlVwZGF0ZUVkaXRvclZhbHVlIiwiX19lZGl0b3IiLCJzZXRIdG1sT3JQbGFpbiIsImZVcGRhdGVLb1ZhbHVlIiwiZ2V0RGF0YVdpdGhIdG1sTWFyayIsImZPblJlYWR5IiwiaXNPYnNlcnZhYmxlIiwiX19mZXRjaEVkaXRvclZhbHVlIiwic3Vic2NyaWJlIiwianNvbiIsInRleHQiLCJKU09OIiwic3RyaW5naWZ5IiwidW53cmFwIiwidXBkYXRlIiwic2Nyb2xsZXJTaGFkb3dzIiwibGltaXQiLCJjb250IiwiZkZ1bmMiLCJfIiwidGhyb3R0bGUiLCJ0b2dnbGVDbGFzcyIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsInBpa2FkYXkiLCJmQWxsQmluZGluZ3NBY2Nlc3NvciIsInZpZXdNb2RlbCIsImJpbmRpbmdDb250ZXh0IiwidGV4dElucHV0IiwiUGlrYWRheSIsIl9fcGlrYWRheSIsImZpZWxkIiwidmlzaWJsZUFuaW1hdGVkIiwiYWRkQ2xhc3MiLCJzaG93IiwiaGlkZSIsImRlbGF5IiwicmVtb3ZlQ2xhc3MiLCJ0b29sdGlwIiwiaXNNb2JpbGUiLCJkYXRhIiwiaXNJMThOIiwiR2xvYmFscyIsImJNb2JpbGVEZXZpY2UiLCJzVmFsdWUiLCJpc0Z1bmN0aW9uIiwiT3BlbnRpcCIsImRyb3Bkb3duVmlzaWJpbGl0eSIsInYiLCJzZXRDb250ZW50IiwiYWN0aXZhdGUiLCJUcmFuc2xhdG9yIiwiaTE4biIsInRyaWdnZXIiLCJ0b29sdGlwRXJyb3JUaXAiLCJzdHlsZSIsImhpZGVPbiIsInRpcEpvaW50IiwiZG9jdW1lbnQiLCJ2YWx1ZSIsIm9wZW5UaXBzIiwiaXMiLCJUaW1lMTAwbXMiLCJyZWdpc3RyYXRlQm9vdHN0cmFwRHJvcGRvd24iLCJhQm9vdHN0cmFwRHJvcGRvd25zIiwicHVzaCIsImNsaWNrIiwiZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5Iiwib3BlbkRyb3Bkb3duVHJpZ2dlciIsImhhc0NsYXNzIiwiZHJvcGRvd24iLCJmb2N1cyIsImRyb3Bkb3duQ2xvc2VyIiwiY2xvc2VzdCIsInBvcG92ZXIiLCJjc3N0ZXh0Iiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJyZXNpemVjcm9wIiwib25LZXlEb3duIiwiZXZlbnQiLCJjYWxsIiwib25FbnRlciIsInBhcnNlSW50Iiwia2V5Q29kZSIsIm9uU3BhY2UiLCJvblRhYiIsInNoaWZ0S2V5Iiwib25Fc2MiLCJjbGlja09uVHJ1ZSIsIm1vZGFsIiwiVXRpbHMiLCJ3aW5kb3dSZXNpemVDYWxsYmFjayIsIiRodG1sIiwibW9tZW50IiwibW9tZW50VG9Ob2RlIiwiaTE4bkluaXQiLCJpMThuVG9Ob2RlcyIsInRyYW5zbGF0b3JJbml0IiwiaTE4blVwZGF0ZSIsImxpbmsiLCJhdHRyIiwidGl0bGUiLCJ0ZXh0RiIsImluaXREb20iLCJpbml0Rml4ZWRUcmlnZ2VyIiwidmFsdWVzIiwidG9wIiwiJGNvbnRhaW5lciIsInJlc2l6ZSIsIm9mZnNldCIsImNzcyIsImluaXRSZXNpemVUcmlnZ2VyIiwib0VsZW1lbnQiLCJwSW50Iiwic2l6ZSIsImhlaWdodCIsImFwcGVuZERvbSIsImVtcHR5IiwiYXBwZW5kIiwiZHJhZ2dhYmxlIiwidHJpZ2dlclpvbmUiLCJzY3JvbGxTcGVlZCIsImZBbGxWYWx1ZUZ1bmMiLCJkcm9wcGFibGVTZWxlY3RvciIsImNvbmYiLCJkaXN0YW5jZSIsImhhbmRsZSIsImN1cnNvckF0IiwibGVmdCIsInJlZnJlc2hQb3NpdGlvbnMiLCJzY3JvbGwiLCJkcmFnIiwic3RvcCIsImhlbHBlciIsImVhY2giLCIkdGhpcyIsImJvdHRvbVBvcyIsImNsZWFySW50ZXJ2YWwiLCJwYWdlWCIsInBhZ2VZIiwibW92ZVVwIiwid2luZG93UmVzaXplIiwibW92ZURvd24iLCJ0YXJnZXQiLCJkYXRhRm9yIiwicmVtb3ZlSW5Gb2N1cyIsImRyb3BwYWJsZSIsImZWYWx1ZUZ1bmMiLCJmT3ZlckNhbGxiYWNrIiwiZHJvcHBhYmxlT3ZlciIsImZPdXRDYWxsYmFjayIsImRyb3BwYWJsZU91dCIsInRvbGVyYW5jZSIsImhvdmVyQ2xhc3MiLCJkcm9wIiwib3ZlciIsIm91dCIsInVpIiwibmFubyIsIlNldHRpbmdzIiwiYkRpc2FibGVOYW5vU2Nyb2xsIiwiYXBwU2V0dGluZ3NHZXQiLCJuYW5vU2Nyb2xsZXIiLCJpT1NOYXRpdmVTY3JvbGxpbmciLCJwcmV2ZW50UGFnZVNjcm9sbGluZyIsInNhdmVUcmlnZ2VyIiwidG9TdHJpbmciLCJlbmQiLCJlbWFpbHNUYWdzIiwiRW1haWxNb2RlbCIsImZBbGxCaW5kaW5ncyIsImZBdXRvQ29tcGxldGVTb3VyY2UiLCJhdXRvQ29tcGxldGVTb3VyY2UiLCJpbnB1dERlbGltaXRlcnMiLCJmRm9jdXNDYWxsYmFjayIsImZvY3VzZWQiLCJpbnB1dG9zYXVydXMiLCJwYXJzZU9uQmx1ciIsImFsbG93RHJhZ0FuZERyb3AiLCJmb2N1c0NhbGxiYWNrIiwic3BsaXRIb29rIiwiaW5kZXhPZiIsInN1YnN0ciIsInNwbGl0RW1haWxMaW5lIiwicGFyc2VIb29rIiwiaW5wdXQiLCJmbGF0dGVuIiwiaW5wdXRWYWx1ZSIsInBhcnNlRW1haWxMaW5lIiwibGVuZ3RoIiwiaXRlbSIsImlzT2JqZWN0IiwidG9MaW5lIiwiY2hhbmdlIiwiJG9FbCIsInZhbCIsImNvbW1hbmQiLCJqcUVsZW1lbnQiLCJpc0NvbW1hbmQiLCJFcnJvciIsImVuYWJsZWQiLCJvYnNlcnZhYmxlIiwiY2FuRXhlY3V0ZSIsIl9fcmVhbENhbkV4ZWN1dGUiLCJjb21wdXRlZCIsInJlc3VsdCIsInByb3AiLCJleHRlbmRlcnMiLCJ0cmltbWVyIiwicmVhZCIsIndyaXRlIiwibmV3VmFsdWUiLCJwb3NJbnRlcmVyIiwiZGVmYXVsdFZhbCIsImxpbWl0ZWRMaXN0IiwiY3VycmVudFZhbHVlIiwibGlzdCIsImlzTm9uRW1wdHlBcnJheSIsImluQXJyYXkiLCJleHRlbmQiLCJub3RpZnkiLCJ2YWx1ZUhhc011dGF0ZWQiLCJyZXZlcnNpYmxlIiwiY29tbWl0IiwicmV2ZXJzZSIsImNvbW1pdGVkVmFsdWUiLCJ0b2dnbGVTdWJzY3JpYmUiLCJvcHRpb25zIiwidG9nZ2xlU3Vic2NyaWJlUHJvcGVydHkiLCJwcmV2IiwibmV4dCIsImZhbHNlVGltZW91dCIsIm9wdGlvbiIsImlGYWxzZVRpbWVvdXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0Iiwic3BlY2lhbFRocm90dGxlIiwiaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXRWYWx1ZSIsImlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0IiwidmFsdWVGb3JSZWFkIiwiYlZhbHVlIiwiaWRsZVRyaWdnZXIiLCJJZGxlIiwiZm4iLCJ2YWxpZGF0ZU5vbmUiLCJoYXNFcnJvciIsInZhbGlkYXRlRW1haWwiLCJ0ZXN0IiwidmFsaWRhdGVTaW1wbGVFbWFpbCIsImRlbGV0ZUFjY2Vzc0hlbHBlciIsInZhbGlkYXRlRnVuYyIsImhhc0Z1bmNFcnJvciIsInRyaW0iLCJpc0FycmF5IiwiaXNGdW5jIiwiaXNVbmQiLCJpc1VuZGVmaW5lZCIsImlzTnVsbCIsImhhcyIsImJpbmQiLCJub29wIiwibm9vcFRydWUiLCJub29wRmFsc2UiLCJzaWxlbnRUcnlDYXRjaCIsImZ1bmMiLCJlIiwiaXNOb3JtYWwiLCJpc1Bvc051bWVyaWMiLCJpbmNsdWRlWmVybyIsImRlZmF1bHRWYWx1ciIsImlzTmFOIiwicFN0cmluZyIsInBCb29sIiwiYm9vbFRvQWpheCIsImVuY29kZVVSSUNvbXBvbmVudCIsImNvbXBvbmVudCIsImRlY29kZVVSSUNvbXBvbmVudCIsImRlY29kZVVSSSIsInVybCIsImVuY29kZVVSSSIsInNpbXBsZVF1ZXJ5UGFyc2VyIiwicXVlcnlTdHJpbmciLCJpbmRleCIsImxlbiIsInRlbXAiLCJxdWVyaWVzIiwic3BsaXQiLCJwYXJhbXMiLCJmYWtlTWQ1IiwibGluZSIsImxpbmVMZW4iLCJNYXRoIiwicm91bmQiLCJyYW5kb20iLCJlbmNvZGVIdG1sIiwiZXNjYXBlIiwic3BsaXRQbGFpblRleHQiLCJwcmVmaXgiLCJzdWJUZXh0Iiwic3BhY2VQb3MiLCJuZXdMaW5lUG9zIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJ0aW1lT3V0QWN0aW9uIiwidGltZU91dHMiLCJhY3Rpb24iLCJmRnVuY3Rpb24iLCJ0aW1lT3V0IiwidGltZU91dEFjdGlvblNlY29uZCIsImRlTW9kdWxlIiwibSIsImluRm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiX19pbkZvY3VzQ2FjaGUiLCJmb3JjZSIsImJsdXIiLCJhY3RpdmVFbCIsInJlbW92ZVNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInNlbCIsInJlbW92ZUFsbFJhbmdlcyIsInNlbGVjdGlvbiIsInJlcGx5U3ViamVjdEFkZCIsInN1YmplY3QiLCJ0b1VwcGVyQ2FzZSIsInJlcGxhY2UiLCJyZSIsImZ3ZCIsInBhcnRzIiwicHJlZml4SXNSZSIsInBhcnQiLCJ0cmltbWVkUGFydCIsImpvaW4iLCJyb3VuZE51bWJlciIsIm51bSIsImRlYyIsInBvdyIsImZyaWVuZGx5U2l6ZSIsInNpemVJbkJ5dGVzIiwibG9nIiwiZGVzYyIsImNvbnNvbGUiLCJkZWxlZ2F0ZVJ1biIsIm9iamVjdCIsIm1ldGhvZE5hbWUiLCJraWxsQ3RybEFDdHJsUyIsImN0cmxLZXkiLCJhbHRLZXkiLCJrZXkiLCJ3aGljaCIsIlMiLCJwcmV2ZW50RGVmYXVsdCIsIkEiLCJzZW5kZXIiLCJzcmNFbGVtZW50IiwiY29udGVudEVkaXRhYmxlIiwidGFnTmFtZSIsIm1hdGNoIiwiY2xlYXIiLCJjcmVhdGVDb21tYW5kTGVnYWN5IiwiY29udGV4dCIsImZFeGVjdXRlIiwiZkNhbkV4ZWN1dGUiLCJmUmVzdWx0IiwiZk5vbkVtcHR5IiwiYXJncyIsImFwcGx5IiwiY29udmVydFRoZW1lTmFtZSIsIm1lbW9pemUiLCJ0aGVtZSIsInF1b3RlTmFtZSIsIm5hbWUiLCJtaWNyb3RpbWUiLCJEYXRlIiwiZ2V0VGltZSIsInRpbWVzdGFtcCIsImNvbnZlcnRMYW5nTmFtZSIsImxhbmd1YWdlIiwiaXNFbmciLCJkcmFnZ2FibGVQbGFjZSIsImFwcGVuZFRvIiwiZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIiwiZG9tSXRlbSIsImRpc2FibGVkIiwiY2xlYXJCcVN3aXRjaGVyIiwiYm9keSIsInJlbW92ZSIsInJlbW92ZUF0dHIiLCJwcmV2aWV3TWVzc2FnZSIsImlzSHRtbCIsInByaW50IiwiZGF0ZSIsImZyb21DcmVkcyIsInRvQ3JlZHMiLCJ0b0xhYmVsIiwiY2NDbGFzcyIsImNjQ3JlZHMiLCJjY0xhYmVsIiwid2luIiwib3BlbiIsImRvYyIsImJvZHlDbG9uZSIsImNsb25lIiwiYm9keUNsYXNzIiwiaHRtbCIsImNsb3NlIiwic2V0dGluZ3NTYXZlSGVscGVyRnVuY3Rpb24iLCJmQ2FsbGJhY2siLCJrb1RyaWdnZXIiLCJ0aW1lciIsInR5cGUiLCJjYWNoZWQiLCJyZXF1ZXN0QWN0aW9uIiwicmVxdWVzdFBhcmFtZXRlcnMiLCJSZXN1bHQiLCJUcnVlUmVzdWx0IiwiRmFsc2VSZXN1bHQiLCJzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiIsInNldHRpbmdzU2F2ZUhlbHBlclN1YnNjcmliZUZ1bmN0aW9uIiwicmVtb3RlIiwic2V0dGluZ05hbWUiLCJmVHJpZ2dlckZ1bmN0aW9uIiwic2F2ZUFkbWluQ29uZmlnIiwic2F2ZVNldHRpbmdzIiwiZmluZEVtYWlsQW5kTGlua3MiLCJBdXRvbGlua2VyIiwibmV3V2luZG93Iiwic3RyaXBQcmVmaXgiLCJ1cmxzIiwiZW1haWwiLCJtZW50aW9uIiwicGhvbmUiLCJoYXNodGFnIiwicmVwbGFjZUZuIiwiZ2V0VHlwZSIsIm1hdGNoZWRUZXh0IiwiaHRtbFRvUGxhaW4iLCJwb3MiLCJpUDEiLCJpUDIiLCJpUDMiLCJjb252ZXJ0QmxvY2txdW90ZSIsImJsb2NrcXVvdGVUZXh0IiwiY29udmVydERpdnMiLCJkaXZUZXh0IiwiY29udmVydFByZSIsImZpeEF0dGlidXRlVmFsdWUiLCJjb252ZXJ0TGlua3MiLCIkZGl2IiwicGxhaW5Ub0h0bWwiLCJwbGFpbiIsImZpbmRFbWFpbEFuZExpbmtzSW5UZXh0IiwiYkluIiwiYkRvIiwiYlN0YXJ0IiwiYU5leHRUZXh0Iiwic0xpbmUiLCJpSW5kZXgiLCJhVGV4dCIsImZvbGRlckxpc3RPcHRpb25zQnVpbGRlciIsImFTeXN0ZW0iLCJhTGlzdCIsImFEaXNhYmxlZCIsImFIZWFkZXJMaW5lcyIsImlVbkRlZXAiLCJmRGlzYWJsZUNhbGxiYWNrIiwiZlZpc2libGVDYWxsYmFjayIsImZSZW5hbWVDYWxsYmFjayIsImJTeXN0ZW0iLCJiQnVpbGRVbnZpc2libGUiLCJvSXRlbSIsImJTZXAiLCJpTGVuIiwiYVJlc3VsdCIsInNEZWVwUHJlZml4IiwiaWQiLCJzeXN0ZW0iLCJzZXBvcmF0b3IiLCJmdWxsTmFtZVJhdyIsInNlbGVjdGFibGUiLCJzdWJTY3JpYmVkIiwiZXhpc3RlbiIsImhhc1N1YlNjcmliZWRTdWJmb2xkZXJzIiwiVXNlciIsIkFycmF5IiwiZGVlcCIsInN1YkZvbGRlcnMiLCJzZWxlY3RFbGVtZW50IiwicmFuZ2UiLCJjcmVhdGVSYW5nZSIsInNlbGVjdE5vZGVDb250ZW50cyIsImFkZFJhbmdlIiwiY3JlYXRlVGV4dFJhbmdlIiwibW92ZVRvRWxlbWVudFRleHQiLCJzZWxlY3QiLCJkZWJvdW5jZSIsIkdsb2JhbHNEYXRhIiwidHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlIiwiY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlIiwiZ2V0Q29uZmlndXJhdGlvbkZyb21TY3JpcHRUYWciLCJjb25maWd1cmF0aW9uIiwicGFyc2UiLCJkaXNwb3NlT25lIiwicHJvcE9yVmFsdWUiLCJkaXNwb3NhYmxlIiwiZGlzcG9zZSIsImRpc3Bvc2VPYmplY3QiLCJkaXNwb3NhYmxlcyIsIm9iamVjdEZvckVhY2giLCJkZWxlZ2F0ZVJ1bk9uRGVzdHJveSIsIm9iamVjdE9yT2JqZWN0cyIsIm9uRGVzdHJveSIsImFwcGVuZFN0eWxlcyIsIiRzdHlsZVRhZyIsIl9fdGhlbWVUaW1lciIsIl9fdGhlbWVBamF4IiwiY2hhbmdlVGhlbWUiLCJ0aGVtZVRyaWdnZXIiLCJ0aGVtZUxpbmsiLCJjbGVhclRpbWVyIiwidGhlbWVTdHlsZSIsIkFuaW1hdGUiLCJhYm9ydCIsImFqYXgiLCJkYXRhVHlwZSIsInRoZW4iLCJhZnRlciIsImNvbXB1dGVkUGFnZW5hdG9ySGVscGVyIiwia29DdXJyZW50UGFnZSIsImtvUGFnZUNvdW50IiwiY3VycmVudFBhZ2UiLCJwYWdlQ291bnQiLCJmQWRkIiwiY3VzdG9tTmFtZSIsImN1cnJlbnQiLCJjdXN0b20iLCJ1bnNoaWZ0IiwiZ2V0RmlsZUV4dGVuc2lvbiIsImZpbGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwb3AiLCJtaW1lQ29udGVudFR5cGUiLCJleHQiLCJNaW1lIiwiaXNUcmFuc3BhcmVudCIsImNvbG9yIiwiZ2V0UmVhbEhlaWdodCIsIiRoY29udCIsInJlc2l6ZUFuZENyb3AiLCJpbWciLCJJbWFnZSIsIm9ubG9hZCIsImRpZmYiLCJjYW52YXMiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZ2V0Q29udGV4dCIsImZpbGxTdHlsZSIsImZpbGxSZWN0IiwiZHJhd0ltYWdlIiwidG9EYXRhVVJMIiwic3JjIiwibWFpbFRvSGVscGVyIiwibWFpbFRvVXJsIiwiUG9wdXBDb21wb3NlVmlld01vZGVsIiwidG8iLCJjYyIsImJjYyIsInF1ZXJ5Iiwic2hvd1NjcmVlblBvcHVwIiwiRW1wdHkiLCJkb21SZWFkeSIsInRpbWVvdXQiLCJTdHJpbmciLCJzdHIiLCJzdGFydCIsIlNFVFRJTkdTIiwiX19ybGFoX2RhdGEiLCJBUFBfU0VUVElOR1MiLCJTeXN0ZW0iLCJzZXR0aW5nc0dldCIsInNldHRpbmdzU2V0IiwiY2FwYSIsIl9fc2l6ZXMiLCIkZG9jIiwiJGJvZHkiLCJwb3NpdGlvbiIsInN0YXJ0TWljcm90aW1lIiwicmF0ZUxpbWl0IiwidXNlS2V5Ym9hcmRTaG9ydGN1dHMiLCJzVXNlckFnZW50IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYklFIiwiYkNocm9tZSIsImJTYWZhcmkiLCJiQW5pbWF0aW9uU3VwcG9ydGVkIiwiYlhNTEh0dHBSZXF1ZXN0U3VwcG9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJiSXNIdHRwcyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJodG1sRWRpdG9yRGVmYXVsdENvbmZpZyIsImdyb3VwcyIsImh0bWxFZGl0b3JMYW5nc01hcCIsImJBbGxvd1BkZlByZXZpZXciLCJtaW1lVHlwZXMiLCJWSUVXX01PREVMUyIsInNldHRpbmdzIiwibW92ZUFjdGlvbiIsImxlZnRQYW5lbERpc2FibGVkIiwibGVmdFBhbmVsVHlwZSIsImxlZnRQYW5lbFdpZHRoIiwicG9wdXBWaXNpYmlsaXR5TmFtZXMiLCJvYnNlcnZhYmxlQXJyYXkiLCJwb3B1cFZpc2liaWxpdHkiLCJrZXlTY29wZVJlYWwiLCJBbGwiLCJrZXlTY29wZUZha2UiLCJrZXlTY29wZSIsIk1lbnUiLCJDb21wb3NlIiwiZmlsdGVyIiwiZWwiLCJjbGFzc05hbWUiLCJzZXRTY29wZSIsImdldFNjb3BlIiwiX19BUFBfXyIsImlBamF4RXJyb3JDb3VudCIsImlUb2tlbkVycm9yQ291bnQiLCJpTWVzc2FnZUJvZHlDYWNoZUNvdW50IiwiYlVubG9hZCIsImN1cnJlbnRTY3JlZW4iLCJkZWZhdWx0U2NyZWVuTmFtZSIsIlNDUkVFTlMiLCJWaWV3VHlwZSIsIlBvcHVwIiwiTGVmdCIsIlJpZ2h0IiwiQ2VudGVyIiwiaGlkZUxvYWRpbmciLCJjcmVhdGVDb21tYW5kIiwiYWRkU2V0dGluZ3NWaWV3TW9kZWwiLCJTZXR0aW5nc1ZpZXdNb2RlbENsYXNzIiwidGVtcGxhdGUiLCJsYWJlbE5hbWUiLCJyb3V0ZSIsImlzRGVmYXVsdCIsIl9fcmxTZXR0aW5nc0RhdGEiLCJMYWJlbCIsIlRlbXBsYXRlIiwiUm91dGUiLCJJc0RlZmF1bHQiLCJyZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCIsImRpc2FibGVTZXR0aW5nc1ZpZXdNb2RlbCIsInJvdXRlT2ZmIiwiaGFzaGVyIiwiY2hhbmdlZCIsImFjdGl2ZSIsInJvdXRlT24iLCJzY3JlZW4iLCJzY3JlZW5OYW1lIiwiZ2V0U2NyZWVuUG9wdXAiLCJQb3B1Vmlld01vZGVsQ2xhc3MiLCJoaWRlU2NyZWVuUG9wdXAiLCJWaWV3TW9kZWxDbGFzc1RvSGlkZSIsIk1vZGFsVmlldyIsIl9fdm0iLCJfX2RvbSIsIm1vZGFsVmlzaWJpbGl0eSIsInZtUnVuSG9vayIsImhvb2tOYW1lIiwiVmlld01vZGVsQ2xhc3MiLCJfX25hbWVzIiwicnVuSG9vayIsImJ1aWxkVmlld01vZGVsIiwidm1TY3JlZW4iLCJfX2J1aWxkZWQiLCJ2bURvbSIsInZtIiwiX190eXBlIiwidm1QbGFjZSIsIm9uU2hvd1RyaWdnZXIiLCJvbkhpZGVUcmlnZ2VyIiwidmlld01vZGVsTmFtZSIsIl9fbmFtZSIsInZpZXdNb2RlbE5hbWVzIiwidmlld01vZGVsVGVtcGxhdGVJRCIsIl9fdGVtcGxhdGVJRCIsInZpZXdNb2RlbFBvc2l0aW9uIiwidmlld01vZGVsRG9tIiwiY2FuY2VsQ29tbWFuZCIsImNsb3NlQ29tbWFuZCIsInN0b3JlQW5kU2V0S2V5U2NvcGUiLCJyZXN0b3JlS2V5U2NvcGUiLCJhcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUiLCJyZWdpc3RlclBvcHVwS2V5RG93biIsIlZpZXdNb2RlbENsYXNzVG9TaG93Iiwid2FybVVwU2NyZWVuUG9wdXAiLCJpc1BvcHVwVmlzaWJsZSIsInNjcmVlbk9uUm91dGUiLCJzdWJQYXJ0IiwiaXNTYW1lU2NyZWVuIiwiY3Jvc3MiLCJfX3N0YXJ0ZWQiLCJ2aWV3TW9kZWxzIiwiZGVmZXIiLCJ2aWV3TW9kZWxWaXNpYmlsaXR5IiwiX19jcm9zcyIsInN0YXJ0U2NyZWVucyIsInNjcmVlbnNDbGFzc2VzIiwiQ1NjcmVlbiIsIl9fc3RhcnQiLCJjcm9zc3JvYWRzIiwiY3JlYXRlIiwiYWRkUm91dGUiLCJpbml0aWFsaXplZCIsImFkZCIsInNldEhhc2giLCJoYXNoIiwic2lsZW5jZSIsImNtZCIsInZpZXdEZWNvcmF0b3IiLCJ0ZW1wbGF0ZUlEIiwicG9wdXBEZWNvcmF0b3IiLCJjb21tYW5kRGVjb3JhdG9yIiwiZGVzY3JpcHRvciIsImluaXRpYWxpemVyIiwibm9ybUNhbkV4ZWN1dGUiLCJzZXR0aW5nc01lbnVLZXlzSGFuZGxlciIsIiRpdGVtcyIsImhhbmRsZXIiLCJ1cCIsInNob3J0Y3V0IiwicmVzdWx0SGFzaCIsImVxIiwiVGltZTIwMG1zIiwiSTE4Tl9EQVRBIiwicmFpbmxvb3BJMThOIiwiSTE4Tl9OT1RJRklDQVRJT05fREFUQSIsIkkxOE5fTk9USUZJQ0FUSU9OX01BUCIsIkludmFsaWRUb2tlbiIsIkF1dGhFcnJvciIsIkFjY2Vzc0Vycm9yIiwiQ29ubmVjdGlvbkVycm9yIiwiQ2FwdGNoYUVycm9yIiwiU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUiLCJTb2NpYWxUd2l0dGVyTG9naW5BY2Nlc3NEaXNhYmxlIiwiU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlIiwiRG9tYWluTm90QWxsb3dlZCIsIkFjY291bnROb3RBbGxvd2VkIiwiQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCIsIkFjY291bnRUd29GYWN0b3JBdXRoRXJyb3IiLCJDb3VsZE5vdFNhdmVOZXdQYXNzd29yZCIsIkN1cnJlbnRQYXNzd29yZEluY29ycmVjdCIsIk5ld1Bhc3N3b3JkU2hvcnQiLCJOZXdQYXNzd29yZFdlYWsiLCJOZXdQYXNzd29yZEZvcmJpZGRlbiIsIkNvbnRhY3RzU3luY0Vycm9yIiwiQ2FudEdldE1lc3NhZ2VMaXN0IiwiQ2FudEdldE1lc3NhZ2UiLCJDYW50RGVsZXRlTWVzc2FnZSIsIkNhbnRNb3ZlTWVzc2FnZSIsIkNhbnRDb3B5TWVzc2FnZSIsIkNhbnRTYXZlTWVzc2FnZSIsIkNhbnRTZW5kTWVzc2FnZSIsIkludmFsaWRSZWNpcGllbnRzIiwiQ2FudFNhdmVGaWx0ZXJzIiwiQ2FudEdldEZpbHRlcnMiLCJGaWx0ZXJzQXJlTm90Q29ycmVjdCIsIkNhbnRDcmVhdGVGb2xkZXIiLCJDYW50UmVuYW1lRm9sZGVyIiwiQ2FudERlbGV0ZUZvbGRlciIsIkNhbnREZWxldGVOb25FbXB0eUZvbGRlciIsIkNhbnRTdWJzY3JpYmVGb2xkZXIiLCJDYW50VW5zdWJzY3JpYmVGb2xkZXIiLCJDYW50U2F2ZVNldHRpbmdzIiwiQ2FudFNhdmVQbHVnaW5TZXR0aW5ncyIsIkRvbWFpbkFscmVhZHlFeGlzdHMiLCJDYW50SW5zdGFsbFBhY2thZ2UiLCJDYW50RGVsZXRlUGFja2FnZSIsIkludmFsaWRQbHVnaW5QYWNrYWdlIiwiVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlIiwiTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSIsIkxpY2Vuc2luZ0V4cGlyZWQiLCJMaWNlbnNpbmdCYW5uZWQiLCJEZW1vU2VuZE1lc3NhZ2VFcnJvciIsIkRlbW9BY2NvdW50RXJyb3IiLCJBY2NvdW50QWxyZWFkeUV4aXN0cyIsIkFjY291bnREb2VzTm90RXhpc3QiLCJNYWlsU2VydmVyRXJyb3IiLCJJbnZhbGlkSW5wdXRBcmd1bWVudCIsIlVua25vd25Ob3RpZmljYXRpb24iLCJVbmtub3duRXJyb3IiLCJ2YWx1ZUxpc3QiLCJkZWZhdWxWYWx1ZSIsInZhbHVlTmFtZSIsImkxOG5Ub05vZGUiLCJlbGVtZW50cyIsImFuaW1hdGUiLCJsZXR0ZXJmeCIsInJlbG9hZERhdGEiLCJtb21lbnRvclJlbG9hZCIsImluaXROb3RpZmljYXRpb25MYW5ndWFnZSIsImZvckVhY2giLCJpbml0T25TdGFydE9yTGFuZ0NoYW5nZSIsInN0YXJ0Q2FsbGJhY2siLCJsYW5nQ2FsbGJhY2siLCJnZXROb3RpZmljYXRpb24iLCJjb2RlIiwibWVzc2FnZSIsImRlZkNvZGUiLCJDbGllbnRWaWV3RXJyb3IiLCJnZXROb3RpZmljYXRpb25Gcm9tUmVzcG9uc2UiLCJyZXNwb25zZSIsIkVycm9yQ29kZSIsIkVycm9yTWVzc2FnZSIsImdldFVwbG9hZEVycm9yRGVzY0J5Q29kZSIsIkZpbGVJc1Rvb0JpZyIsIkZpbGVQYXJ0aWFsbHlVcGxvYWRlZCIsIkZpbGVOb1VwbG9hZGVkIiwiTWlzc2luZ1RlbXBGb2xkZXIiLCJGaWxlT25TYXZlaW5nRXJyb3IiLCJyZWxvYWQiLCJhZG1pbiIsInJlc29sdmUiLCJyZWplY3QiLCJsYW5nTGluayIsImNhY2hlIiwiaXNSdGwiLCJGb2xkZXJVc2VyU3RvcmUiLCJkaXNwbGF5U3BlY1NldHRpbmciLCJzZW50Rm9sZGVyIiwiZHJhZnRGb2xkZXIiLCJzcGFtRm9sZGVyIiwidHJhc2hGb2xkZXIiLCJhcmNoaXZlRm9sZGVyIiwibmFtZXNwYWNlIiwiZm9sZGVyTGlzdCIsIm9wdGltaXplZCIsImVycm9yIiwiZm9sZGVyc0xvYWRpbmciLCJmb2xkZXJzQ3JlYXRpbmciLCJmb2xkZXJzRGVsZXRpbmciLCJmb2xkZXJzUmVuYW1pbmciLCJmb2xkZXJzSW5ib3hVbnJlYWRDb3VudCIsImN1cnJlbnRGb2xkZXIiLCJzaWV2ZUFsbG93RmlsZWludG9JbmJveCIsImNvbXB1dGVycyIsInN1YnNjcmliZXJzIiwiZHJhZnRGb2xkZXJOb3RFbmFibGVkIiwiVU5VU0VEX09QVElPTl9WQUxVRSIsImZvbGRlcnNMaXN0V2l0aFNpbmdsZUluYm94Um9vdEZvbGRlciIsImZvbGRlciIsImlzU3lzdGVtRm9sZGVyIiwidmlzaWJsZSIsImN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdyIsImN1cnJlbnRGb2xkZXJGdWxsTmFtZSIsImZ1bGxOYW1lIiwiY3VycmVudEZvbGRlckZ1bGxOYW1lSGFzaCIsImZ1bGxOYW1lSGFzaCIsImZvbGRlcnNDaGFuZ2luZyIsImxvYWRpbmciLCJjcmVhdGluZyIsImRlbGV0aW5nIiwicmVuYW1pbmciLCJmb2xkZXJMaXN0U3lzdGVtTmFtZXMiLCJnZXRGb2xkZXJJbmJveE5hbWUiLCJmb2xkZXJzIiwiZm9sZGVyTGlzdFN5c3RlbSIsImNvbXBhY3QiLCJnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0IiwiZm9sZGVyTWVudUZvck1vdmUiLCJsb2NhbE5hbWUiLCJmb2xkZXJNZW51Rm9yRmlsdGVycyIsImZSZW1vdmVTeXN0ZW1Gb2xkZXJUeXBlIiwiZlNldFN5c3RlbUZvbGRlclR5cGUiLCJTZW50SXRlbXMiLCJEcmFmdCIsIlNwYW0iLCJUcmFzaCIsIkFyY2hpdmUiLCJnZXROZXh0Rm9sZGVyTmFtZXMiLCJ1dGMiLCJtb21lbnROb3dVbml4IiwidGltZW91dHMiLCJpbmJveEZvbGRlck5hbWUiLCJmU2VhcmNoRnVuY3Rpb24iLCJpbnRlcnZhbCIsImNoZWNrYWJsZSIsInNvcnQiLCJhIiwiYiIsImFJdGVtIiwidW5pcSIsIk1lc3NhZ2VVc2VyU3RvcmUiLCJzdGF0aWNNZXNzYWdlIiwiTWVzc2FnZU1vZGVsIiwibWVzc2FnZUxpc3QiLCJtZXNzYWdlTGlzdENvdW50IiwibWVzc2FnZUxpc3RTZWFyY2giLCJtZXNzYWdlTGlzdFRocmVhZFVpZCIsIm1lc3NhZ2VMaXN0UGFnZSIsIm1lc3NhZ2VMaXN0UGFnZUJlZm9yZVRocmVhZCIsIm1lc3NhZ2VMaXN0RXJyb3IiLCJtZXNzYWdlTGlzdEVuZEZvbGRlciIsIm1lc3NhZ2VMaXN0RW5kU2VhcmNoIiwibWVzc2FnZUxpc3RFbmRUaHJlYWRVaWQiLCJtZXNzYWdlTGlzdEVuZFBhZ2UiLCJtZXNzYWdlTGlzdExvYWRpbmciLCJtZXNzYWdlTGlzdElzTm90Q29tcGxldGVkIiwibWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmdUaHJvdHRsZSIsIm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGVGb3JBbmltYXRpb24iLCJtZXNzYWdlTGlzdERpc2FibGVBdXRvU2VsZWN0Iiwic2VsZWN0b3JNZXNzYWdlU2VsZWN0ZWQiLCJzZWxlY3Rvck1lc3NhZ2VGb2N1c2VkIiwidmlld1RyaWdnZXIiLCJtZXNzYWdlRXJyb3IiLCJtZXNzYWdlQ3VycmVudExvYWRpbmciLCJtZXNzYWdlTG9hZGluZ1Rocm90dGxlIiwiVGltZTUwbXMiLCJtZXNzYWdlRnVsbFNjcmVlbk1vZGUiLCJtZXNzYWdlc0JvZGllc0RvbSIsIm1lc3NhZ2VBY3RpdmVEb20iLCJvbk1lc3NhZ2VSZXNwb25zZSIsInB1cmdlTWVzc2FnZUJvZHlDYWNoZVRocm90dGxlIiwicHVyZ2VNZXNzYWdlQm9keUNhY2hlIiwiVGltZTMwcyIsIm1lc3NhZ2VMb2FkaW5nIiwibWVzc2FnZUxpc3RFbmRIYXNoIiwibWVzc2FnZUxpc3RQYWdlQ291bnQiLCJwYWdlIiwiY2VpbCIsIlNldHRpbmdzU3RvcmUiLCJtZXNzYWdlc1BlclBhZ2UiLCJtYWluTWVzc2FnZUxpc3RTZWFyY2giLCJtYWlsQm94IiwiRm9sZGVyU3RvcmUiLCJtZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZyIsIm9uZSIsInR3byIsImlzTWVzc2FnZVNlbGVjdGVkIiwibWVzc2FnZUxpc3RDaGVja2VkIiwiY2hlY2tlZCIsImhhc0NoZWNrZWRNZXNzYWdlcyIsIm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWQiLCJzZWxlY3RlZE1lc3NhZ2UiLCJmb2N1c2VkTWVzc2FnZSIsInVuaW9uIiwibWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMiLCJ1aWQiLCJ0aHJlYWRzTGVuIiwidGhyZWFkcyIsIm5ld0ZvckFuaW1hdGlvbiIsIk5vUHJldmlldyIsImxheW91dCIsIkFwcFN0b3JlIiwiZm9jdXNlZFN0YXRlIiwiTWVzc2FnZVZpZXciLCJNZXNzYWdlTGlzdCIsImhpZGVNZXNzYWdlQm9kaWVzIiwiZG9tIiwiZm9sZGVyRnVsbE5hbWVSYXciLCJjb3VudCIsIk1FU1NBR0VfQk9EWV9DQUNIRV9MSU1JVCIsIm1lc3NhZ2VzRG9tIiwiVGltZTM1MG1zIiwiaW5pdFVpZE5leHRBbmROZXdNZXNzYWdlcyIsInVpZE5leHQiLCJuZXdNZXNzYWdlcyIsImFkZE5ld01lc3NhZ2VDYWNoZSIsIlVpZCIsIk5vdGlmaWNhdGlvblN0b3JlIiwicGxheVNvdW5kTm90aWZpY2F0aW9uIiwiZGlzcGxheURlc2t0b3BOb3RpZmljYXRpb24iLCJub3RpZmljYXRpb25NYWlsSWNvbiIsIkFjY291bnRTdG9yZSIsIk1lc3NhZ2VIZWxwZXIiLCJGcm9tIiwiU3ViamVjdCIsIkZvbGRlciIsInNldEZvbGRlclVpZE5leHQiLCJyZW1vdmVNZXNzYWdlc0Zyb21MaXN0IiwiZnJvbUZvbGRlckZ1bGxOYW1lUmF3IiwidWlkRm9yUmVtb3ZlIiwidG9Gb2xkZXJGdWxsTmFtZVJhdyIsImNvcHkiLCJtVmFsdWUiLCJ1bnNlZW5Db3VudCIsImN1cnJlbnRNZXNzYWdlIiwiZnJvbUZvbGRlciIsInRvRm9sZGVyIiwibWVzc2FnZXMiLCJ1bnNlZW4iLCJtZXNzYWdlQ291bnRBbGwiLCJtZXNzYWdlQ291bnRVbnJlYWQiLCJhY3Rpb25CbGluayIsImRlbGV0ZWQiLCJzZXRGb2xkZXJIYXNoIiwiaW5pdEJsb2NrcXVvdGVTd2l0Y2hlciIsIm1lc3NhZ2VUZXh0Qm9keSIsIiRvTGlzdCIsInBhcmVudCIsImgiLCJpbnNlcnRCZWZvcmUiLCJiZWZvcmUiLCJpbml0T3BlblBncENvbnRyb2xzIiwiUGdwU3RvcmUiLCJpbml0TWVzc2FnZUJvZHlDb250cm9scyIsInNldE1lc3NhZ2UiLCJpc05ldyIsInJlc3VsdEh0bWwiLCJwZ3BTaWduZWQiLCJuZXdJbnN0YW5jZUZyb21Kc29uIiwiaW5pdE1lc3NhZ2VGbGFnc0Zyb21DYWNoZSIsInBvcHVsYXRlQnlNZXNzYWdlTGlzdEl0ZW0iLCJpbml0VXBkYXRlQnlNZXNzYWdlSnNvbiIsImFkZFJlcXVlc3RlZE1lc3NhZ2UiLCJpbml0RmxhZ3NCeUpzb24iLCJ0ZXh0Qm9keSIsIkh0bWwiLCJQbGFpbiIsImlzUGdwU2lnbmVkIiwiaXNQZ3BFbmNyeXB0ZWQiLCJjYXBhT3BlblBHUCIsImhhc0ltYWdlcyIsIkhhc0V4dGVybmFscyIsInN0b3JlRGF0YUluRG9tIiwiSGFzSW50ZXJuYWxzIiwic2hvd0ludGVybmFsSW1hZ2VzIiwic2hvd0ltYWdlcyIsInNob3dFeHRlcm5hbEltYWdlcyIsImZldGNoRGF0YUZyb21Eb20iLCJoYXNVbnNlZW5TdWJNZXNzYWdlIiwiZ2V0QXBwIiwibWVzc2FnZUxpc3RBY3Rpb24iLCJTZXRTZWVuIiwic3ViTWVzc2FnZSIsInNlbGVjdE1lc3NhZ2UiLCJvTWVzc2FnZSIsInBvcHVsYXRlTWVzc2FnZUJvZHkiLCJzZWxlY3RNZXNzYWdlQnlGb2xkZXJBbmRVaWQiLCJzRm9sZGVyIiwic1VpZCIsIlJlbW90ZSIsInNSZXN1bHQiLCJvRGF0YSIsImJDYWNoZWQiLCJTdWNjZXNzIiwiVW5sb2FkIiwiQWJvcnQiLCJjYWxjdWxhdGVNZXNzYWdlTGlzdEhhc2giLCJmbGFnSGFzaCIsInNldE1lc3NhZ2VMaXN0IiwibmV3Q291bnQiLCJ1bnJlYWRDb3VudENoYW5nZSIsImlDb3VudCIsIk1lc3NhZ2VSZXN1bHRDb3VudCIsImlPZmZzZXQiLCJPZmZzZXQiLCJGb2xkZXJIYXNoIiwiTWVzc2FnZUNvdW50IiwiTWVzc2FnZVVuc2VlbkNvdW50IiwiVWlkTmV4dCIsIk5ld01lc3NhZ2VzIiwiY2xlYXJNZXNzYWdlRmxhZ3NGcm9tQ2FjaGVCeUZvbGRlciIsImpzb25NZXNzYWdlIiwiaGFzTmV3TWVzc2FnZUFuZFJlbW92ZUZyb21DYWNoZSIsInN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZSIsIlNlYXJjaCIsIlRocmVhZFVpZCIsImNsZWFyTmV3TWVzc2FnZUNhY2hlIiwidXNlVGhyZWFkcyIsImZvbGRlckluZm9ybWF0aW9uIiwiRk9MREVSU19DQUNIRSIsIkZPTERFUlNfTkFNRV9DQUNIRSIsIkZPTERFUlNfSEFTSF9DQUNIRSIsIkZPTERFUlNfVUlEX05FWFRfQ0FDSEUiLCJNRVNTQUdFX0ZMQUdTX0NBQ0hFIiwiTkVXX01FU1NBR0VfQ0FDSEUiLCJSRVFVRVNURURfTUVTU0FHRV9DQUNIRSIsImNhcGFHcmF2YXRhciIsIkdyYXZhdGFyIiwiZ2V0VXNlclBpYyIsImNhbGxiYWNrIiwiTGlua3MiLCJnZXRNZXNzYWdlS2V5IiwiaGFzUmVxdWVzdGVkTWVzc2FnZSIsImdldEZvbGRlckZ1bGxOYW1lUmF3IiwiZm9sZGVySGFzaCIsInNldEZvbGRlckZ1bGxOYW1lUmF3IiwiZ2V0Rm9sZGVySGFzaCIsImdldEZvbGRlclVpZE5leHQiLCJzZXRGb2xkZXJUb0NhY2hlTGlzdCIsInJlbW92ZUZvbGRlckZyb21DYWNoZUxpc3QiLCJnZXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUiLCJmb2xkZXJGdWxsTmFtZSIsInNldE1lc3NhZ2VGbGFnc1RvQ2FjaGUiLCJmbGFnc0NhY2hlIiwiZmxhZ3MiLCJmbGFnZ2VkIiwiaXNTaW1wbGVNZXNzYWdlIiwiYW5zd2VyZWQiLCJmb3J3YXJkZWQiLCJpc1JlYWRSZWNlaXB0IiwiZGVsZXRlZE1hcmsiLCJ1bnNlZW5TdWJVaWQiLCJzU3ViVWlkIiwic3ViRmxhZ3MiLCJmbGFnZ2VkU3ViVWlkIiwiaGFzRmxhZ2dlZFN1Yk1lc3NhZ2UiLCJzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGVCeUZvbGRlckFuZFVpZCIsInN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZUJ5U2V0QWN0aW9uIiwic2V0QWN0aW9uIiwidW5yZWFkIiwiVW5zZXRTZWVuIiwiU2V0RmxhZyIsIlVuc2V0RmxhZyIsIlJPT1QiLCJIQVNIX1BSRUZJWCIsIlNFUlZFUl9QUkVGSVgiLCJTVUJfUVVFUllfUFJFRklYIiwiVkVSU0lPTiIsIldFQl9QUkVGSVgiLCJWRVJTSU9OX1BSRUZJWCIsIlNUQVRJQ19QUkVGSVgiLCJBRE1JTl9IT1NUX1VTRSIsIkFETUlOX1BBVEgiLCJBVVRIX1BSRUZJWCIsInBvcHVsYXRlQXV0aFN1ZmZpeCIsInN1YlF1ZXJ5UHJlZml4Iiwicm9vdCIsInN0YXJ0dXBVcmwiLCJyb290QWRtaW4iLCJyb290VXNlciIsImF0dGFjaG1lbnRSYXciLCJkb3dubG9hZCIsImN1c3RvbVNwZWNTdWZmaXgiLCJhdHRhY2htZW50RG93bmxvYWQiLCJhdHRhY2htZW50UHJldmlldyIsImF0dGFjaG1lbnRUaHVtYm5haWxQcmV2aWV3IiwiYXR0YWNobWVudFByZXZpZXdBc1BsYWluIiwiYXR0YWNobWVudEZyYW1lZCIsInNlcnZlclJlcXVlc3QiLCJ1cGxvYWQiLCJ1cGxvYWRDb250YWN0cyIsInVwbG9hZEJhY2tncm91bmQiLCJtZXNzYWdlVmlld0xpbmsiLCJyZXF1ZXN0SGFzaCIsIm1lc3NhZ2VEb3dubG9hZExpbmsiLCJhdmF0YXJMaW5rIiwicHVibGljTGluayIsInVzZXJCYWNrZ3JvdW5kIiwicGhwSW5mbyIsImxhbmciLCJpc0FkbWluIiwiZXhwb3J0Q29udGFjdHNWY2YiLCJleHBvcnRDb250YWN0c0NzdiIsInNvY2lhbEdvb2dsZSIsInhhdXRoIiwic29jaWFsVHdpdHRlciIsInNvY2lhbEZhY2Vib29rIiwic3RhdGljUHJlZml4IiwicGF0aCIsImVtcHR5Q29udGFjdFBpYyIsInNvdW5kIiwib3BlblBncEpzIiwib3BlblBncFdvcmtlckpzIiwib3BlblBncFdvcmtlclBhdGgiLCJ0aGVtZVByZXZpZXdMaW5rIiwiaW5ib3giLCJhYm91dCIsInNlYXJjaCIsInRocmVhZFVpZCIsInJlc3VsdFRocmVhZFVpZCIsIlJlbW90ZVVzZXJBamF4Iiwib1JlcXVlc3RzIiwiZGVmYXVsdFJlcXVlc3QiLCJsb2dpbiIsInNFbWFpbCIsInNMb2dpbiIsInNQYXNzd29yZCIsImJTaWduTWUiLCJzTGFuZ3VhZ2UiLCJzQWRkaXRpb25hbENvZGUiLCJiQWRkaXRpb25hbENvZGVTaWduTWUiLCJnZXRUd29GYWN0b3IiLCJjcmVhdGVUd29GYWN0b3IiLCJjbGVhclR3b0ZhY3RvciIsInNob3dUd29GYWN0b3JTZWNyZXQiLCJ0ZXN0VHdvRmFjdG9yIiwic0NvZGUiLCJlbmFibGVUd29GYWN0b3IiLCJiRW5hYmxlIiwiY2xlYXJUd29GYWN0b3JJbmZvIiwiY29udGFjdHNTeW5jIiwiQ09OVEFDVFNfU1lOQ19BSkFYX1RJTUVPVVQiLCJzYXZlQ29udGFjdHNTeW5jRGF0YSIsInNVcmwiLCJzVXNlciIsImFjY291bnRTZXR1cCIsImJOZXciLCJhY2NvdW50RGVsZXRlIiwic0VtYWlsVG9EZWxldGUiLCJhY2NvdW50c0FuZElkZW50aXRpZXNTb3J0T3JkZXIiLCJhQWNjb3VudHMiLCJhSWRlbnRpdGllcyIsImlkZW50aXR5VXBkYXRlIiwic0lkIiwic05hbWUiLCJzUmVwbHlUbyIsInNCY2MiLCJzU2lnbmF0dXJlIiwiYlNpZ25hdHVyZUluc2VydEJlZm9yZSIsImlkZW50aXR5RGVsZXRlIiwic0lkVG9EZWxldGUiLCJhY2NvdW50c0FuZElkZW50aXRpZXMiLCJhY2NvdW50c0NvdW50cyIsImZpbHRlcnNTYXZlIiwiZmlsdGVycyIsInJhdyIsImlzUmF3SXNBY3RpdmUiLCJ0b0pzb24iLCJmaWx0ZXJzR2V0IiwidGVtcGxhdGVzIiwidGVtcGxhdGVHZXRCeUlkIiwic0lEIiwidGVtcGxhdGVEZWxldGUiLCJ0ZW1wbGF0ZVNldHVwIiwic0JvZHkiLCJzRm9sZGVyRnVsbE5hbWVSYXciLCJpTGltaXQiLCJzU2VhcmNoIiwic1RocmVhZFVpZCIsImJTaWxlbnQiLCJ0aHJlYWRzQWxsb3dlZCIsImluYm94VWlkTmV4dCIsIkRFRkFVTFRfQUpBWF9USU1FT1VUIiwiU0VBUkNIX0FKQVhfVElNRU9VVCIsIkJhc2U2NCIsInByb2plY3RIYXNoIiwiZnJvbUNoYXJDb2RlIiwiTGltaXQiLCJVc2VUaHJlYWRzIiwibWVzc2FnZVVwbG9hZEF0dGFjaG1lbnRzIiwiYURvd25sb2FkcyIsImlVaWQiLCJjb21wb3NlVXBsb2FkRXh0ZXJuYWxzIiwiYUV4dGVybmFscyIsImNvbXBvc2VVcGxvYWREcml2ZSIsInNBY2Nlc3NUb2tlbiIsInJlcXVlc3QiLCJ1aWRzIiwibWVzc2FnZUxpc3RJdGVtIiwicmVsb2FkRmxhZ3NDdXJyZW50TWVzc2FnZUxpc3RBbmRNZXNzYWdlRnJvbUNhY2hlIiwiZm9sZGVySW5mb3JtYXRpb25NdWx0aXBseSIsImFGb2xkZXJzIiwibG9nb3V0IiwibWVzc2FnZVNldEZsYWdnZWQiLCJhVWlkcyIsImJTZXRGbGFnZ2VkIiwibWVzc2FnZVNldFNlZW4iLCJiU2V0U2VlbiIsIm1lc3NhZ2VTZXRTZWVuVG9BbGwiLCJhVGhyZWFkVWlkcyIsInNhdmVNZXNzYWdlIiwic0lkZW50aXR5SUQiLCJzTWVzc2FnZUZvbGRlciIsInNNZXNzYWdlVWlkIiwic0RyYWZ0Rm9sZGVyIiwic1RvIiwic0NjIiwic1N1YmplY3QiLCJiVGV4dElzSHRtbCIsInNUZXh0IiwiYUF0dGFjaG1lbnRzIiwiYURyYWZ0SW5mbyIsInNJblJlcGx5VG8iLCJzUmVmZXJlbmNlcyIsImJNYXJrQXNJbXBvcnRhbnQiLCJTQVZFX01FU1NBR0VfQUpBWF9USU1FT1VUIiwic2VuZFJlYWRSZWNlaXB0TWVzc2FnZSIsInNSZWFkUmVjZWlwdCIsInNlbmRNZXNzYWdlIiwic1NlbnRGb2xkZXIiLCJiUmVxdWVzdERzbiIsImJSZXF1ZXN0UmVhZFJlY2VpcHQiLCJTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUIiwic2F2ZVN5c3RlbUZvbGRlcnMiLCJzYXZlU2V0dGluZ3NIZWxwZXIiLCJ2YWx1ZUZuIiwiY2hhbmdlUGFzc3dvcmQiLCJwcmV2UGFzc3dvcmQiLCJuZXdQYXNzd29yZCIsImZvbGRlckNsZWFyIiwiZm9sZGVyU2V0U3Vic2NyaWJlIiwiYlN1YnNjcmliZSIsImZvbGRlclNldENoZWNrYWJsZSIsImJDaGVja2FibGUiLCJtZXNzYWdlc01vdmUiLCJzVG9Gb2xkZXIiLCJzTGVhcm5pbmciLCJiTWFya0FzUmVhZCIsIm1lc3NhZ2VzQ29weSIsIm1lc3NhZ2VzRGVsZXRlIiwiYXBwRGVsYXlTdGFydCIsInF1b3RhIiwiY29udGFjdHMiLCJjb250YWN0U2F2ZSIsInNSZXF1ZXN0VWlkIiwiYVByb3BlcnRpZXMiLCJjb250YWN0c0RlbGV0ZSIsInN1Z2dlc3Rpb25zIiwic1F1ZXJ5IiwiaVBhZ2UiLCJjbGVhclVzZXJCYWNrZ3JvdW5kIiwiZmFjZWJvb2tVc2VyIiwiZmFjZWJvb2tEaXNjb25uZWN0IiwidHdpdHRlclVzZXIiLCJ0d2l0dGVyRGlzY29ubmVjdCIsImdvb2dsZVVzZXIiLCJnb29nbGVEaXNjb25uZWN0Iiwic29jaWFsVXNlcnMiLCJBYnN0cmFjdEFqYXhSZW1vdGUiLCJTVUJTIiwic3ViIiwic3ViRnVuYyIsInN1Yk5hbWUiLCJwdWIiLCJQbHVnaW5zIiwiaXRlbXMiLCJNRVNTQUdFU19QRVJfUEFHRSIsIk1FU1NBR0VTX1BFUl9QQUdFX1ZBTFVFUyIsIkNPTlRBQ1RTX1BFUl9QQUdFIiwiQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FIiwiSU1BUF9ERUZBVUxUX1BPUlQiLCJJTUFQX0RFRkFVTFRfU0VDVVJFX1BPUlQiLCJTTVRQX0RFRkFVTFRfUE9SVCIsIlNNVFBfREVGQVVMVF9TRUNVUkVfUE9SVCIsIlNJRVZFX0RFRkFVTFRfUE9SVCIsIkFKQVhfRVJST1JfTElNSVQiLCJUT0tFTl9FUlJPUl9MSU1JVCIsIlJBSU5MT09QX1RSSUFMX0tFWSIsIkRBVEFfSU1BR0VfVVNFUl9ET1RfUElDIiwiREFUQV9JTUFHRV9UUkFOU1BfUElDIiwiREFUQV9JTUFHRV9MQVpZX1BMQUNFSE9MREVSX1BJQyIsIkFic3RyYWN0Vmlld05leHQiLCJiRGlzYWJlQ2xvc2VPbkVzYyIsInNEZWZhdWx0S2V5U2NvcGUiLCJOb25lIiwic0N1cnJlbnRLZXlTY29wZSIsIkVzYyIsIkJhY2tzcGFjZSIsIlNvY2lhbFN0b3JlIiwiZ29vZ2xlIiwidHdpdHRlciIsImZhY2Vib29rIiwiZHJvcGJveCIsImNsaWVudElEIiwiY2xpZW50U2VjcmV0IiwiYXBpS2V5IiwidXNlck5hbWUiLCJsb2dnaW5lZCIsImF1dGgiLCJhdXRoR21haWwiLCJkcml2ZSIsInByZXZpZXciLCJjbGllbnRTZXR0aW5ncyIsImFwaUtleVNldHRpbmdzIiwiYXBwSUQiLCJhcHBTZWNyZXQiLCJzdXBwb3J0ZWQiLCJjb25zdW1lcktleSIsImNvbnN1bWVyU2VjcmV0IiwicG9wdWxhdGUiLCJhcHBlbmREcm9wYm94IiwiRHJvcGJveCIsImdldEVsZW1lbnRCeUlkIiwic2NyaXB0IiwiYXBwZW5kQ2hpbGQiLCJBcHBVc2VyU3RvcmUiLCJjdXJyZW50QXVkaW8iLCJGb2xkZXJMaXN0IiwiY29tcG9zZUluRWRpdCIsImNvbnRhY3RzQXV0b3NhdmUiLCJ1c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMiLCJjb250YWN0c0lzQWxsb3dlZCIsImF0dGFjaG1lbnRzQWN0aW9ucyIsImRldkVtYWlsIiwiZGV2UGFzc3dvcmQiLCJBYnN0cmFjdEFwcFN0b3JlIiwiQWJzdHJhY3RDb21wb25lbnQiLCJmdW5jVG9EaXNwb3NlIiwiY29tcG9uZW50RXhwb3J0SGVscGVyIiwiQ2xhc3NPYmplY3QiLCJjcmVhdGVWaWV3TW9kZWwiLCJjb21wb25lbnRJbmZvIiwiaW5saW5lIiwiU2V0dGluZ3NVc2VyU3RvcmUiLCJpQXV0b0xvZ291dFRpbWVyIiwiU2lkZVByZXZpZXciLCJCb3R0b21QcmV2aWV3IiwiZWRpdG9yRGVmYXVsdFR5cGUiLCJIdG1sRm9yY2VkIiwiUGxhaW5Gb3JjZWQiLCJ1c2VDaGVja2JveGVzSW5MaXN0IiwiYWxsb3dEcmFmdEF1dG9zYXZlIiwicmVwbHlTYW1lRm9sZGVyIiwiYXV0b0xvZ291dCIsIlRpbWUzMG1Jbk1pbiIsInVzZVByZXZpZXdQYW5lIiwiRXZlbnRzIiwiVGltZTFtIiwiU0lNUExFX0hPT0tTIiwiVVNFUl9WSUVXX01PREVMU19IT09LUyIsIkFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTIiwiYWRkSG9vayIsIm1haW5TZXR0aW5nc0dldCIsInJlbW90ZVJlcXVlc3QiLCJwYXJhbWV0ZXJzIiwiYWRkU2V0dGluZ3NWaWV3TW9kZWxGb3JBZG1pbiIsInJ1blNldHRpbmdzVmlld01vZGVsSG9va3MiLCJLbm9pbiIsInZpZXciLCJwbHVnaW5TZWN0aW9uIiwicGx1Z2lucyIsIlBncFVzZXJTdG9yZSIsIm9wZW5wZ3AiLCJvcGVucGdwa2V5cyIsIm9wZW5wZ3BLZXlyaW5nIiwib3BlbnBncGtleXNQdWJsaWMiLCJpc1ByaXZhdGUiLCJvcGVucGdwa2V5c1ByaXZhdGUiLCJpc1N1cHBvcnRlZCIsImZpbmRLZXlCeUhleCIsImtleXMiLCJpZHMiLCJmaW5kUHVibGljS2V5QnlIZXgiLCJmaW5kUHJpdmF0ZUtleUJ5SGV4IiwiZmluZFB1YmxpY0tleXNCeUVtYWlsIiwiZW1haWxzIiwiZ2V0TmF0aXZlS2V5cyIsImZpbmRQdWJsaWNLZXlzQnlTaWduaW5nS2V5SWRzIiwic2lnbmluZ0tleUlkcyIsInRvSGV4IiwiZmluZFByaXZhdGVLZXlzQnlFbmNyeXB0aW9uS2V5SWRzIiwiZW5jcnlwdGlvbktleUlkcyIsInJlY2lwaWVudHMiLCJyZXR1cm5XcmFwS2V5cyIsImZpbmRBbGxQcml2YXRlS2V5c0J5RW1haWxOb3ROYXRpdmUiLCJmaW5kUHVibGljS2V5QnlFbWFpbE5vdE5hdGl2ZSIsImZpbmRQcml2YXRlS2V5QnlFbWFpbE5vdE5hdGl2ZSIsImZpbmRBbGxQdWJsaWNLZXlzQnlFbWFpbE5vdE5hdGl2ZSIsImZpbmRQcml2YXRlS2V5QnlFbWFpbCIsInBhc3N3b3JkIiwicHJpdmF0ZUtleSIsImRlY3J5cHQiLCJmaW5kU2VsZlByaXZhdGVLZXkiLCJkZWNyeXB0TWVzc2FnZSIsImdldEVuY3J5cHRpb25LZXlJZHMiLCJwcml2YXRlS2V5cyIsImRlY3J5cHRlZEtleSIsImRlY3J5cHRlZE1lc3NhZ2UiLCJwcmltYXJ5S2V5Iiwia2V5aWQiLCJ2ZXJpZnlNZXNzYWdlIiwib1ZhbGlkS2V5IiwiYVNpZ25pbmdLZXlJZHMiLCJnZXRTaWduaW5nS2V5SWRzIiwicHVibGljS2V5cyIsInZlcmlmeSIsInZhbGlkIiwiY29udHJvbHNIZWxwZXIiLCJ2ZXJDb250cm9sIiwic3VjY2VzcyIsImRvbUNvbnRyb2xFbmNyeXB0ZWRDbGlja0hlbHBlciIsInN0b3JlIiwiYXJtb3JlZE1lc3NhZ2UiLCJyZWFkQXJtb3JlZCIsImdldFRleHQiLCJ2YWxpZFByaXZhdGVLZXkiLCJ2YWxpZFB1YmxpY0tleSIsInVzZXIiLCJrZXlJZHMiLCJhZGRpdGlvbmFsIiwiZG9tQ29udHJvbFNpZ25lZENsaWNrSGVscGVyIiwiY2xlYXJ0ZXh0IiwidmFsaWRLZXkiLCJyYWluTG9vcE1lc3NhZ2UiLCJlbmNyeXB0ZWQiLCJzaWduZWQiLCJnZXRFbWFpbHMiLCJkb21UZXh0IiwiQWNjb3VudFVzZXJTdG9yZSIsInBhcmVudEVtYWlsIiwic2lnbmF0dXJlIiwiYWNjb3VudHMiLCJhY2NvdW50c0VtYWlscyIsImFjY291bnRzVW5yZWFkQ291bnQiLCJpc1Jvb3RBY2NvdW50IiwiU3VwcG9ydGVkU3RvcmFnZURyaXZlciIsIkxvY2FsU3RvcmFnZURyaXZlciIsIkNvb2tpZURyaXZlciIsIlN0b3JhZ2VEcml2ZXIiLCJkcml2ZXIiLCJzZXQiLCJnZXQiLCJfbW9tZW50IiwiX21vbWVudE5vdyIsInVwZGF0ZU1vbWVudE5vdyIsInVwZGF0ZU1vbWVudE5vd1VuaXgiLCJ1bml4IiwibW9tZW50Tm93Iiwic2VhcmNoU3VidHJhY3RGb3JtYXREYXRlSGVscGVyIiwic3VidHJhY3QiLCJmb3JtYXQiLCJmb3JtYXRDdXN0b21TaG9ydERhdGUiLCJub3ciLCJmcm9tTm93IiwiVElNRSIsInllYXIiLCJ0aW1lU3RhbXBJblVUQyIsImZvcm1hdFN0ciIsInRpbWUiLCJlbWFpbEFycmF5VG9TdHJpbmciLCJmcmllbmRseVZpZXciLCJ3cmFwV2l0aExpbmsiLCJlbWFpbEFycmF5VG9TdHJpbmdDbGVhciIsImVtYWlsQXJyYXlGcm9tSnNvbiIsInJlcGx5SGVscGVyIiwiaW5wdXRFbWFpbHMiLCJ1bmljIiwibG9jYWxFbWFpbHMiLCJBYnN0cmFjdE1vZGVsIiwibW9kZWxOYW1lIiwic01vZGVsTmFtZSIsInJlZ0Rpc3Bvc2FibGVzIiwiTGFuZ3VhZ2VTdG9yZSIsImxhbmd1YWdlcyIsImxhbmd1YWdlc0FkbWluIiwibGFuZ3VhZ2VBZG1pbiIsInVzZXJMYW5ndWFnZSIsInVzZXJMYW5ndWFnZUFkbWluIiwiYUxhbmd1YWdlcyIsImFMYW5ndWFnZXNBZG1pbiIsImRraW1TdGF0dXMiLCJka2ltVmFsdWUiLCJjbGVhckR1cGxpY2F0ZU5hbWUiLCJpbml0QnlKc29uIiwidmFsaWRhdGUiLCJ3aXRob3V0TmFtZSIsIk5hbWUiLCJFbWFpbCIsIkRraW1TdGF0dXMiLCJEa2ltVmFsdWUiLCJ1c2VFbmNvZGVIdG1sIiwicGFyc2VkUmVzdWx0IiwiYWRkcmVzc3BhcnNlciIsImV4aXN0cyIsImFkZHJlc3MiLCJlbWFpbEFkZHJlc3MiLCJBdWRpbyIsIm5vdGlmaWNhdG9yIiwicGxheWVyIiwic3VwcG9ydGVkTXAzIiwic3VwcG9ydGVkT2dnIiwic3VwcG9ydGVkV2F2Iiwic3VwcG9ydGVkTm90aWZpY2F0aW9uIiwiY3JlYXRlTmV3T2JqZWN0IiwicGxheSIsImNhblBsYXlUeXBlIiwic3RvcEZuIiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhdXNlIiwicHJlbG9hZCIsImxvb3AiLCJhdXRvcGxheSIsIm11dGVkIiwicGF1c2VkIiwiY2xlYXJOYW1lIiwicGxheU1wMyIsInBsYXlPZ2ciLCJwbGF5V2F2IiwicGxheU5vdGlmaWNhdGlvbiIsIkFic3RyYWN0SW5wdXQiLCJsYWJlbCIsInByZUxhYmVsIiwiZW5hYmxlIiwicGxhY2Vob2xkZXIiLCJsYWJlbGVkIiwicHJlTGFiZWxlZCIsInRyaWdnZXJlZCIsImNsYXNzRm9yVHJpZ2dlciIsInN1ZmZpeFZhbHVlIiwic2V0VHJpZ2dlclN0YXRlIiwiVXNlckFqYXhVc2VyUHJvbWlzZXMiLCJmb2xkZXJzVGltZW91dCIsImZvbGRlcnNSZWxvYWQiLCJmVHJpZ2dlciIsInBvc3RSZXF1ZXN0IiwiUHJvbWlzZXNQb3B1bGF0b3IiLCJmb2xkZXJzTGlzdCIsImZvbGRlcnNBZGRpdGlvbmFsUGFyYW1ldGVycyIsImZvbGRlcnNSZWxvYWRXaXRoVGltZW91dCIsInNldFRyaWdnZXIiLCJmb2xkZXJEZWxldGUiLCJmb2xkZXJDcmVhdGUiLCJzTmV3Rm9sZGVyTmFtZSIsInNQYXJlbnROYW1lIiwiZm9sZGVyUmVuYW1lIiwic1ByZXZGb2xkZXJGdWxsTmFtZVJhdyIsInNBY3Rpb24iLCJhSGFzaGVzIiwid2VsY29tZUNsb3NlIiwiQWJzdHJhY3RBamF4UHJvbWlzZXMiLCJJZGVudGl0eVVzZXJTdG9yZSIsImlkZW50aXRpZXMiLCJpZGVudGl0aWVzSURTIiwiQ29udGFjdFVzZXJTdG9yZSIsImltcG9ydGluZyIsInN5bmNpbmciLCJleHBvcnRpbmdWY2YiLCJleHBvcnRpbmdDc3YiLCJhbGxvd0NvbnRhY3RzU3luYyIsImVuYWJsZUNvbnRhY3RzU3luYyIsImNvbnRhY3RzU3luY1VybCIsImNvbnRhY3RzU3luY1VzZXIiLCJjb250YWN0c1N5bmNQYXNzIiwiamFzc2wiLCJhc3luYyIsImFsbCIsIm9uZXJyb3IiLCJUaGVtZVN0b3JlIiwidGhlbWVzIiwidGhlbWVCYWNrZ3JvdW5kTmFtZSIsInRoZW1lQmFja2dyb3VuZEhhc2giLCJOb3RpZmljYXRpb25Vc2VyU3RvcmUiLCJlbmFibGVTb3VuZE5vdGlmaWNhdGlvbiIsInNvdW5kTm90aWZpY2F0aW9uSXNTdXBwb3J0ZWQiLCJhbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24iLCJkZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbnMiLCJOb3RTdXBwb3J0ZWQiLCJOb3RpZmljYXRpb25DbGFzcyIsIm5vdGlmaWNhdGlvbkNsYXNzIiwicGVybWlzc2lvbiIsIkFsbG93ZWQiLCJEZW5pZWQiLCJOb3RBbGxvd2VkIiwid2Via2l0Tm90aWZpY2F0aW9ucyIsImNoZWNrUGVybWlzc2lvbiIsImVuYWJsZURlc2t0b3BOb3RpZmljYXRpb24iLCJyZXF1ZXN0UGVybWlzc2lvbiIsImluaXROb3RpZmljYXRpb25QbGF5ZXIiLCJpc0Rlc2t0b3BOb3RpZmljYXRpb25TdXBwb3J0ZWQiLCJpc0Rlc2t0b3BOb3RpZmljYXRpb25EZW5pZWQiLCJza2lwU2V0dGluZyIsImltYWdlU3JjIiwibmVzc2FnZURhdGEiLCJub3RpZmljYXRpb24iLCJpY29uIiwib25jbGljayIsImxvY2FsTm90aWZpY2F0aW9ucyIsImNhbmNlbCIsIlRpbWU3cyIsIkNvbXBvc2VQb3B1cFZpZXciLCJwb3B1cCIsInNlbGYiLCJjYW5CZVNlbnRPclNhdmVkIiwiaXNEcmFmdEZvbGRlck1lc3NhZ2UiLCJhbGxvd0NvbnRhY3RzIiwiZHJvcGJveEVuYWJsZWQiLCJkcml2ZUVuYWJsZWQiLCJmRW1haWxPdXRJbkhlbHBlciIsImlkZW50aXR5IiwiaXNJbiIsImlkZW50aXR5RW1haWwiLCJvTGFzdE1lc3NhZ2UiLCJvRWRpdG9yIiwiYkZyb21EcmFmdCIsInNMYXN0Rm9jdXNlZEZpZWxkIiwicmVzaXplclRyaWdnZXIiLCJhbGxvd0ZvbGRlcnMiLCJGb2xkZXJzIiwiYlNraXBOZXh0SGlkZSIsImlkZW50aXRpZXNEcm9wZG93blRyaWdnZXIiLCJyZXBseVRvIiwicmVxdWVzdERzbiIsInJlcXVlc3RSZWFkUmVjZWlwdCIsIm1hcmtBc0ltcG9ydGFudCIsInNlbmRFcnJvciIsInNlbmRTdWNjZXNzQnV0U2F2ZUVycm9yIiwic2F2ZWRFcnJvciIsInNlbmRCdXR0b25TdWNjZXNzIiwic2VuZEVycm9yRGVzYyIsInNhdmVkRXJyb3JEZXNjIiwic2F2ZWRUaW1lIiwic2F2ZWRUaW1lVGV4dCIsIm1vbWVudG9yRm9ybWF0IiwiZW1wdHlUb0Vycm9yIiwiZW1wdHlUb0Vycm9yVG9vbHRpcCIsImF0dGFjaG1lbnRzSW5Qcm9jZXNzRXJyb3IiLCJhdHRhY2htZW50c0luRXJyb3JFcnJvciIsImF0dGFjaG1lbnRzRXJyb3JUb29sdGlwIiwic2hvd0NjIiwic2hvd0JjYyIsInNob3dSZXBseVRvIiwiZHJhZnRVaWQiLCJzZW5kaW5nIiwic2F2aW5nIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50c0luUHJvY2VzcyIsImNvbXBsZXRlIiwiYXR0YWNobWVudHNJblJlYWR5IiwiYXR0YWNobWVudHNJbkVycm9yIiwiYXR0YWNobWVudHNDb3VudCIsImF0dGFjaG1lbnRzSW5FcnJvckNvdW50IiwiYXR0YWNobWVudHNJblByb2Nlc3NDb3VudCIsImF0dGFjaG1lbnRzUGxhY2UiLCJjb21wb3NlVXBsb2FkZXJCdXR0b24iLCJjb21wb3NlVXBsb2FkZXJEcm9wUGxhY2UiLCJkcmFnQW5kRHJvcEVuYWJsZWQiLCJkcmFnQW5kRHJvcE92ZXIiLCJkcmFnQW5kRHJvcFZpc2libGUiLCJhdHRhY2hlTXVsdGlwbGVBbGxvd2VkIiwiYWRkQXR0YWNobWVudEVuYWJsZWQiLCJjb21wb3NlRWRpdG9yQXJlYSIsIklkZW50aXR5U3RvcmUiLCJpZGVudGl0aWVzT3B0aW9ucyIsImZvcm1hdHRlZE5hbWUiLCJjdXJyZW50SWRlbnRpdHkiLCJjdXJyZW50SWRlbnRpdHlWaWV3IiwicmVzaXplciIsInNlbmRNZXNzYWdlUmVzcG9uc2UiLCJzYXZlTWVzc2FnZVJlc3BvbnNlIiwiaXNFbXB0eUZvcm0iLCJzYXZlQ29tbWFuZCIsImRyb3Bib3hBcGlLZXkiLCJkcml2ZVZpc2libGUiLCJkcml2ZUNhbGxiYWNrIiwib25NZXNzYWdlVXBsb2FkQXR0YWNobWVudHMiLCJ0cnlUb0Nsb3NlUG9wdXAiLCJlbWFpbHNTb3VyY2UiLCJhdXRvc2F2ZUZ1bmN0aW9uIiwiaVRpbWVyIiwic2VuZENvbW1hbmQiLCJTZW50IiwiZ2V0RGF0YSIsInByZXBlYXJBdHRhY2htZW50c0ZvclNlbmRPclNhdmUiLCJhdXRvc2F2ZVN0YXJ0IiwiZGVsZXRlQ29tbWFuZCIsIlBvcHVwc0Fza1ZpZXdNb2RlbCIsImRlbGV0ZU1lc3NhZ2VzRnJvbUZvbGRlcldpdGhvdXRDaGVjayIsInNraXBDb21tYW5kIiwiY29udGFjdHNDb21tYW5kIiwiZHJvcGJveENvbW1hbmQiLCJjaG9vc2UiLCJmaWxlcyIsImFkZERyb3Bib3hBdHRhY2htZW50IiwibGlua1R5cGUiLCJtdWx0aXNlbGVjdCIsImRyaXZlQ29tbWFuZCIsImRyaXZlT3BlblBvcHVwIiwiYXV0b3NhdmVTdG9wIiwiZlJlc3BvbnNlIiwiZ2V0QXV0b2NvbXBsZXRlIiwidGVybSIsImFEYXRhIiwib0VtYWlsSXRlbSIsIm9wZW5PcGVuUGdwUG9wdXAiLCJzZXRQbGFpbiIsInJlbG9hZERyYWZ0Rm9sZGVyIiwicmVsb2FkTWVzc2FnZUxpc3QiLCJmaW5kSWRlbnRpdHlCeU1lc3NhZ2UiLCJjb21wb3NlVHlwZSIsInJlc3VsdEluZGV4IiwicmVzdWx0SWRlbnRpdHkiLCJpZGVudGl0aWVzQ2FjaGUiLCJmRWFjaEhlbHBlciIsIlJlcGx5IiwiUmVwbHlBbGwiLCJGb3J3YXJkIiwiRm9yd2FyZEFzQXR0YWNobWVudCIsImRlbGl2ZXJlZFRvIiwiZnJvbSIsInNlbGVjdElkZW50aXR5Iiwic2V0U2lnbmF0dXJlRnJvbUlkZW50aXR5Iiwic3RhdHVzUmVzdWx0IiwiTmV3Rm9sZGVyIiwiTmV3VWlkIiwiTWVzc2FnZVN0b3JlIiwib25IaWRlIiwicmVzZXQiLCJmT25Jbml0IiwiYkh0bWwiLCJjb252ZXJTaWduYXR1cmUiLCJmcm9tTGluZSIsIm1vbWVudHMiLCJtb21lbnRSZWd4IiwiZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlciIsImV4ZWMiLCJzZXRTaWduYXR1cmUiLCJzaWduYXR1cmVJbnNlcnRCZWZvcmUiLCJvblNob3ciLCJvTWVzc2FnZU9yQXJyYXkiLCJhVG9FbWFpbHMiLCJhQ2NFbWFpbHMiLCJhQmNjRW1haWxzIiwic0N1c3RvbVN1YmplY3QiLCJzQ3VzdG9tUGxhaW5UZXh0IiwiaW5pdE9uU2hvdyIsImFkZEVtYWlsc1RvIiwib25XYXJtVXAiLCJtb2RlVG9nZ2xlIiwiZktvVmFsdWUiLCJiRnJpZW5kbHkiLCJzVHlwZSIsInNGcm9tIiwic0RhdGUiLCJzUmVwbHlUaXRsZSIsImV4Y2x1ZGVFbWFpbCIsIm1FbWFpbCIsImxpbmVDb21wb3NlVHlwZSIsImRhdGVUaW1lU3RhbXBJblVUQyIsImNsb25lZFRleHQiLCJyZXNwbHlBbGxQYXJ0cyIsInJlcGx5RW1haWxzIiwicHJlcGVhck1lc3NhZ2VBdHRhY2htZW50cyIsInNNZXNzYWdlSWQiLCJyZXBseUFsbEVtYWlscyIsInJlZmVyZW5jZXMiLCJFZGl0QXNOZXciLCJmcm9tVG9MaW5lIiwidG9Ub0xpbmUiLCJjY1RvTGluZSIsInNldEh0bWwiLCJzZXRGb2N1c0luUG9wdXAiLCJhZGRNZXNzYWdlQXNBdHRhY2htZW50IiwiZG93bmxvYWRzIiwiZ2V0QXR0YWNobWVudHNEb3dubG9hZHNGb3JVcGxvYWQiLCJ0ZW1wTmFtZSIsImF0dGFjaG1lbnQiLCJnZXRBdHRhY2htZW50QnlJZCIsIndhaXRpbmciLCJ1cGxvYWRpbmciLCJzZXRNZXNzYWdlQXR0YWNobWVudEZhaWxlZERvd25sb2FkVGV4dCIsIm9uU2hvd1dpdGhEZWxheSIsIm9uQnVpbGQiLCJpbml0VXBsb2FkZXIiLCJoYXNGb2N1cyIsImdldFNjcmlwdCIsImdhcGkiLCJUaW1lNXMiLCJhY2Nlc3NUb2tlbiIsInBpY2tlciIsIlJlc3BvbnNlIiwiQUNUSU9OIiwiQWN0aW9uIiwiUElDS0VEIiwiRE9DVU1FTlRTIiwic2V0UmVxdWVzdEhlYWRlciIsInJlc3BvbnNlVGV4dCIsImZFeHBvcnQiLCJtaW1lVHlwZSIsImV4cG9ydExpbmtzIiwiZG93bmxvYWRVcmwiLCJhZGREcml2ZUF0dGFjaG1lbnQiLCJzZW5kIiwiZHJpdmVDcmVhdGVQaWtlciIsImF1dGhUb2tlbiIsImFjY2Vzc190b2tlbiIsImxvYWQiLCJkcml2ZVBpY2tlciIsIlBpY2tlckJ1aWxkZXIiLCJhZGRWaWV3IiwiVmlld0lkIiwiRE9DUyIsInNldEFwcElkIiwic2V0T0F1dGhUb2tlbiIsInNldENhbGxiYWNrIiwiZW5hYmxlRmVhdHVyZSIsIkZlYXR1cmUiLCJOQVZfSElEREVOIiwiYnVpbGQiLCJzZXRWaXNpYmxlIiwiZ2V0VG9rZW4iLCJhdXRoUmVzdWx0IiwidG9rZW4iLCJhdXRob3JpemUiLCJjYW5jZWxBdHRhY2htZW50SGVscGVyIiwib0p1YSIsInVwbG9hZENhY2hlIiwiYXR0YWNobWVudFNpemVMaW1pdCIsIkp1YSIsImxvYWRlZCIsInRvdGFsIiwicHJvZ3Jlc3MiLCJmbG9vciIsIkZpbGVOYW1lIiwiU2l6ZSIsIkNvbXBvc2VBdHRhY2htZW50TW9kZWwiLCJlcnJvckNvZGUiLCJhdHRhY2htZW50SnNvbiIsIkF0dGFjaG1lbnQiLCJpbml0QnlVcGxvYWRKc29uIiwiaXNEcmFnQW5kRHJvcFN1cHBvcnRlZCIsImlzSW5saW5lIiwiQ0lEIiwiY29udGVudExvY2F0aW9uIiwiZnJvbU1lc3NhZ2UiLCJhZGRBdHRhY2htZW50SGVscGVyIiwiZHJvcGJveEZpbGUiLCJtU2l6ZSIsImJ5dGVzIiwiZHJpdmVGaWxlIiwiZmlsZVNpemUiLCJpc0xpbmtlZCIsImVzdGltYXRlZFNpemUiLCJjaWQiLCJyZW1vdmVMaW5rZWRBdHRhY2htZW50cyIsImFycmFjaG1lbnQiLCJpbmNsdWRlQXR0YWNobWVudEluUHJvZ3Jlc3MiLCJ3aXRob3V0QXR0YWNobWVudCIsIkFic3RyYWN0U2NyZWVuIiwib0Nyb3NzIiwic1NjcmVlbk5hbWUiLCJhVmlld01vZGVscyIsInJvdXRlcyIsImZNYXRjaGVyIiwib25Sb3V0ZSIsInJ1bGVzIiwiU1RPUkFHRV9LRVkiLCJUSU1FX0tFWSIsImlzU3RvcmFnZVN1cHBvcnRlZCIsInN0b3JhZ2VOYW1lIiwic3RvcmFnZUlzQXZhaWxhYmxlIiwic2V0SXRlbSIsInMiLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsIlNFU1NfU1RPUkFHRSIsInNlc3Npb25TdG9yYWdlIiwiV0lOX1NUT1JBR0UiLCJfX2dldCIsIl9fc2V0Iiwic2V0VGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wIiwiZ2V0SGFzaCIsImFwcERhdGEiLCJjbGVhckhhc2giLCJjaGVja1RpbWVzdGFtcCIsIkFic3RyYWN0Q2hlY2tib3giLCJkaXNhYmxlIiwicmVhZE9ubHkiLCJpbnZlcnRlZCIsImxhYmVsQW5pbWF0ZWQiLCJUZW1wbGF0ZVVzZXJTdG9yZSIsInRlbXBsYXRlc05hbWVzIiwic2tpcEZpcnN0Iiwic3RhdGljRmlsZVR5cGUiLCJVbmtub3duIiwibWltZVR5cGVQYXJ0cyIsIlZpZGVvIiwiQ29kZSIsIkVtbCIsIlRleHQiLCJQZGYiLCJDZXJ0aWZpY2F0ZSIsIkNlcnRpZmljYXRlQmluIiwiV29yZFRleHQiLCJTaGVldCIsIlByZXNlbnRhdGlvbiIsInN0YXRpY0ljb25DbGFzcyIsImZpbGVUeXBlIiwicmVzdWx0VGV4dCIsInJlc3VsdENsYXNzIiwic3RhdGljQ29tYmluZWRJY29uQ2xhc3MiLCJ0eXBlcyIsIkF0dGFjaG1lbnRNb2RlbCIsImZpbGVOYW1lRXh0IiwiaXNUaHVtYm5haWwiLCJjaWRXaXRoT3V0VGFncyIsIm1pbWVJbmRleCIsImZyYW1lZCIsImJSZXN1bHQiLCJNaW1lVHlwZSIsIkVzdGltYXRlZFNpemUiLCJJc0lubGluZSIsIklzTGlua2VkIiwiSXNUaHVtYm5haWwiLCJDb250ZW50TG9jYXRpb24iLCJEb3dubG9hZCIsIk1pbWVJbmRleCIsIkZyYW1lZCIsImlzSW1hZ2UiLCJpc01wMyIsImlzT2dnIiwiaXNXYXYiLCJoYXNUaHVtYm5haWwiLCJpc1RleHQiLCJpc1BkZiIsImlzRnJhbWVkIiwiZ29vZ2xlUHJldmlld1N1cHBvcnRlZCIsImhhc1ByZXZpZXciLCJoYXNQcmVwbGF5IiwibGlua0Rvd25sb2FkIiwibGlua1ByZXZpZXciLCJsaW5rVGh1bWJuYWlsIiwibGlua1RodW1ibmFpbFByZXZpZXdTdHlsZSIsImxpbmtGcmFtZWQiLCJsaW5rUHJldmlld0FzUGxhaW4iLCJsaW5rUHJldmlld01haW4iLCJnZW5lcmF0ZVRyYW5zZmVyRG93bmxvYWRVcmwiLCJob3N0IiwicGF0aG5hbWUiLCJldmVudERyYWdTdGFydCIsImxvY2FsRXZlbnQiLCJvcmlnaW5hbEV2ZW50IiwiZGF0YVRyYW5zZmVyIiwic2V0RGF0YSIsImljb25DbGFzcyIsImljb25UZXh0IiwiQ2hlY2tib3hDb21wb25lbnQiLCJvbkJsdXIiLCJvblJlYWR5Iiwib25Nb2RlQ2hhbmdlIiwiYmx1clRpbWVyIiwiX19yZXNpemFibGUiLCJfX2luaXRlZCIsIiRlbGVtZW50IiwicmVzaXplRWRpdG9yIiwicnVuT25CbHVyIiwiYmx1clRyaWdnZXIiLCJmb2N1c1RyaWdnZXIiLCJtb2RlIiwiY2xlYXJDYWNoZWRTaWduYXR1cmUiLCJleGVjQ29tbWFuZCIsImNsZWFyQ2FjaGUiLCJjaGVja0RpcnR5IiwicmVzZXREaXJ0eSIsIndyYXBJc0h0bWwiLCJfX3BsYWluIiwiZ2V0UmF3RGF0YSIsInNldE1vZGUiLCJyZXBsYWNlSHRtbCIsImZpbmQiLCJzZXRSYXdEYXRhIiwiaW5pdEZ1bmMiLCJjb25maWciLCJhbGxvd1NvdXJjZSIsImJpdGkiLCJ0b29sYmFyR3JvdXBzIiwiX19jZmdJbml0ZWQiLCJyZW1vdmVCdXR0b25zIiwicmVtb3ZlUGx1Z2lucyIsImVudGVyTW9kZSIsIkNLRURJVE9SIiwiRU5URVJfQlIiLCJzaGlmdEVudGVyTW9kZSIsIkVOVEVSX1AiLCJlbnYiLCJpc0NvbXBhdGlibGUiLCJUYWIiLCJGaWxlUmVhZGVyIiwiZ2V0RmlsZXNDb3VudCIsImZpbGUiLCJnZXRGaWxlIiwiaW1hZ2VJZCIsInJlYWRlciIsIm9ubG9hZGVuZCIsInJlYWRBc0RhdGFVUkwiLCJyZW1vdmVNZW51SXRlbSIsIl9faW5pdEVkaXRvciIsImZvY3VzTWFuYWdlciIsImlubmVySGVpZ2h0Iiwic2V0UmVhZE9ubHkiLCJzdHlsZXMiLCJyYWlubG9vcCIsInJhaW5sb29wVGlwIiwicmFpbmxvb3BFcnJvclRpcCIsIkZpbHRlclVzZXJTdG9yZSIsIm1vZHVsZXMiLCJBc2tQb3B1cFZpZXciLCJhc2tEZXNjIiwieWVzQnV0dG9uIiwibm9CdXR0b24iLCJ5ZXNGb2N1cyIsIm5vRm9jdXMiLCJmWWVzQWN0aW9uIiwiZk5vQWN0aW9uIiwiYkZvY3VzWWVzT25TaG93IiwiUG9wdXBBc2siLCJjbGVhclBvcHVwIiwieWVzQ2xpY2siLCJub0NsaWNrIiwiZlllc0Z1bmMiLCJmTm9GdW5jIiwiaXNGb2N1c1llc09uU2hvdyIsIlF1b3RhVXNlclN0b3JlIiwidXNhZ2UiLCJwZXJjZW50YWdlIiwicG9wdWxhdGVEYXRhIiwiQml0TGVuZ3RoMTAyNCIsIkxhbmd1YWdlc1BvcHVwVmlldyIsImZMYW5nIiwibGFuZ3MiLCJzZWxlY3RlZCIsInNldExhbmd1YWdlU2VsZWN0aW9uIiwibGFuZ3VhZ2VUb29sdGlwTmFtZSIsImN1cnJlbnRMYW5nIiwib25CZWZvcmVTaG93IiwiZkxhbmd1YWdlIiwiY2hhbmdlTGFuZ3VhZ2UiLCJBcHAiLCJybCIsInBsdWdpblNldHRpbmdzR2V0IiwicGx1Z2luUmVtb3RlUmVxdWVzdCIsIkVudW1zIiwiYm9vdHN0YXJ0IiwiVGltZTEwbXMiLCJfX0FQUF9CT09UIiwiZkVycm9yQ2FsbGJhY2siLCJyYWlubG9vcFRFTVBMQVRFUyIsImlubmVySFRNTCIsImFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyIsImFsbG93TGFuZ3VhZ2VzT25Mb2dpbiIsIm5ld01vdmVUb0ZvbGRlciIsImludGVyZmFjZUFuaW1hdGlvbiIsImFuaW0iLCJkZWZhdWx0UmVzcG9uc2UiLCJzUmVxdWVzdEFjdGlvbiIsIm9SZXF1ZXN0UGFyYW1ldGVycyIsImZDYWxsIiwibG9naW5BbmRMb2dvdXRSZWxvYWQiLCJDbGVhckF1dGgiLCJMb2dvdXQiLCJjbGVhckNsaWVudFNpZGVUb2tlbiIsImFqYXhSZXF1ZXN0IiwiZlJlc3VsdENhbGxiYWNrIiwiaVRpbWVPdXQiLCJzR2V0QWRkIiwiYWJvcnRBY3Rpb25zIiwiaXNQb3N0IiwiaGVhZGVycyIsImFjdGlvblRvQWJvcnQiLCJfX2Fib3J0ZWQiLCJYVG9rZW4iLCJvRGVmQWpheCIsImdsb2JhbCIsImFsd2F5cyIsIlRpbWUiLCJVcGRhdGVUb2tlbiIsInNldENsaWVudFNpZGVUb2tlbiIsImNhdGNoIiwib1BhcmFtZXRlcnMiLCJpVGltZW91dCIsImFBYm9ydEFjdGlvbnMiLCJnZXRQdWJsaWNLZXkiLCJqc1ZlcnNpb24iLCJzVmVyc2lvbiIsIkFic3RyYWN0U2V0dGluZ3NTY3JlZW4iLCJtZW51Iiwib0N1cnJlbnRTdWJTY3JlZW4iLCJvVmlld01vZGVsUGxhY2UiLCJzZXR1cFNldHRpbmdzIiwic2V0dGluZ3NTY3JlZW4iLCJSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCIsInZpZXdNb2RlbFBsYWNlIiwiU2V0dGluZ3NWaWV3TW9kZWwiLCJEaXNhYmxlZFNldHRpbmdzVmlld01vZGVsIiwidG1wbCIsIlJlbW92ZVNldHRpbmdzVmlld01vZGVsIiwiRGVmYXVsdFZpZXdNb2RlbCIsImRlZmF1bHRSb3V0ZSIsInN1Ym5hbWUiLCJub3JtYWxpemVfIiwicnF1ZXN0IiwidmFscyIsIkFic3RyYWN0QXBwIiwiZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlIiwiaXNMb2NhbEF1dG9jb21wbGV0ZSIsImlmcmFtZSIsImxhc3RFcnJvclRpbWUiLCJpSCIsImlXIiwiZ2V0QXBwbGljYXRpb25Db25maWd1cmF0aW9uIiwiZGVmYXVsdF8iLCJhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24iLCJvTGluayIsImhyZWYiLCJjcmVhdGVFdmVudCIsIm9FIiwiTW91c2VFdmVudHMiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50Iiwic2V0V2luZG93VGl0bGUiLCJyZWRpcmVjdFRvQWRtaW5QYW5lbCIsIl9fcmxhaF9jbGVhciIsIl9fcmxhaF9zZXQiLCJpbklmcmFtZSIsImN1c3RvbUxvZ291dExpbmsiLCJoaXN0b3J5QmFjayIsImhpc3RvcnkiLCJiYWNrIiwibW9iaWxlIiwiY29tcG9uZW50cyIsInJlZ2lzdGVyIiwiVGltZTFzIiwic3NtIiwiYWRkU3RhdGUiLCJvbkxlYXZlIiwiQWJzdHJhY3RCb290IiwiQWJzdHJhY3RSYWRpbyIsInByb2dyZXNzVGV4dCIsInAiLCJwcm9ncmVzc1N0eWxlIiwibG9jYWxTaXplIiwiZmlsZUV4dCIsIlRlbXBOYW1lIiwiQ29udGFjdFByb3BlcnR5TW9kZWwiLCJ0eXBlU3RyIiwicGxhY2Vob2xkZXJWYWx1ZSIsImxhcmdlVmFsdWUiLCJOb3RlIiwiRm9sZGVyU3lzdGVtUG9wdXBWaWV3Iiwic0Nob29zZU9uVGV4dCIsInNVbnVzZVRleHQiLCJmb2xkZXJTZWxlY3RMaXN0IiwiZlNldFN5c3RlbUZvbGRlcnMiLCJmU2F2ZVN5c3RlbUZvbGRlcnMiLCJTZW50Rm9sZGVyIiwiRHJhZnRGb2xkZXIiLCJTcGFtRm9sZGVyIiwiVHJhc2hGb2xkZXIiLCJBcmNoaXZlRm9sZGVyIiwiTnVsbEZvbGRlciIsIm5vdGlmaWNhdGlvblR5cGUiLCJBYnN0cmFjdEJhc2ljUHJvbWlzZXMiLCJvUHJvbWlzZXNTdGFjayIsImZhc3RSZXNvbHZlIiwibURhdGEiLCJmYXN0UmVqZWN0IiwiQWJzdHJhY3RTeXN0ZW1Ecm9wRG93blVzZXJWaWV3IiwibG9nb0ltZyIsImxvZ29UaXRsZSIsIm1vYmlsZURldmljZSIsImFsbG93U2V0dGluZ3MiLCJhbGxvd0hlbHAiLCJIZWxwIiwiYWNjb3VudEVtYWlsIiwiYWNjb3VudE1lbnVEcm9wZG93blRyaWdnZXIiLCJjYXBhQWRkaXRpb25hbEFjY291bnRzIiwiQWRkaXRpb25hbEFjY291bnRzIiwiYWRkQWNjb3VudENsaWNrIiwic3RvcFBsYXkiLCJhY2NvdW50Q2xpY2siLCJhY2NvdW50IiwiZW1haWxUaXRsZSIsInNldHRpbmdzQ2xpY2siLCJzZXR0aW5nc0hlbHAiLCJsb2dvdXRDbGljayIsIlNlbGVjdG9yIiwia29MaXN0Iiwia29TZWxlY3RlZEl0ZW0iLCJrb0ZvY3VzZWRJdGVtIiwic0l0ZW1TZWxlY3RvciIsInNJdGVtU2VsZWN0ZWRTZWxlY3RvciIsInNJdGVtQ2hlY2tlZFNlbGVjdG9yIiwic0l0ZW1Gb2N1c2VkU2VsZWN0b3IiLCJsaXN0Q2hlY2tlZCIsImlzTGlzdENoZWNrZWQiLCJmb2N1c2VkSXRlbSIsInNlbGVjdGVkSXRlbSIsIml0ZW1TZWxlY3RlZFRocm90dGxlIiwic2VsZWN0ZWRJdGVtVXNlQ2FsbGJhY2siLCJpU2VsZWN0TmV4dEhlbHBlciIsImlGb2N1c2VkTmV4dEhlbHBlciIsIm9Db250ZW50VmlzaWJsZSIsIm9Db250ZW50U2Nyb2xsYWJsZSIsInNMYXN0VWlkIiwib0NhbGxiYWNrcyIsIml0ZW1TZWxlY3RlZCIsImF1dG9TZWxlY3QiLCJzdWJJdGVtIiwiZ2V0SXRlbVVpZCIsImFDYWNoZSIsImFDaGVja2VkQ2FjaGUiLCJtRm9jdXNlZCIsIm1TZWxlY3RlZCIsImFJdGVtcyIsImdldE5leHQiLCJpc05leHRGb2N1c2VkIiwiaXNDaGVja2VkIiwiaXNTZWxlY3RlZCIsInNjcm9sbFRvRm9jdXNlZCIsIm9uSXRlbVNlbGVjdCIsImdvRG93biIsImZvcmNlU2VsZWN0IiwibmV3U2VsZWN0UG9zaXRpb24iLCJEb3duIiwiZ29VcCIsIlVwIiwidW5zZWxlY3QiLCJjb250ZW50VmlzaWJsZSIsImNvbnRlbnRTY3JvbGxhYmxlIiwiYWN0aW9uQ2xpY2siLCJjdXJyZW50VGFyZ2V0IiwiZXZlbnRLZXkiLCJJbnNlcnQiLCJTcGFjZSIsIkhvbWUiLCJFbmQiLCJQYWdlVXAiLCJQYWdlRG93biIsInNoaWZ0Iiwib25BdXRvU2VsZWN0IiwiZG9VcFVwT3JEb3duRG93biIsIm9uVXBVcE9yRG93bkRvd24iLCJnZXRJdGVtVWlkQ2FsbGJhY2siLCJvbkl0ZW1HZXRVaWQiLCJpRXZlbnRLZXlDb2RlIiwiYlNoaWZ0S2V5IiwiYkZvcmNlU2VsZWN0IiwiaXNOZXh0IiwiaXNTdG9wIiwicGFnZVN0ZXAiLCJsaXN0TGVuIiwiJGZvY3VzZWQiLCJ2aXNpYmxlSGVpZ2h0IiwiZm9jdXNlZEhlaWdodCIsIm91dGVySGVpZ2h0Iiwic2Nyb2xsVG9Ub3AiLCJmYXN0IiwiZXZlbnRDbGlja0Z1bmN0aW9uIiwiY2hhbmdlUmFuZ2UiLCJpc0luUmFuZ2UiLCJsaXN0SXRlbSIsImxpbmVVaWQiLCJtZXRhS2V5Iiwic2VsZWN0TWVzc2FnZUl0ZW0iLCJldmVudE5hbWUiLCJtZXNzYWdlSXRlbSIsInN1YmplY3RQcmVmaXgiLCJzdWJqZWN0U3VmZml4IiwicHJpb3JpdHkiLCJOb3JtYWwiLCJwcm94eSIsImZyb21FbWFpbFN0cmluZyIsImZyb21DbGVhckVtYWlsU3RyaW5nIiwidG9FbWFpbHNTdHJpbmciLCJ0b0NsZWFyRW1haWxzU3RyaW5nIiwic2VuZGVyRW1haWxzU3RyaW5nIiwic2VuZGVyQ2xlYXJFbWFpbHNTdHJpbmciLCJ1bnN1YnNyaWJlTGlua3MiLCJoYXNBdHRhY2htZW50cyIsImF0dGFjaG1lbnRzU3BlY0RhdGEiLCJhdHRhY2htZW50SWNvbkNsYXNzIiwicGdwU2lnbmVkVmVyaWZ5U3RhdHVzIiwicGdwU2lnbmVkVmVyaWZ5VXNlciIsInJlYWRSZWNlaXB0IiwiaXNJbXBvcnRhbnQiLCJIaWdoIiwib01lc3NhZ2VNb2RlbCIsInByb3BlcnRpZXMiLCJjYXJyeSIsInByb3BlcnR5IiwiZ2V0UmVjaXBpZW50c0VtYWlscyIsImNvbXB1dGVTZW5kZXJFbWFpbCIsIlByaW9yaXR5IiwiTG93IiwiSGFzaCIsIlJlcXVlc3RIYXNoIiwiRXh0ZXJuYWxQcm94eSIsIlRvIiwiQ2MiLCJCY2MiLCJSZXBseVRvIiwiRGVsaXZlcmVkVG8iLCJVbnN1YnNyaWJlTGlua3MiLCJTdWJqZWN0UGFydHMiLCJEYXRlVGltZVN0YW1wSW5VVEMiLCJIYXNBdHRhY2htZW50cyIsIkF0dGFjaG1lbnRzU3BlY0RhdGEiLCJUaHJlYWRzIiwiRHJhZnRJbmZvIiwiTWVzc2FnZUlkIiwiSW5SZXBseVRvIiwiUmVmZXJlbmNlcyIsIlBncFNpZ25lZCIsIlBncEVuY3J5cHRlZCIsImZvdW5kZWRDSURzIiwiRm91bmRlZENJRHMiLCJpbml0QXR0YWNobWVudHNGcm9tSnNvbiIsIkF0dGFjaG1lbnRzIiwiUmVhZFJlY2VpcHQiLCJoYXNVbnN1YnNyaWJlTGlua3MiLCJnZXRGaXJzdFVuc3Vic3JpYmVMaW5rIiwiSXNTZWVuIiwiSXNGbGFnZ2VkIiwiSXNBbnN3ZXJlZCIsIklzRm9yd2FyZGVkIiwiSXNSZWFkUmVjZWlwdCIsIklzRGVsZXRlZCIsImZyb21Ea2ltRGF0YSIsImJjY1RvTGluZSIsInJlcGx5VG9Ub0xpbmUiLCJsaW5lQXNDc3MiLCJjbGFzc25hbWVzIiwiaGFzVmlzaWJsZUF0dGFjaG1lbnRzIiwiZmluZEF0dGFjaG1lbnRCeUNpZCIsImZpbmRBdHRhY2htZW50QnlDb250ZW50TG9jYXRpb24iLCJtZXNzYWdlSWQiLCJpblJlcGx5VG8iLCJmcm9tQXNTaW5nbGVFbWFpbCIsInZpZXdMaW5rIiwiZG93bmxvYWRMaW5rIiwiZXhjbHVkZUVtYWlscyIsImxhc3QiLCJ0b1Jlc3VsdCIsImNjUmVzdWx0IiwidGV4dEJvZHlUb1N0cmluZyIsImF0dGFjaG1lbnRzVG9TdHJpbmdMaW5lIiwiYXR0YWNoTGluZXMiLCJ2aWV3UG9wdXBNZXNzYWdlIiwic2hvd0xhenlFeHRlcm5hbEltYWdlc0luQm9keSIsImNjTGluZSIsInByaW50TWVzc2FnZSIsImdlbmVyYXRlVWlkIiwibG96YWQiLCJ0aHJlc2hvbGQiLCJkYXRhc2V0Iiwib3JpZ2luYWwiLCJvcGFjaXR5Iiwib2JzZXJ2ZSIsImxhenkiLCJyZXBsYWNlUGxhbmVUZXh0Qm9keSIsIkFjY291bnRQb3B1cFZpZXciLCJzdWJtaXRSZXF1ZXN0IiwiZW1haWxFcnJvciIsInBhc3N3b3JkRXJyb3IiLCJzdWJtaXRFcnJvciIsInN1Ym1pdEVycm9yQWRkaXRpb25hbCIsImVtYWlsRm9jdXMiLCJhZGRBY2NvdW50Q29tbWFuZCIsIkVycm9yTWVzc2FnZUFkZGl0aW9uYWwiLCJjYW5CZUVkaXQiLCJJZGVudGl0eVBvcHVwVmlldyIsImVkaXQiLCJvd25lciIsImFkZE9yRWRpdElkZW50aXR5Q29tbWFuZCIsIm9uSGlkZVdpdGhEZWxheSIsIlNhdmVUcmlnZ2VyQ29tcG9uZW50IiwidmVydGljYWxBbGlnbiIsInNldFN0YXRlIiwiSW5wdXRDb21wb25lbnQiLCJTZWxlY3RDb21wb25lbnQiLCJvcHRpb25zVGV4dCIsIm9wdGlvbnNWYWx1ZSIsIm9wdGlvbnNDYXB0aW9uIiwiUmFkaW9Db21wb25lbnQiLCJERUZBVUxUX1JPV1MiLCJUZXh0QXJlYUNvbXBvbmVudCIsInJvd3MiLCJzcGVsbGNoZWNrIiwiRGF0ZUNvbXBvbmVudCIsIlNjcmlwdENvbXBvbmVudCIsInRlbXBsYXRlTm9kZXMiLCJvdXRlckhUTUwiLCJyZXBsYWNlV2l0aCIsIm5vZGVWYWx1ZSIsIkNoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQiLCJhbmltYXRpb25Cb3giLCJhbmltYXRpb25DaGVja21hcmsiLCJhbmltYXRpb25Cb3hTZXRUcnVlIiwiYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSIsInRyaWdnZXJBbmltYXRpb24iLCJib3giLCJBcHBVc2VyIiwibW92ZUNhY2hlIiwicXVvdGFEZWJvdW5jZSIsIm1vdmVPckRlbGV0ZVJlc3BvbnNlSGVscGVyIiwibWVzc2FnZXNNb3ZlVHJpZ2dlciIsIlRpbWUybSIsIlRpbWUzbSIsIlRpbWU1bSIsIlRpbWUxMG0iLCJUaW1lMTVtIiwiVGltZTIwbSIsIndha2VVcCIsIlRpbWU2MG0iLCJiYWNrc3RyZXRjaCIsImZhZGUiLCJjZW50ZXJlZFgiLCJjZW50ZXJlZFkiLCJiRHJvcFBhZ2VQb3NpdGlvbiIsImJEcm9wQ3VycmVuRm9sZGVyQ2FjaGUiLCJyZWNhY2hlSW5ib3hNZXNzYWdlTGlzdCIsImZSZXN1bHRGdW5jIiwib0NvbnRhY3RzIiwiQ29udGFjdFN0b3JlIiwic1RyYXNoRm9sZGVyIiwic1NwYW1Gb2xkZXIiLCJpc1NwYW0iLCJpc1RyYXNoIiwiaXNIYW0iLCJtZXNzYWdlc01vdmVIZWxwZXIiLCJ1aWRzRm9yTW92ZSIsIm1lc3NhZ2VzQ29weUhlbHBlciIsInNGcm9tRm9sZGVyRnVsbE5hbWVSYXciLCJzVG9Gb2xkZXJGdWxsTmFtZVJhdyIsImFVaWRGb3JDb3B5IiwibWVzc2FnZXNEZWxldGVIZWxwZXIiLCJhVWlkRm9yUmVtb3ZlIiwiYWxlcnQiLCJkZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXIiLCJpRGVsZXRlVHlwZSIsImJVc2VGb2xkZXIiLCJvTW92ZUZvbGRlciIsIm5TZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uIiwiTm90U3BhbSIsIm1vdmVNZXNzYWdlc1RvRm9sZGVyIiwiYVVpZEZvck1vdmUiLCJiQ29weSIsIm9Gcm9tRm9sZGVyIiwib1RvRm9sZGVyIiwicHJvbSIsIlByb21pc2VzIiwiZm9sZGVyc1Byb21pc2VzQWN0aW9uSGVscGVyIiwicHJvbWlzZSIsImVycm9yRGVmQ29kZSIsInJlbG9hZE9wZW5QZ3BLZXlzIiwib3BlbnBncEtleXMiLCJnZXRBbGxLZXlzIiwiYUVtYWlscyIsImFVc2VycyIsInByaW1hcnlVc2VyIiwiZ2V0UHJpbWFyeVVzZXIiLCJ1c2VySWQiLCJ1c2VyaWQiLCJ1c2VycyIsIk9wZW5QZ3BLZXlNb2RlbCIsImdldEZpbmdlcnByaW50IiwiZ2V0S2V5SWQiLCJnZXRLZXlJZHMiLCJhcm1vciIsImJCb290IiwiY291bnRzIiwic0FjY291bnRFbWFpbCIsIkFjY291bnRzIiwib0FjY291bnQiLCJBY2NvdW50TW9kZWwiLCJJZGVudGl0aWVzIiwiaWRlbnRpdHlEYXRhIiwiSWQiLCJJZGVudGl0eU1vZGVsIiwiU2lnbmF0dXJlIiwiU2lnbmF0dXJlSW5zZXJ0QmVmb3JlIiwiVGVtcGxhdGVTdG9yZSIsIlRlbXBsYXRlcyIsInRlbXBsYXRlRGF0YSIsIlRlbXBsYXRlTW9kZWwiLCJRdW90YVN0b3JlIiwiY2hlY2siLCJmb2xkZXJGcm9tQ2FjaGUiLCJGbGFncyIsImJvb3QiLCJMaXN0IiwiaVNldEFjdGlvbiIsImFscmVhZHlVbnJlYWQiLCJyb290VWlkcyIsImdvb2dsZUNvbm5lY3QiLCJ0d2l0dGVyQ29ubmVjdCIsImZhY2Vib29rQ29ubmVjdCIsImZpcmVBbGxBY3Rpb25zIiwiR29vZ2xlIiwiRmFjZWJvb2siLCJUd2l0dGVyIiwiYXV0b2NvbXBsZXRlQ2FsbGJhY2siLCJzZXRFeHBhbmRlZEZvbGRlciIsInNGdWxsTmFtZUhhc2giLCJiRXhwYW5kZWQiLCJhRXhwYW5kZWRMaXN0IiwiTG9jYWwiLCJFeHBhbmRlZEZvbGRlcnMiLCJ3aXRob3V0IiwiaW5pdEhvcml6b250YWxMYXlvdXRSZXNpemVyIiwic0NsaWVudFNpZGVLZXlOYW1lIiwiYm90dG9tIiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwiZlNldEhlaWdodCIsImZSZXNpemVDcmVhdGVGdW5jdGlvbiIsImZSZXNpemVTdGFydEZ1bmN0aW9uIiwiZlJlc2l6ZVJlc2l6ZUZ1bmN0aW9uIiwiZlJlc2l6ZVN0b3BGdW5jdGlvbiIsIm9FdmVudCIsIm9PYmplY3QiLCJvT3B0aW9ucyIsImhhbmRsZXMiLCJmRGlzYWJsZSIsImJEaXNhYmxlIiwicmVzaXphYmxlIiwiaUhlaWdodCIsImluaXRWZXJ0aWNhbExheW91dFJlc2l6ZXIiLCJkaXNhYmxlZFdpZHRoIiwibWluV2lkdGgiLCJsTGVmdCIsInJpZ2h0IiwibUxlZnRXaWR0aCIsImZTZXRXaWR0aCIsImlXaWR0aCIsIm9iaiIsIm1heFdpZHRoIiwiU2l6ZTM1MHB4IiwiYm9vdHN0YXJ0VHdvRmFjdG9yU2NyZWVuIiwiYm9vdHN0YXJ0V2VsY29tZVBvcHVwIiwiYm9vdHN0YXJ0TG9naW5TY3JlZW4iLCJjdXN0b21Mb2dpbkxpbmsiLCJMb2dpblVzZXJTY3JlZW4iLCJib290ZW5kIiwicHJvZ3Jlc3NKcyIsImNvbnRhY3RzU3luY0ludGVydmFsIiwianNIYXNoIiwiYWxsb3dHb29nbGUiLCJhbGxvd0ZhY2Vib29rIiwiYWxsb3dUd2l0dGVyIiwiVHdvRmFjdG9yIiwiVHdvRmFjdG9yRm9yY2UiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJPcGVuUEdQIiwib3BlbnBncENhbGxiYWNrIiwiV29ya2VyIiwiaW5pdFdvcmtlciIsIktleXJpbmciLCJNYWlsQm94VXNlclNjcmVlbiIsIlNldHRpbmdzVXNlclNjcmVlbiIsInNGIiwiVGltZTEwcyIsIlRpbWUycyIsInJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyIiwiQ29tcG9zZXIiLCJGb2xkZXJMaXN0U2l6ZSIsIm1vbWVudFJlbG9hZCIsIkJBU0VfNjRfQ0hSIiwidXJsc2FmZV9lbmNvZGUiLCJlbmNvZGUiLCJvdXRwdXQiLCJjaHIxIiwiY2hyMiIsImNocjMiLCJlbmMxIiwiZW5jMiIsImVuYzMiLCJlbmM0IiwiaSIsIl91dGY4X2VuY29kZSIsImNoYXJDb2RlQXQiLCJjaGFyQXQiLCJkZWNvZGUiLCJfdXRmOF9kZWNvZGUiLCJzdHJpbmciLCJ1dGZ0ZXh0IiwibiIsImwiLCJjIiwiYzIiLCJjMyIsIlByb21pc2VzVXNlclBvcHVsYXRvciIsImlzRm9sZGVyRXhwYW5kZWQiLCJleHBhbmRlZEZvbGRlcnMiLCJub3JtYWxpemVGb2xkZXIiLCJDYWNoZSIsImZvbGRlclJlc3BvbnNlUGFyc2VSZWMiLCJzTmFtZXNwYWNlIiwiYkRpc3BsYXlTcGVjU2V0dGluZyIsIm9Gb2xkZXIiLCJvQ2FjaGVGb2xkZXIiLCJGdWxsTmFtZVJhdyIsIkZvbGRlck1vZGVsIiwiQ2hlY2thYmxlIiwiY29sbGFwc2VkIiwiRXh0ZW5kZWQiLCJTdWJGb2xkZXJzIiwiY250IiwiQ291bnRSZWMiLCJOYW1lc3BhY2UiLCJJc1RocmVhZHNTdXBwb3J0ZWQiLCJPcHRpbWl6ZWQiLCJTeXN0ZW1Gb2xkZXJzIiwiU0VOVCIsIkRSQUZUUyIsIkpVTksiLCJUUkFTSCIsIkFMTCIsIkZvbGRlcnNMYXNoSGFzaCIsIkZvbGRlcnNIYXNoIiwiRmlsdGVyTW9kZWwiLCJjb25kaXRpb25zIiwiY29uZGl0aW9uc1R5cGUiLCJBbnkiLCJhY3Rpb25WYWx1ZSIsImFjdGlvblZhbHVlU2Vjb25kIiwiYWN0aW9uVmFsdWVUaGlyZCIsImFjdGlvblZhbHVlRm91cnRoIiwiYWN0aW9uTWFya0FzUmVhZCIsImFjdGlvbktlZXAiLCJhY3Rpb25Ob1N0b3AiLCJhY3Rpb25UeXBlIiwiTW92ZVRvIiwiZkdldFJlYWxGb2xkZXJOYW1lIiwiZGVsaW1pdGVyIiwibmFtZVN1YiIsIkZPTERFUiIsIkVNQUlMIiwiVmFjYXRpb24iLCJSZWplY3QiLCJEaXNjYXJkIiwiYWN0aW9uVGVtcGxhdGUiLCJkZWxldGVBY2Nlc3MiLCJjYW5CZURlbGV0ZWQiLCJnZW5lcmF0ZUlEIiwiY29uZCIsIklEIiwiRW5hYmxlZCIsIkNvbmRpdGlvbnNUeXBlIiwiQ29uZGl0aW9ucyIsIkFjdGlvblZhbHVlIiwiQWN0aW9uVmFsdWVTZWNvbmQiLCJBY3Rpb25WYWx1ZVRoaXJkIiwiQWN0aW9uVmFsdWVGb3VydGgiLCJBY3Rpb25UeXBlIiwiU3RvcCIsIktlZXAiLCJNYXJrQXNSZWFkIiwiYWRkQ29uZGl0aW9uIiwiRmlsdGVyQ29uZGl0aW9uTW9kZWwiLCJyZW1vdmVDb25kaXRpb24iLCJvQ29uZGl0aW9uVG9EZWxldGUiLCJzZXRSZWNpcGllbnRzIiwiZmlsdGVyQ29uZGl0aW9uIiwiY2xvbmVTZWxmIiwiQ29udGFpbnMiLCJ2YWx1ZVNlY29uZCIsIkhlYWRlciIsIkZpZWxkIiwiVHlwZSIsIlZhbHVlIiwiVmFsdWVTZWNvbmQiLCJmaWx0ZXJDb25kIiwiS2V5Ym9hcmRTaG9ydGN1dHNIZWxwUG9wdXBWaWV3IiwiUG9wdXBLZXlib2FyZFNob3J0Y3V0c0hlbHAiLCIkdGFicyIsInRhYiIsIkNvbnRhY3RzUG9wdXBWaWV3IiwiY29udGFjdHNDaGVja2VkT3JTZWxlY3RlZCIsImJWIiwidmlld0hhc05vbkVtcHR5UmVxdWlyZWRQcm9wZXJ0aWVzIiwiYlJlYWRPbmx5Iiwidmlld1JlYWRPbmx5Iiwidmlld1NhdmluZyIsImZGYXN0Q2xlYXJFbXB0eUxpc3RIZWxwZXIiLCJ2aWV3UHJvcGVydGllcyIsInJlbW92ZUFsbCIsImJCYWNrVG9Db21wb3NlIiwic0xhc3RDb21wb3NlRm9jdXNlZEZpZWxkIiwiYWxsb3dFeHBvcnQiLCJjb250YWN0c0NvdW50IiwiY3VycmVudENvbnRhY3QiLCJpbXBvcnRVcGxvYWRlckJ1dHRvbiIsImNvbnRhY3RzUGFnZSIsImNvbnRhY3RzUGFnZUNvdW50IiwiY29udGFjdHNQYWdlbmF0b3IiLCJlbXB0eVNlbGVjdGlvbiIsInZpZXdDbGVhclNlYXJjaCIsInZpZXdJRCIsInZpZXdTYXZlVHJpZ2dlciIsInZpZXdQcm9wZXJ0aWVzTmFtZXMiLCJGaXJzdE5hbWUiLCJMYXN0TmFtZSIsInZpZXdQcm9wZXJ0aWVzT3RoZXIiLCJOaWNrIiwidmlld1Byb3BlcnRpZXNFbWFpbHMiLCJ2aWV3UHJvcGVydGllc1dlYiIsIldlYiIsIm5hbWVzIiwiZkZpbHRlciIsInZpZXdQcm9wZXJ0aWVzUGhvbmVzIiwiUGhvbmUiLCJ2aWV3UHJvcGVydGllc0VtYWlsc05vbkVtcHR5IiwicHJvcGVydHlGb2N1c2VkIiwidmlld1Byb3BlcnRpZXNFbWFpbHNFbXB0eUFuZE9uRm9jdXNlZCIsInZpZXdQcm9wZXJ0aWVzUGhvbmVzRW1wdHlBbmRPbkZvY3VzZWQiLCJ2aWV3UHJvcGVydGllc1dlYkVtcHR5QW5kT25Gb2N1c2VkIiwidmlld1Byb3BlcnRpZXNPdGhlckVtcHR5QW5kT25Gb2N1c2VkIiwicmVsb2FkQ29udGFjdExpc3QiLCJjb250YWN0c0NoZWNrZWQiLCJjb250YWN0c0NoZWNrZWRPclNlbGVjdGVkVWlkcyIsImNvbnRhY3QiLCJpZENvbnRhY3QiLCJzZWxlY3RvciIsInBvcHVsYXRlVmlld0NvbnRhY3QiLCJiRHJvcFBhZ2VBZnRlckRlbGV0ZSIsIndhdGNoRGlydHkiLCJ3YXRjaEhhc2giLCJ2aWV3SGFzaCIsIkNvbnRhY3RMaXN0IiwibmV3Q29tbWFuZCIsImRlbGV0ZVNlbGVjdGVkQ29udGFjdHMiLCJuZXdNZXNzYWdlQ29tbWFuZCIsImFFIiwidG9FbWFpbHMiLCJjY0VtYWlscyIsImJjY0VtYWlscyIsImFDIiwiZ2V0TmFtZUFuZEVtYWlsSGVscGVyIiwiY2xlYXJDb21tYW5kIiwicmVxdWVzdFVpZCIsIkZ1bGxOYW1lIiwicmVzIiwiUmVxdWVzdFVpZCIsIlJlc3VsdElEIiwic3luY0NvbW1hbmQiLCJnZXRQcm9wZXJ0eVBsYWNlaG9sZGVyIiwiYWRkTmV3UHJvcGVydHkiLCJhZGROZXdPckZvY3VzUHJvcGVydHkiLCJhZGROZXdFbWFpbCIsImFkZE5ld1Bob25lIiwiYWRkTmV3V2ViIiwiYWRkTmV3Tmlja25hbWUiLCJhZGROZXdOb3RlcyIsImFkZE5ld0JpcnRoZGF5IiwiQmlydGhkYXkiLCJleHBvcnRWY2YiLCJleHBvcnRDc3YiLCJqIiwicmVtb3ZlQ2hlY2tlZE9yU2VsZWN0ZWRDb250YWN0c0Zyb21MaXN0Iiwia29Db250YWN0cyIsImRlbGV0ZVJlc3BvbnNlIiwicmVtb3ZlUHJvcGVydHkiLCJvUHJvcCIsImxhc3ROYW1lIiwiZmlyc3ROYW1lIiwiZHJvcFBhZ2VQb3NpdGlvbiIsIkNvbnRhY3RNb2RlbCIsIkNvdW50IiwiRm9sZGVyQ3JlYXRlVmlldyIsInNpbXBsZUZvbGRlck5hbWVWYWxpZGF0aW9uIiwiZm9sZGVyTmFtZSIsInNlbGVjdGVkUGFyZW50VmFsdWUiLCJwYXJlbnRGb2xkZXJTZWxlY3RMaXN0IiwibWFuYWdlRm9sZGVyU3lzdGVtTmFtZSIsImNyZWF0ZUZvbGRlckNvbW1hbmQiLCJwYXJlbnRGb2xkZXJOYW1lIiwiRmlsdGVyUG9wdXBWaWV3IiwiRmlsdGVyU3RvcmUiLCJmVHJ1ZUNhbGxiYWNrIiwiYWxsb3dNYXJrQXNSZWFkIiwic2VsZWN0ZWRGb2xkZXJWYWx1ZSIsImFjdGlvblR5cGVPcHRpb25zIiwiZmllbGRPcHRpb25zIiwidHlwZU9wdGlvbnMiLCJ0eXBlT3B0aW9uc1NpemUiLCJwb3B1bGF0ZU9wdGlvbnMiLCJzYXZlRmlsdGVyQ29tbWFuZCIsIm1hcmthc3JlYWQiLCJtb3ZldG8iLCJyZWRpcmVjdCIsInZhY2F0aW9uIiwiUmVjaXBpZW50IiwiTm90Q29udGFpbnMiLCJFcXVhbFRvIiwiTm90RXF1YWxUbyIsInJlZ2V4IiwiUmVnZXgiLCJPdmVyIiwiVW5kZXIiLCJvRmlsdGVyIiwiYkVkaXQiLCJUd29GYWN0b3JDb25maWd1cmF0aW9uUG9wdXBWaWV3IiwibG9jayIsImNhcGFUd29GYWN0b3IiLCJwcm9jZXNzaW5nIiwiY2xlYXJpbmciLCJzZWNyZXRpbmciLCJ2aWV3VXNlciIsInR3b0ZhY3RvclN0YXR1cyIsInR3b0ZhY3RvclRlc3RlZCIsInZpZXdTZWNyZXQiLCJ2aWV3QmFja3VwQ29kZXMiLCJ2aWV3VXJsVGl0bGUiLCJ2aWV3VXJsIiwidmlld0VuYWJsZV8iLCJ2aWV3RW5hYmxlIiwidmlld1R3b0ZhY3RvckVuYWJsZVRvb2x0aXAiLCJ0cmFuc2xhdG9yVHJpZ2dlciIsInZpZXdUd29GYWN0b3JTdGF0dXMiLCJ0d29GYWN0b3JBbGxvd2VkRW5hYmxlIiwib25SZXN1bHQiLCJvblNob3dTZWNyZXRSZXN1bHQiLCJzaG93U2VjcmV0IiwiaGlkZVNlY3JldCIsImJMb2NrIiwiZ2V0UXIiLCJFbmFibGUiLCJJc1NldCIsIlRlc3RlZCIsIlNlY3JldCIsIkJhY2t1cENvZGVzIiwiVXJsVGl0bGUiLCJxciIsImxldmVsIiwiVGVtcGxhdGVQb3B1cFZpZXciLCJzaWduYXR1cmVEb20iLCJhZGRUZW1wbGF0ZUNvbW1hbmQiLCJwb3B1bGF0ZUJvZHlGcm9tRWRpdG9yIiwiZWRpdG9yU2V0Qm9keSIsInBvcHVsYXRlZCIsIkJvZHkiLCJzdG9yYWdlUmVzdWx0IiwiQ29va2llcyIsImdldEpTT04iLCJleHBpcmVzIiwiY29va2llRW5hYmxlZCIsImxvY2FsU3RvcmFnZSIsInN0b3JhZ2VWYWx1ZSIsImVkaXRlZCIsIm5hbWVGb3JFZGl0IiwicHJpdmF0ZU1lc3NhZ2VDb3VudEFsbCIsInByaXZhdGVNZXNzYWdlQ291bnRVbnJlYWQiLCJjb2xsYXBzZWRQcml2YXRlIiwiaW5pdENvbXB1dGVkIiwiaXNJbmJveCIsIkluYm94IiwiY2FuQmVFZGl0ZWQiLCJpc1N1YlNjcmliZWQiLCJpc1N1YkZvbGRlcnMiLCJoaWRkZW4iLCJpc1N5c3RlbSIsInNlbGVjdGFibGVGb3JGb2xkZXJMaXN0IiwiaVZhbHVlIiwicHJpbnRhYmxlVW5yZWFkQ291bnQiLCJjYW5CZVN1YlNjcmliZWQiLCJjYW5CZUNoZWNrZWQiLCJzdWZmaXgiLCJoYXNVbnJlYWRNZXNzYWdlcyIsImhhc1N1YlNjcmliZWRVbnJlYWRNZXNzYWdlc1N1YmZvbGRlcnMiLCJjb2xsYXBzZWRDc3MiLCJzSW5ib3hGb2xkZXJOYW1lIiwiRGVsaW1pdGVyIiwiRnVsbE5hbWVIYXNoIiwiSXNTZWxlY3RhYmxlIiwiSXNFeGlzdHMiLCJJc1N1YnNjcmliZWQiLCJwcmludGFibGVGdWxsTmFtZSIsImJDbGVhck9ubHkiLCJfX2Fib3J0ZWRfXyIsImFkZGl0aW9uYWxHZXRTdHJpbmciLCJvSCIsInRleHRTdGF0dXMiLCJpc0NhY2hlZCIsImVycm9yRGF0YSIsIl9fY2FjaGVkX18iLCJBamF4RmFsc2UiLCJBamF4UGFyc2UiLCJBamF4VGltZW91dCIsIkFqYXhBYm9ydCIsImdldFJlcXVlc3QiLCJzQWRkaXRpb25hbEdldFN0cmluZyIsImNhbkJlRGVsZXRlIiwiY2hhbmdlQWNjb3VudExpbmsiLCJQb3B1bGF0ZWQiLCJndUlEIiwiSURzIiwidXNlcklEcyIsInVzZXJJRCIsImd1aWQiLCJzZWxlY3RVc2VyIiwiZ2V0TmF0aXZlS2V5IiwiZXJyIiwicGF0dGVybiIsInNlbGVjdEVtYWlsIiwiTG9naW5Vc2VyVmlldyIsImZhY2Vib29rTG9naW5FbmFibGVkIiwiZ29vZ2xlTG9naW5FbmFibGVkIiwiZ29vZ2xlR21haWxMb2dpbkVuYWJsZWQiLCJ0d2l0dGVyTG9naW5FbmFibGVkIiwiaGlkZVN1Ym1pdEJ1dHRvbiIsIndlbGNvbWUiLCJzaWduTWUiLCJhZGRpdGlvbmFsQ29kZSIsImVycm9yQW5pbWF0aW9uIiwidmlzaWJpbGl0eSIsImFkZGl0aW9uYWxDb2RlU2lnbk1lIiwibG9naW5EZXNjcmlwdGlvbiIsImZvcmdvdFBhc3N3b3JkTGlua1VybCIsInJlZ2lzdHJhdGlvbkxpbmtVcmwiLCJlbWFpbEVycm9yQW5pbWF0aW9uIiwicGFzc3dvcmRFcnJvckFuaW1hdGlvbiIsImZvcm1IaWRkZW4iLCJmb3JtRXJyb3IiLCJwYXNzd29yZEZvY3VzIiwic3VibWl0RXJyb3JBZGRpZGlvbmFsIiwibGFuZ1JlcXVlc3QiLCJiU2VuZExhbmd1YWdlIiwibGFuZ3VhZ2VGdWxsTmFtZSIsInNpZ25NZVR5cGUiLCJVbnVzZWQiLCJEZWZhdWx0T24iLCJzaWduTWVWaXNpYmlsaXR5Iiwic29jaWFsTG9naW5FbmFibGVkIiwiYkYiLCJiRyIsImJUIiwid2luZG93T3BlbkZlYXR1cmVzIiwid2giLCJmYWNlYm9va0NvbW1hbmQiLCJnb29nbGVDb21tYW5kIiwiZ29vZ2xlR21haWxDb21tYW5kIiwidHdpdHRlckNvbW1hbmQiLCJzdWJtaXRDb21tYW5kIiwicGx1Z2luUmVzdWx0Q29kZSIsInBsdWdpblJlc3VsdE1lc3NhZ2UiLCJmU3VibWl0UmVzdWx0IiwiaVJlc3VsdENvZGUiLCJzUmVzdWx0TWVzc2FnZSIsImZMb2dpblJlcXVlc3QiLCJzTG9naW5QYXNzd29yZCIsIlR3b0ZhY3RvckF1dGgiLCJBZG1pbiIsIkxhc3RTaWduTWUiLCJkaXNwbGF5TWFpbkZvcm0iLCJzaWduTWVMb2NhbCIsImZTb2NpYWwiLCJpRXJyb3JDb2RlIiwiRGVmYXVsdE9mZiIsInRyYW5zbGF0b3JSZWxvYWQiLCJzdWJtaXRGb3JtIiwic2VsZWN0TGFuZ3VhZ2UiLCJzZWxlY3RMYW5ndWFnZU9uVGFiIiwiYlNoaWZ0IiwiU3lzdGVtRHJvcERvd25NYWlsQm94VXNlclZpZXciLCJGb2xkZXJMaXN0TWFpbEJveFVzZXJWaWV3IiwiTWVzc2FnZUxpc3RNYWlsQm94VXNlclZpZXciLCJNZXNzYWdlVmlld01haWxCb3hVc2VyVmlldyIsInVwZGF0ZVdpbmRvd1RpdGxlIiwiQ29udGFjdHMiLCJvblN0YXJ0IiwiTWVzc2FnZUxpc3RTaXplIiwiZk5vcm1TIiwiZk5vcm1EIiwiaURyb3BPdmVyVGltZXIiLCJhbGxvd0NvbXBvc2VyIiwiZm9sZGVyTGlzdEZvY3VzZWQiLCJpc0luYm94U3RhcnJlZCIsImZTZWxlY3RGb2xkZXIiLCJzdGFycmVkIiwiaXNNb3ZlIiwic3RvcFByb3BhZ2F0aW9uIiwibWVzc2FnZXNEcm9wT3ZlciIsIm1lc3NhZ2VzRHJvcE91dCIsIm1lc3NhZ2VzRHJvcCIsImNvbXBvc2VDbGljayIsImNyZWF0ZUZvbGRlciIsImNvbmZpZ3VyZUZvbGRlcnMiLCJjb250YWN0c0NsaWNrIiwiZGlzcGxheSIsIklkQ29udGFjdCIsIkRpc3BsYXkiLCJSZWFkT25seSIsIlByb3BlcnRpZXMiLCJUeXBlU3RyIiwic3JjQXR0ciIsImNhbkJlTW92ZWRIZWxwZXIiLCJjYW5CZU1vdmVkIiwiYlByZWZldGNoIiwiZW1wdHlTdWJqZWN0VmFsdWUiLCJpR29Ub1VwVXBPckRvd25Eb3duVGltZW91dCIsImFsbG93UmVsb2FkIiwiUmVsb2FkIiwiYWxsb3dTZWFyY2giLCJhbGxvd1NlYXJjaEFkdiIsIlNlYXJjaEFkdiIsImFsbG93TWVzc2FnZUxpc3RBY3Rpb25zIiwiTWVzc2FnZUxpc3RBY3Rpb25zIiwiYWxsb3dEYW5nZXJvdXNBY3Rpb25zIiwiRGFuZ2Vyb3VzQWN0aW9ucyIsInVzZXJRdW90YSIsInVzZXJVc2FnZVNpemUiLCJ1c2VyVXNhZ2VQcm9jIiwibW92ZURyb3Bkb3duVHJpZ2dlciIsIm1vcmVEcm9wZG93blRyaWdnZXIiLCJkcmFnT3ZlciIsImRyYWdPdmVyRW50ZXIiLCJkcmFnT3ZlckFyZWEiLCJkcmFnT3ZlckJvZHlBcmVhIiwibWVzc2FnZUxpc3RJdGVtVGVtcGxhdGUiLCJtZXNzYWdlTGlzdFNlYXJjaERlc2MiLCJtZXNzYWdlTGlzdFBhZ2VuYXRvciIsImNoZWNrQWxsIiwiaW5wdXRNZXNzYWdlTGlzdFNlYXJjaEZvY3VzIiwic0xhc3RTZWFyY2hWYWx1ZSIsImlucHV0UHJveHlNZXNzYWdlTGlzdFNlYXJjaCIsImlzSW5jb21wbGV0ZUNoZWNrZWQiLCJoYXNNZXNzYWdlcyIsImhhc0NoZWNrZWRPclNlbGVjdGVkTGluZXMiLCJpc1NwYW1Gb2xkZXIiLCJpc1NwYW1EaXNhYmxlZCIsImlzVHJhc2hGb2xkZXIiLCJpc0RyYWZ0Rm9sZGVyIiwiaXNTZW50Rm9sZGVyIiwiaXNBcmNoaXZlRm9sZGVyIiwiaXNBcmNoaXZlRGlzYWJsZWQiLCJpc0FyY2hpdmVWaXNpYmxlIiwiaXNTcGFtVmlzaWJsZSIsImlzVW5TcGFtVmlzaWJsZSIsIm1vYmlsZUNoZWNrZWRTdGF0ZVNob3ciLCJtb2JpbGVDaGVja2VkU3RhdGVIaWRlIiwibWVzc2FnZUxpc3RGb2N1c2VkIiwicXVvdGFUb29sdGlwIiwidXNlQXV0b1NlbGVjdCIsImdvVG9VcFVwT3JEb3duRG93biIsInJlbG9hZENvbW1hbmQiLCJtdWx0eUZvcndhcmRDb21tYW5kIiwiZGVsZXRlV2l0aG91dE1vdmVDb21tYW5kIiwiYXJjaGl2ZUNvbW1hbmQiLCJzcGFtQ29tbWFuZCIsIm5vdFNwYW1Db21tYW5kIiwibW92ZUNvbW1hbmQiLCJtb3ZlTmV3Q29tbWFuZCIsImhpZGVMZWZ0Iiwic2hvd0xlZnQiLCJnb3RvUGFnZSIsInNlYXJjaEVudGVyQWN0aW9uIiwicHJpbnRhYmxlTWVzc2FnZUNvdW50Rm9yRGVsZXRpb24iLCJjYW5jZWxTZWFyY2giLCJjYW5jZWxUaHJlYWRVaWQiLCJtb3ZlU2VsZWN0ZWRNZXNzYWdlc1RvRm9sZGVyIiwiZHJhZ0FuZERyb25IZWxwZXIiLCJvTWVzc2FnZUxpc3RJdGVtIiwidXBkYXRlVWlkc0luZm8iLCJhTWVzc2FnZXMiLCJzZXRBY3Rpb25Gb3JBbGwiLCJsaXN0U2V0U2VlbiIsImxpc3RTZXRBbGxTZWVuIiwibGlzdFVuc2V0U2VlbiIsImxpc3RTZXRGbGFncyIsImxpc3RVbnNldEZsYWdzIiwiZmxhZ01lc3NhZ2VzIiwiY2hlY2tlZFVpZHMiLCJmbGFnTWVzc2FnZXNGYXN0IiwiYkZsYWciLCJzZWVuTWVzc2FnZXNGYXN0Iiwic2VlbiIsImdvdG9UaHJlYWQiLCJjbGVhckxpc3RJc1Zpc2libGUiLCJpbml0VXBsb2FkZXJGb3JBcHBlbmQiLCJpbml0U2hvcnRjdXRzIiwiaWZ2aXNpYmxlIiwiUHJlZmV0Y2giLCJzZXRJZGxlRHVyYXRpb24iLCJpZnZpc2libGVJZGxlMTBzIiwiaWRsZSIsInByZWZldGNoTmV4dFRpY2siLCJhZHZhbmNlZFNlYXJjaENsaWNrIiwicXVldWVTaXplIiwibXVsdGlwbGVTaXplTGltaXQiLCJkcmFnQW5kRHJvcEVsZW1lbnQiLCJkcmFnQW5kRHJvcEJvZHlFbGVtZW50IiwibWVzc2FnZVZpc2liaWxpdHkiLCJtZXNzYWdlTGlzdEFuZE1lc3NhZ2VWaWV3TG9hZGluZyIsImxhc3RFbWFpbCIsImNyZWF0ZUNvbW1hbmRSZXBseUhlbHBlciIsImxhc3RSZXBseUFjdGlvbiIsInJlcGx5T3Jmb3J3YXJkIiwiY2FuQmVSZXBsaWVkT3JGb3J3YXJkZWQiLCJjcmVhdGVDb21tYW5kQWN0aW9uSGVscGVyIiwiZm9sZGVyVHlwZSIsInVzZUZvbGRlciIsIm9Eb20iLCJvSGVhZGVyRG9tIiwib01lc3NhZ2VTY3JvbGxlckRvbSIsImJvZHlCYWNrZ3JvdW5kQ29sb3IiLCJwc3dwIiwiYWxsb3dNZXNzYWdlQWN0aW9ucyIsIk1lc3NhZ2VBY3Rpb25zIiwibG9nb0lmcmFtZSIsImZ1bGxTY3JlZW5Nb2RlIiwibWVzc2FnZUxpc3RPZlRocmVhZHNMb2FkaW5nIiwiaGlnaGxpZ2h0VW5zZWxlY3RlZEF0dGFjaG1lbnRzIiwic2hvd0F0dGFjaG1uZXRDb250cm9scyIsInNob3dBdHRhY2htbmV0Q29udHJvbHNTdGF0ZSIsIk1lc3NhZ2VBdHRhY2htbmV0Q29udHJvbHMiLCJhbGxvd0F0dGFjaG1uZXRDb250cm9scyIsIkF0dGFjaG1lbnRzQWN0aW9ucyIsImRvd25sb2FkQXNaaXBBbGxvd2VkIiwiZG93bmxvYWRBc1ppcExvYWRpbmciLCJkb3dubG9hZEFzWmlwRXJyb3IiLCJzYXZlVG9Pd25DbG91ZEFsbG93ZWQiLCJzYXZlVG9Pd25DbG91ZExvYWRpbmciLCJzYXZlVG9Pd25DbG91ZFN1Y2Nlc3MiLCJzYXZlVG9Pd25DbG91ZEVycm9yIiwic2F2ZVRvRHJvcGJveEFsbG93ZWQiLCJzYXZlVG9Ecm9wYm94TG9hZGluZyIsInNhdmVUb0Ryb3Bib3hTdWNjZXNzIiwic2F2ZVRvRHJvcGJveEVycm9yIiwibGFzdFJlcGx5QWN0aW9uXyIsIkxhc3RSZXBseUFjdGlvbiIsInNob3dGdWxsSW5mbyIsIk1lc3NhZ2VIZWFkZXJGdWxsSW5mbyIsIm1lc3NhZ2VEb21Gb2N1c2VkIiwicmVwbHlDb21tYW5kIiwicmVwbHlBbGxDb21tYW5kIiwiZm9yd2FyZENvbW1hbmQiLCJmb3J3YXJkQXNBdHRhY2htZW50Q29tbWFuZCIsImVkaXRBc05ld0NvbW1hbmQiLCJ2aWV3Qm9keVRvcFZhbHVlIiwidmlld0ZvbGRlciIsInZpZXdVaWQiLCJ2aWV3U3ViamVjdCIsInZpZXdGcm9tU2hvcnQiLCJ2aWV3RnJvbURraW1EYXRhIiwidmlld1RvU2hvcnQiLCJ2aWV3RnJvbSIsInZpZXdUbyIsInZpZXdDYyIsInZpZXdCY2MiLCJ2aWV3UmVwbHlUbyIsInZpZXdUaW1lU3RhbXAiLCJ2aWV3U2l6ZSIsInZpZXdMaW5lQXNDc3MiLCJ2aWV3Vmlld0xpbmsiLCJ2aWV3VW5zdWJzY3JpYmVMaW5rIiwidmlld0Rvd25sb2FkTGluayIsInZpZXdVc2VyUGljIiwidmlld1VzZXJQaWNWaXNpYmxlIiwidmlld0lzSW1wb3J0YW50Iiwidmlld0lzRmxhZ2dlZCIsInZpZXdGcm9tRGtpbVZpc2liaWxpdHkiLCJ2aWV3RnJvbURraW1TdGF0dXNJY29uQ2xhc3MiLCJ2aWV3RnJvbURraW1TdGF0dXNUaXRsZSIsInN0YXR1cyIsImRldGVjdERvbUJhY2tncm91bmRDb2xvciIsInNjcm9sbE1lc3NhZ2VUb1RvcCIsInBpYyIsIm1lc3NhZ2VGb2N1c2VkIiwidG9nZ2xlRnVsbFNjcmVlbiIsImNsb3NlTWVzc2FnZUNvbW1hbmQiLCJtZXNzYWdlVmlzaWJpbGl0eUNvbW1hbmQiLCJtZXNzYWdlRWRpdENvbW1hbmQiLCJlZGl0TWVzc2FnZSIsImdvVXBDb21tYW5kIiwiZ29Eb3duQ29tbWFuZCIsImZGaW5kRG9tIiwiaW5wdXREb20iLCJjaGlsZHJlbiIsImZGaW5kQ29sb3IiLCJmdWxsU2NyZWVuIiwidW5GdWxsU2NyZWVuIiwiY2hlY2tIZWFkZXJIZWlnaHQiLCJTaXplMjBweCIsIlNpemUxcHgiLCJsaXN0SW5kZXgiLCJkaXYiLCJkeW5hbWljRWxzIiwidGh1bWIiLCJzdWJIdG1sIiwibGlnaHRHYWxsZXJ5IiwiZHluYW1pYyIsImxvYWRZb3V0dWJlVGh1bWJuYWlsIiwibG9hZFZpbWVvVGh1bWJuYWlsIiwidGh1bWJXaWR0aCIsInRodW1iQ29udEhlaWdodCIsInNob3dUaHVtYkJ5RGVmYXVsdCIsImR5bmFtaWNFbCIsImZDaGVja0hlYWRlckhlaWdodCIsIkV2ZW50V2hpY2hNb3VzZU1pZGRsZSIsInRocmVhZHNEcm9wZG93blRyaWdnZXIiLCJzY3JvbGxNZXNzYWdlVG9MZWZ0IiwiZXNjU2hvcnRjdXRzIiwic2Nyb2xsTGVmdCIsImlzRHJhZnRPclNlbnRGb2xkZXIiLCJTaXplNTBweCIsImdldEF0dGFjaG1lbnRzSGFzaGVzIiwiYXR0cyIsImRvd25sb2FkQXNaaXAiLCJoYXNoZXMiLCJGaWxlcyIsInNhdmVUb093bkNsb3VkIiwic2F2ZVRvRHJvcGJveCIsIlVybCIsIlNob3J0TGlmZSIsImZpbGVuYW1lIiwic2F2ZSIsInByaW50YWJsZUNoZWNrZWRNZXNzYWdlQ291bnQiLCJTeXN0ZW1Ecm9wRG93blNldHRpbmdzVXNlclZpZXciLCJNZW51U2V0dGluZ3NVc2VyVmlldyIsIlBhbmVTZXR0aW5nc1VzZXJWaWV3Iiwic1NldHRpbmdzVGl0bGUiLCJzZXRTZXR0aW5nc1RpdGxlIiwiR2VuZXJhbFVzZXJTZXR0aW5ncyIsIkNvbnRhY3RzVXNlclNldHRpbmdzIiwiQWNjb3VudHNVc2VyU2V0dGluZ3MiLCJTaWV2ZSIsIkZpbHRlcnNVc2VyU2V0dGluZ3MiLCJBdXRvTG9nb3V0IiwiU2VjdXJpdHlVc2VyU2V0dGluZ3MiLCJTb2NpYWxVc2VyU2V0dGluZ3MiLCJDaGFuZ2VQYXNzd29yZFVzZXJTZXR0aW5ncyIsIlRlbXBsYXRlc1VzZXJTZXR0aW5ncyIsIkZvbGRlcnNVc2VyU2V0dGluZ3MiLCJUaGVtZXMiLCJUaGVtZXNVc2VyU2V0dGluZ3MiLCJPcGVuUGdwVXNlclNldHRpbmdzIiwibWVzc2FnZXNQZXJQYWdlQXJyYXkiLCJsYW5ndWFnZVRyaWdnZXIiLCJtcHBUcmlnZ2VyIiwiZWRpdG9yRGVmYXVsdFR5cGVUcmlnZ2VyIiwibGF5b3V0VHJpZ2dlciIsImlzQW5pbWF0aW9uU3VwcG9ydGVkIiwiaWRlbnRpdHlNYWluIiwiaWRlbnRpdHlNYWluRGVzYyIsImVkaXRvckRlZmF1bHRUeXBlcyIsImxheW91dFR5cGVzIiwiZWRpdE1haW5JZGVudGl0eSIsInRlc3RTb3VuZE5vdGlmaWNhdGlvbiIsImYwIiwiZjEiLCJmMiIsImZSZWxvYWRMYW5ndWFnZUhlbHBlciIsInNhdmVTZXR0aW5nc1N0ZXAiLCJUaW1lM3MiLCJhbGxvd0FkZGl0aW9uYWxBY2NvdW50IiwiYWxsb3dJZGVudGl0aWVzIiwiYWNjb3VudEZvckRlbGV0aW9uIiwiaWRlbnRpdHlGb3JEZWxldGlvbiIsInNjcm9sbGFibGVPcHRpb25zIiwid3JhcHBlciIsImNvbnRhaW5tZW50IiwiYXhpcyIsImFkZE5ld0FjY291bnQiLCJlZGl0QWNjb3VudCIsImFkZE5ld0lkZW50aXR5IiwiZWRpdElkZW50aXR5IiwiZGVsZXRlQWNjb3VudCIsImFjY291bnRUb1JlbW92ZSIsImRlbGV0ZUlkZW50aXR5IiwiaWRlbnRpdHlUb1JlbW92ZSIsIm9JZGVudGl0eSIsImFjY291bnRzQW5kSWRlbnRpdGllc0FmdGVyTW92ZSIsInBlZWsiLCJoYXZlQ2hhbmdlcyIsImluaXRlZCIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JEZXNjIiwic2F2ZUVycm9yVGV4dCIsImZpbHRlclJhdyIsImFsbG93IiwiZmlsdGVyRm9yRGVsZXRpb24iLCJzYXZlQ2hhbmdlc0NvbW1hbmQiLCJ1cGRhdGVMaXN0IiwiRmlsdGVycyIsIk1vZHVsZXMiLCJSYXciLCJSYXdJc0FjdGl2ZSIsIlJhd0lzQWxsb3ciLCJkZWxldGVGaWx0ZXIiLCJhZGRGaWx0ZXIiLCJlZGl0RmlsdGVyIiwiY2xvbmVkRmlsdGVyIiwiY2FwYUF1dG9Mb2dvdXQiLCJTZXR0aW5zU3RvcmUiLCJhdXRvTG9nb3V0T3B0aW9ucyIsImNvbmZpZ3VyZVR3b0ZhY3RvciIsImdvb2dsZUxvZ2dpbmVkIiwiZ29vZ2xlQWN0aW9ucyIsImZhY2Vib29rTG9nZ2luZWQiLCJmYWNlYm9va0FjdGlvbnMiLCJ0d2l0dGVyTG9nZ2luZWQiLCJ0d2l0dGVyQWN0aW9ucyIsImdvb2dsZUVuYWJsZSIsImdvb2dsZUVuYWJsZUF1dGgiLCJnb29nbGVFbmFibGVBdXRoR21haWwiLCJnb29nbGVFbmFibGVEcml2ZSIsImdvb2dsZUVuYWJsZVByZXZpZXciLCJnb29nbGVVc2VyTmFtZSIsImZhY2Vib29rRW5hYmxlIiwiZmFjZWJvb2tVc2VyTmFtZSIsInR3aXR0ZXJFbmFibGUiLCJ0d2l0dGVyVXNlck5hbWUiLCJjb25uZWN0R29vZ2xlQ29tbWFuZCIsImRpc2Nvbm5lY3RHb29nbGVDb21tYW5kIiwiY29ubmVjdEZhY2Vib29rQ29tbWFuZCIsImRpc2Nvbm5lY3RGYWNlYm9va0NvbW1hbmQiLCJjb25uZWN0VHdpdHRlckNvbW1hbmQiLCJkaXNjb25uZWN0VHdpdHRlckNvbW1hbmQiLCJjaGFuZ2VQcm9jZXNzIiwiY3VycmVudFBhc3N3b3JkIiwibmV3UGFzc3dvcmQyIiwiZXJyb3JEZXNjcmlwdGlvbiIsInBhc3N3b3JkTWlzbWF0Y2giLCJwYXNzd29yZFVwZGF0ZUVycm9yIiwicGFzc3dvcmRVcGRhdGVTdWNjZXNzIiwib25DaGFuZ2VQYXNzd29yZFJlc3BvbnNlIiwic2F2ZU5ld1Bhc3N3b3JkQ29tbWFuZCIsInByb2Nlc3NUZXh0IiwidGVtcGxhdGVGb3JEZWxldGlvbiIsInNXcmFwcGVyIiwiYWRkTmV3VGVtcGxhdGUiLCJlZGl0VGVtcGxhdGUiLCJvVGVtcGxhdGVJdGVtIiwiZGVsZXRlVGVtcGxhdGUiLCJ0ZW1wbGF0ZVRvUmVtb3ZlIiwicmVsb2FkVGVtcGxhdGVzIiwiZm9sZGVyTGlzdEhlbHAiLCJmb2xkZXJGb3JEZWxldGlvbiIsImZvbGRlckZvckVkaXQiLCJ1c2VJbWFwU3Vic2NyaWJlIiwiZm9sZGVyRWRpdE9uRW50ZXIiLCJuYW1lVG9FZGl0IiwiZm9sZGVyRWRpdE9uRXNjIiwic3lzdGVtRm9sZGVyIiwiZGVsZXRlRm9sZGVyIiwiZm9sZGVyVG9SZW1vdmUiLCJmUmVtb3ZlRm9sZGVyIiwic3Vic2NyaWJlRm9sZGVyIiwidW5TdWJzY3JpYmVGb2xkZXIiLCJjaGVja2FibGVUcnVlRm9sZGVyIiwiY2hlY2thYmxlRmFsc2VGb2xkZXIiLCJ0aGVtZXNPYmplY3RzIiwiYmFja2dyb3VuZCIsInVwbG9hZGVyQnV0dG9uIiwiY2FwYVVzZXJCYWNrZ3JvdW5kIiwiVXNlckJhY2tncm91bmQiLCJvVGhlbWVBamF4UmVxdWVzdCIsIiRiZyIsImN1cnJlbnRUaGVtZSIsIm5hbWVEaXNwbGF5IiwidGhlbWVQcmV2aWV3U3JjIiwiY2xlYXJCYWNrZ3JvdW5kIiwiZXJyb3JNc2ciLCJvcGVuUGdwS2V5Rm9yRGVsZXRpb24iLCJpc0h0dHBzIiwiYWRkT3BlblBncEtleSIsImdlbmVyYXRlT3BlblBncEtleSIsInZpZXdPcGVuUGdwS2V5Iiwib3BlblBncEtleSIsImRlbGV0ZU9wZW5QZ3BLZXkiLCJvcGVuUGdwS2V5VG9SZW1vdmUiLCJmaW5kZWRJdGVtIiwicmVtb3ZlRm9ySWQiLCJiYWNrVG9NYWlsQm94Q2xpY2siLCJib290c3RyYXAiLCJNZXNzYWdlT3BlblBncFBvcHVwVmlldyIsInNlbGVjdGVkS2V5IiwiYnV0dG9uRm9jdXMiLCJyZXN1bHRDYWxsYmFjayIsIlBvcHVwTWVzc2FnZU9wZW5QR1AiLCJkb0NvbW1hbmQiLCJmaXJzdCIsIktFWV9OQU1FX1NVQlNUUiIsIkNvbXBvc2VPcGVuUGdwUG9wdXBWaWV3Iiwic2lnbiIsImVuY3J5cHQiLCJwdWJsaWNLZXlzT3B0aW9uc0NhcHRpb24iLCJwcml2YXRlS2V5c09wdGlvbnNDYXB0aW9uIiwic2VsZWN0ZWRQcml2YXRlS2V5Iiwic2VsZWN0ZWRQdWJsaWNLZXkiLCJzaWduS2V5IiwiZW5jcnlwdEtleXMiLCJlbmNyeXB0S2V5c1ZpZXciLCJvS2V5IiwicHJpdmF0ZUtleXNPcHRpb25zIiwib3B0cyIsInB1YmxpY0tleXNPcHRpb25zIiwic2VsZWN0Q29tbWFuZCIsInVwZGF0ZUNvbW1hbmQiLCJhZGRDb21tYW5kIiwiUG9wdXBDb21wb3NlT3BlblBHUCIsImFkZE9wdGlvbkNsYXNzIiwiZG9tT3B0aW9uIiwiY2xhc3MiLCJkZWxldGVQdWJsaWNrS2V5IiwiYVB1YmxpY0tleXMiLCJwZ3BQcm9taXNlIiwiVGltZTIwbXMiLCJrZXlJZCIsInJlbW92YWJsZSIsInB1YmxpY0tleSIsInJlYyIsImVtYWlsTGluZSIsInJlY0VtYWlsIiwiZW5jcnlwdEtleSIsIkZvbGRlckNsZWFyUG9wdXBWaWV3Iiwic2VsZWN0ZWRGb2xkZXIiLCJpc0NsZWFyaW5nIiwiY2xlYXJpbmdQcm9jZXNzIiwiY2xlYXJpbmdFcnJvciIsImZvbGRlckZ1bGxOYW1lRm9yQ2xlYXIiLCJmb2xkZXJOYW1lRm9yQ2xlYXIiLCJkYW5nZXJEZXNjSHRtbCIsImZvbGRlclRvQ2xlYXIiLCJBZHZhbmNlZFNlYXJjaFBvcHVwVmlldyIsImZyb21Gb2N1cyIsInNlbGVjdGVkRGF0ZVZhbHVlIiwiaGFzQXR0YWNobWVudCIsInNlbGVjdGVkRGF0ZXMiLCJzZWFyY2hDb21tYW5kIiwiYnVpbGRTZWFyY2hTdHJpbmciLCJwYXJzZVNlYXJjaFN0cmluZ1ZhbHVlIiwiYnVpbGRTZWFyY2hTdHJpbmdWYWx1ZSIsImZyb21fIiwiaXNQYXJ0IiwiaGFzUGFydCIsIlR3b0ZhY3RvclRlc3RQb3B1cFZpZXciLCJ0ZXN0aW5nIiwia29UZXN0ZWRUcmlnZ2VyIiwidGVzdENvZGVDb21tYW5kIiwiQWRkT3BlblBncEtleVBvcHVwVmlldyIsImVycm9yTWVzc2FnZSIsImFkZE9wZW5QZ3BLZXlDb21tYW5kIiwicmVnIiwia2V5VHJpbW1lZCIsImRvbmUiLCJpbXBvcnRLZXkiLCJOZXdPcGVuUGdwS2V5UG9wdXBWaWV3Iiwia2V5Qml0TGVuZ3RoIiwiQml0TGVuZ3RoMjA0OCIsImdlbmVyYXRlT3BlblBncEtleUNvbW1hbmQiLCJnZW5lcmF0ZUtleSIsInVzZXJJZHMiLCJudW1CaXRzIiwicGFzc3BocmFzZSIsImtleVBhaXIiLCJwcml2YXRlS2V5QXJtb3JlZCIsInB1YmxpY0tleUFybW9yZWQiLCJzaG93RXJyb3IiLCJWaWV3T3BlblBncEtleVBvcHVwVmlldyIsImtleURvbSIsIlBvcHVwVmlld09wZW5QR1AiLCJzZWxlY3RLZXkiLCJXZWxjb21lUGFnZVBvcHVwVmlldyIsIndlbGNvbWVQYWdlVVJMIiwiY2xvc2VGb2N1c2VkIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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QUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdDQUF3QztBQUN4QztBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsOENBQThDOztBQUUxRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLFFBQVE7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBLHNCQUFzQiw0QkFBNEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdEQUF3RCxnQkFBZ0I7QUFDeEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9EQUFvRCxnQkFBZ0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0EsMkJBQTJCLDRCQUE0QjtBQUN2RDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIseUJBQXlCO0FBQ3BEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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LFlBQUwsQ0FBa0IsS0FBbEI7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBOzs7U0FDQzVzRCxNLEdBQUEsZ0JBQU81bEIsSUFBUCxFQUFhO0FBQ1osU0FBSzYzQixVQUFMO0FBRUEsU0FBSzA2QyxjQUFMLENBQW9CdnlFLElBQXBCO0FBQ0EsRzs7U0FFRHVvQixlLEdBQUEsMkJBQWtCO0FBQ2pCLFNBQUtpcUQsWUFBTCxDQUFrQixJQUFsQjtBQUNBLEc7O1NBRUR4dEQsTSxHQUFBLGtCQUFTO0FBQ1IrdEIsc0VBQVEsQ0FBQ2g1QixZQUFUO0FBQ0EsRzs7O0VBOUJpQzNRLCtFIiwiZmlsZSI6ImpzL2FwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwicmFpbmxvb3Avdi8wLjAuMC9zdGF0aWMvanMvXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA1NDgpO1xuIiwiLyogZXNsaW50IHF1b3RlLXByb3BzOiAwICovXG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbGVUeXBlID0ge1xuXHQnVW5rbm93bic6ICd1bmtub3duJyxcblx0J1RleHQnOiAndGV4dCcsXG5cdCdIdG1sJzogJ2h0bWwnLFxuXHQnQ29kZSc6ICdjb2RlJyxcblx0J0VtbCc6ICdlbWwnLFxuXHQnV29yZFRleHQnOiAnd29yZC10ZXh0Jyxcblx0J1BkZic6ICdwZGYnLFxuXHQnSW1hZ2UnOiAnaW1hZ2UnLFxuXHQnQXVkaW8nOiAnYXVkaW8nLFxuXHQnVmlkZW8nOiAndmlkZW8nLFxuXHQnU2hlZXQnOiAnc2hlZXQnLFxuXHQnUHJlc2VudGF0aW9uJzogJ3ByZXNlbnRhdGlvbicsXG5cdCdDZXJ0aWZpY2F0ZSc6ICdjZXJ0aWZpY2F0ZScsXG5cdCdDZXJ0aWZpY2F0ZUJpbic6ICdjZXJ0aWZpY2F0ZS1iaW4nLFxuXHQnQXJjaGl2ZSc6ICdhcmNoaXZlJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgU3RvcmFnZVJlc3VsdFR5cGUgPSB7XG5cdCdTdWNjZXNzJzogJ3N1Y2Nlc3MnLFxuXHQnQWJvcnQnOiAnYWJvcnQnLFxuXHQnRXJyb3InOiAnZXJyb3InLFxuXHQnVW5sb2FkJzogJ3VubG9hZCdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZvY3VzZWQgPSB7XG5cdCdOb25lJzogJ25vbmUnLFxuXHQnTWVzc2FnZUxpc3QnOiAnbWVzc2FnZS1saXN0Jyxcblx0J01lc3NhZ2VWaWV3JzogJ21lc3NhZ2UtdmlldycsXG5cdCdGb2xkZXJMaXN0JzogJ2ZvbGRlci1saXN0J1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU3RhdGUgPSB7XG5cdCdFbXB0eSc6IDEwLFxuXHQnTG9naW4nOiAyMCxcblx0J0F1dGgnOiAzMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU3RhdGVUeXBlID0ge1xuXHQnV2VibWFpbCc6IDAsXG5cdCdBZG1pbic6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IENhcGEgPSB7XG5cdCdUd29GYWN0b3InOiAnVFdPX0ZBQ1RPUicsXG5cdCdUd29GYWN0b3JGb3JjZSc6ICdUV09fRkFDVE9SX0ZPUkNFJyxcblx0J09wZW5QR1AnOiAnT1BFTl9QR1AnLFxuXHQnUHJlZmV0Y2gnOiAnUFJFRkVUQ0gnLFxuXHQnR3JhdmF0YXInOiAnR1JBVkFUQVInLFxuXHQnRm9sZGVycyc6ICdGT0xERVJTJyxcblx0J0NvbXBvc2VyJzogJ0NPTVBPU0VSJyxcblx0J0NvbnRhY3RzJzogJ0NPTlRBQ1RTJyxcblx0J1JlbG9hZCc6ICdSRUxPQUQnLFxuXHQnU2VhcmNoJzogJ1NFQVJDSCcsXG5cdCdTZWFyY2hBZHYnOiAnU0VBUkNIX0FEVicsXG5cdCdNZXNzYWdlQWN0aW9ucyc6ICdNRVNTQUdFX0FDVElPTlMnLFxuXHQnTWVzc2FnZUxpc3RBY3Rpb25zJzogJ01FU1NBR0VMSVNUX0FDVElPTlMnLFxuXHQnQXR0YWNobWVudHNBY3Rpb25zJzogJ0FUVEFDSE1FTlRTX0FDVElPTlMnLFxuXHQnRGFuZ2Vyb3VzQWN0aW9ucyc6ICdEQU5HRVJPVVNfQUNUSU9OUycsXG5cdCdTZXR0aW5ncyc6ICdTRVRUSU5HUycsXG5cdCdIZWxwJzogJ0hFTFAnLFxuXHQnVGhlbWVzJzogJ1RIRU1FUycsXG5cdCdVc2VyQmFja2dyb3VuZCc6ICdVU0VSX0JBQ0tHUk9VTkQnLFxuXHQnU2lldmUnOiAnU0lFVkUnLFxuXHQnRmlsdGVycyc6ICdGSUxURVJTJyxcblx0J0F0dGFjaG1lbnRUaHVtYm5haWxzJzogJ0FUVEFDSE1FTlRfVEhVTUJOQUlMUycsXG5cdCdUZW1wbGF0ZXMnOiAnVEVNUExBVEVTJyxcblx0J0F1dG9Mb2dvdXQnOiAnQVVUT0xPR09VVCcsXG5cdCdBZGRpdGlvbmFsQWNjb3VudHMnOiAnQURESVRJT05BTF9BQ0NPVU5UUycsXG5cdCdJZGVudGl0aWVzJzogJ0lERU5USVRJRVMnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBLZXlTdGF0ZSA9IHtcblx0J0FsbCc6ICdhbGwnLFxuXHQnTm9uZSc6ICdub25lJyxcblx0J0NvbnRhY3RMaXN0JzogJ2NvbnRhY3QtbGlzdCcsXG5cdCdNZXNzYWdlTGlzdCc6ICdtZXNzYWdlLWxpc3QnLFxuXHQnRm9sZGVyTGlzdCc6ICdmb2xkZXItbGlzdCcsXG5cdCdNZXNzYWdlVmlldyc6ICdtZXNzYWdlLXZpZXcnLFxuXHQnQ29tcG9zZSc6ICdjb21wb3NlJyxcblx0J1NldHRpbmdzJzogJ3NldHRpbmdzJyxcblx0J01lbnUnOiAnbWVudScsXG5cdCdQb3B1cENvbXBvc2VPcGVuUEdQJzogJ2NvbXBvc2Utb3Blbi1wZ3AnLFxuXHQnUG9wdXBNZXNzYWdlT3BlblBHUCc6ICdtZXNzYWdlLW9wZW4tcGdwJyxcblx0J1BvcHVwVmlld09wZW5QR1AnOiAndmlldy1vcGVuLXBncCcsXG5cdCdQb3B1cEtleWJvYXJkU2hvcnRjdXRzSGVscCc6ICdwb3B1cC1rZXlib2FyZC1zaG9ydGN1dHMtaGVscCcsXG5cdCdQb3B1cEFzayc6ICdwb3B1cC1hc2snXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBGb2xkZXJUeXBlID0ge1xuXHQnSW5ib3gnOiAxMCxcblx0J1NlbnRJdGVtcyc6IDExLFxuXHQnRHJhZnQnOiAxMixcblx0J1RyYXNoJzogMTMsXG5cdCdTcGFtJzogMTQsXG5cdCdBcmNoaXZlJzogMTUsXG5cdCdOb3RTcGFtJzogODAsXG5cdCdVc2VyJzogOTlcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlckZvbGRlclR5cGUgPSB7XG5cdCdVU0VSJzogMCxcblx0J0lOQk9YJzogMSxcblx0J1NFTlQnOiAyLFxuXHQnRFJBRlRTJzogMyxcblx0J0pVTksnOiA0LFxuXHQnVFJBU0gnOiA1LFxuXHQnSU1QT1JUQU5UJzogMTAsXG5cdCdGTEFHR0VEJzogMTEsXG5cdCdBTEwnOiAxMlxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgTG9naW5TaWduTWVUeXBlQXNTdHJpbmcgPSB7XG5cdCdEZWZhdWx0T2ZmJzogJ2RlZmF1bHRvZmYnLFxuXHQnRGVmYXVsdE9uJzogJ2RlZmF1bHRvbicsXG5cdCdVbnVzZWQnOiAndW51c2VkJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTG9naW5TaWduTWVUeXBlID0ge1xuXHQnRGVmYXVsdE9mZic6IDAsXG5cdCdEZWZhdWx0T24nOiAxLFxuXHQnVW51c2VkJzogMlxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgQ29tcG9zZVR5cGUgPSB7XG5cdCdFbXB0eSc6ICdlbXB0eScsXG5cdCdSZXBseSc6ICdyZXBseScsXG5cdCdSZXBseUFsbCc6ICdyZXBseWFsbCcsXG5cdCdGb3J3YXJkJzogJ2ZvcndhcmQnLFxuXHQnRm9yd2FyZEFzQXR0YWNobWVudCc6ICdmb3J3YXJkLWFzLWF0dGFjaG1lbnQnLFxuXHQnRHJhZnQnOiAnZHJhZnQnLFxuXHQnRWRpdEFzTmV3JzogJ2VkaXRhc25ldydcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFVwbG9hZEVycm9yQ29kZSA9IHtcblx0J05vcm1hbCc6IDAsXG5cdCdGaWxlSXNUb29CaWcnOiAxLFxuXHQnRmlsZVBhcnRpYWxseVVwbG9hZGVkJzogMixcblx0J0ZpbGVOb1VwbG9hZGVkJzogMyxcblx0J01pc3NpbmdUZW1wRm9sZGVyJzogNCxcblx0J0ZpbGVPblNhdmVpbmdFcnJvcic6IDUsXG5cdCdGaWxlVHlwZSc6IDk4LFxuXHQnVW5rbm93bic6IDk5XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uID0ge1xuXHQnTm9uZSc6IDAsXG5cdCdTZW50JzogMSxcblx0J0RyYWZ0JzogMixcblx0J1NwYW0nOiAzLFxuXHQnVHJhc2gnOiA0LFxuXHQnQXJjaGl2ZSc6IDVcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IENsaWVudFNpZGVLZXlOYW1lID0ge1xuXHQnRm9sZGVyc0xhc2hIYXNoJzogMCxcblx0J01lc3NhZ2VzSW5ib3hMYXN0SGFzaCc6IDEsXG5cdCdNYWlsQm94TGlzdFNpemUnOiAyLFxuXHQnRXhwYW5kZWRGb2xkZXJzJzogMyxcblx0J0ZvbGRlckxpc3RTaXplJzogNCxcblx0J01lc3NhZ2VMaXN0U2l6ZSc6IDUsXG5cdCdMYXN0UmVwbHlBY3Rpb24nOiA2LFxuXHQnTGFzdFNpZ25NZSc6IDcsXG5cdCdDb21wb3NlTGFzdElkZW50aXR5SUQnOiA4LFxuXHQnTWVzc2FnZUhlYWRlckZ1bGxJbmZvJzogOSxcblx0J01lc3NhZ2VBdHRhY2htbmV0Q29udHJvbHMnOiAxMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRXZlbnRLZXlDb2RlID0ge1xuXHQnQmFja3NwYWNlJzogOCxcblx0J1RhYic6IDksXG5cdCdFbnRlcic6IDEzLFxuXHQnRXNjJzogMjcsXG5cdCdQYWdlVXAnOiAzMyxcblx0J1BhZ2VEb3duJzogMzQsXG5cdCdMZWZ0JzogMzcsXG5cdCdSaWdodCc6IDM5LFxuXHQnVXAnOiAzOCxcblx0J0Rvd24nOiA0MCxcblx0J0VuZCc6IDM1LFxuXHQnSG9tZSc6IDM2LFxuXHQnU3BhY2UnOiAzMixcblx0J0luc2VydCc6IDQ1LFxuXHQnRGVsZXRlJzogNDYsXG5cdCdBJzogNjUsXG5cdCdTJzogODNcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VTZXRBY3Rpb24gPSB7XG5cdCdTZXRTZWVuJzogMCxcblx0J1Vuc2V0U2Vlbic6IDEsXG5cdCdTZXRGbGFnJzogMixcblx0J1Vuc2V0RmxhZyc6IDNcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VTZWxlY3RBY3Rpb24gPSB7XG5cdCdBbGwnOiAwLFxuXHQnTm9uZSc6IDEsXG5cdCdJbnZlcnQnOiAyLFxuXHQnVW5zZWVuJzogMyxcblx0J1NlZW4nOiA0LFxuXHQnRmxhZ2dlZCc6IDUsXG5cdCdVbmZsYWdnZWQnOiA2XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBEZXNrdG9wTm90aWZpY2F0aW9uID0ge1xuXHQnQWxsb3dlZCc6IDAsXG5cdCdOb3RBbGxvd2VkJzogMSxcblx0J0RlbmllZCc6IDIsXG5cdCdOb3RTdXBwb3J0ZWQnOiA5XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlUHJpb3JpdHkgPSB7XG5cdCdMb3cnOiA1LFxuXHQnTm9ybWFsJzogMyxcblx0J0hpZ2gnOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBFZGl0b3JEZWZhdWx0VHlwZSA9IHtcblx0J0h0bWwnOiAnSHRtbCcsXG5cdCdQbGFpbic6ICdQbGFpbicsXG5cdCdIdG1sRm9yY2VkJzogJ0h0bWxGb3JjZWQnLFxuXHQnUGxhaW5Gb3JjZWQnOiAnUGxhaW5Gb3JjZWQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJTZWN1cmUgPSB7XG5cdCdOb25lJzogMCxcblx0J1NTTCc6IDEsXG5cdCdUTFMnOiAyXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZWFyY2hEYXRlVHlwZSA9IHtcblx0J0FsbCc6IC0xLFxuXHQnRGF5czMnOiAzLFxuXHQnRGF5czcnOiA3LFxuXHQnTW9udGgnOiAzMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2F2ZVNldHRpbmdzU3RlcCA9IHtcblx0J0FuaW1hdGUnOiAtMixcblx0J0lkbGUnOiAtMSxcblx0J1RydWVSZXN1bHQnOiAxLFxuXHQnRmFsc2VSZXN1bHQnOiAwXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBMYXlvdXQgPSB7XG5cdCdOb1ByZXZpZXcnOiAwLFxuXHQnU2lkZVByZXZpZXcnOiAxLFxuXHQnQm90dG9tUHJldmlldyc6IDJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlckNvbmRpdGlvbkZpZWxkID0ge1xuXHQnRnJvbSc6ICdGcm9tJyxcblx0J1JlY2lwaWVudCc6ICdSZWNpcGllbnQnLFxuXHQnU3ViamVjdCc6ICdTdWJqZWN0Jyxcblx0J0hlYWRlcic6ICdIZWFkZXInLFxuXHQnU2l6ZSc6ICdTaXplJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRmlsdGVyQ29uZGl0aW9uVHlwZSA9IHtcblx0J0NvbnRhaW5zJzogJ0NvbnRhaW5zJyxcblx0J05vdENvbnRhaW5zJzogJ05vdENvbnRhaW5zJyxcblx0J0VxdWFsVG8nOiAnRXF1YWxUbycsXG5cdCdOb3RFcXVhbFRvJzogJ05vdEVxdWFsVG8nLFxuXHQnUmVnZXgnOiAnUmVnZXgnLFxuXHQnT3Zlcic6ICdPdmVyJyxcblx0J1VuZGVyJzogJ1VuZGVyJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRmlsdGVyc0FjdGlvbiA9IHtcblx0J05vbmUnOiAnTm9uZScsXG5cdCdNb3ZlVG8nOiAnTW92ZVRvJyxcblx0J0Rpc2NhcmQnOiAnRGlzY2FyZCcsXG5cdCdWYWNhdGlvbic6ICdWYWNhdGlvbicsXG5cdCdSZWplY3QnOiAnUmVqZWN0Jyxcblx0J0ZvcndhcmQnOiAnRm9yd2FyZCdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlclJ1bGVzVHlwZSA9IHtcblx0J0FsbCc6ICdBbGwnLFxuXHQnQW55JzogJ0FueSdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNpZ25lZFZlcmlmeVN0YXR1cyA9IHtcblx0J1Vua25vd25QdWJsaWNLZXlzJzogLTQsXG5cdCdVbmtub3duUHJpdmF0ZUtleSc6IC0zLFxuXHQnVW52ZXJpZmllZCc6IC0yLFxuXHQnRXJyb3InOiAtMSxcblx0J05vbmUnOiAwLFxuXHQnU3VjY2Vzcyc6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IENvbnRhY3RQcm9wZXJ0eVR5cGUgPSB7XG5cdCdVbmtub3duJzogMCxcblxuXHQnRnVsbE5hbWUnOiAxMCxcblxuXHQnRmlyc3ROYW1lJzogMTUsXG5cdCdMYXN0TmFtZSc6IDE2LFxuXHQnTWlkZGxlTmFtZSc6IDE2LFxuXHQnTmljayc6IDE4LFxuXG5cdCdOYW1lUHJlZml4JzogMjAsXG5cdCdOYW1lU3VmZml4JzogMjEsXG5cblx0J0VtYWlsJzogMzAsXG5cdCdQaG9uZSc6IDMxLFxuXHQnV2ViJzogMzIsXG5cblx0J0JpcnRoZGF5JzogNDAsXG5cblx0J0ZhY2Vib29rJzogOTAsXG5cdCdTa3lwZSc6IDkxLFxuXHQnR2l0SHViJzogOTIsXG5cblx0J05vdGUnOiAxMTAsXG5cblx0J0N1c3RvbSc6IDI1MFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTWFnaWNzID0ge1xuXHQnRXZlbnRXaGljaE1vdXNlTWlkZGxlJzogMyxcblx0J2lmdmlzaWJsZUlkbGUxMHMnOiAxMCxcblxuXHQnQml0TGVuZ3RoMjA0OCc6IDIwNDgsXG5cdCdCaXRMZW5ndGgxMDI0JzogMTAyNCxcblxuXHQnU2l6ZTM1MHB4JzogMzUwLFxuXHQnU2l6ZTUwcHgnOiA1MCxcblx0J1NpemUyMHB4JzogMjAsXG5cdCdTaXplMXB4JzogMSxcblxuXHQnVGltZTMwbUluTWluJzogMzAsXG5cblx0J1RpbWU2MG0nOiA2MDAwMCAqIDYwLFxuXHQnVGltZTMwbSc6IDYwMDAwICogMzAsXG5cdCdUaW1lMjBtJzogNjAwMDAgKiAyMCxcblx0J1RpbWUxNW0nOiA2MDAwMCAqIDE1LFxuXHQnVGltZTEwbSc6IDYwMDAwICogMTAsXG5cdCdUaW1lNW0nOiA2MDAwMCAqIDUsXG5cdCdUaW1lM20nOiA2MDAwMCAqIDMsXG5cdCdUaW1lMm0nOiA2MDAwMCAqIDIsXG5cdCdUaW1lMW0nOiA2MDAwMCxcblx0J1RpbWUzMHMnOiAzMDAwMCxcblx0J1RpbWUxMHMnOiAxMDAwMCxcblx0J1RpbWU3cyc6IDcwMDAsXG5cdCdUaW1lNXMnOiA1MDAwLFxuXHQnVGltZTNzJzogMzAwMCxcblx0J1RpbWUxcyc6IDEwMDAsXG5cdCdUaW1lNTAwbXMnOiA1MDAsXG5cdCdUaW1lMzUwbXMnOiAzNTAsXG5cdCdUaW1lMjUwbXMnOiAyNTAsXG5cdCdUaW1lMjAwbXMnOiAyMDAsXG5cdCdUaW1lMTAwbXMnOiAxMDAsXG5cdCdUaW1lNTBtcyc6IDUwLFxuXHQnVGltZTIwbXMnOiAyMCxcblx0J1RpbWUxMG1zJzogMTAsXG5cdCdUaW1lMW1zJzogMVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgUG9ydHMgPSB7XG5cdCdJbWFwJzogMTQzLFxuXHQnSW1hcFNzbCc6IDk5Myxcblx0J1NtdHAnOiAyNSxcblx0J1NtdHBTc2wnOiA0NjUsXG5cdCdTbXRwU3RhcnRUbHMnOiA1ODdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE5vdGlmaWNhdGlvbiA9IHtcblx0J0ludmFsaWRUb2tlbic6IDEwMSxcblx0J0F1dGhFcnJvcic6IDEwMixcblx0J0FjY2Vzc0Vycm9yJzogMTAzLFxuXHQnQ29ubmVjdGlvbkVycm9yJzogMTA0LFxuXHQnQ2FwdGNoYUVycm9yJzogMTA1LFxuXHQnU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUnOiAxMDYsXG5cdCdTb2NpYWxUd2l0dGVyTG9naW5BY2Nlc3NEaXNhYmxlJzogMTA3LFxuXHQnU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlJzogMTA4LFxuXHQnRG9tYWluTm90QWxsb3dlZCc6IDEwOSxcblx0J0FjY291bnROb3RBbGxvd2VkJzogMTEwLFxuXG5cdCdBY2NvdW50VHdvRmFjdG9yQXV0aFJlcXVpcmVkJzogMTIwLFxuXHQnQWNjb3VudFR3b0ZhY3RvckF1dGhFcnJvcic6IDEyMSxcblxuXHQnQ291bGROb3RTYXZlTmV3UGFzc3dvcmQnOiAxMzAsXG5cdCdDdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QnOiAxMzEsXG5cdCdOZXdQYXNzd29yZFNob3J0JzogMTMyLFxuXHQnTmV3UGFzc3dvcmRXZWFrJzogMTMzLFxuXHQnTmV3UGFzc3dvcmRGb3JiaWRkZW4nOiAxMzQsXG5cblx0J0NvbnRhY3RzU3luY0Vycm9yJzogMTQwLFxuXG5cdCdDYW50R2V0TWVzc2FnZUxpc3QnOiAyMDEsXG5cdCdDYW50R2V0TWVzc2FnZSc6IDIwMixcblx0J0NhbnREZWxldGVNZXNzYWdlJzogMjAzLFxuXHQnQ2FudE1vdmVNZXNzYWdlJzogMjA0LFxuXHQnQ2FudENvcHlNZXNzYWdlJzogMjA1LFxuXG5cdCdDYW50U2F2ZU1lc3NhZ2UnOiAzMDEsXG5cdCdDYW50U2VuZE1lc3NhZ2UnOiAzMDIsXG5cdCdJbnZhbGlkUmVjaXBpZW50cyc6IDMwMyxcblxuXHQnQ2FudFNhdmVGaWx0ZXJzJzogMzUxLFxuXHQnQ2FudEdldEZpbHRlcnMnOiAzNTIsXG5cdCdGaWx0ZXJzQXJlTm90Q29ycmVjdCc6IDM1NSxcblxuXHQnQ2FudENyZWF0ZUZvbGRlcic6IDQwMCxcblx0J0NhbnRSZW5hbWVGb2xkZXInOiA0MDEsXG5cdCdDYW50RGVsZXRlRm9sZGVyJzogNDAyLFxuXHQnQ2FudFN1YnNjcmliZUZvbGRlcic6IDQwMyxcblx0J0NhbnRVbnN1YnNjcmliZUZvbGRlcic6IDQwNCxcblx0J0NhbnREZWxldGVOb25FbXB0eUZvbGRlcic6IDQwNSxcblxuXHQnQ2FudFNhdmVTZXR0aW5ncyc6IDUwMSxcblx0J0NhbnRTYXZlUGx1Z2luU2V0dGluZ3MnOiA1MDIsXG5cblx0J0RvbWFpbkFscmVhZHlFeGlzdHMnOiA2MDEsXG5cblx0J0NhbnRJbnN0YWxsUGFja2FnZSc6IDcwMSxcblx0J0NhbnREZWxldGVQYWNrYWdlJzogNzAyLFxuXHQnSW52YWxpZFBsdWdpblBhY2thZ2UnOiA3MDMsXG5cdCdVbnN1cHBvcnRlZFBsdWdpblBhY2thZ2UnOiA3MDQsXG5cblx0J0xpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUnOiA3MTAsXG5cdCdMaWNlbnNpbmdFeHBpcmVkJzogNzExLFxuXHQnTGljZW5zaW5nQmFubmVkJzogNzEyLFxuXG5cdCdEZW1vU2VuZE1lc3NhZ2VFcnJvcic6IDc1MCxcblx0J0RlbW9BY2NvdW50RXJyb3InOiA3NTEsXG5cblx0J0FjY291bnRBbHJlYWR5RXhpc3RzJzogODAxLFxuXHQnQWNjb3VudERvZXNOb3RFeGlzdCc6IDgwMixcblxuXHQnTWFpbFNlcnZlckVycm9yJzogOTAxLFxuXHQnQ2xpZW50Vmlld0Vycm9yJzogOTAyLFxuXHQnSW52YWxpZElucHV0QXJndW1lbnQnOiA5MDMsXG5cblx0J0FqYXhGYWxzZSc6IDk1MCxcblx0J0FqYXhBYm9ydCc6IDk1MSxcblx0J0FqYXhQYXJzZSc6IDk1Mixcblx0J0FqYXhUaW1lb3V0JzogOTUzLFxuXG5cdCdVbmtub3duTm90aWZpY2F0aW9uJzogOTk5LFxuXHQnVW5rbm93bkVycm9yJzogOTk5XG59O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBPcGVudGlwIGZyb20gJ09wZW50aXAnO1xuaW1wb3J0IFBpa2FkYXkgZnJvbSAncGlrYWRheSc7XG5cbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmNvbnN0IGtvID0gd2luZG93LmtvLFxuXHQkd2luID0gJCh3aW5kb3cpLFxuXHRmRGlzcG9zYWxUb29sdGlwSGVscGVyID0gKGVsZW1lbnQpID0+IHtcblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fTtcblxua28uYmluZGluZ0hhbmRsZXJzLnVwZGF0ZVdpZHRoID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGZJbml0ID0gKCkgPT4ge1xuXHRcdFx0XHRmVmFsdWUoJGVsLndpZHRoKCkpO1xuXHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0ZlZhbHVlKCRlbC53aWR0aCgpKTtcblx0XHRcdFx0fSwgTWFnaWNzLlRpbWU1MDBtcyk7XG5cdFx0XHR9O1xuXG5cdFx0JHdpbi5vbigncmVzaXplJywgZkluaXQpO1xuXHRcdGZJbml0KCk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCR3aW4ub2ZmKCdyZXNpemUnLCBmSW5pdCk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5lZGl0b3IgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGxldCBlZGl0b3IgPSBudWxsO1xuXG5cdFx0Y29uc3QgZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdEh0bWxFZGl0b3IgPSByZXF1aXJlKCdDb21tb24vSHRtbEVkaXRvcicpLmRlZmF1bHQsXG5cdFx0XHRmVXBkYXRlRWRpdG9yVmFsdWUgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChmVmFsdWUgJiYgZlZhbHVlLl9fZWRpdG9yKSB7XG5cdFx0XHRcdFx0ZlZhbHVlLl9fZWRpdG9yLnNldEh0bWxPclBsYWluKGZWYWx1ZSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGZVcGRhdGVLb1ZhbHVlID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5fX2VkaXRvcikge1xuXHRcdFx0XHRcdGZWYWx1ZShmVmFsdWUuX19lZGl0b3IuZ2V0RGF0YVdpdGhIdG1sTWFyaygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGZPblJlYWR5ID0gKCkgPT4ge1xuXHRcdFx0XHRmVmFsdWUuX19lZGl0b3IgPSBlZGl0b3I7XG5cdFx0XHRcdGZVcGRhdGVFZGl0b3JWYWx1ZSgpO1xuXHRcdFx0fTtcblxuXHRcdGlmIChrby5pc09ic2VydmFibGUoZlZhbHVlKSAmJiBIdG1sRWRpdG9yKSB7XG5cdFx0XHRlZGl0b3IgPSBuZXcgSHRtbEVkaXRvcihlbGVtZW50LCBmVXBkYXRlS29WYWx1ZSwgZk9uUmVhZHksIGZVcGRhdGVLb1ZhbHVlKTtcblxuXHRcdFx0ZlZhbHVlLl9fZmV0Y2hFZGl0b3JWYWx1ZSA9IGZVcGRhdGVLb1ZhbHVlO1xuXG5cdFx0XHRmVmFsdWUuc3Vic2NyaWJlKGZVcGRhdGVFZGl0b3JWYWx1ZSk7XG5cblx0XHRcdC8vIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0Ly8gfSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuanNvbiA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0JChlbGVtZW50KS50ZXh0KHdpbmRvdy5KU09OLnN0cmluZ2lmeShrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpKTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHQkKGVsZW1lbnQpLnRleHQod2luZG93LkpTT04uc3RyaW5naWZ5KGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuc2Nyb2xsZXJTaGFkb3dzID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IGxpbWl0ID0gOCxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRjb250ID0gJGVsLmZpbmQoJ1tkYXRhLXNjcm9sbGVyLXNoYWRvd3MtY29udGVudF0nKVswXSB8fCBudWxsLFxuXHRcdFx0ZkZ1bmMgPSBfLnRocm90dGxlKCgpID0+IHtcblx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0LnRvZ2dsZUNsYXNzKCdzY3JvbGxlci1zaGFkb3ctdG9wJywgbGltaXQgPCBjb250LnNjcm9sbFRvcClcblx0XHRcdFx0XHQudG9nZ2xlQ2xhc3MoJ3Njcm9sbGVyLXNoYWRvdy1ib3R0b20nLCBjb250LnNjcm9sbFRvcCArIGxpbWl0IDwgY29udC5zY3JvbGxIZWlnaHQgLSBjb250LmNsaWVudEhlaWdodCk7XG5cdFx0XHR9LCAxMDApO1xuXG5cdFx0aWYgKGNvbnQpIHtcblx0XHRcdCQoY29udCkub24oJ3Njcm9sbCByZXNpemUnLCBmRnVuYyk7XG5cdFx0XHQkd2luLm9uKCdyZXNpemUnLCBmRnVuYyk7XG5cblx0XHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soY29udCwgKCkgPT4ge1xuXHRcdFx0XHQkKGNvbnQpLm9mZigpO1xuXHRcdFx0XHQkd2luLm9mZigncmVzaXplJywgZkZ1bmMpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMucGlrYWRheSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCkgPT4ge1xuXHRcdGtvLmJpbmRpbmdIYW5kbGVycy50ZXh0SW5wdXQuaW5pdChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpO1xuXG5cdFx0aWYgKFBpa2FkYXkpIHtcblx0XHRcdGVsZW1lbnQuX19waWthZGF5ID0gbmV3IFBpa2FkYXkoe1xuXHRcdFx0XHRmaWVsZDogZWxlbWVudFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudmlzaWJsZUFuaW1hdGVkID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXHRcdCRlbC5hZGRDbGFzcygncmwtYW5pbWF0ZWQtaW5pdGVkJyk7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0JGVsLnNob3coKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGVsLmhpZGUoKTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblx0XHRpZiAoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSB7XG5cdFx0XHQkZWwuYWRkQ2xhc3MoJ3JsLWFuaW1hdGVkLWhpZGRlbicpLnNob3coKTtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHQkZWwucmVtb3ZlQ2xhc3MoJ3JsLWFuaW1hdGVkLWhpZGRlbicpO1xuXHRcdFx0fSwgMTApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZWwuaGlkZSgpLnJlbW92ZUNsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50b29sdGlwID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGlzTW9iaWxlID0gJ29uJyA9PT0gKCRlbC5kYXRhKCd0b29sdGlwLW1vYmlsZScpIHx8ICdvZmYnKSxcblx0XHRcdGlzSTE4TiA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1pMThuJykgfHwgJ29uJyksXG5cdFx0XHRHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblxuXHRcdGlmICghR2xvYmFscy5iTW9iaWxlRGV2aWNlIHx8IGlzTW9iaWxlKSB7XG5cdFx0XHRjb25zdCBzVmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpO1xuXG5cdFx0XHRlbGVtZW50Ll9fb3BlbnRpcCA9IG5ldyBPcGVudGlwKGVsZW1lbnQsIHtcblx0XHRcdFx0J3N0eWxlJzogJ3JhaW5sb29wVGlwJyxcblx0XHRcdFx0J2VsZW1lbnQnOiBlbGVtZW50LFxuXHRcdFx0XHQndGlwSm9pbnQnOiAkZWwuZGF0YSgndG9vbHRpcC1qb2luJykgfHwgJ2JvdHRvbSdcblx0XHRcdH0pO1xuXG5cdFx0XHRHbG9iYWxzLmRyb3Bkb3duVmlzaWJpbGl0eS5zdWJzY3JpYmUoKHYpID0+IHtcblx0XHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoJycgPT09IHNWYWx1ZSkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudCgnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5hY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNJMThOKSB7XG5cdFx0XHRcdGNvbnN0IFRyYW5zbGF0b3IgPSByZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpO1xuXG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoVHJhbnNsYXRvci5pMThuKHNWYWx1ZSkpO1xuXG5cdFx0XHRcdFRyYW5zbGF0b3IudHJpZ2dlci5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoVHJhbnNsYXRvci5pMThuKHNWYWx1ZSkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRHbG9iYWxzLmRyb3Bkb3duVmlzaWJpbGl0eS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRcdGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudChzVmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHQkd2luLm9uKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJywgKCkgPT4ge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHQkd2luLm9uKCdybC50b29sdGlwcy5hY3RpdmF0ZScsICgpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGlzTW9iaWxlID0gJ29uJyA9PT0gKCRlbC5kYXRhKCd0b29sdGlwLW1vYmlsZScpIHx8ICdvZmYnKSxcblx0XHRcdGlzSTE4TiA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1pMThuJykgfHwgJ29uJyksXG5cdFx0XHRHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblxuXHRcdGlmICgoIUdsb2JhbHMuYk1vYmlsZURldmljZSB8fCBpc01vYmlsZSkgJiYgZWxlbWVudC5fX29wZW50aXApIHtcblx0XHRcdGNvbnN0IHNWYWx1ZSA9ICFrby5pc09ic2VydmFibGUoZlZhbHVlKSAmJiBfLmlzRnVuY3Rpb24oZlZhbHVlKSA/IGZWYWx1ZSgpIDoga28udW53cmFwKGZWYWx1ZSk7XG5cdFx0XHRpZiAoc1ZhbHVlKSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoaXNJMThOID8gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuKHNWYWx1ZSkgOiBzVmFsdWUpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5hY3RpdmF0ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoJycpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRvb2x0aXBFcnJvclRpcCA9IHtcblx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cblx0XHRlbGVtZW50Ll9fb3BlbnRpcCA9IG5ldyBPcGVudGlwKGVsZW1lbnQsIHtcblx0XHRcdHN0eWxlOiAncmFpbmxvb3BFcnJvclRpcCcsXG5cdFx0XHRoaWRlT246ICdtb3VzZW91dCBjbGljaycsXG5cdFx0XHRlbGVtZW50OiBlbGVtZW50LFxuXHRcdFx0dGlwSm9pbnQ6ICRlbC5kYXRhKCd0b29sdGlwLWpvaW4nKSB8fCAndG9wJ1xuXHRcdH0pO1xuXG5cdFx0ZWxlbWVudC5fX29wZW50aXAuZGVhY3RpdmF0ZSgpO1xuXG5cdFx0JCh3aW5kb3cuZG9jdW1lbnQpLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGZEaXNwb3NhbFRvb2x0aXBIZWxwZXIoZWxlbWVudCk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHR2YWx1ZSA9ICFrby5pc09ic2VydmFibGUoZlZhbHVlKSAmJiBfLmlzRnVuY3Rpb24oZlZhbHVlKSA/IGZWYWx1ZSgpIDoga28udW53cmFwKGZWYWx1ZSksXG5cdFx0XHRvcGVuVGlwcyA9IGVsZW1lbnQuX19vcGVudGlwO1xuXG5cdFx0aWYgKG9wZW5UaXBzKSB7XG5cdFx0XHRpZiAoJycgPT09IHZhbHVlKSB7XG5cdFx0XHRcdG9wZW5UaXBzLmhpZGUoKTtcblx0XHRcdFx0b3BlblRpcHMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0XHRvcGVuVGlwcy5zZXRDb250ZW50KCcnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRcdGlmICgkZWwuaXMoJzp2aXNpYmxlJykpIHtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLnNldENvbnRlbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuYWN0aXZhdGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuaGlkZSgpO1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuc2V0Q29udGVudCgnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5yZWdpc3RyYXRlQm9vdHN0cmFwRHJvcGRvd24gPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cdFx0aWYgKEdsb2JhbHMgJiYgR2xvYmFscy5kYXRhLmFCb290c3RyYXBEcm9wZG93bnMpIHtcblx0XHRcdEdsb2JhbHMuZGF0YS5hQm9vdHN0cmFwRHJvcGRvd25zLnB1c2goJChlbGVtZW50KSk7XG5cblx0XHRcdCQoZWxlbWVudCkuY2xpY2soKCkgPT4ge1xuXHRcdFx0XHRyZXF1aXJlKCdDb21tb24vVXRpbHMnKS5kZXRlY3REcm9wZG93blZpc2liaWxpdHkoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdC8vIH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm9wZW5Ecm9wZG93blRyaWdnZXIgPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblx0XHRcdGlmICghJGVsLmhhc0NsYXNzKCdvcGVuJykpIHtcblx0XHRcdFx0JGVsLmZpbmQoJy5kcm9wZG93bi10b2dnbGUnKS5kcm9wZG93bigndG9nZ2xlJyk7XG5cdFx0XHR9XG5cblx0XHRcdCRlbC5maW5kKCcuZHJvcGRvd24tdG9nZ2xlJykuZm9jdXMoKTtcblxuXHRcdFx0cmVxdWlyZSgnQ29tbW9uL1V0aWxzJykuZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KCk7XG5cdFx0XHRmVmFsdWVBY2Nlc3NvcigpKGZhbHNlKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcm9wZG93bkNsb3NlciA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHQkKGVsZW1lbnQpXG5cdFx0XHQuY2xvc2VzdCgnLmRyb3Bkb3duJylcblx0XHRcdC5vbignY2xpY2snLCAnLmUtaXRlbScsICgpID0+IHtcblx0XHRcdFx0JChlbGVtZW50KS5kcm9wZG93bigndG9nZ2xlJyk7XG5cdFx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnBvcG92ZXIgPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5wb3BvdmVyKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkucG9wb3ZlcignZGVzdHJveScpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuY3NzdGV4dCA9IHt9O1xua28uYmluZGluZ0hhbmRsZXJzLmNzc3RleHQuaW5pdCA9IGtvLmJpbmRpbmdIYW5kbGVycy5jc3N0ZXh0LnVwZGF0ZSA9IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRpZiAoZWxlbWVudCAmJiBlbGVtZW50LnN0eWxlU2hlZXQgJiYgJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBlbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCkge1xuXHRcdGVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHR9IGVsc2Uge1xuXHRcdCQoZWxlbWVudCkudGV4dChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMucmVzaXplY3JvcCA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHQkKGVsZW1lbnQpXG5cdFx0XHQuYWRkQ2xhc3MoJ3Jlc2l6ZWNyb3AnKVxuXHRcdFx0LnJlc2l6ZWNyb3Aoe1xuXHRcdFx0XHQnd2lkdGgnOiAnMTAwJyxcblx0XHRcdFx0J2hlaWdodCc6ICcxMDAnLFxuXHRcdFx0XHQnd3JhcHBlckNTUyc6IHtcblx0XHRcdFx0XHQnYm9yZGVyLXJhZGl1cyc6ICcxMHB4J1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRmVmFsdWVBY2Nlc3NvcigpKCk7XG5cdFx0JChlbGVtZW50KS5yZXNpemVjcm9wKHtcblx0XHRcdCd3aWR0aCc6ICcxMDAnLFxuXHRcdFx0J2hlaWdodCc6ICcxMDAnXG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vbktleURvd24gPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleWRvd24ua29PbktleURvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCkge1xuXHRcdFx0XHRyZXR1cm4gZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgZXZlbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleWRvd24ua29PbktleURvd24nKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm9uRW50ZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleXByZXNzLmtvT25FbnRlcicsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50ICYmIDEzID09PSB3aW5kb3cucGFyc2VJbnQoZXZlbnQua2V5Q29kZSwgMTApKSB7XG5cdFx0XHRcdCQoZWxlbWVudCkudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5cHJlc3Mua29PbkVudGVyJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vblNwYWNlID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXl1cC5rb09uU3BhY2UnLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAzMiA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsLCBldmVudCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkub2ZmKCdrZXl1cC5rb09uU3BhY2UnKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm9uVGFiID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlkb3duLmtvT25UYWInLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiA5ID09PSB3aW5kb3cucGFyc2VJbnQoZXZlbnQua2V5Q29kZSwgMTApKSB7XG5cdFx0XHRcdHJldHVybiBmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsLCAhIWV2ZW50LnNoaWZ0S2V5KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5ZG93bi5rb09uVGFiJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vbkVzYyA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5dXAua29PbkVzYycsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50ICYmIDI3ID09PSB3aW5kb3cucGFyc2VJbnQoZXZlbnQua2V5Q29kZSwgMTApKSB7XG5cdFx0XHRcdCQoZWxlbWVudCkudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5dXAua29PbkVzYycpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuY2xpY2tPblRydWUgPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0JChlbGVtZW50KS5jbGljaygpO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm1vZGFsID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyk7XG5cblx0XHQkKGVsZW1lbnQpXG5cdFx0XHQudG9nZ2xlQ2xhc3MoJ2ZhZGUnLCAhR2xvYmFscy5iTW9iaWxlRGV2aWNlKVxuXHRcdFx0Lm1vZGFsKHtcblx0XHRcdFx0J2tleWJvYXJkJzogZmFsc2UsXG5cdFx0XHRcdCdzaG93Jzoga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpXG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdzaG93bi5rb01vZGFsJywgVXRpbHMud2luZG93UmVzaXplQ2FsbGJhY2spXG5cdFx0XHQuZmluZCgnLmNsb3NlJylcblx0XHRcdC5vbignY2xpY2sua29Nb2RhbCcsICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlQWNjZXNzb3IoKShmYWxzZSk7XG5cdFx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQub2ZmKCdzaG93bi5rb01vZGFsJylcblx0XHRcdFx0LmZpbmQoJy5jbG9zZScpXG5cdFx0XHRcdC5vZmYoJ2NsaWNrLmtvTW9kYWwnKTtcblx0XHR9KTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblxuXHRcdCQoZWxlbWVudCkubW9kYWwoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpID8gJ3Nob3cnIDogJ2hpZGUnKTtcblxuXHRcdGlmIChHbG9iYWxzLiRodG1sLmhhc0NsYXNzKCdybC1hbmltJykpIHtcblx0XHRcdEdsb2JhbHMuJGh0bWwuYWRkQ2xhc3MoJ3JsLW1vZGFsLWFuaW1hdGlvbicpO1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdEdsb2JhbHMuJGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLW1vZGFsLWFuaW1hdGlvbicpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWU1MDBtcyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMubW9tZW50ID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRyZXF1aXJlKCdDb21tb24vTW9tZW50b3InKS5tb21lbnRUb05vZGUoXG5cdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdC5hZGRDbGFzcygnbW9tZW50Jylcblx0XHRcdFx0LmRhdGEoJ21vbWVudC10aW1lJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKVxuXHRcdCk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL01vbWVudG9yJykubW9tZW50VG9Ob2RlKCQoZWxlbWVudCkuZGF0YSgnbW9tZW50LXRpbWUnLCBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmkxOG5Jbml0ID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4blRvTm9kZXMoZWxlbWVudCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50cmFuc2xhdG9ySW5pdCA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRyZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG5Ub05vZGVzKGVsZW1lbnQpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuaTE4blVwZGF0ZSA9IHtcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSk7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuVG9Ob2RlcyhlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmxpbmsgPSB7XG5cdHVwZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHQkKGVsZW1lbnQpLmF0dHIoJ2hyZWYnLCBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudGl0bGUgPSB7XG5cdHVwZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHQkKGVsZW1lbnQpLmF0dHIoJ3RpdGxlJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRleHRGID0ge1xuXHRpbml0OiBmdW5jdGlvbihlbGVtZW50LCBmVmFsdWVBY2Nlc3Nvcikge1xuXHRcdCQoZWxlbWVudCkudGV4dChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuaW5pdERvbSA9IHtcblx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHRmVmFsdWVBY2Nlc3NvcigpKGVsZW1lbnQpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuaW5pdEZpeGVkVHJpZ2dlciA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWVzID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpLFxuXHRcdFx0JGVsID0gJChlbGVtZW50KSxcblx0XHRcdHRvcCA9IHZhbHVlc1sxXSB8fCAwO1xuXG5cdFx0bGV0ICRjb250YWluZXIgPSAkKHZhbHVlc1swXSB8fCBudWxsKTtcblx0XHQkY29udGFpbmVyID0gJGNvbnRhaW5lclswXSA/ICRjb250YWluZXIgOiBudWxsO1xuXHRcdGlmICgkY29udGFpbmVyKSB7XG5cdFx0XHQkd2luLnJlc2l6ZSgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9mZnNldCA9ICRjb250YWluZXIgPyAkY29udGFpbmVyLm9mZnNldCgpIDogbnVsbDtcblx0XHRcdFx0aWYgKG9mZnNldCAmJiBvZmZzZXQudG9wKSB7XG5cdFx0XHRcdFx0JGVsLmNzcygndG9wJywgb2Zmc2V0LnRvcCArIHRvcCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXRSZXNpemVUcmlnZ2VyID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCB2YWx1ZXMgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSk7XG5cdFx0JChlbGVtZW50KS5jc3Moe1xuXHRcdFx0J2hlaWdodCc6IHZhbHVlc1sxXSxcblx0XHRcdCdtaW4taGVpZ2h0JzogdmFsdWVzWzFdXG5cdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKG9FbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0XHRHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdHZhbHVlcyA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKTtcblxuXHRcdGxldCB2YWx1ZSA9IFV0aWxzLnBJbnQodmFsdWVzWzFdKSxcblx0XHRcdHNpemUgPSAwLFxuXHRcdFx0b2Zmc2V0ID0gJChvRWxlbWVudCkub2Zmc2V0KCkudG9wO1xuXG5cdFx0aWYgKDAgPCBvZmZzZXQpIHtcblx0XHRcdG9mZnNldCArPSBVdGlscy5wSW50KHZhbHVlc1syXSk7XG5cdFx0XHRzaXplID0gR2xvYmFscy4kd2luLmhlaWdodCgpIC0gb2Zmc2V0O1xuXG5cdFx0XHRpZiAodmFsdWUgPCBzaXplKSB7XG5cdFx0XHRcdHZhbHVlID0gc2l6ZTtcblx0XHRcdH1cblxuXHRcdFx0JChvRWxlbWVudCkuY3NzKHtcblx0XHRcdFx0J2hlaWdodCc6IHZhbHVlLFxuXHRcdFx0XHQnbWluLWhlaWdodCc6IHZhbHVlXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5hcHBlbmREb20gPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmhpZGUoKVxuXHRcdFx0LmVtcHR5KClcblx0XHRcdC5hcHBlbmQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKVxuXHRcdFx0LnNob3coKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmRyYWdnYWJsZSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpLFxuXHRcdFx0VXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKTtcblxuXHRcdGlmICghR2xvYmFscy5iTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHRjb25zdCB0cmlnZ2VyWm9uZSA9IDEwMCxcblx0XHRcdFx0c2Nyb2xsU3BlZWQgPSAzLFxuXHRcdFx0XHRmQWxsVmFsdWVGdW5jID0gZkFsbEJpbmRpbmdzQWNjZXNzb3IoKSxcblx0XHRcdFx0ZHJvcHBhYmxlU2VsZWN0b3IgPSBmQWxsVmFsdWVGdW5jICYmIGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlU2VsZWN0b3IgPyBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZVNlbGVjdG9yIDogJycsXG5cdFx0XHRcdGNvbmYgPSB7XG5cdFx0XHRcdFx0ZGlzdGFuY2U6IDIwLFxuXHRcdFx0XHRcdGhhbmRsZTogJy5kcmFnSGFuZGxlJyxcblx0XHRcdFx0XHRjdXJzb3JBdDogeyB0b3A6IDIyLCBsZWZ0OiAzIH0sXG5cdFx0XHRcdFx0cmVmcmVzaFBvc2l0aW9uczogdHJ1ZSxcblx0XHRcdFx0XHRzY3JvbGw6IHRydWUsXG5cdFx0XHRcdFx0ZHJhZzogbnVsbCxcblx0XHRcdFx0XHRzdG9wOiBudWxsLFxuXHRcdFx0XHRcdGhlbHBlcjogbnVsbFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoZHJvcHBhYmxlU2VsZWN0b3IpIHtcblx0XHRcdFx0Y29uZi5kcmFnID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0JChkcm9wcGFibGVTZWxlY3RvcikuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0XHRcdFx0b2Zmc2V0ID0gJHRoaXMub2Zmc2V0KCksXG5cdFx0XHRcdFx0XHRcdGJvdHRvbVBvcyA9IG9mZnNldC50b3AgKyAkdGhpcy5oZWlnaHQoKTtcblxuXHRcdFx0XHRcdFx0d2luZG93LmNsZWFySW50ZXJ2YWwoJHRoaXMuZGF0YSgndGltZXJTY3JvbGwnKSk7XG5cdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0aWYgKGV2ZW50LnBhZ2VYID49IG9mZnNldC5sZWZ0ICYmIGV2ZW50LnBhZ2VYIDw9IG9mZnNldC5sZWZ0ICsgJHRoaXMud2lkdGgoKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoZXZlbnQucGFnZVkgPj0gYm90dG9tUG9zIC0gdHJpZ2dlclpvbmUgJiYgZXZlbnQucGFnZVkgPD0gYm90dG9tUG9zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbW92ZVVwID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2Nyb2xsVG9wKCR0aGlzLnNjcm9sbFRvcCgpICsgc2Nyb2xsU3BlZWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0VXRpbHMud2luZG93UmVzaXplKCk7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJywgd2luZG93LnNldEludGVydmFsKG1vdmVVcCwgMTApKTtcblx0XHRcdFx0XHRcdFx0XHRtb3ZlVXAoKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChldmVudC5wYWdlWSA+PSBvZmZzZXQudG9wICYmIGV2ZW50LnBhZ2VZIDw9IG9mZnNldC50b3AgKyB0cmlnZ2VyWm9uZSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1vdmVEb3duID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2Nyb2xsVG9wKCR0aGlzLnNjcm9sbFRvcCgpIC0gc2Nyb2xsU3BlZWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0VXRpbHMud2luZG93UmVzaXplKCk7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJywgd2luZG93LnNldEludGVydmFsKG1vdmVEb3duLCAxMCkpO1xuXHRcdFx0XHRcdFx0XHRcdG1vdmVEb3duKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25mLnN0b3AgPSAoKSA9PiB7XG5cdFx0XHRcdFx0JChkcm9wcGFibGVTZWxlY3RvcikuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0XHRcdHdpbmRvdy5jbGVhckludGVydmFsKCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJykpO1xuXHRcdFx0XHRcdFx0JHRoaXMuZGF0YSgndGltZXJTY3JvbGwnLCBmYWxzZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGNvbmYuaGVscGVyID0gKGV2ZW50KSA9PiBmVmFsdWVBY2Nlc3NvcigpKGV2ZW50ICYmIGV2ZW50LnRhcmdldCA/IGtvLmRhdGFGb3IoZXZlbnQudGFyZ2V0KSA6IG51bGwpO1xuXG5cdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdC5kcmFnZ2FibGUoY29uZilcblx0XHRcdFx0Lm9uKCdtb3VzZWRvd24ua29EcmFnZ2FibGUnLCAoKSA9PiB7XG5cdFx0XHRcdFx0VXRpbHMucmVtb3ZlSW5Gb2N1cygpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRcdCQoZWxlbWVudClcblx0XHRcdFx0XHQub2ZmKCdtb3VzZWRvd24ua29EcmFnZ2FibGUnKVxuXHRcdFx0XHRcdC5kcmFnZ2FibGUoJ2Rlc3Ryb3knKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmRyb3BwYWJsZSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpO1xuXHRcdGlmICghR2xvYmFscy5iTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHRjb25zdCBmVmFsdWVGdW5jID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdFx0ZkFsbFZhbHVlRnVuYyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRcdGZPdmVyQ2FsbGJhY2sgPSBmQWxsVmFsdWVGdW5jICYmIGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlT3ZlciA/IGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlT3ZlciA6IG51bGwsXG5cdFx0XHRcdGZPdXRDYWxsYmFjayA9IGZBbGxWYWx1ZUZ1bmMgJiYgZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVPdXQgPyBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU91dCA6IG51bGwsXG5cdFx0XHRcdGNvbmYgPSB7XG5cdFx0XHRcdFx0dG9sZXJhbmNlOiAncG9pbnRlcicsXG5cdFx0XHRcdFx0aG92ZXJDbGFzczogJ2Ryb3BwYWJsZUhvdmVyJyxcblx0XHRcdFx0XHRkcm9wOiBudWxsLFxuXHRcdFx0XHRcdG92ZXI6IG51bGwsXG5cdFx0XHRcdFx0b3V0OiBudWxsXG5cdFx0XHRcdH07XG5cblx0XHRcdGlmIChmVmFsdWVGdW5jKSB7XG5cdFx0XHRcdGNvbmYuZHJvcCA9IChldmVudCwgdWkpID0+IHtcblx0XHRcdFx0XHRmVmFsdWVGdW5jKGV2ZW50LCB1aSk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKGZPdmVyQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRjb25mLm92ZXIgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0XHRmT3ZlckNhbGxiYWNrKGV2ZW50LCB1aSk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChmT3V0Q2FsbGJhY2spIHtcblx0XHRcdFx0XHRjb25mLm91dCA9IChldmVudCwgdWkpID0+IHtcblx0XHRcdFx0XHRcdGZPdXRDYWxsYmFjayhldmVudCwgdWkpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQkKGVsZW1lbnQpLmRyb3BwYWJsZShjb25mKTtcblxuXHRcdFx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdFx0XHQkKGVsZW1lbnQpLmRyb3BwYWJsZSgnZGVzdHJveScpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5uYW5vID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpLFxuXHRcdFx0U2V0dGluZ3MgPSByZXF1aXJlKCdTdG9yYWdlL1NldHRpbmdzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYkRpc2FibGVOYW5vU2Nyb2xsICYmICFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndXNlTmF0aXZlU2Nyb2xsYmFycycpKSB7XG5cdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdC5hZGRDbGFzcygnbmFubycpXG5cdFx0XHRcdC5uYW5vU2Nyb2xsZXIoe1xuXHRcdFx0XHRcdGlPU05hdGl2ZVNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdFx0cHJldmVudFBhZ2VTY3JvbGxpbmc6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuc2F2ZVRyaWdnZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblxuXHRcdCRlbC5kYXRhKFxuXHRcdFx0J3NhdmUtdHJpZ2dlci10eXBlJyxcblx0XHRcdCRlbC5pcygnaW5wdXRbdHlwZT10ZXh0XSxpbnB1dFt0eXBlPWVtYWlsXSxpbnB1dFt0eXBlPXBhc3N3b3JkXSxzZWxlY3QsdGV4dGFyZWEnKSA/ICdpbnB1dCcgOiAnY3VzdG9tJ1xuXHRcdCk7XG5cblx0XHRpZiAoJ2N1c3RvbScgPT09ICRlbC5kYXRhKCdzYXZlLXRyaWdnZXItdHlwZScpKSB7XG5cdFx0XHQkZWxcblx0XHRcdFx0LmFwcGVuZChcblx0XHRcdFx0XHQnJm5ic3A7Jm5ic3A7JyArXG5cdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJpY29uLXNwaW5uZXIgYW5pbWF0ZWRcIj48L2k+JyArXG5cdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJpY29uLXJlbW92ZSBlcnJvclwiPjwvaT4nICtcblx0XHRcdFx0XHRcdCc8aSBjbGFzcz1cImljb24tb2sgc3VjY2Vzc1wiPjwvaT4nXG5cdFx0XHRcdClcblx0XHRcdFx0LmFkZENsYXNzKCdzZXR0aW5ncy1zYXZlZC10cmlnZ2VyJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC5hZGRDbGFzcygnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlci1pbnB1dCcpO1xuXHRcdH1cblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCB2YWx1ZSA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCk7XG5cblx0XHRpZiAoJ2N1c3RvbScgPT09ICRlbC5kYXRhKCdzYXZlLXRyaWdnZXItdHlwZScpKSB7XG5cdFx0XHRzd2l0Y2ggKHZhbHVlLnRvU3RyaW5nKCkpIHtcblx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5lcnJvcicpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0XHQuZmluZCgnLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzAnOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCwuc3VjY2VzcycpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0XHQuZmluZCgnLmVycm9yJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICctMic6XG5cdFx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0XHQuZmluZCgnLmVycm9yLC5zdWNjZXNzJylcblx0XHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkJylcblx0XHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvciwuc3VjY2VzcycpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3dpdGNoICh2YWx1ZS50b1N0cmluZygpKSB7XG5cdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdCRlbC5hZGRDbGFzcygnc3VjY2VzcycpLnJlbW92ZUNsYXNzKCdlcnJvcicpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHQkZWwuYWRkQ2xhc3MoJ2Vycm9yJykucmVtb3ZlQ2xhc3MoJ3N1Y2Nlc3MnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnLTInOlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdCRlbC5yZW1vdmVDbGFzcygnZXJyb3Igc3VjY2VzcycpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmVtYWlsc1RhZ3MgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdFx0RW1haWxNb2RlbCA9IHJlcXVpcmUoJ01vZGVsL0VtYWlsJykuZGVmYXVsdCxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0ZkFsbEJpbmRpbmdzID0gZkFsbEJpbmRpbmdzQWNjZXNzb3IoKSxcblx0XHRcdGZBdXRvQ29tcGxldGVTb3VyY2UgPSBmQWxsQmluZGluZ3MuYXV0b0NvbXBsZXRlU291cmNlIHx8IG51bGwsXG5cdFx0XHRpbnB1dERlbGltaXRlcnMgPSBbJywnLCAnOycsICdcXG4nXSxcblx0XHRcdGZGb2N1c0NhbGxiYWNrID0gKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmIChmVmFsdWUgJiYgZlZhbHVlLmZvY3VzZWQpIHtcblx0XHRcdFx0XHRmVmFsdWUuZm9jdXNlZCghIXZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdCRlbC5pbnB1dG9zYXVydXMoe1xuXHRcdFx0cGFyc2VPbkJsdXI6IHRydWUsXG5cdFx0XHRhbGxvd0RyYWdBbmREcm9wOiB0cnVlLFxuXHRcdFx0Zm9jdXNDYWxsYmFjazogZkZvY3VzQ2FsbGJhY2ssXG5cdFx0XHRpbnB1dERlbGltaXRlcnM6IGlucHV0RGVsaW1pdGVycyxcblx0XHRcdGF1dG9Db21wbGV0ZVNvdXJjZTogZkF1dG9Db21wbGV0ZVNvdXJjZSxcblx0XHRcdHNwbGl0SG9vazogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHYgPSBVdGlscy50cmltKHZhbHVlKTtcblx0XHRcdFx0aWYgKHYgJiYgLTEgPCBpbnB1dERlbGltaXRlcnMuaW5kZXhPZih2LnN1YnN0cigtMSkpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIEVtYWlsTW9kZWwuc3BsaXRFbWFpbExpbmUodmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fSxcblx0XHRcdHBhcnNlSG9vazogKGlucHV0KSA9PlxuXHRcdFx0XHRfLm1hcChcblx0XHRcdFx0XHRfLmZsYXR0ZW4oXG5cdFx0XHRcdFx0XHRfLm1hcChpbnB1dCwgKGlucHV0VmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdmFsdWVzID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShpbnB1dFZhbHVlKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlcy5sZW5ndGggPyB2YWx1ZXMgOiBpbnB1dFZhbHVlO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdChpdGVtKSA9PiAoXy5pc09iamVjdChpdGVtKSA/IFtpdGVtLnRvTGluZShmYWxzZSksIGl0ZW1dIDogW2l0ZW0sIG51bGxdKVxuXHRcdFx0XHQpLFxuXHRcdFx0Y2hhbmdlOiAoZXZlbnQpID0+IHtcblx0XHRcdFx0JGVsLmRhdGEoJ0VtYWlsc1RhZ3NWYWx1ZScsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG5cdFx0XHRcdGZWYWx1ZShldmVudC50YXJnZXQudmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYgKGZWYWx1ZSAmJiBmVmFsdWUuZm9jdXNlZCAmJiBmVmFsdWUuZm9jdXNlZC5zdWJzY3JpYmUpIHtcblx0XHRcdGZWYWx1ZS5mb2N1c2VkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0JGVsLmlucHV0b3NhdXJ1cyh2YWx1ZSA/ICdmb2N1cycgOiAnYmx1cicpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRvRWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdHZhbHVlID0ga28udW53cmFwKGZWYWx1ZSk7XG5cblx0XHRpZiAoJG9FbC5kYXRhKCdFbWFpbHNUYWdzVmFsdWUnKSAhPT0gdmFsdWUpIHtcblx0XHRcdCRvRWwudmFsKHZhbHVlKTtcblx0XHRcdCRvRWwuZGF0YSgnRW1haWxzVGFnc1ZhbHVlJywgdmFsdWUpO1xuXHRcdFx0JG9FbC5pbnB1dG9zYXVydXMoJ3JlZnJlc2gnKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5jb21tYW5kID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KSA9PiB7XG5cdFx0Y29uc3QganFFbGVtZW50ID0gJChlbGVtZW50KSxcblx0XHRcdGNvbW1hbmQgPSBmVmFsdWVBY2Nlc3NvcigpO1xuXG5cdFx0aWYgKCFjb21tYW5kIHx8ICFjb21tYW5kLmlzQ29tbWFuZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBzaG91bGQgYmUgYSBjb21tYW5kJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCFjb21tYW5kLmVuYWJsZWQpIHtcblx0XHRcdGNvbW1hbmQuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKCFjb21tYW5kLmNhbkV4ZWN1dGUpIHtcblx0XHRcdGNvbnN0IF9fcmVhbENhbkV4ZWN1dGUgPSBjb21tYW5kLl9fcmVhbENhbkV4ZWN1dGU7XG5cdFx0XHRpZiAoXy5pc0Z1bmN0aW9uKF9fcmVhbENhbkV4ZWN1dGUpKSB7XG5cdFx0XHRcdGNvbW1hbmQuY2FuRXhlY3V0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IGNvbW1hbmQuZW5hYmxlZCgpICYmIF9fcmVhbENhbkV4ZWN1dGUuY2FsbCh2aWV3TW9kZWwsIHZpZXdNb2RlbCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29tbWFuZC5jYW5FeGVjdXRlID0ga28uY29tcHV0ZWQoKCkgPT4gY29tbWFuZC5lbmFibGVkKCkgJiYgISFfX3JlYWxDYW5FeGVjdXRlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRqcUVsZW1lbnQuYWRkQ2xhc3MoJ2NvbW1hbmQnKTtcblx0XHRrby5iaW5kaW5nSGFuZGxlcnNbanFFbGVtZW50LmlzKCdmb3JtJykgPyAnc3VibWl0JyA6ICdjbGljayddLmluaXQoXG5cdFx0XHRlbGVtZW50LFxuXHRcdFx0ZlZhbHVlQWNjZXNzb3IsXG5cdFx0XHRmQWxsQmluZGluZ3NBY2Nlc3Nvcixcblx0XHRcdHZpZXdNb2RlbCxcblx0XHRcdGJpbmRpbmdDb250ZXh0XG5cdFx0KTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBqcUVsZW1lbnQgPSAkKGVsZW1lbnQpLFxuXHRcdFx0Y29tbWFuZCA9IGZWYWx1ZUFjY2Vzc29yKCk7XG5cblx0XHRsZXQgcmVzdWx0ID0gY29tbWFuZC5lbmFibGVkKCk7XG5cblx0XHRqcUVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2NvbW1hbmQtbm90LWVuYWJsZWQnLCAhcmVzdWx0KTtcblxuXHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdHJlc3VsdCA9IGNvbW1hbmQuY2FuRXhlY3V0ZSgpO1xuXHRcdFx0anFFbGVtZW50LnRvZ2dsZUNsYXNzKCdjb21tYW5kLWNhbi1ub3QtYmUtZXhlY3V0ZScsICFyZXN1bHQpO1xuXHRcdH1cblxuXHRcdGpxRWxlbWVudC50b2dnbGVDbGFzcygnY29tbWFuZC1kaXNhYmxlZCBkaXNhYmxlIGRpc2FibGVkJywgIXJlc3VsdCkudG9nZ2xlQ2xhc3MoJ25vLWRpc2FibGVkJywgISFyZXN1bHQpO1xuXG5cdFx0aWYgKGpxRWxlbWVudC5pcygnaW5wdXQnKSB8fCBqcUVsZW1lbnQuaXMoJ2J1dHRvbicpKSB7XG5cdFx0XHRqcUVsZW1lbnQucHJvcCgnZGlzYWJsZWQnLCAhcmVzdWx0KTtcblx0XHR9XG5cdH1cbn07XG5cbi8vIGV4dGVuZGVyc1xuXG5rby5leHRlbmRlcnMudHJpbW1lciA9ICh0YXJnZXQpID0+IHtcblx0Y29uc3QgVXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKSxcblx0XHRyZXN1bHQgPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0YXJnZXQsXG5cdFx0XHR3cml0ZTogKG5ld1ZhbHVlKSA9PiB7XG5cdFx0XHRcdHRhcmdldChVdGlscy50cmltKG5ld1ZhbHVlLnRvU3RyaW5nKCkpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRyZXN1bHQodGFyZ2V0KCkpO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxua28uZXh0ZW5kZXJzLnBvc0ludGVyZXIgPSAodGFyZ2V0LCBkZWZhdWx0VmFsKSA9PiB7XG5cdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0cmVzdWx0ID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LFxuXHRcdFx0d3JpdGU6IChuZXdWYWx1ZSkgPT4ge1xuXHRcdFx0XHRsZXQgdmFsID0gVXRpbHMucEludChuZXdWYWx1ZS50b1N0cmluZygpLCBkZWZhdWx0VmFsKTtcblx0XHRcdFx0aWYgKDAgPj0gdmFsKSB7XG5cdFx0XHRcdFx0dmFsID0gZGVmYXVsdFZhbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWwgPT09IHRhcmdldCgpICYmICcnICsgdmFsICE9PSAnJyArIG5ld1ZhbHVlKSB7XG5cdFx0XHRcdFx0dGFyZ2V0KHZhbCArIDEpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0KHZhbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmtvLmV4dGVuZGVycy5saW1pdGVkTGlzdCA9ICh0YXJnZXQsIGxpbWl0ZWRMaXN0KSA9PiB7XG5cdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0cmVzdWx0ID0ga29cblx0XHRcdC5jb21wdXRlZCh7XG5cdFx0XHRcdHJlYWQ6IHRhcmdldCxcblx0XHRcdFx0d3JpdGU6IChuZXdWYWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGtvLnVud3JhcCh0YXJnZXQpLFxuXHRcdFx0XHRcdFx0bGlzdCA9IGtvLnVud3JhcChsaW1pdGVkTGlzdCk7XG5cblx0XHRcdFx0XHRpZiAoVXRpbHMuaXNOb25FbXB0eUFycmF5KGxpc3QpKSB7XG5cdFx0XHRcdFx0XHRpZiAoLTEgPCBVdGlscy5pbkFycmF5KG5ld1ZhbHVlLCBsaXN0KSkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQobmV3VmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICgtMSA8IFV0aWxzLmluQXJyYXkoY3VycmVudFZhbHVlLCBsaXN0KSkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQoY3VycmVudFZhbHVlICsgJyAnKTtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQobGlzdFswXSArICcgJyk7XG5cdFx0XHRcdFx0XHRcdHRhcmdldChsaXN0WzBdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGFyZ2V0KCcnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZXh0ZW5kKHsgbm90aWZ5OiAnYWx3YXlzJyB9KTtcblxuXHRyZXN1bHQodGFyZ2V0KCkpO1xuXG5cdGlmICghcmVzdWx0LnZhbHVlSGFzTXV0YXRlZCkge1xuXHRcdHJlc3VsdC52YWx1ZUhhc011dGF0ZWQgPSAoKSA9PiB7XG5cdFx0XHR0YXJnZXQudmFsdWVIYXNNdXRhdGVkKCk7XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5rby5leHRlbmRlcnMucmV2ZXJzaWJsZSA9ICh0YXJnZXQpID0+IHtcblx0bGV0IHZhbHVlID0gdGFyZ2V0KCk7XG5cblx0dGFyZ2V0LmNvbW1pdCA9ICgpID0+IHtcblx0XHR2YWx1ZSA9IHRhcmdldCgpO1xuXHR9O1xuXG5cdHRhcmdldC5yZXZlcnNlID0gKCkgPT4ge1xuXHRcdHRhcmdldCh2YWx1ZSk7XG5cdH07XG5cblx0dGFyZ2V0LmNvbW1pdGVkVmFsdWUgPSAoKSA9PiB2YWx1ZTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy50b2dnbGVTdWJzY3JpYmUgPSAodGFyZ2V0LCBvcHRpb25zKSA9PiB7XG5cdHRhcmdldC5zdWJzY3JpYmUob3B0aW9uc1sxXSwgb3B0aW9uc1swXSwgJ2JlZm9yZUNoYW5nZScpO1xuXHR0YXJnZXQuc3Vic2NyaWJlKG9wdGlvbnNbMl0sIG9wdGlvbnNbMF0pO1xuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLnRvZ2dsZVN1YnNjcmliZVByb3BlcnR5ID0gKHRhcmdldCwgb3B0aW9ucykgPT4ge1xuXHRjb25zdCBwcm9wID0gb3B0aW9uc1sxXTtcblx0aWYgKHByb3ApIHtcblx0XHR0YXJnZXQuc3Vic2NyaWJlKFxuXHRcdFx0KHByZXYpID0+IHtcblx0XHRcdFx0aWYgKHByZXYgJiYgcHJldltwcm9wXSkge1xuXHRcdFx0XHRcdHByZXZbcHJvcF0oZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b3B0aW9uc1swXSxcblx0XHRcdCdiZWZvcmVDaGFuZ2UnXG5cdFx0KTtcblxuXHRcdHRhcmdldC5zdWJzY3JpYmUoKG5leHQpID0+IHtcblx0XHRcdGlmIChuZXh0ICYmIG5leHRbcHJvcF0pIHtcblx0XHRcdFx0bmV4dFtwcm9wXSh0cnVlKTtcblx0XHRcdH1cblx0XHR9LCBvcHRpb25zWzBdKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMuZmFsc2VUaW1lb3V0ID0gKHRhcmdldCwgb3B0aW9uKSA9PiB7XG5cdHRhcmdldC5pRmFsc2VUaW1lb3V0VGltZW91dCA9IDA7XG5cdHRhcmdldC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRhcmdldC5pRmFsc2VUaW1lb3V0VGltZW91dCk7XG5cdFx0XHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRhcmdldChmYWxzZSk7XG5cdFx0XHRcdHRhcmdldC5pRmFsc2VUaW1lb3V0VGltZW91dCA9IDA7XG5cdFx0XHR9LCByZXF1aXJlKCdDb21tb24vVXRpbHMnKS5wSW50KG9wdGlvbikpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy5zcGVjaWFsVGhyb3R0bGUgPSAodGFyZ2V0LCBvcHRpb24pID0+IHtcblx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0VmFsdWUgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKS5wSW50KG9wdGlvbik7XG5cdGlmICgwIDwgdGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0VmFsdWUpIHtcblx0XHR0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQgPSAwO1xuXHRcdHRhcmdldC52YWx1ZUZvclJlYWQgPSBrby5vYnNlcnZhYmxlKCEhdGFyZ2V0KCkpLmV4dGVuZCh7IHRocm90dGxlOiAxMCB9KTtcblxuXHRcdHJldHVybiBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0YXJnZXQudmFsdWVGb3JSZWFkLFxuXHRcdFx0d3JpdGU6IChiVmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKGJWYWx1ZSkge1xuXHRcdFx0XHRcdHRhcmdldC52YWx1ZUZvclJlYWQoYlZhbHVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAodGFyZ2V0LnZhbHVlRm9yUmVhZCgpKSB7XG5cdFx0XHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dCk7XG5cdFx0XHRcdFx0XHR0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldC52YWx1ZUZvclJlYWQoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQgPSAwO1xuXHRcdFx0XHRcdFx0fSwgdGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0VmFsdWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGJWYWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLmlkbGVUcmlnZ2VyID0gKHRhcmdldCkgPT4ge1xuXHR0YXJnZXQudHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbi8vIGZ1bmN0aW9uc1xuXG5rby5vYnNlcnZhYmxlLmZuLmlkbGVUcmlnZ2VyID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmV4dGVuZCh7ICdpZGxlVHJpZ2dlcic6IHRydWUgfSk7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLnZhbGlkYXRlTm9uZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmhhc0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdHJldHVybiB0aGlzO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZUVtYWlsID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuaGFzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHR0aGlzLmhhc0Vycm9yKCcnICE9PSB2YWx1ZSAmJiAhL15bXkBcXHNdK0BbXkBcXHNdKyQvLnRlc3QodmFsdWUpKTtcblx0fSk7XG5cblx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLnZhbGlkYXRlU2ltcGxlRW1haWwgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5oYXNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdHRoaXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdHRoaXMuaGFzRXJyb3IoJycgIT09IHZhbHVlICYmICEvXi4rQC4rJC8udGVzdCh2YWx1ZSkpO1xuXHR9KTtcblxuXHR0aGlzLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmtvLm9ic2VydmFibGUuZm4uZGVsZXRlQWNjZXNzSGVscGVyID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAzMDAwIH0pLmV4dGVuZCh7IHRvZ2dsZVN1YnNjcmliZVByb3BlcnR5OiBbdGhpcywgJ2RlbGV0ZUFjY2VzcyddIH0pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmtvLm9ic2VydmFibGUuZm4udmFsaWRhdGVGdW5jID0gZnVuY3Rpb24oZkZ1bmMpIHtcblx0dGhpcy5oYXNGdW5jRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRpZiAoXy5pc0Z1bmN0aW9uKGZGdW5jKSkge1xuXHRcdHRoaXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0dGhpcy5oYXNGdW5jRXJyb3IoIWZGdW5jKHZhbHVlKSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBrbztcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IEF1dG9saW5rZXIgZnJvbSAnQXV0b2xpbmtlcic7XG5cbmltcG9ydCB7ICR3aW4sICRkaXYsICRoY29udCwgZHJvcGRvd25WaXNpYmlsaXR5LCBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgQ29tcG9zZVR5cGUsIEV2ZW50S2V5Q29kZSwgU2F2ZVNldHRpbmdzU3RlcCwgRm9sZGVyVHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBNaW1lIH0gZnJvbSAnQ29tbW9uL01pbWUnO1xuaW1wb3J0IHsgamFzc2wgfSBmcm9tICdDb21tb24vSmFzc2wnO1xuXG5jb25zdCB0cmltID0gJC50cmltO1xuY29uc3QgaW5BcnJheSA9ICQuaW5BcnJheTtcbmNvbnN0IGlzQXJyYXkgPSBfLmlzQXJyYXk7XG5jb25zdCBpc09iamVjdCA9IF8uaXNPYmplY3Q7XG5jb25zdCBpc0Z1bmMgPSBfLmlzRnVuY3Rpb247XG5jb25zdCBpc1VuZCA9IF8uaXNVbmRlZmluZWQ7XG5jb25zdCBpc051bGwgPSBfLmlzTnVsbDtcbmNvbnN0IGhhcyA9IF8uaGFzO1xuY29uc3QgYmluZCA9IF8uYmluZDtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eS1mdW5jdGlvblxuY29uc3Qgbm9vcFRydWUgPSAoKSA9PiB0cnVlO1xuY29uc3Qgbm9vcEZhbHNlID0gKCkgPT4gZmFsc2U7XG5cbmV4cG9ydCB7IHRyaW0sIGluQXJyYXksIGlzQXJyYXksIGlzT2JqZWN0LCBpc0Z1bmMsIGlzVW5kLCBpc051bGwsIGhhcywgYmluZCwgbm9vcCwgbm9vcFRydWUsIG5vb3BGYWxzZSwgamFzc2wgfTtcblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWxlbnRUcnlDYXRjaChmdW5jKSB7XG5cdHRyeSB7XG5cdFx0ZnVuYygpO1xuXHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vcm1hbCh2YWx1ZSkge1xuXHRyZXR1cm4gIWlzVW5kKHZhbHVlKSAmJiAhaXNOdWxsKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKX0gdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGluY2x1ZGVaZXJvID0gdHJ1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Bvc051bWVyaWModmFsdWUsIGluY2x1ZGVaZXJvID0gdHJ1ZSkge1xuXHRyZXR1cm4gIWlzTm9ybWFsKHZhbHVlKVxuXHRcdD8gZmFsc2Vcblx0XHQ6IGluY2x1ZGVaZXJvXG5cdFx0PyAvXlswLTldKiQvLnRlc3QodmFsdWUudG9TdHJpbmcoKSlcblx0XHQ6IC9eWzEtOV0rWzAtOV0qJC8udGVzdCh2YWx1ZS50b1N0cmluZygpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IGRlZmF1bHRWYWx1ciA9IDBcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwSW50KHZhbHVlLCBkZWZhdWx0VmFsdXIgPSAwKSB7XG5cdGNvbnN0IHJlc3VsdCA9IGlzTm9ybWFsKHZhbHVlKSAmJiAnJyAhPT0gdmFsdWUgPyB3aW5kb3cucGFyc2VJbnQodmFsdWUsIDEwKSA6IGRlZmF1bHRWYWx1cjtcblx0cmV0dXJuIHdpbmRvdy5pc05hTihyZXN1bHQpID8gZGVmYXVsdFZhbHVyIDogcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwU3RyaW5nKHZhbHVlKSB7XG5cdHJldHVybiBpc05vcm1hbCh2YWx1ZSkgPyAnJyArIHZhbHVlIDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwQm9vbCh2YWx1ZSkge1xuXHRyZXR1cm4gISF2YWx1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYm9vbFRvQWpheCh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgPyAnMScgOiAnMCc7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb25FbXB0eUFycmF5KHZhbHVlcykge1xuXHRyZXR1cm4gaXNBcnJheSh2YWx1ZXMpICYmIDAgPCB2YWx1ZXMubGVuZ3RoO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KSB7XG5cdHJldHVybiB3aW5kb3cuZW5jb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVVSSUNvbXBvbmVudChjb21wb25lbnQpIHtcblx0cmV0dXJuIHdpbmRvdy5kZWNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVVJJKHVybCkge1xuXHRyZXR1cm4gd2luZG93LmRlY29kZVVSSSh1cmwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVVUkkodXJsKSB7XG5cdHJldHVybiB3aW5kb3cuZW5jb2RlVVJJKHVybCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxlUXVlcnlQYXJzZXIocXVlcnlTdHJpbmcpIHtcblx0bGV0IGluZGV4ID0gMCxcblx0XHRsZW4gPSAwLFxuXHRcdHRlbXAgPSBudWxsO1xuXG5cdGNvbnN0IHF1ZXJpZXMgPSBxdWVyeVN0cmluZy5zcGxpdCgnJicpLFxuXHRcdHBhcmFtcyA9IHt9O1xuXG5cdGZvciAobGVuID0gcXVlcmllcy5sZW5ndGg7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG5cdFx0dGVtcCA9IHF1ZXJpZXNbaW5kZXhdLnNwbGl0KCc9Jyk7XG5cdFx0cGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudCh0ZW1wWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQodGVtcFsxXSk7XG5cdH1cblxuXHRyZXR1cm4gcGFyYW1zO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyPX0gbGVuID0gMzJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWtlTWQ1KGxlbiA9IDMyKSB7XG5cdGNvbnN0IGxpbmUgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Jyxcblx0XHRsaW5lTGVuID0gbGluZS5sZW5ndGg7XG5cblx0bGVuID0gcEludChsZW4pO1xuXG5cdGxldCByZXN1bHQgPSAnJztcblx0d2hpbGUgKHJlc3VsdC5sZW5ndGggPCBsZW4pIHtcblx0XHRyZXN1bHQgKz0gbGluZS5zdWJzdHIod2luZG93Lk1hdGgucm91bmQod2luZG93Lk1hdGgucmFuZG9tKCkgKiBsaW5lTGVuKSwgMSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlSHRtbCh0ZXh0KSB7XG5cdHJldHVybiBpc05vcm1hbCh0ZXh0KSA/IF8uZXNjYXBlKHRleHQudG9TdHJpbmcoKSkgOiAnJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtudW1iZXI9fSBsZW4gPSAxMDBcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFBsYWluVGV4dCh0ZXh0LCBsZW4gPSAxMDApIHtcblx0bGV0IHByZWZpeCA9ICcnLFxuXHRcdHN1YlRleHQgPSAnJyxcblx0XHRyZXN1bHQgPSB0ZXh0LFxuXHRcdHNwYWNlUG9zID0gMCxcblx0XHRuZXdMaW5lUG9zID0gMDtcblxuXHR3aGlsZSAocmVzdWx0Lmxlbmd0aCA+IGxlbikge1xuXHRcdHN1YlRleHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIGxlbik7XG5cdFx0c3BhY2VQb3MgPSBzdWJUZXh0Lmxhc3RJbmRleE9mKCcgJyk7XG5cdFx0bmV3TGluZVBvcyA9IHN1YlRleHQubGFzdEluZGV4T2YoJ1xcbicpO1xuXG5cdFx0aWYgKC0xICE9PSBuZXdMaW5lUG9zKSB7XG5cdFx0XHRzcGFjZVBvcyA9IG5ld0xpbmVQb3M7XG5cdFx0fVxuXG5cdFx0aWYgKC0xID09PSBzcGFjZVBvcykge1xuXHRcdFx0c3BhY2VQb3MgPSBsZW47XG5cdFx0fVxuXG5cdFx0cHJlZml4ICs9IHN1YlRleHQuc3Vic3RyaW5nKDAsIHNwYWNlUG9zKSArICdcXG4nO1xuXHRcdHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoc3BhY2VQb3MgKyAxKTtcblx0fVxuXG5cdHJldHVybiBwcmVmaXggKyByZXN1bHQ7XG59XG5cbmNvbnN0IHRpbWVPdXRBY3Rpb24gPSAoZnVuY3Rpb24oKSB7XG5cdGNvbnN0IHRpbWVPdXRzID0ge307XG5cdHJldHVybiAoYWN0aW9uLCBmRnVuY3Rpb24sIHRpbWVPdXQpID0+IHtcblx0XHR0aW1lT3V0c1thY3Rpb25dID0gaXNVbmQodGltZU91dHNbYWN0aW9uXSkgPyAwIDogdGltZU91dHNbYWN0aW9uXTtcblx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVPdXRzW2FjdGlvbl0pO1xuXHRcdHRpbWVPdXRzW2FjdGlvbl0gPSB3aW5kb3cuc2V0VGltZW91dChmRnVuY3Rpb24sIHRpbWVPdXQpO1xuXHR9O1xufSkoKTtcblxuY29uc3QgdGltZU91dEFjdGlvblNlY29uZCA9IChmdW5jdGlvbigpIHtcblx0Y29uc3QgdGltZU91dHMgPSB7fTtcblx0cmV0dXJuIChhY3Rpb24sIGZGdW5jdGlvbiwgdGltZU91dCkgPT4ge1xuXHRcdGlmICghdGltZU91dHNbYWN0aW9uXSkge1xuXHRcdFx0dGltZU91dHNbYWN0aW9uXSA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0ZkZ1bmN0aW9uKCk7XG5cdFx0XHRcdHRpbWVPdXRzW2FjdGlvbl0gPSAwO1xuXHRcdFx0fSwgdGltZU91dCk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuZXhwb3J0IHsgdGltZU91dEFjdGlvbiwgdGltZU91dEFjdGlvblNlY29uZCB9O1xuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBtXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVNb2R1bGUobSkge1xuXHRyZXR1cm4gKG0gJiYgbS5kZWZhdWx0ID8gbS5kZWZhdWx0IDogbSkgfHwgJyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbkZvY3VzKCkge1xuXHR0cnkge1xuXHRcdGlmICh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuXHRcdFx0aWYgKGlzVW5kKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50Ll9faW5Gb2N1c0NhY2hlKSkge1xuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5fX2luRm9jdXNDYWNoZSA9ICQod2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmlzKFxuXHRcdFx0XHRcdCdpbnB1dCx0ZXh0YXJlYSxpZnJhbWUsLmNrZV9lZGl0YWJsZSdcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICEhd2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuX19pbkZvY3VzQ2FjaGU7XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSW5Gb2N1cyhmb3JjZSkge1xuXHRpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgYWN0aXZlRWwgPSAkKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcblx0XHRcdGlmIChhY3RpdmVFbCAmJiBhY3RpdmVFbC5pcygnaW5wdXQsdGV4dGFyZWEnKSkge1xuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGZvcmNlKSB7XG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdH1cbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVNlbGVjdGlvbigpIHtcblx0dHJ5IHtcblx0XHRpZiAod2luZG93ICYmIHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcblx0XHRcdGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGlmIChzZWwgJiYgc2VsLnJlbW92ZUFsbFJhbmdlcykge1xuXHRcdFx0XHRzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LnNlbGVjdGlvbiAmJiB3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KSB7XG5cdFx0XHR3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBseVN1YmplY3RBZGQocHJlZml4LCBzdWJqZWN0KSB7XG5cdHByZWZpeCA9IHRyaW0ocHJlZml4LnRvVXBwZXJDYXNlKCkpO1xuXHRzdWJqZWN0ID0gdHJpbShzdWJqZWN0LnJlcGxhY2UoL1tcXHNdKy9nLCAnICcpKTtcblxuXHRsZXQgZHJvcCA9IGZhbHNlLFxuXHRcdHJlID0gJ1JFJyA9PT0gcHJlZml4LFxuXHRcdGZ3ZCA9ICdGV0QnID09PSBwcmVmaXg7XG5cblx0Y29uc3QgcGFydHMgPSBbXSxcblx0XHRwcmVmaXhJc1JlID0gIWZ3ZDtcblxuXHRpZiAoJycgIT09IHN1YmplY3QpIHtcblx0XHRfLmVhY2goc3ViamVjdC5zcGxpdCgnOicpLCAocGFydCkgPT4ge1xuXHRcdFx0Y29uc3QgdHJpbW1lZFBhcnQgPSB0cmltKHBhcnQpO1xuXHRcdFx0aWYgKCFkcm9wICYmICgvXihSRXxGV0QpJC9pLnRlc3QodHJpbW1lZFBhcnQpIHx8IC9eKFJFfEZXRClbWyhdW1xcZF0rW1xcXSldJC9pLnRlc3QodHJpbW1lZFBhcnQpKSkge1xuXHRcdFx0XHRpZiAoIXJlKSB7XG5cdFx0XHRcdFx0cmUgPSAhIS9eUkUvaS50ZXN0KHRyaW1tZWRQYXJ0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghZndkKSB7XG5cdFx0XHRcdFx0ZndkID0gISEvXkZXRC9pLnRlc3QodHJpbW1lZFBhcnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKHBhcnQpO1xuXHRcdFx0XHRkcm9wID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGlmIChwcmVmaXhJc1JlKSB7XG5cdFx0cmUgPSBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRmd2QgPSBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cmltKChwcmVmaXhJc1JlID8gJ1JlOiAnIDogJ0Z3ZDogJykgKyAocmUgPyAnUmU6ICcgOiAnJykgKyAoZndkID8gJ0Z3ZDogJyA6ICcnKSArIHRyaW0ocGFydHMuam9pbignOicpKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IG51bVxuICogQHBhcmFtIHtudW1iZXJ9IGRlY1xuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kTnVtYmVyKG51bSwgZGVjKSB7XG5cdHJldHVybiB3aW5kb3cuTWF0aC5yb3VuZChudW0gKiB3aW5kb3cuTWF0aC5wb3coMTAsIGRlYykpIC8gd2luZG93Lk1hdGgucG93KDEwLCBkZWMpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7KG51bWJlcnxzdHJpbmcpfSBzaXplSW5CeXRlc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyaWVuZGx5U2l6ZShzaXplSW5CeXRlcykge1xuXHRzaXplSW5CeXRlcyA9IHBJbnQoc2l6ZUluQnl0ZXMpO1xuXG5cdHN3aXRjaCAodHJ1ZSkge1xuXHRcdGNhc2UgMTA3Mzc0MTgyNCA8PSBzaXplSW5CeXRlczpcblx0XHRcdHJldHVybiByb3VuZE51bWJlcihzaXplSW5CeXRlcyAvIDEwNzM3NDE4MjQsIDEpICsgJ0dCJztcblx0XHRjYXNlIDEwNDg1NzYgPD0gc2l6ZUluQnl0ZXM6XG5cdFx0XHRyZXR1cm4gcm91bmROdW1iZXIoc2l6ZUluQnl0ZXMgLyAxMDQ4NTc2LCAxKSArICdNQic7XG5cdFx0Y2FzZSAxMDI0IDw9IHNpemVJbkJ5dGVzOlxuXHRcdFx0cmV0dXJuIHJvdW5kTnVtYmVyKHNpemVJbkJ5dGVzIC8gMTAyNCwgMCkgKyAnS0InO1xuXHRcdC8vIG5vIGRlZmF1bHRcblx0fVxuXG5cdHJldHVybiBzaXplSW5CeXRlcyArICdCJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nKGRlc2MpIHtcblx0aWYgKHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLmxvZykge1xuXHRcdHdpbmRvdy5jb25zb2xlLmxvZyhkZXNjKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7P30gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZVxuICogQHBhcmFtIHtBcnJheT19IHBhcmFtc1xuICogQHBhcmFtIHtudW1iZXI9fSBkZWxheSA9IDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGVnYXRlUnVuKG9iamVjdCwgbWV0aG9kTmFtZSwgcGFyYW1zLCBkZWxheSA9IDApIHtcblx0aWYgKG9iamVjdCAmJiBvYmplY3RbbWV0aG9kTmFtZV0pIHtcblx0XHRkZWxheSA9IHBJbnQoZGVsYXkpO1xuXHRcdHBhcmFtcyA9IGlzQXJyYXkocGFyYW1zKSA/IHBhcmFtcyA6IFtdO1xuXG5cdFx0aWYgKDAgPj0gZGVsYXkpIHtcblx0XHRcdG9iamVjdFttZXRob2ROYW1lXSguLi5wYXJhbXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0b2JqZWN0W21ldGhvZE5hbWVdKC4uLnBhcmFtcyk7XG5cdFx0XHR9LCBkZWxheSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHs/fSBldmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24ga2lsbEN0cmxBQ3RybFMoZXZlbnQpIHtcblx0ZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7XG5cdGlmIChldmVudCAmJiBldmVudC5jdHJsS2V5ICYmICFldmVudC5zaGlmdEtleSAmJiAhZXZlbnQuYWx0S2V5KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaDtcblx0XHRpZiAoa2V5ID09PSBFdmVudEtleUNvZGUuUykge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9IGVsc2UgaWYgKGtleSA9PT0gRXZlbnRLZXlDb2RlLkEpIHtcblx0XHRcdGNvbnN0IHNlbmRlciA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRzZW5kZXIgJiZcblx0XHRcdFx0KCd0cnVlJyA9PT0gJycgKyBzZW5kZXIuY29udGVudEVkaXRhYmxlIHx8IChzZW5kZXIudGFnTmFtZSAmJiBzZW5kZXIudGFnTmFtZS5tYXRjaCgvSU5QVVR8VEVYVEFSRUEvaSkpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcblx0XHRcdFx0d2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdFx0fSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uICYmIHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24uY2xlYXIpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5jbGVhcigpO1xuXHRcdFx0fVxuXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7KE9iamVjdHxudWxsfHVuZGVmaW5lZCl9IGNvbnRleHRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZFeGVjdXRlXG4gKiBAcGFyYW0geyhGdW5jdGlvbnxib29sZWFufG51bGwpPX0gZkNhbkV4ZWN1dGUgPSB0cnVlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21tYW5kTGVnYWN5KGNvbnRleHQsIGZFeGVjdXRlLCBmQ2FuRXhlY3V0ZSA9IHRydWUpIHtcblx0bGV0IGZSZXN1bHQgPSBudWxsO1xuXHRjb25zdCBmTm9uRW1wdHkgPSAoLi4uYXJncykgPT4ge1xuXHRcdGlmIChmUmVzdWx0ICYmIGZSZXN1bHQuY2FuRXhlY3V0ZSAmJiBmUmVzdWx0LmNhbkV4ZWN1dGUoKSkge1xuXHRcdFx0ZkV4ZWN1dGUuYXBwbHkoY29udGV4dCwgYXJncyk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHRmUmVzdWx0ID0gZkV4ZWN1dGUgPyBmTm9uRW1wdHkgOiBub29wO1xuXHRmUmVzdWx0LmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRmUmVzdWx0LmlzQ29tbWFuZCA9IHRydWU7XG5cblx0aWYgKGlzRnVuYyhmQ2FuRXhlY3V0ZSkpIHtcblx0XHRmUmVzdWx0LmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBmUmVzdWx0ICYmIGZSZXN1bHQuZW5hYmxlZCgpICYmIGZDYW5FeGVjdXRlLmNhbGwoY29udGV4dCkpO1xuXHR9IGVsc2Uge1xuXHRcdGZSZXN1bHQuY2FuRXhlY3V0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IGZSZXN1bHQgJiYgZlJlc3VsdC5lbmFibGVkKCkgJiYgISFmQ2FuRXhlY3V0ZSk7XG5cdH1cblxuXHRyZXR1cm4gZlJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhlbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0VGhlbWVOYW1lID0gXy5tZW1vaXplKCh0aGVtZSkgPT4ge1xuXHRpZiAoJ0BjdXN0b20nID09PSB0aGVtZS5zdWJzdHIoLTcpKSB7XG5cdFx0dGhlbWUgPSB0cmltKHRoZW1lLnN1YnN0cmluZygwLCB0aGVtZS5sZW5ndGggLSA3KSk7XG5cdH1cblxuXHRyZXR1cm4gdHJpbShcblx0XHR0aGVtZVxuXHRcdFx0LnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJyAnKVxuXHRcdFx0LnJlcGxhY2UoLyhbQS1aXSkvZywgJyAkMScpXG5cdFx0XHQucmVwbGFjZSgvW1xcc10rL2csICcgJylcblx0KTtcbn0pO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVvdGVOYW1lKG5hbWUpIHtcblx0cmV0dXJuIG5hbWUucmVwbGFjZSgvW1wiXS9nLCAnXFxcXFwiJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pY3JvdGltZSgpIHtcblx0cmV0dXJuIG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZXN0YW1wKCkge1xuXHRyZXR1cm4gd2luZG93Lk1hdGgucm91bmQobWljcm90aW1lKCkgLyAxMDAwKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0VuZyA9IGZhbHNlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydExhbmdOYW1lKGxhbmd1YWdlLCBpc0VuZyA9IGZhbHNlKSB7XG5cdHJldHVybiByZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG4oXG5cdFx0J0xBTkdTX05BTUVTJyArICh0cnVlID09PSBpc0VuZyA/ICdfRU4nIDogJycpICsgJy9MQU5HXycgKyBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJ18nKSxcblx0XHRudWxsLFxuXHRcdGxhbmd1YWdlXG5cdCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYWdnYWJsZVBsYWNlKCkge1xuXHRyZXR1cm4gJChcblx0XHQnPGRpdiBjbGFzcz1cImRyYWdnYWJsZVBsYWNlXCI+JyArXG5cdFx0XHQnPHNwYW4gY2xhc3M9XCJ0ZXh0XCI+PC9zcGFuPiZuYnNwOycgK1xuXHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1jb3B5IGljb24td2hpdGUgdmlzaWJsZS1vbi1jdHJsXCI+PC9pPicgK1xuXHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1tYWlsIGljb24td2hpdGUgaGlkZGVuLW9uLWN0cmxcIj48L2k+JyArXG5cdFx0XHQnPC9kaXY+J1xuXHQpLmFwcGVuZFRvKCcjcmwtaGlkZGVuJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRvbU9wdGlvblxuICogQHBhcmFtIHtvYmplY3R9IGl0ZW1cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyKGRvbUl0ZW0sIGl0ZW0pIHtcblx0aWYgKGl0ZW0gJiYgIWlzVW5kKGl0ZW0uZGlzYWJsZWQpICYmIGRvbUl0ZW0pIHtcblx0XHQkKGRvbUl0ZW0pXG5cdFx0XHQudG9nZ2xlQ2xhc3MoJ2Rpc2FibGVkJywgaXRlbS5kaXNhYmxlZClcblx0XHRcdC5wcm9wKCdkaXNhYmxlZCcsIGl0ZW0uZGlzYWJsZWQpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlXG4gKiBAcGFyYW0ge09iamVjdH0gYm9keVxuICogQHBhcmFtIHtib29sZWFufSBpc0h0bWxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJpbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQnFTd2l0Y2hlcihib2R5KSB7XG5cdGJvZHkuZmluZCgnYmxvY2txdW90ZS5ybC1icS1zd2l0Y2hlcicpLnJlbW92ZUNsYXNzKCdybC1icS1zd2l0Y2hlciBoaWRkZW4tYnEnKTtcblx0Ym9keVxuXHRcdC5maW5kKCcucmxCbG9ja3F1b3RlU3dpdGNoZXInKVxuXHRcdC5vZmYoJy5ybEJsb2NrcXVvdGVTd2l0Y2hlcicpXG5cdFx0LnJlbW92ZSgpO1xuXHRib2R5LmZpbmQoJ1tkYXRhLWh0bWwtZWRpdG9yLWZvbnQtd3JhcHBlcl0nKS5yZW1vdmVBdHRyKCdkYXRhLWh0bWwtZWRpdG9yLWZvbnQtd3JhcHBlcicpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBtZXNzYWdlRGF0YVxuICogQHBhcmFtIHtPYmplY3R9IGJvZHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIdG1sXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByaW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXZpZXdNZXNzYWdlKFxuXHR7IHRpdGxlLCBzdWJqZWN0LCBkYXRlLCBmcm9tQ3JlZHMsIHRvQ3JlZHMsIHRvTGFiZWwsIGNjQ2xhc3MsIGNjQ3JlZHMsIGNjTGFiZWwgfSxcblx0Ym9keSxcblx0aXNIdG1sLFxuXHRwcmludFxuKSB7XG5cdGNvbnN0IHdpbiA9IHdpbmRvdy5vcGVuKCcnKSxcblx0XHRkb2MgPSB3aW4uZG9jdW1lbnQsXG5cdFx0Ym9keUNsb25lID0gYm9keS5jbG9uZSgpLFxuXHRcdGJvZHlDbGFzcyA9IGlzSHRtbCA/ICdodG1sJyA6ICdwbGFpbic7XG5cblx0Y2xlYXJCcVN3aXRjaGVyKGJvZHlDbG9uZSk7XG5cblx0Y29uc3QgaHRtbCA9IGJvZHlDbG9uZSA/IGJvZHlDbG9uZS5odG1sKCkgOiAnJztcblxuXHRkb2Mud3JpdGUoXG5cdFx0ZGVNb2R1bGUocmVxdWlyZSgnSHRtbC9QcmV2aWV3TWVzc2FnZS5odG1sJykpXG5cdFx0XHQucmVwbGFjZSgne3t0aXRsZX19JywgZW5jb2RlSHRtbCh0aXRsZSkpXG5cdFx0XHQucmVwbGFjZSgne3tzdWJqZWN0fX0nLCBlbmNvZGVIdG1sKHN1YmplY3QpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7ZGF0ZX19JywgZW5jb2RlSHRtbChkYXRlKSlcblx0XHRcdC5yZXBsYWNlKCd7e2Zyb21DcmVkc319JywgZW5jb2RlSHRtbChmcm9tQ3JlZHMpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7dG9DcmVkc319JywgZW5jb2RlSHRtbCh0b0NyZWRzKSlcblx0XHRcdC5yZXBsYWNlKCd7e3RvTGFiZWx9fScsIGVuY29kZUh0bWwodG9MYWJlbCkpXG5cdFx0XHQucmVwbGFjZSgne3tjY0NsYXNzfX0nLCBlbmNvZGVIdG1sKGNjQ2xhc3MpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Y2NDcmVkc319JywgZW5jb2RlSHRtbChjY0NyZWRzKSlcblx0XHRcdC5yZXBsYWNlKCd7e2NjTGFiZWx9fScsIGVuY29kZUh0bWwoY2NMYWJlbCkpXG5cdFx0XHQucmVwbGFjZSgne3tib2R5Q2xhc3N9fScsIGJvZHlDbGFzcylcblx0XHRcdC5yZXBsYWNlKCd7e2h0bWx9fScsIGh0bWwpXG5cdCk7XG5cblx0ZG9jLmNsb3NlKCk7XG5cblx0aWYgKHByaW50KSB7XG5cdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4gd2luLnByaW50KCksIDEwMCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmQ2FsbGJhY2tcbiAqIEBwYXJhbSB7P30ga29UcmlnZ2VyXG4gKiBAcGFyYW0gez99IGNvbnRleHQgPSBudWxsXG4gKiBAcGFyYW0ge251bWJlcj19IHRpbWVyID0gMTAwMFxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NTYXZlSGVscGVyRnVuY3Rpb24oZkNhbGxiYWNrLCBrb1RyaWdnZXIsIGNvbnRleHQgPSBudWxsLCB0aW1lciA9IDEwMDApIHtcblx0dGltZXIgPSBwSW50KHRpbWVyKTtcblx0cmV0dXJuICh0eXBlLCBkYXRhLCBjYWNoZWQsIHJlcXVlc3RBY3Rpb24sIHJlcXVlc3RQYXJhbWV0ZXJzKSA9PiB7XG5cdFx0a29UcmlnZ2VyLmNhbGwoY29udGV4dCwgZGF0YSAmJiBkYXRhLlJlc3VsdCA/IFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdCA6IFNhdmVTZXR0aW5nc1N0ZXAuRmFsc2VSZXN1bHQpO1xuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjay5jYWxsKGNvbnRleHQsIHR5cGUsIGRhdGEsIGNhY2hlZCwgcmVxdWVzdEFjdGlvbiwgcmVxdWVzdFBhcmFtZXRlcnMpO1xuXHRcdH1cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGtvVHJpZ2dlci5jYWxsKGNvbnRleHQsIFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0fSwgdGltZXIpO1xuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBrb1RyaWdnZXJcbiAqIEBwYXJhbSB7bWl4ZWR9IGNvbnRleHRcbiAqIEByZXR1cm5zIHttaXhlZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKGtvVHJpZ2dlciwgY29udGV4dCkge1xuXHRyZXR1cm4gc2V0dGluZ3NTYXZlSGVscGVyRnVuY3Rpb24obnVsbCwga29UcmlnZ2VyLCBjb250ZXh0LCAxMDAwKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVtb3RlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2V0dGluZ05hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmVHJpZ2dlckZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc1NhdmVIZWxwZXJTdWJzY3JpYmVGdW5jdGlvbihyZW1vdGUsIHNldHRpbmdOYW1lLCB0eXBlLCBmVHJpZ2dlckZ1bmN0aW9uKSB7XG5cdHJldHVybiAodmFsdWUpID0+IHtcblx0XHRpZiAocmVtb3RlKSB7XG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRcdGNhc2UgJ2Jvb2xlYW4nOlxuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWUgPyAnMScgOiAnMCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2ludCc6XG5cdFx0XHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0XHRcdHZhbHVlID0gcEludCh2YWx1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3RyaW0nOlxuXHRcdFx0XHRcdHZhbHVlID0gdHJpbSh2YWx1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dmFsdWUgPSBwU3RyaW5nKHZhbHVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZGF0YSA9IHt9O1xuXHRcdFx0ZGF0YVtzZXR0aW5nTmFtZV0gPSB2YWx1ZTtcblxuXHRcdFx0aWYgKHJlbW90ZS5zYXZlQWRtaW5Db25maWcpIHtcblx0XHRcdFx0cmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmVHJpZ2dlckZ1bmN0aW9uIHx8IG51bGwsIGRhdGEpO1xuXHRcdFx0fSBlbHNlIGlmIChyZW1vdGUuc2F2ZVNldHRpbmdzKSB7XG5cdFx0XHRcdHJlbW90ZS5zYXZlU2V0dGluZ3MoZlRyaWdnZXJGdW5jdGlvbiB8fCBudWxsLCBkYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRW1haWxBbmRMaW5rcyhodG1sKSB7XG5cdHJldHVybiBBdXRvbGlua2VyXG5cdFx0PyBBdXRvbGlua2VyLmxpbmsoaHRtbCwge1xuXHRcdFx0XHRuZXdXaW5kb3c6IHRydWUsXG5cdFx0XHRcdHN0cmlwUHJlZml4OiBmYWxzZSxcblx0XHRcdFx0dXJsczogdHJ1ZSxcblx0XHRcdFx0ZW1haWw6IHRydWUsXG5cdFx0XHRcdG1lbnRpb246IGZhbHNlLFxuXHRcdFx0XHRwaG9uZTogZmFsc2UsXG5cdFx0XHRcdGhhc2h0YWc6IGZhbHNlLFxuXHRcdFx0XHRyZXBsYWNlRm46IGZ1bmN0aW9uKG1hdGNoKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEobWF0Y2ggJiYgJ3VybCcgPT09IG1hdGNoLmdldFR5cGUoKSAmJiBtYXRjaC5tYXRjaGVkVGV4dCAmJiAwICE9PSBtYXRjaC5tYXRjaGVkVGV4dC5pbmRleE9mKCdodHRwJykpO1xuXHRcdFx0XHR9XG5cdFx0ICB9KVxuXHRcdDogaHRtbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0bWxUb1BsYWluKGh0bWwpIHtcblx0bGV0IHBvcyA9IDAsXG5cdFx0bGltaXQgPSAwLFxuXHRcdGlQMSA9IDAsXG5cdFx0aVAyID0gMCxcblx0XHRpUDMgPSAwLFxuXHRcdHRleHQgPSAnJztcblxuXHRjb25zdCBjb252ZXJ0QmxvY2txdW90ZSA9IChibG9ja3F1b3RlVGV4dCkgPT4ge1xuXHRcdGJsb2NrcXVvdGVUZXh0ID0gJz4gJyArIHRyaW0oYmxvY2txdW90ZVRleHQpLnJlcGxhY2UoL1xcbi9nbSwgJ1xcbj4gJyk7XG5cdFx0cmV0dXJuIGJsb2NrcXVvdGVUZXh0LnJlcGxhY2UoLyhefFxcbikoWz4gXSspL2dtLCAoLi4uYXJncykgPT5cblx0XHRcdGFyZ3MgJiYgMiA8IGFyZ3MubGVuZ3RoID8gYXJnc1sxXSArIHRyaW0oYXJnc1syXS5yZXBsYWNlKC9bXFxzXS9nLCAnJykpICsgJyAnIDogJydcblx0XHQpO1xuXHR9O1xuXG5cdGNvbnN0IGNvbnZlcnREaXZzID0gKC4uLmFyZ3MpID0+IHtcblx0XHRpZiAoYXJncyAmJiAxIDwgYXJncy5sZW5ndGgpIHtcblx0XHRcdGxldCBkaXZUZXh0ID0gdHJpbShhcmdzWzFdKTtcblx0XHRcdGlmICgwIDwgZGl2VGV4dC5sZW5ndGgpIHtcblx0XHRcdFx0ZGl2VGV4dCA9IGRpdlRleHQucmVwbGFjZSgvPGRpdltePl0qPihbXFxzXFxTXFxyXFxuXSopPFxcL2Rpdj4vZ2ltLCBjb252ZXJ0RGl2cyk7XG5cdFx0XHRcdGRpdlRleHQgPSAnXFxuJyArIHRyaW0oZGl2VGV4dCkgKyAnXFxuJztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpdlRleHQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXG5cdGNvbnN0IGNvbnZlcnRQcmUgPSAoLi4uYXJncykgPT5cblx0XHRcdGFyZ3MgJiYgMSA8IGFyZ3MubGVuZ3RoXG5cdFx0XHRcdD8gYXJnc1sxXVxuXHRcdFx0XHRcdFx0LnRvU3RyaW5nKClcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC9bXFxuXS9nbSwgJzxiciAvPicpXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvW1xccl0vZ20sICcnKVxuXHRcdFx0XHQ6ICcnLFxuXHRcdGZpeEF0dGlidXRlVmFsdWUgPSAoLi4uYXJncykgPT4gKGFyZ3MgJiYgMSA8IGFyZ3MubGVuZ3RoID8gJycgKyBhcmdzWzFdICsgXy5lc2NhcGUoYXJnc1syXSkgOiAnJyksXG5cdFx0Y29udmVydExpbmtzID0gKC4uLmFyZ3MpID0+IChhcmdzICYmIDEgPCBhcmdzLmxlbmd0aCA/IHRyaW0oYXJnc1sxXSkgOiAnJyk7XG5cblx0dGV4dCA9IGh0bWxcblx0XHQucmVwbGFjZSgvPHBbXj5dKj48XFwvcD4vZ2ksICcnKVxuXHRcdC5yZXBsYWNlKC88cHJlW14+XSo+KFtcXHNcXFNcXHJcXG5cXHRdKik8XFwvcHJlPi9naW0sIGNvbnZlcnRQcmUpXG5cdFx0LnJlcGxhY2UoL1tcXHNdKy9nbSwgJyAnKVxuXHRcdC5yZXBsYWNlKC8oKD86aHJlZnxkYXRhKVxccz89XFxzPykoXCJbXlwiXSs/XCJ8J1teJ10rPycpL2dpbSwgZml4QXR0aWJ1dGVWYWx1ZSlcblx0XHQucmVwbGFjZSgvPGJyW14+XSo+L2dpbSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9oW1xcZF0+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL3A+L2dpLCAnXFxuXFxuJylcblx0XHQucmVwbGFjZSgvPHVsW14+XSo+L2dpbSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC91bD4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88bGlbXj5dKj4vZ2ltLCAnICogJylcblx0XHQucmVwbGFjZSgvPFxcL2xpPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC90ZD4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdHI+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPGhyW14+XSo+L2dpbSwgJ1xcbl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cXG5cXG4nKVxuXHRcdC5yZXBsYWNlKC88ZGl2W14+XSo+KFtcXHNcXFNcXHJcXG5dKik8XFwvZGl2Pi9naW0sIGNvbnZlcnREaXZzKVxuXHRcdC5yZXBsYWNlKC88YmxvY2txdW90ZVtePl0qPi9naW0sICdcXG5fX2JxX19zdGFydF9fXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL2Jsb2NrcXVvdGU+L2dpbSwgJ1xcbl9fYnFfX2VuZF9fXFxuJylcblx0XHQucmVwbGFjZSgvPGEgW14+XSo+KFtcXHNcXFNcXHJcXG5dKj8pPFxcL2E+L2dpbSwgY29udmVydExpbmtzKVxuXHRcdC5yZXBsYWNlKC88XFwvZGl2Pi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLyZuYnNwOy9naSwgJyAnKVxuXHRcdC5yZXBsYWNlKC8mcXVvdDsvZ2ksICdcIicpXG5cdFx0LnJlcGxhY2UoLzxbXj5dKj4vZ20sICcnKTtcblxuXHR0ZXh0ID0gJGRpdi5odG1sKHRleHQpLnRleHQoKTtcblxuXHR0ZXh0ID0gdGV4dFxuXHRcdC5yZXBsYWNlKC9cXG5bIFxcdF0rL2dtLCAnXFxuJylcblx0XHQucmVwbGFjZSgvW1xcbl17Myx9L2dtLCAnXFxuXFxuJylcblx0XHQucmVwbGFjZSgvJmd0Oy9naSwgJz4nKVxuXHRcdC5yZXBsYWNlKC8mbHQ7L2dpLCAnPCcpXG5cdFx0LnJlcGxhY2UoLyZhbXA7L2dpLCAnJicpO1xuXG5cdHRleHQgPSBzcGxpdFBsYWluVGV4dCh0ZXh0KTtcblxuXHRwb3MgPSAwO1xuXHRsaW1pdCA9IDgwMDtcblxuXHR3aGlsZSAoMCA8IGxpbWl0KSB7XG5cdFx0bGltaXQgLT0gMTtcblx0XHRpUDEgPSB0ZXh0LmluZGV4T2YoJ19fYnFfX3N0YXJ0X18nLCBwb3MpO1xuXHRcdGlmICgtMSA8IGlQMSkge1xuXHRcdFx0aVAyID0gdGV4dC5pbmRleE9mKCdfX2JxX19zdGFydF9fJywgaVAxICsgNSk7XG5cdFx0XHRpUDMgPSB0ZXh0LmluZGV4T2YoJ19fYnFfX2VuZF9fJywgaVAxICsgNSk7XG5cblx0XHRcdGlmICgoLTEgPT09IGlQMiB8fCBpUDMgPCBpUDIpICYmIGlQMSA8IGlQMykge1xuXHRcdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaVAxKSArIGNvbnZlcnRCbG9ja3F1b3RlKHRleHQuc3Vic3RyaW5nKGlQMSArIDEzLCBpUDMpKSArIHRleHQuc3Vic3RyaW5nKGlQMyArIDExKTtcblxuXHRcdFx0XHRwb3MgPSAwO1xuXHRcdFx0fSBlbHNlIGlmICgtMSA8IGlQMiAmJiBpUDIgPCBpUDMpIHtcblx0XHRcdFx0cG9zID0gaVAyIC0gMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBvcyA9IDA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHRleHQgPSB0ZXh0LnJlcGxhY2UoL19fYnFfX3N0YXJ0X18vZ20sICcnKS5yZXBsYWNlKC9fX2JxX19lbmRfXy9nbSwgJycpO1xuXG5cdHJldHVybiB0ZXh0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGFpblxuICogQHBhcmFtIHtib29sZWFufSBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA9IGZhbHNlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGxhaW5Ub0h0bWwocGxhaW4sIGZpbmRFbWFpbEFuZExpbmtzSW5UZXh0ID0gZmFsc2UpIHtcblx0cGxhaW4gPSBwbGFpbi50b1N0cmluZygpLnJlcGxhY2UoL1xcci9nLCAnJyk7XG5cdHBsYWluID0gcGxhaW4ucmVwbGFjZSgvXj5bPiBdPisvZ20sIChbbWF0Y2hdKSA9PiAobWF0Y2ggPyBtYXRjaC5yZXBsYWNlKC9bIF0rL2csICcnKSA6IG1hdGNoKSk7XG5cblx0bGV0IGJJbiA9IGZhbHNlLFxuXHRcdGJEbyA9IHRydWUsXG5cdFx0YlN0YXJ0ID0gdHJ1ZSxcblx0XHRhTmV4dFRleHQgPSBbXSxcblx0XHRzTGluZSA9ICcnLFxuXHRcdGlJbmRleCA9IDAsXG5cdFx0YVRleHQgPSBwbGFpbi5zcGxpdCgnXFxuJyk7XG5cblx0ZG8ge1xuXHRcdGJEbyA9IGZhbHNlO1xuXHRcdGFOZXh0VGV4dCA9IFtdO1xuXHRcdGZvciAoaUluZGV4ID0gMDsgaUluZGV4IDwgYVRleHQubGVuZ3RoOyBpSW5kZXgrKykge1xuXHRcdFx0c0xpbmUgPSBhVGV4dFtpSW5kZXhdO1xuXHRcdFx0YlN0YXJ0ID0gJz4nID09PSBzTGluZS5zdWJzdHIoMCwgMSk7XG5cdFx0XHRpZiAoYlN0YXJ0ICYmICFiSW4pIHtcblx0XHRcdFx0YkRvID0gdHJ1ZTtcblx0XHRcdFx0YkluID0gdHJ1ZTtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goJ35+fmJsb2NrcXVvdGV+fn4nKTtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUuc3Vic3RyKDEpKTtcblx0XHRcdH0gZWxzZSBpZiAoIWJTdGFydCAmJiBiSW4pIHtcblx0XHRcdFx0aWYgKCcnICE9PSBzTGluZSkge1xuXHRcdFx0XHRcdGJJbiA9IGZhbHNlO1xuXHRcdFx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn4vYmxvY2txdW90ZX5+ficpO1xuXHRcdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYlN0YXJ0ICYmIGJJbikge1xuXHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZS5zdWJzdHIoMSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChiSW4pIHtcblx0XHRcdGJJbiA9IGZhbHNlO1xuXHRcdFx0YU5leHRUZXh0LnB1c2goJ35+fi9ibG9ja3F1b3Rlfn5+Jyk7XG5cdFx0fVxuXG5cdFx0YVRleHQgPSBhTmV4dFRleHQ7XG5cdH0gd2hpbGUgKGJEbyk7XG5cblx0cGxhaW4gPSBhVGV4dC5qb2luKCdcXG4nKTtcblxuXHRwbGFpbiA9IHBsYWluXG5cdFx0Ly8gLnJlcGxhY2UoL35+flxcL2Jsb2NrcXVvdGV+fn5cXG5+fn5ibG9ja3F1b3Rlfn5+L2csICdcXG4nKVxuXHRcdC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG5cdFx0LnJlcGxhY2UoLz4vZywgJyZndDsnKVxuXHRcdC5yZXBsYWNlKC88L2csICcmbHQ7Jylcblx0XHQucmVwbGFjZSgvfn5+YmxvY2txdW90ZX5+fltcXHNdKi9nLCAnPGJsb2NrcXVvdGU+Jylcblx0XHQucmVwbGFjZSgvW1xcc10qfn5+XFwvYmxvY2txdW90ZX5+fi9nLCAnPC9ibG9ja3F1b3RlPicpXG5cdFx0LnJlcGxhY2UoL1xcbi9nLCAnPGJyIC8+Jyk7XG5cblx0cmV0dXJuIGZpbmRFbWFpbEFuZExpbmtzSW5UZXh0ID8gZmluZEVtYWlsQW5kTGlua3MocGxhaW4pIDogcGxhaW47XG59XG5cbndpbmRvd1sncmFpbmxvb3BfVXRpbHNfaHRtbFRvUGxhaW4nXSA9IGh0bWxUb1BsYWluOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxud2luZG93WydyYWlubG9vcF9VdGlsc19wbGFpblRvSHRtbCddID0gcGxhaW5Ub0h0bWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZG90LW5vdGF0aW9uXG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gYVN5c3RlbVxuICogQHBhcmFtIHtBcnJheX0gYUxpc3RcbiAqIEBwYXJhbSB7QXJyYXk9fSBhRGlzYWJsZWRcbiAqIEBwYXJhbSB7QXJyYXk9fSBhSGVhZGVyTGluZXNcbiAqIEBwYXJhbSB7P251bWJlcj19IGlVbkRlZXBcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBmRGlzYWJsZUNhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZlZpc2libGVDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGZSZW5hbWVDYWxsYmFja1xuICogQHBhcmFtIHtib29sZWFuPX0gYlN5c3RlbVxuICogQHBhcmFtIHtib29sZWFuPX0gYkJ1aWxkVW52aXNpYmxlXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkZXJMaXN0T3B0aW9uc0J1aWxkZXIoXG5cdGFTeXN0ZW0sXG5cdGFMaXN0LFxuXHRhRGlzYWJsZWQsXG5cdGFIZWFkZXJMaW5lcyxcblx0aVVuRGVlcCxcblx0ZkRpc2FibGVDYWxsYmFjayxcblx0ZlZpc2libGVDYWxsYmFjayxcblx0ZlJlbmFtZUNhbGxiYWNrLFxuXHRiU3lzdGVtLFxuXHRiQnVpbGRVbnZpc2libGVcbikge1xuXHRsZXQgLyoqXG5cdFx0ICogQHR5cGUgez9Gb2xkZXJNb2RlbH1cblx0XHQgKi9cblx0XHRvSXRlbSA9IG51bGwsXG5cdFx0YlNlcCA9IGZhbHNlLFxuXHRcdGlJbmRleCA9IDAsXG5cdFx0aUxlbiA9IDAsXG5cdFx0YVJlc3VsdCA9IFtdO1xuXG5cdGNvbnN0IHNEZWVwUHJlZml4ID0gJ1xcdTAwQTBcXHUwMEEwXFx1MDBBMCc7XG5cblx0YkJ1aWxkVW52aXNpYmxlID0gaXNVbmQoYkJ1aWxkVW52aXNpYmxlKSA/IGZhbHNlIDogISFiQnVpbGRVbnZpc2libGU7XG5cdGJTeXN0ZW0gPSAhaXNOb3JtYWwoYlN5c3RlbSkgPyAwIDwgYVN5c3RlbS5sZW5ndGggOiBiU3lzdGVtO1xuXHRpVW5EZWVwID0gIWlzTm9ybWFsKGlVbkRlZXApID8gMCA6IGlVbkRlZXA7XG5cdGZEaXNhYmxlQ2FsbGJhY2sgPSBpc05vcm1hbChmRGlzYWJsZUNhbGxiYWNrKSA/IGZEaXNhYmxlQ2FsbGJhY2sgOiBudWxsO1xuXHRmVmlzaWJsZUNhbGxiYWNrID0gaXNOb3JtYWwoZlZpc2libGVDYWxsYmFjaykgPyBmVmlzaWJsZUNhbGxiYWNrIDogbnVsbDtcblx0ZlJlbmFtZUNhbGxiYWNrID0gaXNOb3JtYWwoZlJlbmFtZUNhbGxiYWNrKSA/IGZSZW5hbWVDYWxsYmFjayA6IG51bGw7XG5cblx0aWYgKCFpc0FycmF5KGFEaXNhYmxlZCkpIHtcblx0XHRhRGlzYWJsZWQgPSBbXTtcblx0fVxuXG5cdGlmICghaXNBcnJheShhSGVhZGVyTGluZXMpKSB7XG5cdFx0YUhlYWRlckxpbmVzID0gW107XG5cdH1cblxuXHRmb3IgKGlJbmRleCA9IDAsIGlMZW4gPSBhSGVhZGVyTGluZXMubGVuZ3RoOyBpSW5kZXggPCBpTGVuOyBpSW5kZXgrKykge1xuXHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRpZDogYUhlYWRlckxpbmVzW2lJbmRleF1bMF0sXG5cdFx0XHRuYW1lOiBhSGVhZGVyTGluZXNbaUluZGV4XVsxXSxcblx0XHRcdHN5c3RlbTogZmFsc2UsXG5cdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0ZGlzYWJsZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblxuXHRiU2VwID0gdHJ1ZTtcblx0Zm9yIChpSW5kZXggPSAwLCBpTGVuID0gYVN5c3RlbS5sZW5ndGg7IGlJbmRleCA8IGlMZW47IGlJbmRleCsrKSB7XG5cdFx0b0l0ZW0gPSBhU3lzdGVtW2lJbmRleF07XG5cdFx0aWYgKGZWaXNpYmxlQ2FsbGJhY2sgPyBmVmlzaWJsZUNhbGxiYWNrKG9JdGVtKSA6IHRydWUpIHtcblx0XHRcdGlmIChiU2VwICYmIDAgPCBhUmVzdWx0Lmxlbmd0aCkge1xuXHRcdFx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0XHRcdGlkOiAnLS0tJyxcblx0XHRcdFx0XHRuYW1lOiAnLS0tJyxcblx0XHRcdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0XHRcdHNlcG9yYXRvcjogdHJ1ZSxcblx0XHRcdFx0XHRkaXNhYmxlZDogdHJ1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0YlNlcCA9IGZhbHNlO1xuXHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0aWQ6IG9JdGVtLmZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRuYW1lOiBmUmVuYW1lQ2FsbGJhY2sgPyBmUmVuYW1lQ2FsbGJhY2sob0l0ZW0pIDogb0l0ZW0ubmFtZSgpLFxuXHRcdFx0XHRzeXN0ZW06IHRydWUsXG5cdFx0XHRcdHNlcG9yYXRvcjogZmFsc2UsXG5cdFx0XHRcdGRpc2FibGVkOlxuXHRcdFx0XHRcdCFvSXRlbS5zZWxlY3RhYmxlIHx8XG5cdFx0XHRcdFx0LTEgPCBpbkFycmF5KG9JdGVtLmZ1bGxOYW1lUmF3LCBhRGlzYWJsZWQpIHx8XG5cdFx0XHRcdFx0KGZEaXNhYmxlQ2FsbGJhY2sgPyBmRGlzYWJsZUNhbGxiYWNrKG9JdGVtKSA6IGZhbHNlKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0YlNlcCA9IHRydWU7XG5cdGZvciAoaUluZGV4ID0gMCwgaUxlbiA9IGFMaXN0Lmxlbmd0aDsgaUluZGV4IDwgaUxlbjsgaUluZGV4KyspIHtcblx0XHRvSXRlbSA9IGFMaXN0W2lJbmRleF07XG5cdFx0Ly8gaWYgKG9JdGVtLnN1YlNjcmliZWQoKSB8fCAhb0l0ZW0uZXhpc3RlbiB8fCBiQnVpbGRVbnZpc2libGUpXG5cdFx0aWYgKFxuXHRcdFx0KG9JdGVtLnN1YlNjcmliZWQoKSB8fCAhb0l0ZW0uZXhpc3RlbiB8fCBiQnVpbGRVbnZpc2libGUpICYmXG5cdFx0XHQob0l0ZW0uc2VsZWN0YWJsZSB8fCBvSXRlbS5oYXNTdWJTY3JpYmVkU3ViZm9sZGVycygpKVxuXHRcdCkge1xuXHRcdFx0aWYgKGZWaXNpYmxlQ2FsbGJhY2sgPyBmVmlzaWJsZUNhbGxiYWNrKG9JdGVtKSA6IHRydWUpIHtcblx0XHRcdFx0aWYgKEZvbGRlclR5cGUuVXNlciA9PT0gb0l0ZW0udHlwZSgpIHx8ICFiU3lzdGVtIHx8IG9JdGVtLmhhc1N1YlNjcmliZWRTdWJmb2xkZXJzKCkpIHtcblx0XHRcdFx0XHRpZiAoYlNlcCAmJiAwIDwgYVJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRcdFx0XHRcdGlkOiAnLS0tJyxcblx0XHRcdFx0XHRcdFx0bmFtZTogJy0tLScsXG5cdFx0XHRcdFx0XHRcdHN5c3RlbTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHNlcG9yYXRvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ6IHRydWVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJTZXAgPSBmYWxzZTtcblx0XHRcdFx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0XHRcdFx0aWQ6IG9JdGVtLmZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdFx0bmFtZTpcblx0XHRcdFx0XHRcdFx0bmV3IHdpbmRvdy5BcnJheShvSXRlbS5kZWVwICsgMSAtIGlVbkRlZXApLmpvaW4oc0RlZXBQcmVmaXgpICtcblx0XHRcdFx0XHRcdFx0KGZSZW5hbWVDYWxsYmFjayA/IGZSZW5hbWVDYWxsYmFjayhvSXRlbSkgOiBvSXRlbS5uYW1lKCkpLFxuXHRcdFx0XHRcdFx0c3lzdGVtOiBmYWxzZSxcblx0XHRcdFx0XHRcdHNlcG9yYXRvcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRkaXNhYmxlZDpcblx0XHRcdFx0XHRcdFx0IW9JdGVtLnNlbGVjdGFibGUgfHxcblx0XHRcdFx0XHRcdFx0LTEgPCBpbkFycmF5KG9JdGVtLmZ1bGxOYW1lUmF3LCBhRGlzYWJsZWQpIHx8XG5cdFx0XHRcdFx0XHRcdChmRGlzYWJsZUNhbGxiYWNrID8gZkRpc2FibGVDYWxsYmFjayhvSXRlbSkgOiBmYWxzZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChvSXRlbS5zdWJTY3JpYmVkKCkgJiYgMCA8IG9JdGVtLnN1YkZvbGRlcnMoKS5sZW5ndGgpIHtcblx0XHRcdGFSZXN1bHQgPSBhUmVzdWx0LmNvbmNhdChcblx0XHRcdFx0Zm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdG9JdGVtLnN1YkZvbGRlcnMoKSxcblx0XHRcdFx0XHRhRGlzYWJsZWQsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0aVVuRGVlcCxcblx0XHRcdFx0XHRmRGlzYWJsZUNhbGxiYWNrLFxuXHRcdFx0XHRcdGZWaXNpYmxlQ2FsbGJhY2ssXG5cdFx0XHRcdFx0ZlJlbmFtZUNhbGxiYWNrLFxuXHRcdFx0XHRcdGJTeXN0ZW0sXG5cdFx0XHRcdFx0YkJ1aWxkVW52aXNpYmxlXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFSZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0RWxlbWVudChlbGVtZW50KSB7XG5cdGxldCBzZWwgPSBudWxsLFxuXHRcdHJhbmdlID0gbnVsbDtcblxuXHRpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuXHRcdHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cdFx0cmFuZ2UgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblx0XHRyYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG5cdFx0c2VsLmFkZFJhbmdlKHJhbmdlKTtcblx0fSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uKSB7XG5cdFx0cmFuZ2UgPSB3aW5kb3cuZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTtcblx0XHRyYW5nZS5tb3ZlVG9FbGVtZW50VGV4dChlbGVtZW50KTtcblx0XHRyYW5nZS5zZWxlY3QoKTtcblx0fVxufVxuXG5leHBvcnQgY29uc3QgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5ID0gXy5kZWJvdW5jZSgoKSA9PiB7XG5cdGRyb3Bkb3duVmlzaWJpbGl0eSghIV8uZmluZChHbG9iYWxzRGF0YS5hQm9vdHN0cmFwRHJvcGRvd25zLCAoaXRlbSkgPT4gaXRlbS5oYXNDbGFzcygnb3BlbicpKSk7XG59LCA1MCk7XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFuPX0gZGVsYXkgPSBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlKGRlbGF5ID0gZmFsc2UpIHtcblx0Y29uc3QgZkZ1bmMgPSAoKSA9PiB7XG5cdFx0JCgnLmNoZWNrQXV0b2NvbXBsZXRlJykudHJpZ2dlcignY2hhbmdlJyk7XG5cdH07XG5cblx0aWYgKGRlbGF5KSB7XG5cdFx0Xy5kZWxheShmRnVuYywgMTAwKTtcblx0fSBlbHNlIHtcblx0XHRmRnVuYygpO1xuXHR9XG59XG5cbmNvbnN0IGNvbmZpZ3VyYXRpb25TY3JpcHRUYWdDYWNoZSA9IHt9O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlndXJhdGlvbkZyb21TY3JpcHRUYWcoY29uZmlndXJhdGlvbikge1xuXHRpZiAoIWNvbmZpZ3VyYXRpb25TY3JpcHRUYWdDYWNoZVtjb25maWd1cmF0aW9uXSkge1xuXHRcdGNvbmZpZ3VyYXRpb25TY3JpcHRUYWdDYWNoZVtjb25maWd1cmF0aW9uXSA9ICQoXG5cdFx0XHQnc2NyaXB0W3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdW2RhdGEtY29uZmlndXJhdGlvbj1cIicgKyBjb25maWd1cmF0aW9uICsgJ1wiXSdcblx0XHQpO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0udGV4dCgpKTtcblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge21peGVkfSBtUHJvcE9yVmFsdWVcbiAqIEBwYXJhbSB7bWl4ZWR9IHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlT25lKHByb3BPclZhbHVlLCB2YWx1ZSkge1xuXHRjb25zdCBkaXNwb3NhYmxlID0gdmFsdWUgfHwgcHJvcE9yVmFsdWU7XG5cdGlmIChkaXNwb3NhYmxlICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBkaXNwb3NhYmxlLmRpc3Bvc2UpIHtcblx0XHRkaXNwb3NhYmxlLmRpc3Bvc2UoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VPYmplY3Qob2JqZWN0KSB7XG5cdGlmIChvYmplY3QpIHtcblx0XHRpZiAoaXNBcnJheShvYmplY3QuZGlzcG9zYWJsZXMpKSB7XG5cdFx0XHRfLmVhY2gob2JqZWN0LmRpc3Bvc2FibGVzLCBkaXNwb3NlT25lKTtcblx0XHR9XG5cblx0XHRrby51dGlscy5vYmplY3RGb3JFYWNoKG9iamVjdCwgZGlzcG9zZU9uZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqZWN0T3JPYmplY3RzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGVnYXRlUnVuT25EZXN0cm95KG9iamVjdE9yT2JqZWN0cykge1xuXHRpZiAob2JqZWN0T3JPYmplY3RzKSB7XG5cdFx0aWYgKGlzQXJyYXkob2JqZWN0T3JPYmplY3RzKSkge1xuXHRcdFx0Xy5lYWNoKG9iamVjdE9yT2JqZWN0cywgKGl0ZW0pID0+IHtcblx0XHRcdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3koaXRlbSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKG9iamVjdE9yT2JqZWN0cyAmJiBvYmplY3RPck9iamVjdHMub25EZXN0cm95KSB7XG5cdFx0XHRvYmplY3RPck9iamVjdHMub25EZXN0cm95KCk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9ICRzdHlsZVRhZ1xuICogQHBhcmFtIHtzdHJpbmd9IGNzc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRTdHlsZXMoJHN0eWxlVGFnLCBjc3MpIHtcblx0aWYgKCRzdHlsZVRhZyAmJiAkc3R5bGVUYWdbMF0pIHtcblx0XHRpZiAoJHN0eWxlVGFnWzBdLnN0eWxlU2hlZXQgJiYgIWlzVW5kKCRzdHlsZVRhZ1swXS5zdHlsZVNoZWV0LmNzc1RleHQpKSB7XG5cdFx0XHQkc3R5bGVUYWdbMF0uc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkc3R5bGVUYWcudGV4dChjc3MpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5sZXQgX190aGVtZVRpbWVyID0gMCxcblx0X190aGVtZUFqYXggPSBudWxsO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbj19IHRoZW1lVHJpZ2dlciA9IG5vb3BcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlVGhlbWUodmFsdWUsIHRoZW1lVHJpZ2dlciA9IG5vb3ApIHtcblx0Y29uc3QgdGhlbWVMaW5rID0gJCgnI2FwcC10aGVtZS1saW5rJyksXG5cdFx0Y2xlYXJUaW1lciA9ICgpID0+IHtcblx0XHRcdF9fdGhlbWVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoZW1lVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLklkbGUpLCAxMDAwKTtcblx0XHRcdF9fdGhlbWVBamF4ID0gbnVsbDtcblx0XHR9O1xuXG5cdGxldCB0aGVtZVN0eWxlID0gJCgnI2FwcC10aGVtZS1zdHlsZScpLFxuXHRcdHVybCA9IHRoZW1lTGluay5hdHRyKCdocmVmJyk7XG5cblx0aWYgKCF1cmwpIHtcblx0XHR1cmwgPSB0aGVtZVN0eWxlLmF0dHIoJ2RhdGEtaHJlZicpO1xuXHR9XG5cblx0aWYgKHVybCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpLnJlcGxhY2UoL1xcLy1cXC9bXi9dK1xcLy1cXC8vLCAnLy0vJyArIHZhbHVlICsgJy8tLycpO1xuXHRcdHVybCA9IHVybC5yZXBsYWNlKC9cXC9Dc3NcXC9bXi9dK1xcL1VzZXJcXC8vLCAnL0Nzcy8wL1VzZXIvJyk7XG5cdFx0dXJsID0gdXJsLnJlcGxhY2UoL1xcL0hhc2hcXC9bXi9dK1xcLy8sICcvSGFzaC8tLycpO1xuXG5cdFx0aWYgKCdKc29uLycgIT09IHVybC5zdWJzdHJpbmcodXJsLmxlbmd0aCAtIDUsIHVybC5sZW5ndGgpKSB7XG5cdFx0XHR1cmwgKz0gJ0pzb24vJztcblx0XHR9XG5cblx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KF9fdGhlbWVUaW1lcik7XG5cblx0XHR0aGVtZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5BbmltYXRlKTtcblxuXHRcdGlmIChfX3RoZW1lQWpheCAmJiBfX3RoZW1lQWpheC5hYm9ydCkge1xuXHRcdFx0X190aGVtZUFqYXguYWJvcnQoKTtcblx0XHR9XG5cblx0XHRfX3RoZW1lQWpheCA9ICQuYWpheCh7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdGRhdGFUeXBlOiAnanNvbidcblx0XHR9KVxuXHRcdFx0LnRoZW4oKGRhdGEpID0+IHtcblx0XHRcdFx0aWYgKGRhdGEgJiYgaXNBcnJheShkYXRhKSAmJiAyID09PSBkYXRhLmxlbmd0aCkge1xuXHRcdFx0XHRcdGlmICh0aGVtZUxpbmsgJiYgdGhlbWVMaW5rWzBdICYmICghdGhlbWVTdHlsZSB8fCAhdGhlbWVTdHlsZVswXSkpIHtcblx0XHRcdFx0XHRcdHRoZW1lU3R5bGUgPSAkKCc8c3R5bGUgaWQ9XCJhcHAtdGhlbWUtc3R5bGVcIj48L3N0eWxlPicpO1xuXHRcdFx0XHRcdFx0dGhlbWVMaW5rLmFmdGVyKHRoZW1lU3R5bGUpO1xuXHRcdFx0XHRcdFx0dGhlbWVMaW5rLnJlbW92ZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICh0aGVtZVN0eWxlICYmIHRoZW1lU3R5bGVbMF0pIHtcblx0XHRcdFx0XHRcdGlmIChhcHBlbmRTdHlsZXModGhlbWVTdHlsZSwgZGF0YVsxXSkpIHtcblx0XHRcdFx0XHRcdFx0dGhlbWVTdHlsZS5hdHRyKCdkYXRhLWhyZWYnLCB1cmwpLmF0dHIoJ2RhdGEtdGhlbWUnLCBkYXRhWzBdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGVtZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC50aGVuKGNsZWFyVGltZXIsIGNsZWFyVGltZXIpO1xuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWRQYWdlbmF0b3JIZWxwZXIoa29DdXJyZW50UGFnZSwga29QYWdlQ291bnQpIHtcblx0cmV0dXJuICgpID0+IHtcblx0XHRjb25zdCBjdXJyZW50UGFnZSA9IGtvQ3VycmVudFBhZ2UoKSxcblx0XHRcdHBhZ2VDb3VudCA9IGtvUGFnZUNvdW50KCksXG5cdFx0XHRyZXN1bHQgPSBbXSxcblx0XHRcdGZBZGQgPSAoaW5kZXgsIHB1c2ggPSB0cnVlLCBjdXN0b21OYW1lID0gJycpID0+IHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdFx0XHRjdXJyZW50OiBpbmRleCA9PT0gY3VycmVudFBhZ2UsXG5cdFx0XHRcdFx0bmFtZTogJycgPT09IGN1c3RvbU5hbWUgPyBpbmRleC50b1N0cmluZygpIDogY3VzdG9tTmFtZS50b1N0cmluZygpLFxuXHRcdFx0XHRcdGN1c3RvbTogJycgIT09IGN1c3RvbU5hbWUsXG5cdFx0XHRcdFx0dGl0bGU6ICcnID09PSBjdXN0b21OYW1lID8gJycgOiBpbmRleC50b1N0cmluZygpLFxuXHRcdFx0XHRcdHZhbHVlOiBpbmRleC50b1N0cmluZygpXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKHB1c2gpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChkYXRhKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQudW5zaGlmdChkYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGxldCBwcmV2ID0gMCxcblx0XHRcdG5leHQgPSAwLFxuXHRcdFx0bGltaXQgPSAyO1xuXG5cdFx0aWYgKDEgPCBwYWdlQ291bnQgfHwgKDAgPCBwYWdlQ291bnQgJiYgcGFnZUNvdW50IDwgY3VycmVudFBhZ2UpKSB7XG5cdFx0XHRpZiAocGFnZUNvdW50IDwgY3VycmVudFBhZ2UpIHtcblx0XHRcdFx0ZkFkZChwYWdlQ291bnQpO1xuXHRcdFx0XHRwcmV2ID0gcGFnZUNvdW50O1xuXHRcdFx0XHRuZXh0ID0gcGFnZUNvdW50O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKDMgPj0gY3VycmVudFBhZ2UgfHwgcGFnZUNvdW50IC0gMiA8PSBjdXJyZW50UGFnZSkge1xuXHRcdFx0XHRcdGxpbWl0ICs9IDI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmQWRkKGN1cnJlbnRQYWdlKTtcblx0XHRcdFx0cHJldiA9IGN1cnJlbnRQYWdlO1xuXHRcdFx0XHRuZXh0ID0gY3VycmVudFBhZ2U7XG5cdFx0XHR9XG5cblx0XHRcdHdoaWxlICgwIDwgbGltaXQpIHtcblx0XHRcdFx0cHJldiAtPSAxO1xuXHRcdFx0XHRuZXh0ICs9IDE7XG5cblx0XHRcdFx0aWYgKDAgPCBwcmV2KSB7XG5cdFx0XHRcdFx0ZkFkZChwcmV2LCBmYWxzZSk7XG5cdFx0XHRcdFx0bGltaXQgLT0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwYWdlQ291bnQgPj0gbmV4dCkge1xuXHRcdFx0XHRcdGZBZGQobmV4dCwgdHJ1ZSk7XG5cdFx0XHRcdFx0bGltaXQgLT0gMTtcblx0XHRcdFx0fSBlbHNlIGlmICgwID49IHByZXYpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoMyA9PT0gcHJldikge1xuXHRcdFx0XHRmQWRkKDIsIGZhbHNlKTtcblx0XHRcdH0gZWxzZSBpZiAoMyA8IHByZXYpIHtcblx0XHRcdFx0ZkFkZChNYXRoLnJvdW5kKChwcmV2IC0gMSkgLyAyKSwgZmFsc2UsICcuLi4nKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhZ2VDb3VudCAtIDIgPT09IG5leHQpIHtcblx0XHRcdFx0ZkFkZChwYWdlQ291bnQgLSAxLCB0cnVlKTtcblx0XHRcdH0gZWxzZSBpZiAocGFnZUNvdW50IC0gMiA+IG5leHQpIHtcblx0XHRcdFx0ZkFkZChNYXRoLnJvdW5kKChwYWdlQ291bnQgKyBuZXh0KSAvIDIpLCB0cnVlLCAnLi4uJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZpcnN0IGFuZCBsYXN0XG5cdFx0XHRpZiAoMSA8IHByZXYpIHtcblx0XHRcdFx0ZkFkZCgxLCBmYWxzZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwYWdlQ291bnQgPiBuZXh0KSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50LCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWUpIHtcblx0ZmlsZU5hbWUgPSB0cmltKGZpbGVOYW1lKS50b0xvd2VyQ2FzZSgpO1xuXG5cdGNvbnN0IHJlc3VsdCA9IGZpbGVOYW1lLnNwbGl0KCcuJykucG9wKCk7XG5cdHJldHVybiByZXN1bHQgPT09IGZpbGVOYW1lID8gJycgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWltZUNvbnRlbnRUeXBlKGZpbGVOYW1lKSB7XG5cdGxldCBleHQgPSAnJyxcblx0XHRyZXN1bHQgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcblxuXHRmaWxlTmFtZSA9IHRyaW0oZmlsZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG5cblx0aWYgKCd3aW5tYWlsLmRhdCcgPT09IGZpbGVOYW1lKSB7XG5cdFx0cmV0dXJuICdhcHBsaWNhdGlvbi9tcy10bmVmJztcblx0fVxuXG5cdGV4dCA9IGdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWUpO1xuXHRpZiAoZXh0ICYmIDAgPCBleHQubGVuZ3RoICYmICFpc1VuZChNaW1lW2V4dF0pKSB7XG5cdFx0cmVzdWx0ID0gTWltZVtleHRdO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUcmFuc3BhcmVudChjb2xvcikge1xuXHRyZXR1cm4gJ3JnYmEoMCwgMCwgMCwgMCknID09PSBjb2xvciB8fCAndHJhbnNwYXJlbnQnID09PSBjb2xvcjtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gJGVsXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVhbEhlaWdodCgkZWwpIHtcblx0JGVsXG5cdFx0LmNsb25lKClcblx0XHQuc2hvdygpXG5cdFx0LmFwcGVuZFRvKCRoY29udCk7XG5cdGNvbnN0IHJlc3VsdCA9ICRoY29udC5oZWlnaHQoKTtcblx0JGhjb250LmVtcHR5KCk7XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmQ2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUFuZENyb3AodXJsLCB2YWx1ZSwgZkNhbGxiYWNrKSB7XG5cdGNvbnN0IGltZyA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcblx0aW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRcdGxldCBkaWZmID0gWzAsIDBdO1xuXG5cdFx0Y29uc3QgY2FudmFzID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuXHRcdFx0Y3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cblx0XHRjYW52YXMud2lkdGggPSB2YWx1ZTtcblx0XHRjYW52YXMuaGVpZ2h0ID0gdmFsdWU7XG5cblx0XHRpZiAodGhpcy53aWR0aCA+IHRoaXMuaGVpZ2h0KSB7XG5cdFx0XHRkaWZmID0gW3RoaXMud2lkdGggLSB0aGlzLmhlaWdodCwgMF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpZmYgPSBbMCwgdGhpcy5oZWlnaHQgLSB0aGlzLndpZHRoXTtcblx0XHR9XG5cblx0XHRjdHguZmlsbFN0eWxlID0gJyNmZmYnO1xuXHRcdGN0eC5maWxsUmVjdCgwLCAwLCB2YWx1ZSwgdmFsdWUpO1xuXHRcdGN0eC5kcmF3SW1hZ2UodGhpcywgZGlmZlswXSAvIDIsIGRpZmZbMV0gLyAyLCB0aGlzLndpZHRoIC0gZGlmZlswXSwgdGhpcy5oZWlnaHQgLSBkaWZmWzFdLCAwLCAwLCB2YWx1ZSwgdmFsdWUpO1xuXG5cdFx0ZkNhbGxiYWNrKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKSk7XG5cdH07XG5cblx0aW1nLnNyYyA9IHVybDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFpbFRvVXJsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBQb3B1cENvbXBvc2VWaWV3TW9kZWxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFpbFRvSGVscGVyKG1haWxUb1VybCwgUG9wdXBDb21wb3NlVmlld01vZGVsKSB7XG5cdGlmIChcblx0XHRtYWlsVG9VcmwgJiZcblx0XHQnbWFpbHRvOicgPT09XG5cdFx0XHRtYWlsVG9Vcmxcblx0XHRcdFx0LnRvU3RyaW5nKClcblx0XHRcdFx0LnN1YnN0cigwLCA3KVxuXHRcdFx0XHQudG9Mb3dlckNhc2UoKVxuXHQpIHtcblx0XHRpZiAoIVBvcHVwQ29tcG9zZVZpZXdNb2RlbCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bWFpbFRvVXJsID0gbWFpbFRvVXJsLnRvU3RyaW5nKCkuc3Vic3RyKDcpO1xuXG5cdFx0bGV0IHRvID0gW10sXG5cdFx0XHRjYyA9IG51bGwsXG5cdFx0XHRiY2MgPSBudWxsLFxuXHRcdFx0cGFyYW1zID0ge307XG5cblx0XHRjb25zdCBlbWFpbCA9IG1haWxUb1VybC5yZXBsYWNlKC9cXD8uKyQvLCAnJyksXG5cdFx0XHRxdWVyeSA9IG1haWxUb1VybC5yZXBsYWNlKC9eW14/XSpcXD8vLCAnJyksXG5cdFx0XHRFbWFpbE1vZGVsID0gcmVxdWlyZSgnTW9kZWwvRW1haWwnKS5kZWZhdWx0O1xuXG5cdFx0cGFyYW1zID0gc2ltcGxlUXVlcnlQYXJzZXIocXVlcnkpO1xuXG5cdFx0aWYgKCFpc1VuZChwYXJhbXMudG8pKSB7XG5cdFx0XHR0byA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KGVtYWlsICsgJywnICsgcGFyYW1zLnRvKSk7XG5cdFx0XHR0byA9IF8udmFsdWVzKFxuXHRcdFx0XHR0by5yZWR1Y2UoKHJlc3VsdCwgdmFsdWUpID0+IHtcblx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdGlmIChyZXN1bHRbdmFsdWUuZW1haWxdKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghcmVzdWx0W3ZhbHVlLmVtYWlsXS5uYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0W3ZhbHVlLmVtYWlsXSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRbdmFsdWUuZW1haWxdID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH0sIHt9KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dG8gPSBFbWFpbE1vZGVsLnBhcnNlRW1haWxMaW5lKGVtYWlsKTtcblx0XHR9XG5cblx0XHRpZiAoIWlzVW5kKHBhcmFtcy5jYykpIHtcblx0XHRcdGNjID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLmNjKSk7XG5cdFx0fVxuXG5cdFx0aWYgKCFpc1VuZChwYXJhbXMuYmNjKSkge1xuXHRcdFx0YmNjID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLmJjYykpO1xuXHRcdH1cblxuXHRcdHJlcXVpcmUoJ0tub2luL0tub2luJykuc2hvd1NjcmVlblBvcHVwKFBvcHVwQ29tcG9zZVZpZXdNb2RlbCwgW1xuXHRcdFx0Q29tcG9zZVR5cGUuRW1wdHksXG5cdFx0XHRudWxsLFxuXHRcdFx0dG8sXG5cdFx0XHRjYyxcblx0XHRcdGJjYyxcblx0XHRcdGlzVW5kKHBhcmFtcy5zdWJqZWN0KSA/IG51bGwgOiBwU3RyaW5nKGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMuc3ViamVjdCkpLFxuXHRcdFx0aXNVbmQocGFyYW1zLmJvZHkpID8gbnVsbCA6IHBsYWluVG9IdG1sKHBTdHJpbmcoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5ib2R5KSkpXG5cdFx0XSk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb21SZWFkeShmbikge1xuXHQkKCgpID0+IGZuKCkpO1xuXHQvL1xuXHQvL1x0aWYgKCdsb2FkaW5nJyAhPT0gd2luZG93LmRvY3VtZW50LnJlYWR5U3RhdGUpXG5cdC8vXHR7XG5cdC8vXHRcdGZuKCk7XG5cdC8vXHR9XG5cdC8vXHRlbHNlXG5cdC8vXHR7XG5cdC8vXHRcdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZm4pO1xuXHQvL1x0fVxufVxuXG5leHBvcnQgY29uc3Qgd2luZG93UmVzaXplID0gXy5kZWJvdW5jZSgodGltZW91dCkgPT4ge1xuXHRpZiAoaXNVbmQodGltZW91dCkgfHwgaXNOdWxsKHRpbWVvdXQpKSB7XG5cdFx0JHdpbi5yZXNpemUoKTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHQkd2luLnJlc2l6ZSgpO1xuXHRcdH0sIHRpbWVvdXQpO1xuXHR9XG59LCA1MCk7XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dSZXNpemVDYWxsYmFjaygpIHtcblx0d2luZG93UmVzaXplKCk7XG59XG5cbmxldCBzdWJzdHIgPSB3aW5kb3cuU3RyaW5nLnN1YnN0cjtcbmlmICgnYicgIT09ICdhYicuc3Vic3RyKC0xKSkge1xuXHRzdWJzdHIgPSAoc3RyLCBzdGFydCwgbGVuZ3RoKSA9PiB7XG5cdFx0c3RhcnQgPSAwID4gc3RhcnQgPyBzdHIubGVuZ3RoICsgc3RhcnQgOiBzdGFydDtcblx0XHRyZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuZ3RoKTtcblx0fTtcblxuXHR3aW5kb3cuU3RyaW5nLnN1YnN0ciA9IHN1YnN0cjtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93Ll87IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3c7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgaXNVbmQsIGlzTm9ybWFsLCBpc0FycmF5LCBpbkFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxubGV0IFNFVFRJTkdTID0gd2luZG93Ll9fcmxhaF9kYXRhKCkgfHwgbnVsbDtcblNFVFRJTkdTID0gaXNOb3JtYWwoU0VUVElOR1MpID8gU0VUVElOR1MgOiB7fTtcblxubGV0IEFQUF9TRVRUSU5HUyA9IFNFVFRJTkdTLlN5c3RlbSB8fCBudWxsO1xuQVBQX1NFVFRJTkdTID0gaXNOb3JtYWwoQVBQX1NFVFRJTkdTKSA/IEFQUF9TRVRUSU5HUyA6IHt9O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzR2V0KG5hbWUpIHtcblx0cmV0dXJuIGlzVW5kKFNFVFRJTkdTW25hbWVdKSA/IG51bGwgOiBTRVRUSU5HU1tuYW1lXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NTZXQobmFtZSwgdmFsdWUpIHtcblx0U0VUVElOR1NbbmFtZV0gPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBTZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBpc1VuZChBUFBfU0VUVElOR1NbbmFtZV0pID8gbnVsbCA6IEFQUF9TRVRUSU5HU1tuYW1lXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXBhKG5hbWUpIHtcblx0Y29uc3QgdmFsdWVzID0gc2V0dGluZ3NHZXQoJ0NhcGEnKTtcblx0cmV0dXJuIGlzQXJyYXkodmFsdWVzKSAmJiBpc05vcm1hbChuYW1lKSAmJiAtMSA8IGluQXJyYXkobmFtZSwgdmFsdWVzKTtcbn1cbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5jb25zdCAkd2luID0gJCh3aW5kb3cpO1xuJHdpbi5fX3NpemVzID0gWzAsIDBdO1xuXG5leHBvcnQgeyAkd2luIH07XG5cbmV4cG9ydCBjb25zdCAkZG9jID0gJCh3aW5kb3cuZG9jdW1lbnQpO1xuXG5leHBvcnQgY29uc3QgJGh0bWwgPSAkKCdodG1sJyk7XG5cbmV4cG9ydCBjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblxuZXhwb3J0IGNvbnN0ICRkaXYgPSAkKCc8ZGl2PjwvZGl2PicpO1xuXG5leHBvcnQgY29uc3QgJGhjb250ID0gJCgnPGRpdj48L2Rpdj4nKTtcbiRoY29udFxuXHQuYXR0cignYXJlYScsICdoaWRkZW4nKVxuXHQuY3NzKHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIGxlZnQ6IC01MDAwIH0pXG5cdC5hcHBlbmRUbygkYm9keSk7XG5cbmV4cG9ydCBjb25zdCBzdGFydE1pY3JvdGltZSA9IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcblxuLyoqXG4gKiBAdHlwZSB7P31cbiAqL1xuZXhwb3J0IGNvbnN0IGRyb3Bkb3duVmlzaWJpbGl0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHJhdGVMaW1pdDogMCB9KTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUtleWJvYXJkU2hvcnRjdXRzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3Qgc1VzZXJBZ2VudCA9XG5cdCgnbmF2aWdhdG9yJyBpbiB3aW5kb3cgJiYgJ3VzZXJBZ2VudCcgaW4gd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKSB8fCAnJztcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJJRSA9IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdtc2llJyk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiQ2hyb21lID0gLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ2Nocm9tZScpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYlNhZmFyaSA9ICFiQ2hyb21lICYmIC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdzYWZhcmknKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJNb2JpbGVEZXZpY2UgPVxuXHQoL2FuZHJvaWQvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwaG9uZS9pKS50ZXN0KHNVc2VyQWdlbnQpIHx8XG5cdCgvaXBvZC9pKS50ZXN0KHNVc2VyQWdlbnQpIHx8XG5cdCgvaXBhZC9pKS50ZXN0KHNVc2VyQWdlbnQpIHx8XG5cdCgvYmxhY2tiZXJyeS9pKS50ZXN0KHNVc2VyQWdlbnQpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYkRpc2FibGVOYW5vU2Nyb2xsID0gYk1vYmlsZURldmljZTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJBbmltYXRpb25TdXBwb3J0ZWQgPVxuXHQhYk1vYmlsZURldmljZSAmJiAkaHRtbC5oYXNDbGFzcygnY3NzdHJhbnNpdGlvbnMnKSAmJiAkaHRtbC5oYXNDbGFzcygnY3NzYW5pbWF0aW9ucycpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYlhNTEh0dHBSZXF1ZXN0U3VwcG9ydGVkID0gISF3aW5kb3cuWE1MSHR0cFJlcXVlc3Q7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiSXNIdHRwcyA9XG5cdHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQubG9jYXRpb24gPyAnaHR0cHM6JyA9PT0gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sIDogZmFsc2U7XG5cbi8qKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxFZGl0b3JEZWZhdWx0Q29uZmlnID0ge1xuXHQndGl0bGUnOiBmYWxzZSxcblx0J3N0eWxlc1NldCc6IGZhbHNlLFxuXHQnY3VzdG9tQ29uZmlnJzogJycsXG5cdCdjb250ZW50c0Nzcyc6ICcnLFxuXHQndG9vbGJhckdyb3Vwcyc6IFtcblx0XHR7IG5hbWU6ICdzcGVjJyB9LFxuXHRcdHsgbmFtZTogJ3N0eWxlcycgfSxcblx0XHR7IG5hbWU6ICdiYXNpY3N0eWxlcycsIGdyb3VwczogWydiYXNpY3N0eWxlcycsICdjbGVhbnVwJywgJ2JpZGknXSB9LFxuXHRcdHsgbmFtZTogJ2NvbG9ycycgfSxcblx0XHRiTW9iaWxlRGV2aWNlID8ge30gOiB7IG5hbWU6ICdwYXJhZ3JhcGgnLCBncm91cHM6IFsnbGlzdCcsICdpbmRlbnQnLCAnYmxvY2tzJywgJ2FsaWduJ10gfSxcblx0XHR7IG5hbWU6ICdsaW5rcycgfSxcblx0XHR7IG5hbWU6ICdpbnNlcnQnIH0sXG5cdFx0eyBuYW1lOiAnZG9jdW1lbnQnLCBncm91cHM6IFsnbW9kZScsICdkb2N1bWVudCcsICdkb2N0b29scyddIH0sXG5cdFx0eyBuYW1lOiAnb3RoZXJzJyB9XG5cdF0sXG5cblx0J3JlbW92ZVBsdWdpbnMnOiAnbGlzdHN0eWxlJyxcblx0J3JlbW92ZUJ1dHRvbnMnOiAnRm9ybWF0LFVuZG8sUmVkbyxDdXQsQ29weSxQYXN0ZSxBbmNob3IsU3RyaWtlLFN1YnNjcmlwdCxTdXBlcnNjcmlwdCxJbWFnZSxTZWxlY3RBbGwsU291cmNlJyxcblx0J3JlbW92ZURpYWxvZ1RhYnMnOiAnbGluazphZHZhbmNlZDtsaW5rOnRhcmdldDtpbWFnZTphZHZhbmNlZDtpbWFnZXM6YWR2YW5jZWQnLFxuXG5cdCdleHRyYVBsdWdpbnMnOiAncGxhaW4sc2lnbmF0dXJlJyxcblxuXHQnYWxsb3dlZENvbnRlbnQnOiB0cnVlLFxuXHQnZXh0cmFBbGxvd2VkQ29udGVudCc6IHRydWUsXG5cblx0J2ZpbGxFbXB0eUJsb2Nrcyc6IGZhbHNlLFxuXHQnaWdub3JlRW1wdHlQYXJhZ3JhcGgnOiB0cnVlLFxuXHQnZGlzYWJsZU5hdGl2ZVNwZWxsQ2hlY2tlcic6IGZhbHNlLFxuXG5cdCdjb2xvckJ1dHRvbl9lbmFibGVBdXRvbWF0aWMnOiBmYWxzZSxcblx0J2NvbG9yQnV0dG9uX2VuYWJsZU1vcmUnOiB0cnVlLFxuXG5cdCdmb250X2RlZmF1bHRMYWJlbCc6ICdBcmlhbCcsXG5cdCdmb250U2l6ZV9kZWZhdWx0TGFiZWwnOiAnMTMnLFxuXHQnZm9udFNpemVfc2l6ZXMnOiAnMTAvMTBweDsxMi8xMnB4OzEzLzEzcHg7MTQvMTRweDsxNi8xNnB4OzE4LzE4cHg7MjAvMjBweDsyNC8yNHB4OzI4LzI4cHg7MzYvMzZweDs0OC80OHB4J1xufTtcblxuLyoqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgaHRtbEVkaXRvckxhbmdzTWFwID0ge1xuXHQnYXJfc2EnOiAnYXItc2EnLFxuXHQnYmdfYmcnOiAnYmcnLFxuXHQnY3NfQ1onOiAnY3MnLFxuXHQnZGVfZGUnOiAnZGUnLFxuXHQnZWxfZ3InOiAnZWwnLFxuXHQnZXNfZXMnOiAnZXMnLFxuXHQnZXRfZWUnOiAnZXQnLFxuXHQnZnJfZnInOiAnZnInLFxuXHQnaHVfaHUnOiAnaHUnLFxuXHQnaXNfaXMnOiAnaXMnLFxuXHQnaXRfaXQnOiAnaXQnLFxuXHQnamFfanAnOiAnamEnLFxuXHQna29fa3InOiAna28nLFxuXHQnbHRfbHQnOiAnbHQnLFxuXHQnbHZfbHYnOiAnbHYnLFxuXHQnZmFfaXInOiAnZmEnLFxuXHQnbmJfbm8nOiAnbmInLFxuXHQnbmxfbmwnOiAnbmwnLFxuXHQncGxfcGwnOiAncGwnLFxuXHQncHRfYnInOiAncHQtYnInLFxuXHQncHRfcHQnOiAncHQnLFxuXHQncm9fcm8nOiAncm8nLFxuXHQncnVfcnUnOiAncnUnLFxuXHQnc2tfc2snOiAnc2snLFxuXHQnc2xfc2knOiAnc2wnLFxuXHQnc3Zfc2UnOiAnc3YnLFxuXHQndHJfdHInOiAndHInLFxuXHQndWtfdWEnOiAndWsnLFxuXHQnemhfY24nOiAnemgtY24nLFxuXHQnemhfdHcnOiAnemgnXG59O1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5sZXQgYkFsbG93UGRmUHJldmlldyA9ICFiTW9iaWxlRGV2aWNlO1xuXG5pZiAoYkFsbG93UGRmUHJldmlldyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzKSB7XG5cdGJBbGxvd1BkZlByZXZpZXcgPSAhIV8uZmluZCh3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcywgKHR5cGUpID0+IHR5cGUgJiYgJ2FwcGxpY2F0aW9uL3BkZicgPT09IHR5cGUudHlwZSk7XG5cblx0aWYgKCFiQWxsb3dQZGZQcmV2aWV3KSB7XG5cdFx0YkFsbG93UGRmUHJldmlldyA9ICd1bmRlZmluZWQnICE9PSB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXNbJ2FwcGxpY2F0aW9uL3BkZiddO1xuXHR9XG59XG5cbmV4cG9ydCB7IGJBbGxvd1BkZlByZXZpZXcgfTtcblxuZXhwb3J0IGNvbnN0IFZJRVdfTU9ERUxTID0ge1xuXHRzZXR0aW5nczogW10sXG5cdCdzZXR0aW5ncy1yZW1vdmVkJzogW10sXG5cdCdzZXR0aW5ncy1kaXNhYmxlZCc6IFtdXG59O1xuXG5leHBvcnQgY29uc3QgbW92ZUFjdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuZXhwb3J0IGNvbnN0IGxlZnRQYW5lbERpc2FibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5leHBvcnQgY29uc3QgbGVmdFBhbmVsVHlwZSA9IGtvLm9ic2VydmFibGUoJycpO1xuZXhwb3J0IGNvbnN0IGxlZnRQYW5lbFdpZHRoID0ga28ub2JzZXJ2YWJsZSgwKTtcblxubGVmdFBhbmVsRGlzYWJsZWQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUgJiYgbW92ZUFjdGlvbigpKSB7XG5cdFx0bW92ZUFjdGlvbihmYWxzZSk7XG5cdH1cbn0pO1xuXG5tb3ZlQWN0aW9uLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlICYmIGxlZnRQYW5lbERpc2FibGVkKCkpIHtcblx0XHRsZWZ0UGFuZWxEaXNhYmxlZChmYWxzZSk7XG5cdH1cbn0pO1xuXG4vLyBwb3B1cHNcbmV4cG9ydCBjb25zdCBwb3B1cFZpc2liaWxpdHlOYW1lcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cbmV4cG9ydCBjb25zdCBwb3B1cFZpc2liaWxpdHkgPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgcG9wdXBWaXNpYmlsaXR5TmFtZXMoKS5sZW5ndGgpO1xuXG5wb3B1cFZpc2liaWxpdHkuc3Vic2NyaWJlKChiVmFsdWUpID0+IHtcblx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLW1vZGFsJywgYlZhbHVlKTtcbn0pO1xuXG4vLyBrZXlzXG5leHBvcnQgY29uc3Qga2V5U2NvcGVSZWFsID0ga28ub2JzZXJ2YWJsZShLZXlTdGF0ZS5BbGwpO1xuZXhwb3J0IGNvbnN0IGtleVNjb3BlRmFrZSA9IGtvLm9ic2VydmFibGUoS2V5U3RhdGUuQWxsKTtcblxuZXhwb3J0IGNvbnN0IGtleVNjb3BlID0ga28uY29tcHV0ZWQoe1xuXHRyZWFkOiAoKSA9PiBrZXlTY29wZUZha2UoKSxcblx0d3JpdGU6ICh2YWx1ZSkgPT4ge1xuXHRcdGlmIChLZXlTdGF0ZS5NZW51ICE9PSB2YWx1ZSkge1xuXHRcdFx0aWYgKEtleVN0YXRlLkNvbXBvc2UgPT09IHZhbHVlKSB7XG5cdFx0XHRcdC8vIGRpc2FibGVLZXlGaWx0ZXJcblx0XHRcdFx0a2V5LmZpbHRlciA9ICgpID0+IHVzZUtleWJvYXJkU2hvcnRjdXRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyByZXN0b3JlS2V5RmlsdGVyXG5cdFx0XHRcdGtleS5maWx0ZXIgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRpZiAodXNlS2V5Ym9hcmRTaG9ydGN1dHMoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZWwgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudCxcblx0XHRcdFx0XHRcdFx0dGFnTmFtZSA9IGVsID8gZWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpIDogJyc7XG5cblx0XHRcdFx0XHRcdHJldHVybiAhKFxuXHRcdFx0XHRcdFx0XHQnSU5QVVQnID09PSB0YWdOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdCdTRUxFQ1QnID09PSB0YWdOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdCdURVhUQVJFQScgPT09IHRhZ05hbWUgfHxcblx0XHRcdFx0XHRcdFx0KGVsICYmICdESVYnID09PSB0YWdOYW1lICYmICgnZWRpdG9ySHRtbEFyZWEnID09PSBlbC5jbGFzc05hbWUgfHwgJ3RydWUnID09PSAnJyArIGVsLmNvbnRlbnRFZGl0YWJsZSkpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0a2V5U2NvcGVGYWtlKHZhbHVlKTtcblx0XHRcdGlmIChkcm9wZG93blZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHR2YWx1ZSA9IEtleVN0YXRlLk1lbnU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0a2V5U2NvcGVSZWFsKHZhbHVlKTtcblx0fVxufSk7XG5cbmtleVNjb3BlUmVhbC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdC8vXHR3aW5kb3cuY29uc29sZS5sb2coJ2tleVNjb3BlPScgKyBzVmFsdWUpOyAvLyBERUJVR1xuXHRrZXkuc2V0U2NvcGUodmFsdWUpO1xufSk7XG5cbmRyb3Bkb3duVmlzaWJpbGl0eS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSkge1xuXHRcdGtleVNjb3BlKEtleVN0YXRlLk1lbnUpO1xuXHR9IGVsc2UgaWYgKEtleVN0YXRlLk1lbnUgPT09IGtleS5nZXRTY29wZSgpKSB7XG5cdFx0a2V5U2NvcGUoa2V5U2NvcGVGYWtlKCkpO1xuXHR9XG59KTtcblxuLyoqXG4gKiBAdHlwZSB7Kn1cbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGEgPSB7XG5cdF9fQVBQX186IG51bGwsXG5cdGlBamF4RXJyb3JDb3VudDogMCxcblx0aVRva2VuRXJyb3JDb3VudDogMCxcblx0YUJvb3RzdHJhcERyb3Bkb3duczogW10sXG5cdGlNZXNzYWdlQm9keUNhY2hlQ291bnQ6IDAsXG5cdGJVbmxvYWQ6IGZhbHNlXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cualF1ZXJ5OyIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGhhc2hlciBmcm9tICdoYXNoZXInO1xuaW1wb3J0IGNyb3Nzcm9hZHMgZnJvbSAnY3Jvc3Nyb2Fkcyc7XG5cbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBydW5Ib29rIH0gZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuaW1wb3J0IHsgJGh0bWwsIFZJRVdfTU9ERUxTLCBwb3B1cFZpc2liaWxpdHlOYW1lcyB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHsgaXNBcnJheSwgaXNVbmQsIHBTdHJpbmcsIGxvZywgaXNGdW5jLCBjcmVhdGVDb21tYW5kTGVnYWN5LCBkZWxlZ2F0ZVJ1biwgaXNOb25FbXB0eUFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxubGV0IGN1cnJlbnRTY3JlZW4gPSBudWxsLFxuXHRkZWZhdWx0U2NyZWVuTmFtZSA9ICcnO1xuXG5jb25zdCBTQ1JFRU5TID0ge307XG5cbmV4cG9ydCBjb25zdCBWaWV3VHlwZSA9IHtcblx0UG9wdXA6ICdQb3B1cHMnLFxuXHRMZWZ0OiAnTGVmdCcsXG5cdFJpZ2h0OiAnUmlnaHQnLFxuXHRDZW50ZXI6ICdDZW50ZXInXG59O1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZUxvYWRpbmcoKSB7XG5cdCQoJyNybC1jb250ZW50JykuYWRkQ2xhc3MoJ3JsLWNvbnRlbnQtc2hvdycpO1xuXHQkKCcjcmwtbG9hZGluZycpXG5cdFx0LmhpZGUoKVxuXHRcdC5yZW1vdmUoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmRXhlY3V0ZVxuICogQHBhcmFtIHsoRnVuY3Rpb258Ym9vbGVhbnxudWxsKT19IGZDYW5FeGVjdXRlID0gdHJ1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZChmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdHJldHVybiBjcmVhdGVDb21tYW5kTGVnYWN5KG51bGwsIGZFeGVjdXRlLCBmQ2FuRXhlY3V0ZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcm91dGVcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzRGVmYXVsdCA9IGZhbHNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNldHRpbmdzVmlld01vZGVsKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlLCBpc0RlZmF1bHQgPSBmYWxzZSkge1xuXHRTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLl9fcmxTZXR0aW5nc0RhdGEgPSB7XG5cdFx0TGFiZWw6IGxhYmVsTmFtZSxcblx0XHRUZW1wbGF0ZTogdGVtcGxhdGUsXG5cdFx0Um91dGU6IHJvdXRlLFxuXHRcdElzRGVmYXVsdDogISFpc0RlZmF1bHRcblx0fTtcblxuXHRWSUVXX01PREVMUy5zZXR0aW5ncy5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcykge1xuXHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLnB1c2goU2V0dGluZ3NWaWV3TW9kZWxDbGFzcyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcykge1xuXHRWSUVXX01PREVMU1snc2V0dGluZ3MtZGlzYWJsZWQnXS5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91dGVPZmYoKSB7XG5cdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IGZhbHNlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91dGVPbigpIHtcblx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHJldHVybnMgez9PYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JlZW4oc2NyZWVuTmFtZSkge1xuXHRyZXR1cm4gJycgIT09IHNjcmVlbk5hbWUgJiYgIWlzVW5kKFNDUkVFTlNbc2NyZWVuTmFtZV0pID8gU0NSRUVOU1tzY3JlZW5OYW1lXSA6IG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb1Nob3dcbiAqIEByZXR1cm5zIHtGdW5jdGlvbnxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NyZWVuUG9wdXAoUG9wdVZpZXdNb2RlbENsYXNzKSB7XG5cdGxldCByZXN1bHQgPSBudWxsO1xuXHRpZiAoUG9wdVZpZXdNb2RlbENsYXNzKSB7XG5cdFx0cmVzdWx0ID0gUG9wdVZpZXdNb2RlbENsYXNzO1xuXHRcdGlmIChQb3B1Vmlld01vZGVsQ2xhc3MuZGVmYXVsdCkge1xuXHRcdFx0cmVzdWx0ID0gUG9wdVZpZXdNb2RlbENsYXNzLmRlZmF1bHQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvSGlkZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRlU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb0hpZGUpIHtcblx0Y29uc3QgTW9kYWxWaWV3ID0gZ2V0U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb0hpZGUpO1xuXHRpZiAoTW9kYWxWaWV3ICYmIE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eShmYWxzZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9va05hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge21peGVkPX0gcGFyYW1zID0gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdm1SdW5Ib29rKGhvb2tOYW1lLCBWaWV3TW9kZWxDbGFzcywgcGFyYW1zID0gbnVsbCkge1xuXHRfLmVhY2goVmlld01vZGVsQ2xhc3MuX19uYW1lcywgKG5hbWUpID0+IHtcblx0XHRydW5Ib29rKGhvb2tOYW1lLCBbbmFtZSwgVmlld01vZGVsQ2xhc3MuX192bSwgcGFyYW1zXSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge09iamVjdD19IHZtU2NyZWVuXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVmlld01vZGVsKFZpZXdNb2RlbENsYXNzLCB2bVNjcmVlbikge1xuXHRpZiAoVmlld01vZGVsQ2xhc3MgJiYgIVZpZXdNb2RlbENsYXNzLl9fYnVpbGRlZCkge1xuXHRcdGxldCB2bURvbSA9IG51bGw7XG5cdFx0Y29uc3Qgdm0gPSBuZXcgVmlld01vZGVsQ2xhc3Modm1TY3JlZW4pLFxuXHRcdFx0cG9zaXRpb24gPSBWaWV3TW9kZWxDbGFzcy5fX3R5cGUgfHwgJycsXG5cdFx0XHR2bVBsYWNlID0gcG9zaXRpb24gPyAkKCcjcmwtY29udGVudCAjcmwtJyArIHBvc2l0aW9uLnRvTG93ZXJDYXNlKCkpIDogbnVsbDtcblxuXHRcdFZpZXdNb2RlbENsYXNzLl9fYnVpbGRlZCA9IHRydWU7XG5cdFx0Vmlld01vZGVsQ2xhc3MuX192bSA9IHZtO1xuXG5cdFx0dm0ub25TaG93VHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHZtLm9uSGlkZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHZtLnZpZXdNb2RlbE5hbWUgPSBWaWV3TW9kZWxDbGFzcy5fX25hbWU7XG5cdFx0dm0udmlld01vZGVsTmFtZXMgPSBWaWV3TW9kZWxDbGFzcy5fX25hbWVzO1xuXHRcdHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQgPSBWaWV3TW9kZWxDbGFzcy5fX3RlbXBsYXRlSUQ7XG5cdFx0dm0udmlld01vZGVsUG9zaXRpb24gPSBWaWV3TW9kZWxDbGFzcy5fX3R5cGU7XG5cblx0XHRpZiAodm1QbGFjZSAmJiAxID09PSB2bVBsYWNlLmxlbmd0aCkge1xuXHRcdFx0dm1Eb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdC5hZGRDbGFzcygncmwtdmlldy1tb2RlbCcpXG5cdFx0XHRcdC5hZGRDbGFzcygnUkwtJyArIHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQpXG5cdFx0XHRcdC5oaWRlKCk7XG5cdFx0XHR2bURvbS5hcHBlbmRUbyh2bVBsYWNlKTtcblxuXHRcdFx0dm0udmlld01vZGVsRG9tID0gdm1Eb207XG5cdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSA9IHZtRG9tO1xuXG5cdFx0XHRpZiAoVmlld1R5cGUuUG9wdXAgPT09IHBvc2l0aW9uKSB7XG5cdFx0XHRcdHZtLmNhbmNlbENvbW1hbmQgPSB2bS5jbG9zZUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kKCgpID0+IHtcblx0XHRcdFx0XHRoaWRlU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3MpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR2bS5tb2RhbFZpc2liaWxpdHkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0dm0udmlld01vZGVsRG9tLnNob3coKTtcblx0XHRcdFx0XHRcdHZtLnN0b3JlQW5kU2V0S2V5U2NvcGUoKTtcblxuXHRcdFx0XHRcdFx0cG9wdXBWaXNpYmlsaXR5TmFtZXMucHVzaCh2bS52aWV3TW9kZWxOYW1lKTtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5jc3MoJ3otaW5kZXgnLCAzMDAwICsgcG9wdXBWaXNpYmlsaXR5TmFtZXMoKS5sZW5ndGggKyAxMCk7XG5cblx0XHRcdFx0XHRcdGlmICh2bS5vblNob3dUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdHZtLm9uU2hvd1RyaWdnZXIoIXZtLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25TaG93V2l0aERlbGF5JywgW10sIDUwMCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bSwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0XHRpZiAodm0ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHR2bS5vbkhpZGVUcmlnZ2VyKCF2bS5vbkhpZGVUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2bS5yZXN0b3JlS2V5U2NvcGUoKTtcblxuXHRcdFx0XHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLW9uLWhpZGUnLCBWaWV3TW9kZWxDbGFzcyk7XG5cblx0XHRcdFx0XHRcdHBvcHVwVmlzaWJpbGl0eU5hbWVzLnJlbW92ZSh2bS52aWV3TW9kZWxOYW1lKTtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5jc3MoJ3otaW5kZXgnLCAyMDAwKTtcblxuXHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB2bS52aWV3TW9kZWxEb20uaGlkZSgpLCAzMDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1wcmUtYnVpbGQnLCBWaWV3TW9kZWxDbGFzcywgdm1Eb20pO1xuXG5cdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdHZtRG9tWzBdLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHJhbnNsYXRvckluaXQ6IHRydWUsXG5cdFx0XHRcdFx0dGVtcGxhdGU6ICgpID0+ICh7IG5hbWU6IHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQgfSlcblx0XHRcdFx0fSxcblx0XHRcdFx0dm1cblx0XHRcdCk7XG5cblx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25CdWlsZCcsIFt2bURvbV0pO1xuXHRcdFx0aWYgKHZtICYmIFZpZXdUeXBlLlBvcHVwID09PSBwb3NpdGlvbikge1xuXHRcdFx0XHR2bS5yZWdpc3RlclBvcHVwS2V5RG93bigpO1xuXHRcdFx0fVxuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtcG9zdC1idWlsZCcsIFZpZXdNb2RlbENsYXNzLCB2bURvbSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZygnQ2Fubm90IGZpbmQgdmlldyBtb2RlbCBwb3NpdGlvbjogJyArIHBvc2l0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gVmlld01vZGVsQ2xhc3MgPyBWaWV3TW9kZWxDbGFzcy5fX3ZtIDogbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHBhcmFtIHtBcnJheT19IHBhcmFtc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3csIHBhcmFtcyA9IFtdKSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0aWYgKE1vZGFsVmlldykge1xuXHRcdGJ1aWxkVmlld01vZGVsKE1vZGFsVmlldyk7XG5cblx0XHRpZiAoTW9kYWxWaWV3Ll9fdm0gJiYgTW9kYWxWaWV3Ll9fZG9tKSB7XG5cdFx0XHRkZWxlZ2F0ZVJ1bihNb2RhbFZpZXcuX192bSwgJ29uQmVmb3JlU2hvdycsIHBhcmFtcyB8fCBbXSk7XG5cblx0XHRcdE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eSh0cnVlKTtcblxuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvblNob3cnLCBwYXJhbXMgfHwgW10pO1xuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtb24tc2hvdycsIE1vZGFsVmlldywgcGFyYW1zIHx8IFtdKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXJtVXBTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdykge1xuXHRjb25zdCBNb2RhbFZpZXcgPSBnZXRTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdyk7XG5cdGlmIChNb2RhbFZpZXcpIHtcblx0XHRidWlsZFZpZXdNb2RlbChNb2RhbFZpZXcpO1xuXG5cdFx0aWYgKE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvbldhcm1VcCcpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9TaG93XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9wdXBWaXNpYmxlKFZpZXdNb2RlbENsYXNzVG9TaG93KSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0cmV0dXJuIE1vZGFsVmlldyAmJiBNb2RhbFZpZXcuX192bSA/IE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eSgpIDogZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmVlbk5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJQYXJ0XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcmVlbk9uUm91dGUoc2NyZWVuTmFtZSwgc3ViUGFydCkge1xuXHRsZXQgdm1TY3JlZW4gPSBudWxsLFxuXHRcdGlzU2FtZVNjcmVlbiA9IGZhbHNlLFxuXHRcdGNyb3NzID0gbnVsbDtcblxuXHRpZiAoJycgPT09IHBTdHJpbmcoc2NyZWVuTmFtZSkpIHtcblx0XHRzY3JlZW5OYW1lID0gZGVmYXVsdFNjcmVlbk5hbWU7XG5cdH1cblxuXHRpZiAoJycgIT09IHNjcmVlbk5hbWUpIHtcblx0XHR2bVNjcmVlbiA9IHNjcmVlbihzY3JlZW5OYW1lKTtcblx0XHRpZiAoIXZtU2NyZWVuKSB7XG5cdFx0XHR2bVNjcmVlbiA9IHNjcmVlbihkZWZhdWx0U2NyZWVuTmFtZSk7XG5cdFx0XHRpZiAodm1TY3JlZW4pIHtcblx0XHRcdFx0c3ViUGFydCA9IHNjcmVlbk5hbWUgKyAnLycgKyBzdWJQYXJ0O1xuXHRcdFx0XHRzY3JlZW5OYW1lID0gZGVmYXVsdFNjcmVlbk5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHZtU2NyZWVuICYmIHZtU2NyZWVuLl9fc3RhcnRlZCkge1xuXHRcdFx0aXNTYW1lU2NyZWVuID0gY3VycmVudFNjcmVlbiAmJiB2bVNjcmVlbiA9PT0gY3VycmVudFNjcmVlbjtcblxuXHRcdFx0aWYgKCF2bVNjcmVlbi5fX2J1aWxkZWQpIHtcblx0XHRcdFx0dm1TY3JlZW4uX19idWlsZGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHZtU2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRfLmVhY2godm1TY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdGJ1aWxkVmlld01vZGVsKFZpZXdNb2RlbENsYXNzLCB2bVNjcmVlbik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bVNjcmVlbiwgJ29uQnVpbGQnKTtcblx0XHRcdH1cblxuXHRcdFx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0XHRcdC8vIGhpZGUgc2NyZWVuXG5cdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuICYmICFpc1NhbWVTY3JlZW4pIHtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihjdXJyZW50U2NyZWVuLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRTY3JlZW4ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0Y3VycmVudFNjcmVlbi5vbkhpZGVUcmlnZ2VyKCFjdXJyZW50U2NyZWVuLm9uSGlkZVRyaWdnZXIoKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRcdF8uZWFjaChjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSwgKFZpZXdNb2RlbENsYXNzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtICYmXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3VHlwZS5Qb3B1cCAhPT0gVmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxQb3NpdGlvblxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbS5oaWRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxWaXNpYmlsaXR5KGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25IaWRlV2l0aERlbGF5JywgW10sIDUwMCk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoVmlld01vZGVsQ2xhc3MuX192bS5vbkhpZGVUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uSGlkZVRyaWdnZXIoIVZpZXdNb2RlbENsYXNzLl9fdm0ub25IaWRlVHJpZ2dlcigpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdGN1cnJlbnRTY3JlZW4gPSB2bVNjcmVlbjtcblxuXHRcdFx0XHQvLyBzaG93IHNjcmVlblxuXHRcdFx0XHRpZiAoY3VycmVudFNjcmVlbiAmJiAhaXNTYW1lU2NyZWVuKSB7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuLm9uU2hvd1RyaWdnZXIpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRTY3JlZW4ub25TaG93VHJpZ2dlcighY3VycmVudFNjcmVlbi5vblNob3dUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1vbi1zaG93JywgW2N1cnJlbnRTY3JlZW4uc2NyZWVuTmFtZSgpLCBjdXJyZW50U2NyZWVuXSk7XG5cblx0XHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpKSkge1xuXHRcdFx0XHRcdFx0Xy5lYWNoKGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSAmJlxuXHRcdFx0XHRcdFx0XHRcdFZpZXdUeXBlLlBvcHVwICE9PSBWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFBvc2l0aW9uXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkJlZm9yZVNob3cnKTtcblxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFZpc2liaWxpdHkodHJ1ZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25TaG93Jyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFZpZXdNb2RlbENsYXNzLl9fdm0ub25TaG93VHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS5vblNob3dUcmlnZ2VyKCFWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXHRcdFx0XHRcdFx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1vbi1zaG93JywgVmlld01vZGVsQ2xhc3MpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRjcm9zcyA9IHZtU2NyZWVuICYmIHZtU2NyZWVuLl9fY3Jvc3MgPyB2bVNjcmVlbi5fX2Nyb3NzKCkgOiBudWxsO1xuXHRcdFx0XHRpZiAoY3Jvc3MpIHtcblx0XHRcdFx0XHRjcm9zcy5wYXJzZShzdWJQYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gc2NyZWVuc0NsYXNzZXNcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTY3JlZW5zKHNjcmVlbnNDbGFzc2VzKSB7XG5cdF8uZWFjaChzY3JlZW5zQ2xhc3NlcywgKENTY3JlZW4pID0+IHtcblx0XHRpZiAoQ1NjcmVlbikge1xuXHRcdFx0Y29uc3Qgdm1TY3JlZW4gPSBuZXcgQ1NjcmVlbigpLFxuXHRcdFx0XHRzY3JlZW5OYW1lID0gdm1TY3JlZW4gPyB2bVNjcmVlbi5zY3JlZW5OYW1lKCkgOiAnJztcblxuXHRcdFx0aWYgKHZtU2NyZWVuICYmICcnICE9PSBzY3JlZW5OYW1lKSB7XG5cdFx0XHRcdGlmICgnJyA9PT0gZGVmYXVsdFNjcmVlbk5hbWUpIHtcblx0XHRcdFx0XHRkZWZhdWx0U2NyZWVuTmFtZSA9IHNjcmVlbk5hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRTQ1JFRU5TW3NjcmVlbk5hbWVdID0gdm1TY3JlZW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRfLmVhY2goU0NSRUVOUywgKHZtU2NyZWVuKSA9PiB7XG5cdFx0aWYgKHZtU2NyZWVuICYmICF2bVNjcmVlbi5fX3N0YXJ0ZWQgJiYgdm1TY3JlZW4uX19zdGFydCkge1xuXHRcdFx0dm1TY3JlZW4uX19zdGFydGVkID0gdHJ1ZTtcblx0XHRcdHZtU2NyZWVuLl9fc3RhcnQoKTtcblxuXHRcdFx0cnVuSG9vaygnc2NyZWVuLXByZS1zdGFydCcsIFt2bVNjcmVlbi5zY3JlZW5OYW1lKCksIHZtU2NyZWVuXSk7XG5cdFx0XHRkZWxlZ2F0ZVJ1bih2bVNjcmVlbiwgJ29uU3RhcnQnKTtcblx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1wb3N0LXN0YXJ0JywgW3ZtU2NyZWVuLnNjcmVlbk5hbWUoKSwgdm1TY3JlZW5dKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGNyb3NzID0gY3Jvc3Nyb2Fkcy5jcmVhdGUoKTtcblx0Y3Jvc3MuYWRkUm91dGUoL14oW2EtekEtWjAtOS1dKilcXC8/KC4qKSQvLCBzY3JlZW5PblJvdXRlKTtcblxuXHRoYXNoZXIuaW5pdGlhbGl6ZWQuYWRkKGNyb3NzLnBhcnNlLCBjcm9zcyk7XG5cdGhhc2hlci5jaGFuZ2VkLmFkZChjcm9zcy5wYXJzZSwgY3Jvc3MpO1xuXHRoYXNoZXIuaW5pdCgpO1xuXG5cdF8uZGVsYXkoKCkgPT4gJGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXN0YXJ0ZWQtdHJpZ2dlcicpLmFkZENsYXNzKCdybC1zdGFydGVkJyksIDEwMCk7XG5cdF8uZGVsYXkoKCkgPT4gJGh0bWwuYWRkQ2xhc3MoJ3JsLXN0YXJ0ZWQtZGVsYXknKSwgMjAwKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc0hhc2hcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHNpbGVuY2UgPSBmYWxzZVxuICogQHBhcmFtIHtib29sZWFuPX0gcmVwbGFjZSA9IGZhbHNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEhhc2goaGFzaCwgc2lsZW5jZSA9IGZhbHNlLCByZXBsYWNlID0gZmFsc2UpIHtcblx0aGFzaCA9ICcjJyA9PT0gaGFzaC5zdWJzdHIoMCwgMSkgPyBoYXNoLnN1YnN0cigxKSA6IGhhc2g7XG5cdGhhc2ggPSAnLycgPT09IGhhc2guc3Vic3RyKDAsIDEpID8gaGFzaC5zdWJzdHIoMSkgOiBoYXNoO1xuXG5cdGNvbnN0IGNtZCA9IHJlcGxhY2UgPyAncmVwbGFjZUhhc2gnIDogJ3NldEhhc2gnO1xuXG5cdGlmIChzaWxlbmNlKSB7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gZmFsc2U7XG5cdFx0aGFzaGVyW2NtZF0oaGFzaCk7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSB0cnVlO1xuXHRcdGhhc2hlcltjbWRdKGhhc2gpO1xuXHRcdGhhc2hlci5zZXRIYXNoKGhhc2gpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB2aWV3RGVjb3JhdG9yKHsgbmFtZSwgdHlwZSwgdGVtcGxhdGVJRCB9KSB7XG5cdHJldHVybiAodGFyZ2V0KSA9PiB7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0aWYgKGlzQXJyYXkobmFtZSkpIHtcblx0XHRcdFx0XHR0YXJnZXQuX19uYW1lcyA9IG5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0Ll9fbmFtZXMgPSBbbmFtZV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0YXJnZXQuX19uYW1lID0gdGFyZ2V0Ll9fbmFtZXNbMF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlKSB7XG5cdFx0XHRcdHRhcmdldC5fX3R5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGVtcGxhdGVJRCkge1xuXHRcdFx0XHR0YXJnZXQuX190ZW1wbGF0ZUlEID0gdGVtcGxhdGVJRDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBwb3B1cERlY29yYXRvcih7IG5hbWUsIHRlbXBsYXRlSUQgfSkge1xuXHRyZXR1cm4gdmlld0RlY29yYXRvcih7IG5hbWUsIHR5cGU6IFZpZXdUeXBlLlBvcHVwLCB0ZW1wbGF0ZUlEIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbkV4ZWN1dGVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY29tbWFuZERlY29yYXRvcihjYW5FeGVjdXRlID0gdHJ1ZSkge1xuXHRyZXR1cm4gKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSA9PiB7XG5cdFx0aWYgKCFrZXkgfHwgIWtleS5tYXRjaCgvQ29tbWFuZCQvKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBuYW1lIFwiJHtrZXl9XCIgc2hvdWxkIGVuZCB3aXRoIENvbW1hbmQgc3VmZml4YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWUgPSBkZXNjcmlwdG9yLnZhbHVlIHx8IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXIoKSxcblx0XHRcdG5vcm1DYW5FeGVjdXRlID0gaXNGdW5jKGNhbkV4ZWN1dGUpID8gY2FuRXhlY3V0ZSA6ICgpID0+ICEhY2FuRXhlY3V0ZTtcblxuXHRcdGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG5cdFx0XHRpZiAobm9ybUNhbkV4ZWN1dGUuY2FsbCh0aGlzLCB0aGlzKSkge1xuXHRcdFx0XHR2YWx1ZS5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRkZXNjcmlwdG9yLnZhbHVlLl9fcmVhbENhbkV4ZWN1dGUgPSBub3JtQ2FuRXhlY3V0ZTtcblx0XHRkZXNjcmlwdG9yLnZhbHVlLmlzQ29tbWFuZCA9IHRydWU7XG5cblx0XHRyZXR1cm4gZGVzY3JpcHRvcjtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge21pY2VkfSAkaXRlbXNcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIoJGl0ZW1zKSB7XG5cdHJldHVybiBfLnRocm90dGxlKChldmVudCwgaGFuZGxlcikgPT4ge1xuXHRcdGNvbnN0IHVwID0gaGFuZGxlciAmJiAndXAnID09PSBoYW5kbGVyLnNob3J0Y3V0O1xuXG5cdFx0aWYgKGV2ZW50ICYmICRpdGVtcy5sZW5ndGgpIHtcblx0XHRcdGxldCBpbmRleCA9ICRpdGVtcy5pbmRleCgkaXRlbXMuZmlsdGVyKCcuc2VsZWN0ZWQnKSk7XG5cdFx0XHRpZiAodXAgJiYgMCA8IGluZGV4KSB7XG5cdFx0XHRcdGluZGV4IC09IDE7XG5cdFx0XHR9IGVsc2UgaWYgKCF1cCAmJiBpbmRleCA8ICRpdGVtcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdGluZGV4ICs9IDE7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHJlc3VsdEhhc2ggPSAkaXRlbXMuZXEoaW5kZXgpLmF0dHIoJ2hyZWYnKTtcblx0XHRcdGlmIChyZXN1bHRIYXNoKSB7XG5cdFx0XHRcdHNldEhhc2gocmVzdWx0SGFzaCwgZmFsc2UsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwgTWFnaWNzLlRpbWUyMDBtcyk7XG59XG5cbmV4cG9ydCB7XG5cdGNvbW1hbmREZWNvcmF0b3IsXG5cdGNvbW1hbmREZWNvcmF0b3IgYXMgY29tbWFuZCxcblx0dmlld0RlY29yYXRvcixcblx0dmlld0RlY29yYXRvciBhcyB2aWV3LFxuXHR2aWV3RGVjb3JhdG9yIGFzIHZpZXdNb2RlbCxcblx0cG9wdXBEZWNvcmF0b3IsXG5cdHBvcHVwRGVjb3JhdG9yIGFzIHBvcHVwLFxuXHRzZXR0aW5nc01lbnVLZXlzSGFuZGxlclxufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uLCBVcGxvYWRFcnJvckNvZGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcEludCwgaXNVbmQsIGlzTnVsbCwgaGFzLCBtaWNyb3RpbWUsIGluQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgJGh0bWwsIGJBbmltYXRpb25TdXBwb3J0ZWQgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyByZWxvYWQgYXMgbW9tZW50b3JSZWxvYWQgfSBmcm9tICdDb21tb24vTW9tZW50b3InO1xuaW1wb3J0IHsgbGFuZ0xpbmsgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5sZXQgSTE4Tl9EQVRBID0gd2luZG93LnJhaW5sb29wSTE4TiB8fCB7fTtcblxuY29uc3QgSTE4Tl9OT1RJRklDQVRJT05fREFUQSA9IHt9O1xuY29uc3QgSTE4Tl9OT1RJRklDQVRJT05fTUFQID0gW1xuXHRbTm90aWZpY2F0aW9uLkludmFsaWRUb2tlbiwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9UT0tFTiddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRUb2tlbiwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9UT0tFTiddLFxuXHRbTm90aWZpY2F0aW9uLkF1dGhFcnJvciwgJ05PVElGSUNBVElPTlMvQVVUSF9FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLkFjY2Vzc0Vycm9yLCAnTk9USUZJQ0FUSU9OUy9BQ0NFU1NfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5Db25uZWN0aW9uRXJyb3IsICdOT1RJRklDQVRJT05TL0NPTk5FQ1RJT05fRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5DYXB0Y2hhRXJyb3IsICdOT1RJRklDQVRJT05TL0NBUFRDSEFfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5Tb2NpYWxGYWNlYm9va0xvZ2luQWNjZXNzRGlzYWJsZSwgJ05PVElGSUNBVElPTlMvU09DSUFMX0ZBQ0VCT09LX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsVHdpdHRlckxvZ2luQWNjZXNzRGlzYWJsZSwgJ05PVElGSUNBVElPTlMvU09DSUFMX1RXSVRURVJfTE9HSU5fQUNDRVNTX0RJU0FCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5Tb2NpYWxHb29nbGVMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9HT09HTEVfTE9HSU5fQUNDRVNTX0RJU0FCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5Eb21haW5Ob3RBbGxvd2VkLCAnTk9USUZJQ0FUSU9OUy9ET01BSU5fTk9UX0FMTE9XRUQnXSxcblx0W05vdGlmaWNhdGlvbi5BY2NvdW50Tm90QWxsb3dlZCwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9OT1RfQUxMT1dFRCddLFxuXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9UV09fRkFDVE9SX0FVVEhfUkVRVUlSRUQnXSxcblx0W05vdGlmaWNhdGlvbi5BY2NvdW50VHdvRmFjdG9yQXV0aEVycm9yLCAnTk9USUZJQ0FUSU9OUy9BQ0NPVU5UX1RXT19GQUNUT1JfQVVUSF9FUlJPUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQ291bGROb3RTYXZlTmV3UGFzc3dvcmQsICdOT1RJRklDQVRJT05TL0NPVUxEX05PVF9TQVZFX05FV19QQVNTV09SRCddLFxuXHRbTm90aWZpY2F0aW9uLkN1cnJlbnRQYXNzd29yZEluY29ycmVjdCwgJ05PVElGSUNBVElPTlMvQ1VSUkVOVF9QQVNTV09SRF9JTkNPUlJFQ1QnXSxcblx0W05vdGlmaWNhdGlvbi5OZXdQYXNzd29yZFNob3J0LCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfU0hPUlQnXSxcblx0W05vdGlmaWNhdGlvbi5OZXdQYXNzd29yZFdlYWssICdOT1RJRklDQVRJT05TL05FV19QQVNTV09SRF9XRUFLJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRGb3JiaWRkZW4sICdOT1RJRklDQVRJT05TL05FV19QQVNTV09SRF9GT1JCSURERU5UJ10sXG5cblx0W05vdGlmaWNhdGlvbi5Db250YWN0c1N5bmNFcnJvciwgJ05PVElGSUNBVElPTlMvQ09OVEFDVFNfU1lOQ19FUlJPUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudEdldE1lc3NhZ2VMaXN0LCAnTk9USUZJQ0FUSU9OUy9DQU5UX0dFVF9NRVNTQUdFX0xJU1QnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50R2V0TWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnREZWxldGVNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudE1vdmVNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX01PVkVfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRDb3B5TWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9NT1ZFX01FU1NBR0UnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRTYXZlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50U2VuZE1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfU0VORF9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uSW52YWxpZFJlY2lwaWVudHMsICdOT1RJRklDQVRJT05TL0lOVkFMSURfUkVDSVBJRU5UUyddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVGaWx0ZXJzLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NBVkVfRklMVEVSUyddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRHZXRGaWx0ZXJzLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0dFVF9GSUxURVJTJ10sXG5cdFtOb3RpZmljYXRpb24uRmlsdGVyc0FyZU5vdENvcnJlY3QsICdOT1RJRklDQVRJT05TL0ZJTFRFUlNfQVJFX05PVF9DT1JSRUNUJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50Q3JlYXRlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0NSRUFURV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50UmVuYW1lRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1JFTkFNRV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlTm9uRW1wdHlGb2xkZXIsICdOT1RJRklDQVRJT05TL0NBTlRfREVMRVRFX05PTl9FTVBUWV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50U3Vic2NyaWJlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NVQlNDUklCRV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50VW5zdWJzY3JpYmVGb2xkZXIsICdOT1RJRklDQVRJT05TL0NBTlRfVU5TVUJTQ1JJQkVfRk9MREVSJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZVNldHRpbmdzLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NBVkVfU0VUVElOR1MnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZVBsdWdpblNldHRpbmdzLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NBVkVfUExVR0lOX1NFVFRJTkdTJ10sXG5cblx0W05vdGlmaWNhdGlvbi5Eb21haW5BbHJlYWR5RXhpc3RzLCAnTk9USUZJQ0FUSU9OUy9ET01BSU5fQUxSRUFEWV9FWElTVFMnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRJbnN0YWxsUGFja2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9JTlNUQUxMX1BBQ0tBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlUGFja2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfUEFDS0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRQbHVnaW5QYWNrYWdlLCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX1BMVUdJTl9QQUNLQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlLCAnTk9USUZJQ0FUSU9OUy9VTlNVUFBPUlRFRF9QTFVHSU5fUEFDS0FHRSddLFxuXG5cdFtOb3RpZmljYXRpb24uTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSwgJ05PVElGSUNBVElPTlMvTElDRU5TSU5HX1NFUlZFUl9JU19VTkFWQUlMQUJMRSddLFxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ0V4cGlyZWQsICdOT1RJRklDQVRJT05TL0xJQ0VOU0lOR19FWFBJUkVEJ10sXG5cdFtOb3RpZmljYXRpb24uTGljZW5zaW5nQmFubmVkLCAnTk9USUZJQ0FUSU9OUy9MSUNFTlNJTkdfQkFOTkVEJ10sXG5cblx0W05vdGlmaWNhdGlvbi5EZW1vU2VuZE1lc3NhZ2VFcnJvciwgJ05PVElGSUNBVElPTlMvREVNT19TRU5EX01FU1NBR0VfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5EZW1vQWNjb3VudEVycm9yLCAnTk9USUZJQ0FUSU9OUy9ERU1PX0FDQ09VTlRfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkFjY291bnRBbHJlYWR5RXhpc3RzLCAnTk9USUZJQ0FUSU9OUy9BQ0NPVU5UX0FMUkVBRFlfRVhJU1RTJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudERvZXNOb3RFeGlzdCwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9ET0VTX05PVF9FWElTVCddLFxuXG5cdFtOb3RpZmljYXRpb24uTWFpbFNlcnZlckVycm9yLCAnTk9USUZJQ0FUSU9OUy9NQUlMX1NFUlZFUl9FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRJbnB1dEFyZ3VtZW50LCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX0lOUFVUX0FSR1VNRU5UJ10sXG5cdFtOb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbiwgJ05PVElGSUNBVElPTlMvVU5LTk9XTl9FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLlVua25vd25FcnJvciwgJ05PVElGSUNBVElPTlMvVU5LTk9XTl9FUlJPUiddXG5dO1xuXG5leHBvcnQgY29uc3QgdHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7T2JqZWN0PX0gdmFsdWVMaXN0XG4gKiBAcGFyYW0ge3N0cmluZz19IGRlZmF1bFZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaTE4bihrZXksIHZhbHVlTGlzdCwgZGVmYXVsVmFsdWUpIHtcblx0bGV0IHZhbHVlTmFtZSA9ICcnLFxuXHRcdHJlc3VsdCA9IEkxOE5fREFUQVtrZXldO1xuXG5cdGlmIChpc1VuZChyZXN1bHQpKSB7XG5cdFx0cmVzdWx0ID0gaXNVbmQoZGVmYXVsVmFsdWUpID8ga2V5IDogZGVmYXVsVmFsdWU7XG5cdH1cblxuXHRpZiAoIWlzVW5kKHZhbHVlTGlzdCkgJiYgIWlzTnVsbCh2YWx1ZUxpc3QpKSB7XG5cdFx0Zm9yICh2YWx1ZU5hbWUgaW4gdmFsdWVMaXN0KSB7XG5cdFx0XHRpZiAoaGFzKHZhbHVlTGlzdCwgdmFsdWVOYW1lKSkge1xuXHRcdFx0XHRyZXN1bHQgPSByZXN1bHQucmVwbGFjZSgnJScgKyB2YWx1ZU5hbWUgKyAnJScsIHZhbHVlTGlzdFt2YWx1ZU5hbWVdKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCBpMThuVG9Ob2RlID0gKGVsZW1lbnQpID0+IHtcblx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRrZXkgPSAkZWwuZGF0YSgnaTE4bicpO1xuXG5cdGlmIChrZXkpIHtcblx0XHRpZiAoJ1snID09PSBrZXkuc3Vic3RyKDAsIDEpKSB7XG5cdFx0XHRzd2l0Y2ggKGtleS5zdWJzdHIoMCwgNikpIHtcblx0XHRcdFx0Y2FzZSAnW2h0bWxdJzpcblx0XHRcdFx0XHQkZWwuaHRtbChpMThuKGtleS5zdWJzdHIoNikpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnW3BsYWNlJzpcblx0XHRcdFx0XHQkZWwuYXR0cigncGxhY2Vob2xkZXInLCBpMThuKGtleS5zdWJzdHIoMTMpKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1t0aXRsZSc6XG5cdFx0XHRcdFx0JGVsLmF0dHIoJ3RpdGxlJywgaTE4bihrZXkuc3Vic3RyKDcpKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0JGVsLnRleHQoaTE4bihrZXkpKTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRzXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBhbmltYXRlID0gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGkxOG5Ub05vZGVzKGVsZW1lbnRzLCBhbmltYXRlID0gZmFsc2UpIHtcblx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0JCgnW2RhdGEtaTE4bl0nLCBlbGVtZW50cykuZWFjaCgoaW5kZXgsIGl0ZW0pID0+IHtcblx0XHRcdGkxOG5Ub05vZGUoaXRlbSk7XG5cdFx0fSk7XG5cblx0XHRpZiAoYW5pbWF0ZSAmJiBiQW5pbWF0aW9uU3VwcG9ydGVkKSB7XG5cdFx0XHQkKCcuaTE4bi1hbmltYXRpb25bZGF0YS1pMThuXScsIGVsZW1lbnRzKS5sZXR0ZXJmeCh7XG5cdFx0XHRcdCdmeCc6ICdmYWxsIGZhZGUnLFxuXHRcdFx0XHQnYmFja3dhcmRzJzogZmFsc2UsXG5cdFx0XHRcdCd0aW1pbmcnOiA1MCxcblx0XHRcdFx0J2Z4X2R1cmF0aW9uJzogJzUwbXMnLFxuXHRcdFx0XHQnbGV0dGVyX2VuZCc6ICdyZXN0b3JlJyxcblx0XHRcdFx0J2VsZW1lbnRfZW5kJzogJ3Jlc3RvcmUnXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuXG5jb25zdCByZWxvYWREYXRhID0gKCkgPT4ge1xuXHRpZiAod2luZG93LnJhaW5sb29wSTE4Tikge1xuXHRcdEkxOE5fREFUQSA9IHdpbmRvdy5yYWlubG9vcEkxOE4gfHwge307XG5cblx0XHRpMThuVG9Ob2Rlcyh3aW5kb3cuZG9jdW1lbnQsIHRydWUpO1xuXG5cdFx0bW9tZW50b3JSZWxvYWQoKTtcblx0XHR0cmlnZ2VyKCF0cmlnZ2VyKCkpO1xuXHR9XG5cblx0d2luZG93LnJhaW5sb29wSTE4TiA9IG51bGw7XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdE5vdGlmaWNhdGlvbkxhbmd1YWdlKCkge1xuXHRJMThOX05PVElGSUNBVElPTl9NQVAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbaXRlbVswXV0gPSBpMThuKGl0ZW1bMV0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdGFydENhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gbGFuZ0NhbGxiYWNrID0gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdE9uU3RhcnRPckxhbmdDaGFuZ2Uoc3RhcnRDYWxsYmFjaywgbGFuZ0NhbGxiYWNrID0gbnVsbCkge1xuXHRpZiAoc3RhcnRDYWxsYmFjaykge1xuXHRcdHN0YXJ0Q2FsbGJhY2soKTtcblx0fVxuXG5cdGlmIChsYW5nQ2FsbGJhY2spIHtcblx0XHR0cmlnZ2VyLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAoc3RhcnRDYWxsYmFjaykge1xuXHRcdFx0XHRzdGFydENhbGxiYWNrKCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAobGFuZ0NhbGxiYWNrKSB7XG5cdFx0XHRcdGxhbmdDYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHR0cmlnZ2VyLnN1YnNjcmliZShzdGFydENhbGxiYWNrKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcGFyYW0geyo9fSBtZXNzYWdlID0gJydcbiAqIEBwYXJhbSB7Kj19IGRlZkNvZGUgPSBudWxsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uKGNvZGUsIG1lc3NhZ2UgPSAnJywgZGVmQ29kZSA9IG51bGwpIHtcblx0Y29kZSA9IHdpbmRvdy5wYXJzZUludChjb2RlLCAxMCkgfHwgMDtcblx0aWYgKE5vdGlmaWNhdGlvbi5DbGllbnRWaWV3RXJyb3IgPT09IGNvZGUgJiYgbWVzc2FnZSkge1xuXHRcdHJldHVybiBtZXNzYWdlO1xuXHR9XG5cblx0ZGVmQ29kZSA9IGRlZkNvZGUgPyB3aW5kb3cucGFyc2VJbnQoZGVmQ29kZSwgMTApIHx8IDAgOiAwO1xuXHRyZXR1cm4gaXNVbmQoSTE4Tl9OT1RJRklDQVRJT05fREFUQVtjb2RlXSlcblx0XHQ/IGRlZkNvZGUgJiYgaXNVbmQoSTE4Tl9OT1RJRklDQVRJT05fREFUQVtkZWZDb2RlXSlcblx0XHRcdD8gSTE4Tl9OT1RJRklDQVRJT05fREFUQVtkZWZDb2RlXVxuXHRcdFx0OiAnJ1xuXHRcdDogSTE4Tl9OT1RJRklDQVRJT05fREFUQVtjb2RlXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWZDb2RlID0gTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3RpZmljYXRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsIGRlZkNvZGUgPSBOb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbikge1xuXHRyZXR1cm4gcmVzcG9uc2UgJiYgcmVzcG9uc2UuRXJyb3JDb2RlXG5cdFx0PyBnZXROb3RpZmljYXRpb24ocEludChyZXNwb25zZS5FcnJvckNvZGUpLCByZXNwb25zZS5FcnJvck1lc3NhZ2UgfHwgJycpXG5cdFx0OiBnZXROb3RpZmljYXRpb24oZGVmQ29kZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSBjb2RlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBsb2FkRXJyb3JEZXNjQnlDb2RlKGNvZGUpIHtcblx0bGV0IHJlc3VsdCA9ICcnO1xuXHRzd2l0Y2ggKHdpbmRvdy5wYXJzZUludChjb2RlLCAxMCkgfHwgMCkge1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVJc1Rvb0JpZzpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9GSUxFX0lTX1RPT19CSUcnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVQYXJ0aWFsbHlVcGxvYWRlZDpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9GSUxFX1BBUlRJQUxMWV9VUExPQURFRCcpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZU5vVXBsb2FkZWQ6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfTk9fRklMRV9VUExPQURFRCcpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuTWlzc2luZ1RlbXBGb2xkZXI6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfTUlTU0lOR19URU1QX0ZPTERFUicpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZU9uU2F2ZWluZ0Vycm9yOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX09OX1NBVklOR19GSUxFJyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlVHlwZTpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9GSUxFX1RZUEUnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfVU5LTk9XTicpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRtaW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkKGFkbWluLCBsYW5ndWFnZSkge1xuXHRjb25zdCBzdGFydCA9IG1pY3JvdGltZSgpO1xuXG5cdCRodG1sLmFkZENsYXNzKCdybC1jaGFuZ2luZy1sYW5ndWFnZScpO1xuXG5cdHJldHVybiBuZXcgd2luZG93LlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdCQuYWpheCh7XG5cdFx0XHR1cmw6IGxhbmdMaW5rKGxhbmd1YWdlLCBhZG1pbiksXG5cdFx0XHRkYXRhVHlwZTogJ3NjcmlwdCcsXG5cdFx0XHRjYWNoZTogdHJ1ZVxuXHRcdH0pLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdF8uZGVsYXkoXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmVsb2FkRGF0YSgpO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBpc1J0bCA9IC0xIDwgaW5BcnJheSgobGFuZ3VhZ2UgfHwgJycpLnRvTG93ZXJDYXNlKCksIFsnYXInLCAnYXJfc2EnLCAnaGUnLCAnaGVfaGUnLCAndXInLCAndXJfaXInXSk7XG5cblx0XHRcdFx0XHRcdCRodG1sXG5cdFx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKVxuXHRcdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3JsLXJ0bCBybC1sdHInKVxuXHRcdFx0XHRcdFx0XHQvLyAuYXR0cignZGlyJywgaXNSdGwgPyAncnRsJyA6ICdsdHInKVxuXHRcdFx0XHRcdFx0XHQuYWRkQ2xhc3MoaXNSdGwgPyAncmwtcnRsJyA6ICdybC1sdHInKTtcblxuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0NTAwIDwgbWljcm90aW1lKCkgLSBzdGFydCA/IDEgOiA1MDBcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdybC1jaGFuZ2luZy1sYW5ndWFnZScpO1xuXHRcdFx0XHR3aW5kb3cucmFpbmxvb3BJMThOID0gbnVsbDtcblx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHR9XG5cdFx0KTtcblx0fSk7XG59XG5cbi8vIGluaXQgc2VjdGlvblxuJGh0bWwuYWRkQ2xhc3MoJ3JsLScgKyAoJGh0bWwuYXR0cignZGlyJykgfHwgJ2x0cicpKTtcbiIsImltcG9ydCBfT2JqZWN0JGNyZWF0ZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9jcmVhdGVcIjtcbmltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgXyBmcm9tICdfJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IHsgRm9sZGVyVHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBVTlVTRURfT1BUSU9OX1ZBTFVFIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBpc0FycmF5LCBmb2xkZXJMaXN0T3B0aW9uc0J1aWxkZXIgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZ2V0Rm9sZGVySW5ib3hOYW1lLCBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0IH0gZnJvbSAnQ29tbW9uL0NhY2hlJztcblxuaW1wb3J0IHsgbW9tZW50Tm93VW5peCB9IGZyb20gJ0NvbW1vbi9Nb21lbnRvcic7XG5cbmNsYXNzIEZvbGRlclVzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZGlzcGxheVNwZWNTZXR0aW5nID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuc2VudEZvbGRlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZHJhZnRGb2xkZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnNwYW1Gb2xkZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRyYXNoRm9sZGVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hcmNoaXZlRm9sZGVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLm5hbWVzcGFjZSA9ICcnO1xuXG5cdFx0dGhpcy5mb2xkZXJMaXN0ID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmZvbGRlckxpc3Qub3B0aW1pemVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5mb2xkZXJMaXN0LmVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmZvbGRlcnNMb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5mb2xkZXJzQ3JlYXRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZvbGRlcnNEZWxldGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZm9sZGVyc1JlbmFtaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZvbGRlcnNJbmJveFVucmVhZENvdW50ID0ga28ub2JzZXJ2YWJsZSgwKTtcblxuXHRcdHRoaXMuY3VycmVudEZvbGRlciA9IGtvLm9ic2VydmFibGUobnVsbCkuZXh0ZW5kKHsgdG9nZ2xlU3Vic2NyaWJlUHJvcGVydHk6IFt0aGlzLCAnc2VsZWN0ZWQnXSB9KTtcblxuXHRcdHRoaXMuc2lldmVBbGxvd0ZpbGVpbnRvSW5ib3ggPSAhIXNldHRpbmdzR2V0KCdTaWV2ZUFsbG93RmlsZWludG9JbmJveCcpO1xuXG5cdFx0dGhpcy5jb21wdXRlcnMoKTtcblx0XHR0aGlzLnN1YnNjcmliZXJzKCk7XG5cdH1cblxuXHRjb21wdXRlcnMoKSB7XG5cdFx0dGhpcy5kcmFmdEZvbGRlck5vdEVuYWJsZWQgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+ICcnID09PSB0aGlzLmRyYWZ0Rm9sZGVyKCkgfHwgVU5VU0VEX09QVElPTl9WQUxVRSA9PT0gdGhpcy5kcmFmdEZvbGRlcigpXG5cdFx0KTtcblxuXHRcdHRoaXMuZm9sZGVyc0xpc3RXaXRoU2luZ2xlSW5ib3hSb290Rm9sZGVyID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiAhXy5maW5kKHRoaXMuZm9sZGVyTGlzdCgpLCAoZm9sZGVyKSA9PiBmb2xkZXIgJiYgIWZvbGRlci5pc1N5c3RlbUZvbGRlcigpICYmIGZvbGRlci52aXNpYmxlKCkpXG5cdFx0KTtcblxuXHRcdHRoaXMuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3ID0ga28uY29tcHV0ZWQoKCkgPT4gKHRoaXMuY3VycmVudEZvbGRlcigpID8gdGhpcy5jdXJyZW50Rm9sZGVyKCkuZnVsbE5hbWVSYXcgOiAnJykpO1xuXG5cdFx0dGhpcy5jdXJyZW50Rm9sZGVyRnVsbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiAodGhpcy5jdXJyZW50Rm9sZGVyKCkgPyB0aGlzLmN1cnJlbnRGb2xkZXIoKS5mdWxsTmFtZSA6ICcnKSk7XG5cdFx0dGhpcy5jdXJyZW50Rm9sZGVyRnVsbE5hbWVIYXNoID0ga28uY29tcHV0ZWQoKCkgPT4gKHRoaXMuY3VycmVudEZvbGRlcigpID8gdGhpcy5jdXJyZW50Rm9sZGVyKCkuZnVsbE5hbWVIYXNoIDogJycpKTtcblxuXHRcdHRoaXMuZm9sZGVyc0NoYW5naW5nID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbG9hZGluZyA9IHRoaXMuZm9sZGVyc0xvYWRpbmcoKSxcblx0XHRcdFx0Y3JlYXRpbmcgPSB0aGlzLmZvbGRlcnNDcmVhdGluZygpLFxuXHRcdFx0XHRkZWxldGluZyA9IHRoaXMuZm9sZGVyc0RlbGV0aW5nKCksXG5cdFx0XHRcdHJlbmFtaW5nID0gdGhpcy5mb2xkZXJzUmVuYW1pbmcoKTtcblxuXHRcdFx0cmV0dXJuIGxvYWRpbmcgfHwgY3JlYXRpbmcgfHwgZGVsZXRpbmcgfHwgcmVuYW1pbmc7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmZvbGRlckxpc3RTeXN0ZW1OYW1lcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGxpc3QgPSBbZ2V0Rm9sZGVySW5ib3hOYW1lKCldLFxuXHRcdFx0XHRmb2xkZXJzID0gdGhpcy5mb2xkZXJMaXN0KCksXG5cdFx0XHRcdHNlbnRGb2xkZXIgPSB0aGlzLnNlbnRGb2xkZXIoKSxcblx0XHRcdFx0ZHJhZnRGb2xkZXIgPSB0aGlzLmRyYWZ0Rm9sZGVyKCksXG5cdFx0XHRcdHNwYW1Gb2xkZXIgPSB0aGlzLnNwYW1Gb2xkZXIoKSxcblx0XHRcdFx0dHJhc2hGb2xkZXIgPSB0aGlzLnRyYXNoRm9sZGVyKCksXG5cdFx0XHRcdGFyY2hpdmVGb2xkZXIgPSB0aGlzLmFyY2hpdmVGb2xkZXIoKTtcblxuXHRcdFx0aWYgKGlzQXJyYXkoZm9sZGVycykgJiYgMCA8IGZvbGRlcnMubGVuZ3RoKSB7XG5cdFx0XHRcdGlmICgnJyAhPT0gc2VudEZvbGRlciAmJiBVTlVTRURfT1BUSU9OX1ZBTFVFICE9PSBzZW50Rm9sZGVyKSB7XG5cdFx0XHRcdFx0bGlzdC5wdXNoKHNlbnRGb2xkZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICgnJyAhPT0gZHJhZnRGb2xkZXIgJiYgVU5VU0VEX09QVElPTl9WQUxVRSAhPT0gZHJhZnRGb2xkZXIpIHtcblx0XHRcdFx0XHRsaXN0LnB1c2goZHJhZnRGb2xkZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICgnJyAhPT0gc3BhbUZvbGRlciAmJiBVTlVTRURfT1BUSU9OX1ZBTFVFICE9PSBzcGFtRm9sZGVyKSB7XG5cdFx0XHRcdFx0bGlzdC5wdXNoKHNwYW1Gb2xkZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICgnJyAhPT0gdHJhc2hGb2xkZXIgJiYgVU5VU0VEX09QVElPTl9WQUxVRSAhPT0gdHJhc2hGb2xkZXIpIHtcblx0XHRcdFx0XHRsaXN0LnB1c2godHJhc2hGb2xkZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICgnJyAhPT0gYXJjaGl2ZUZvbGRlciAmJiBVTlVTRURfT1BUSU9OX1ZBTFVFICE9PSBhcmNoaXZlRm9sZGVyKSB7XG5cdFx0XHRcdFx0bGlzdC5wdXNoKGFyY2hpdmVGb2xkZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBsaXN0O1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5mb2xkZXJMaXN0U3lzdGVtID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uY29tcGFjdChfLm1hcCh0aGlzLmZvbGRlckxpc3RTeXN0ZW1OYW1lcygpLCAobmFtZSkgPT4gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChuYW1lKSkpXG5cdFx0KTtcblxuXHRcdHRoaXMuZm9sZGVyTWVudUZvck1vdmUgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Zm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFxuXHRcdFx0XHR0aGlzLmZvbGRlckxpc3RTeXN0ZW0oKSxcblx0XHRcdFx0dGhpcy5mb2xkZXJMaXN0KCksXG5cdFx0XHRcdFt0aGlzLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpXSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0KGl0ZW0pID0+IChpdGVtID8gaXRlbS5sb2NhbE5hbWUoKSA6ICcnKVxuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHR0aGlzLmZvbGRlck1lbnVGb3JGaWx0ZXJzID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdGZvbGRlckxpc3RPcHRpb25zQnVpbGRlcihcblx0XHRcdFx0dGhpcy5mb2xkZXJMaXN0U3lzdGVtKCksXG5cdFx0XHRcdHRoaXMuZm9sZGVyTGlzdCgpLFxuXHRcdFx0XHRbdGhpcy5zaWV2ZUFsbG93RmlsZWludG9JbmJveCA/ICcnIDogJ0lOQk9YJ10sXG5cdFx0XHRcdFtbJycsICcnXV0sXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdChpdGVtKSA9PiAoaXRlbSA/IGl0ZW0ubG9jYWxOYW1lKCkgOiAnJylcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0c3Vic2NyaWJlcnMoKSB7XG5cdFx0Y29uc3QgZlJlbW92ZVN5c3RlbUZvbGRlclR5cGUgPSAob2JzZXJ2YWJsZSkgPT4gKCkgPT4ge1xuXHRcdFx0Y29uc3QgZm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChvYnNlcnZhYmxlKCkpO1xuXHRcdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0XHRmb2xkZXIudHlwZShGb2xkZXJUeXBlLlVzZXIpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgZlNldFN5c3RlbUZvbGRlclR5cGUgPSAodHlwZSkgPT4gKHZhbHVlKSA9PiB7XG5cdFx0XHRjb25zdCBmb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KHZhbHVlKTtcblx0XHRcdGlmIChmb2xkZXIpIHtcblx0XHRcdFx0Zm9sZGVyLnR5cGUodHlwZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMuc2VudEZvbGRlci5zdWJzY3JpYmUoZlJlbW92ZVN5c3RlbUZvbGRlclR5cGUodGhpcy5zZW50Rm9sZGVyKSwgdGhpcywgJ2JlZm9yZUNoYW5nZScpO1xuXHRcdHRoaXMuZHJhZnRGb2xkZXIuc3Vic2NyaWJlKGZSZW1vdmVTeXN0ZW1Gb2xkZXJUeXBlKHRoaXMuZHJhZnRGb2xkZXIpLCB0aGlzLCAnYmVmb3JlQ2hhbmdlJyk7XG5cdFx0dGhpcy5zcGFtRm9sZGVyLnN1YnNjcmliZShmUmVtb3ZlU3lzdGVtRm9sZGVyVHlwZSh0aGlzLnNwYW1Gb2xkZXIpLCB0aGlzLCAnYmVmb3JlQ2hhbmdlJyk7XG5cdFx0dGhpcy50cmFzaEZvbGRlci5zdWJzY3JpYmUoZlJlbW92ZVN5c3RlbUZvbGRlclR5cGUodGhpcy50cmFzaEZvbGRlciksIHRoaXMsICdiZWZvcmVDaGFuZ2UnKTtcblx0XHR0aGlzLmFyY2hpdmVGb2xkZXIuc3Vic2NyaWJlKGZSZW1vdmVTeXN0ZW1Gb2xkZXJUeXBlKHRoaXMuYXJjaGl2ZUZvbGRlciksIHRoaXMsICdiZWZvcmVDaGFuZ2UnKTtcblxuXHRcdHRoaXMuc2VudEZvbGRlci5zdWJzY3JpYmUoZlNldFN5c3RlbUZvbGRlclR5cGUoRm9sZGVyVHlwZS5TZW50SXRlbXMpLCB0aGlzKTtcblx0XHR0aGlzLmRyYWZ0Rm9sZGVyLnN1YnNjcmliZShmU2V0U3lzdGVtRm9sZGVyVHlwZShGb2xkZXJUeXBlLkRyYWZ0KSwgdGhpcyk7XG5cdFx0dGhpcy5zcGFtRm9sZGVyLnN1YnNjcmliZShmU2V0U3lzdGVtRm9sZGVyVHlwZShGb2xkZXJUeXBlLlNwYW0pLCB0aGlzKTtcblx0XHR0aGlzLnRyYXNoRm9sZGVyLnN1YnNjcmliZShmU2V0U3lzdGVtRm9sZGVyVHlwZShGb2xkZXJUeXBlLlRyYXNoKSwgdGhpcyk7XG5cdFx0dGhpcy5hcmNoaXZlRm9sZGVyLnN1YnNjcmliZShmU2V0U3lzdGVtRm9sZGVyVHlwZShGb2xkZXJUeXBlLkFyY2hpdmUpLCB0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHRnZXROZXh0Rm9sZGVyTmFtZXMoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW10sXG5cdFx0XHRsaW1pdCA9IDUsXG5cdFx0XHR1dGMgPSBtb21lbnROb3dVbml4KCksXG5cdFx0XHR0aW1lb3V0ID0gdXRjIC0gNjAgKiA1LFxuXHRcdFx0dGltZW91dHMgPSBbXSxcblx0XHRcdGluYm94Rm9sZGVyTmFtZSA9IGdldEZvbGRlckluYm94TmFtZSgpLFxuXHRcdFx0ZlNlYXJjaEZ1bmN0aW9uID0gKGxpc3QpID0+IHtcblx0XHRcdFx0Xy5lYWNoKGxpc3QsIChmb2xkZXIpID0+IHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRmb2xkZXIgJiZcblx0XHRcdFx0XHRcdGluYm94Rm9sZGVyTmFtZSAhPT0gZm9sZGVyLmZ1bGxOYW1lUmF3ICYmXG5cdFx0XHRcdFx0XHRmb2xkZXIuc2VsZWN0YWJsZSAmJlxuXHRcdFx0XHRcdFx0Zm9sZGVyLmV4aXN0ZW4gJiZcblx0XHRcdFx0XHRcdHRpbWVvdXQgPiBmb2xkZXIuaW50ZXJ2YWwgJiZcblx0XHRcdFx0XHRcdChmb2xkZXIuaXNTeXN0ZW1Gb2xkZXIoKSB8fCAoZm9sZGVyLnN1YlNjcmliZWQoKSAmJiBmb2xkZXIuY2hlY2thYmxlKCkpKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0dGltZW91dHMucHVzaChbZm9sZGVyLmludGVydmFsLCBmb2xkZXIuZnVsbE5hbWVSYXddKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoZm9sZGVyICYmIDAgPCBmb2xkZXIuc3ViRm9sZGVycygpLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0ZlNlYXJjaEZ1bmN0aW9uKGZvbGRlci5zdWJGb2xkZXJzKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9O1xuXG5cdFx0ZlNlYXJjaEZ1bmN0aW9uKHRoaXMuZm9sZGVyTGlzdCgpKTtcblxuXHRcdHRpbWVvdXRzLnNvcnQoKGEsIGIpID0+IHtcblx0XHRcdGlmIChhWzBdIDwgYlswXSkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9IGVsc2UgaWYgKGFbMF0gPiBiWzBdKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9KTtcblxuXHRcdF8uZmluZCh0aW1lb3V0cywgKGFJdGVtKSA9PiB7XG5cdFx0XHRjb25zdCBmb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KGFJdGVtWzFdKTtcblx0XHRcdGlmIChmb2xkZXIpIHtcblx0XHRcdFx0Zm9sZGVyLmludGVydmFsID0gdXRjO1xuXHRcdFx0XHRyZXN1bHQucHVzaChhSXRlbVsxXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBsaW1pdCA8PSByZXN1bHQubGVuZ3RoO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIF8udW5pcShyZXN1bHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBGb2xkZXJVc2VyU3RvcmUoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmluZFwiKTsiLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgJCBmcm9tICckJztcblxuaW1wb3J0IHsgTWFnaWNzLCBMYXlvdXQsIEZvY3VzZWQsIE1lc3NhZ2VTZXRBY3Rpb24sIFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQge1xuXHR0cmltLFxuXHRpc05vcm1hbCxcblx0aXNBcnJheSxcblx0aW5BcnJheSxcblx0cEludCxcblx0cFN0cmluZyxcblx0cGxhaW5Ub0h0bWwsXG5cdHdpbmRvd1Jlc2l6ZSxcblx0ZmluZEVtYWlsQW5kTGlua3MsXG5cdGdldFJlYWxIZWlnaHRcbn0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHtcblx0Z2V0Rm9sZGVySW5ib3hOYW1lLFxuXHRhZGROZXdNZXNzYWdlQ2FjaGUsXG5cdHNldEZvbGRlclVpZE5leHQsXG5cdGdldEZvbGRlckZyb21DYWNoZUxpc3QsXG5cdHNldEZvbGRlckhhc2gsXG5cdGluaXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUsXG5cdGFkZFJlcXVlc3RlZE1lc3NhZ2UsXG5cdGNsZWFyTWVzc2FnZUZsYWdzRnJvbUNhY2hlQnlGb2xkZXIsXG5cdGhhc05ld01lc3NhZ2VBbmRSZW1vdmVGcm9tQ2FjaGUsXG5cdHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZSxcblx0Y2xlYXJOZXdNZXNzYWdlQ2FjaGVcbn0gZnJvbSAnQ29tbW9uL0NhY2hlJztcblxuaW1wb3J0IHsgTUVTU0FHRV9CT0RZX0NBQ0hFX0xJTUlUIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBkYXRhIGFzIEdsb2JhbHNEYXRhLCAkZGl2IH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgbWFpbEJveCwgbm90aWZpY2F0aW9uTWFpbEljb24gfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgaTE4biwgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgbW9tZW50Tm93VW5peCB9IGZyb20gJ0NvbW1vbi9Nb21lbnRvcic7XG5cbmltcG9ydCAqIGFzIE1lc3NhZ2VIZWxwZXIgZnJvbSAnSGVscGVyL01lc3NhZ2UnO1xuaW1wb3J0IHsgTWVzc2FnZU1vZGVsIH0gZnJvbSAnTW9kZWwvTWVzc2FnZSc7XG5cbmltcG9ydCB7IHNldEhhc2ggfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IEFjY291bnRTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BY2NvdW50JztcbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IFBncFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1BncCc7XG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9TZXR0aW5ncyc7XG5pbXBvcnQgTm90aWZpY2F0aW9uU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvTm90aWZpY2F0aW9uJztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmNsYXNzIE1lc3NhZ2VVc2VyU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnN0YXRpY01lc3NhZ2UgPSBuZXcgTWVzc2FnZU1vZGVsKCk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0ID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0Q291bnQgPSBrby5vYnNlcnZhYmxlKDApO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RTZWFyY2ggPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0VGhyZWFkVWlkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdFBhZ2UgPSBrby5vYnNlcnZhYmxlKDEpO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RQYWdlQmVmb3JlVGhyZWFkID0ga28ub2JzZXJ2YWJsZSgxKTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0RXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RFbmRGb2xkZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kU2VhcmNoID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdEVuZFRocmVhZFVpZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RFbmRQYWdlID0ga28ub2JzZXJ2YWJsZSgxKTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RMb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdElzTm90Q29tcGxldGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDIwMCB9KTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGVGb3JBbmltYXRpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBzcGVjaWFsVGhyb3R0bGU6IDcwMCB9KTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3REaXNhYmxlQXV0b1NlbGVjdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogNTAwIH0pO1xuXG5cdFx0dGhpcy5zZWxlY3Rvck1lc3NhZ2VTZWxlY3RlZCA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cdFx0dGhpcy5zZWxlY3Rvck1lc3NhZ2VGb2N1c2VkID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdC8vIG1lc3NhZ2Ugdmlld2VyXG5cdFx0dGhpcy5tZXNzYWdlID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdHRoaXMubWVzc2FnZS52aWV3VHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5tZXNzYWdlRXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMubWVzc2FnZUN1cnJlbnRMb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMb2FkaW5nVGhyb3R0bGUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWU1MG1zIH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlRnVsbFNjcmVlbk1vZGUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMubWVzc2FnZXNCb2RpZXNEb20gPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMubWVzc2FnZUFjdGl2ZURvbSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLmNvbXB1dGVycygpO1xuXHRcdHRoaXMuc3Vic2NyaWJlcnMoKTtcblxuXHRcdHRoaXMub25NZXNzYWdlUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vbk1lc3NhZ2VSZXNwb25zZSwgdGhpcyk7XG5cblx0XHR0aGlzLnB1cmdlTWVzc2FnZUJvZHlDYWNoZVRocm90dGxlID0gXy50aHJvdHRsZSh0aGlzLnB1cmdlTWVzc2FnZUJvZHlDYWNoZSwgTWFnaWNzLlRpbWUzMHMpO1xuXHR9XG5cblx0Y29tcHV0ZXJzKCkge1xuXHRcdHRoaXMubWVzc2FnZUxvYWRpbmcgPSBrby5jb21wdXRlZCgoKSA9PiB0aGlzLm1lc3NhZ2VDdXJyZW50TG9hZGluZygpKTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RFbmRIYXNoID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PlxuXHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kRm9sZGVyKCkgK1xuXHRcdFx0XHQnfCcgK1xuXHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kU2VhcmNoKCkgK1xuXHRcdFx0XHQnfCcgK1xuXHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kVGhyZWFkVWlkKCkgK1xuXHRcdFx0XHQnfCcgK1xuXHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kUGFnZSgpXG5cdFx0KTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RQYWdlQ291bnQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBwYWdlID0gd2luZG93Lk1hdGguY2VpbCh0aGlzLm1lc3NhZ2VMaXN0Q291bnQoKSAvIFNldHRpbmdzU3RvcmUubWVzc2FnZXNQZXJQYWdlKCkpO1xuXHRcdFx0cmV0dXJuIDAgPj0gcGFnZSA/IDEgOiBwYWdlO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tYWluTWVzc2FnZUxpc3RTZWFyY2ggPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0aGlzLm1lc3NhZ2VMaXN0U2VhcmNoLFxuXHRcdFx0d3JpdGU6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRzZXRIYXNoKFxuXHRcdFx0XHRcdG1haWxCb3goRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lSGFzaCgpLCAxLCB0cmltKHZhbHVlLnRvU3RyaW5nKCkpLCB0aGlzLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKCkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3Qgb25lID0gdGhpcy5tZXNzYWdlTGlzdExvYWRpbmcoKSxcblx0XHRcdFx0dHdvID0gdGhpcy5tZXNzYWdlTGlzdElzTm90Q29tcGxldGVkKCk7XG5cdFx0XHRyZXR1cm4gb25lIHx8IHR3bztcblx0XHR9KTtcblxuXHRcdHRoaXMuaXNNZXNzYWdlU2VsZWN0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiBudWxsICE9PSB0aGlzLm1lc3NhZ2UoKSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZCA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy5tZXNzYWdlTGlzdCgpLCAoaXRlbSkgPT4gaXRlbS5jaGVja2VkKCkpKVxuXHRcdFx0LmV4dGVuZCh7IHJhdGVMaW1pdDogMCB9KTtcblxuXHRcdHRoaXMuaGFzQ2hlY2tlZE1lc3NhZ2VzID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHRoaXMubWVzc2FnZUxpc3RDaGVja2VkKCkubGVuZ3RoKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBjaGVja2VkID0gdGhpcy5tZXNzYWdlTGlzdENoZWNrZWQoKSxcblx0XHRcdFx0c2VsZWN0ZWRNZXNzYWdlID0gdGhpcy5zZWxlY3Rvck1lc3NhZ2VTZWxlY3RlZCgpLFxuXHRcdFx0XHRmb2N1c2VkTWVzc2FnZSA9IHRoaXMuc2VsZWN0b3JNZXNzYWdlRm9jdXNlZCgpO1xuXG5cdFx0XHRpZiAoY2hlY2tlZC5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIF8udW5pb24oY2hlY2tlZCwgc2VsZWN0ZWRNZXNzYWdlID8gW3NlbGVjdGVkTWVzc2FnZV0gOiBbXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHNlbGVjdGVkTWVzc2FnZSkge1xuXHRcdFx0XHRyZXR1cm4gW3NlbGVjdGVkTWVzc2FnZV07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmb2N1c2VkTWVzc2FnZSA/IFtmb2N1c2VkTWVzc2FnZV0gOiBbXTtcblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gW107XG5cdFx0XHRfLmVhY2godGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKCksIChtZXNzYWdlKSA9PiB7XG5cdFx0XHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2gobWVzc2FnZS51aWQpO1xuXHRcdFx0XHRcdGlmICgxIDwgbWVzc2FnZS50aHJlYWRzTGVuKCkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IF8udW5pb24ocmVzdWx0LCBtZXNzYWdlLnRocmVhZHMoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSk7XG5cdH1cblxuXHRzdWJzY3JpYmVycygpIHtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdHZhbHVlID0gISF2YWx1ZTtcblx0XHRcdHRoaXMubWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmdUaHJvdHRsZSh2YWx1ZSk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGVGb3JBbmltYXRpb24odmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdC5zdWJzY3JpYmUoXG5cdFx0XHRfLmRlYm91bmNlKChsaXN0KSA9PiB7XG5cdFx0XHRcdF8uZWFjaChsaXN0LCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdGlmIChpdGVtICYmIGl0ZW0ubmV3Rm9yQW5pbWF0aW9uKCkpIHtcblx0XHRcdFx0XHRcdGl0ZW0ubmV3Rm9yQW5pbWF0aW9uKGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWU1MDBtcylcblx0XHQpO1xuXG5cdFx0dGhpcy5tZXNzYWdlLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdFx0aWYgKExheW91dC5Ob1ByZXZpZXcgPT09IFNldHRpbmdzU3RvcmUubGF5b3V0KCkpIHtcblx0XHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlVmlldyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLk1lc3NhZ2VMaXN0KTtcblxuXHRcdFx0XHR0aGlzLm1lc3NhZ2VGdWxsU2NyZWVuTW9kZShmYWxzZSk7XG5cdFx0XHRcdHRoaXMuaGlkZU1lc3NhZ2VCb2RpZXMoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZUxvYWRpbmcuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0dGhpcy5tZXNzYWdlTG9hZGluZ1Rocm90dGxlKHZhbHVlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZXNCb2RpZXNEb20uc3Vic2NyaWJlKChkb20pID0+IHtcblx0XHRcdGlmIChkb20gJiYgIShkb20gaW5zdGFuY2VvZiAkKSkge1xuXHRcdFx0XHR0aGlzLm1lc3NhZ2VzQm9kaWVzRG9tKCQoZG9tKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kRm9sZGVyLnN1YnNjcmliZSgoZm9sZGVyKSA9PiB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlKCk7XG5cdFx0XHRpZiAobWVzc2FnZSAmJiBmb2xkZXIgJiYgZm9sZGVyICE9PSBtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3KSB7XG5cdFx0XHRcdHRoaXMubWVzc2FnZShudWxsKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHB1cmdlTWVzc2FnZUJvZHlDYWNoZSgpIHtcblx0XHRsZXQgY291bnQgPSAwO1xuXHRcdGNvbnN0IGVuZCA9IEdsb2JhbHNEYXRhLmlNZXNzYWdlQm9keUNhY2hlQ291bnQgLSBNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQ7XG5cblx0XHRpZiAoMCA8IGVuZCkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZXNEb20gPSB0aGlzLm1lc3NhZ2VzQm9kaWVzRG9tKCk7XG5cdFx0XHRpZiAobWVzc2FnZXNEb20pIHtcblx0XHRcdFx0bWVzc2FnZXNEb20uZmluZCgnLnJsLWNhY2hlLWNsYXNzJykuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtID0gJCh0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0XHRpZiAoZW5kID4gaXRlbS5kYXRhKCdybC1jYWNoZS1jb3VudCcpKSB7XG5cdFx0XHRcdFx0XHRpdGVtLmFkZENsYXNzKCdybC1jYWNoZS1wdXJnZScpO1xuXHRcdFx0XHRcdFx0Y291bnQgKz0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmICgwIDwgY291bnQpIHtcblx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IG1lc3NhZ2VzRG9tLmZpbmQoJy5ybC1jYWNoZS1wdXJnZScpLnJlbW92ZSgpLCBNYWdpY3MuVGltZTM1MG1zKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGluaXRVaWROZXh0QW5kTmV3TWVzc2FnZXMoZm9sZGVyLCB1aWROZXh0LCBuZXdNZXNzYWdlcykge1xuXHRcdGlmIChnZXRGb2xkZXJJbmJveE5hbWUoKSA9PT0gZm9sZGVyICYmIGlzTm9ybWFsKHVpZE5leHQpICYmICcnICE9PSB1aWROZXh0KSB7XG5cdFx0XHRpZiAoaXNBcnJheShuZXdNZXNzYWdlcykgJiYgMCA8IG5ld01lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdFx0XHRfLmVhY2gobmV3TWVzc2FnZXMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0YWRkTmV3TWVzc2FnZUNhY2hlKGZvbGRlciwgaXRlbS5VaWQpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHROb3RpZmljYXRpb25TdG9yZS5wbGF5U291bmROb3RpZmljYXRpb24oKTtcblxuXHRcdFx0XHRjb25zdCBsZW4gPSBuZXdNZXNzYWdlcy5sZW5ndGg7XG5cdFx0XHRcdGlmICgzIDwgbGVuKSB7XG5cdFx0XHRcdFx0Tm90aWZpY2F0aW9uU3RvcmUuZGlzcGxheURlc2t0b3BOb3RpZmljYXRpb24oXG5cdFx0XHRcdFx0XHRub3RpZmljYXRpb25NYWlsSWNvbigpLFxuXHRcdFx0XHRcdFx0QWNjb3VudFN0b3JlLmVtYWlsKCksXG5cdFx0XHRcdFx0XHRpMThuKCdNRVNTQUdFX0xJU1QvTkVXX01FU1NBR0VfTk9USUZJQ0FUSU9OJywge1xuXHRcdFx0XHRcdFx0XHQnQ09VTlQnOiBsZW5cblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0eyAnRm9sZGVyJzogJycsICdVaWQnOiAnJyB9XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRfLmVhY2gobmV3TWVzc2FnZXMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHROb3RpZmljYXRpb25TdG9yZS5kaXNwbGF5RGVza3RvcE5vdGlmaWNhdGlvbihcblx0XHRcdFx0XHRcdFx0bm90aWZpY2F0aW9uTWFpbEljb24oKSxcblx0XHRcdFx0XHRcdFx0TWVzc2FnZUhlbHBlci5lbWFpbEFycmF5VG9TdHJpbmcoTWVzc2FnZUhlbHBlci5lbWFpbEFycmF5RnJvbUpzb24oaXRlbS5Gcm9tKSwgZmFsc2UpLFxuXHRcdFx0XHRcdFx0XHRpdGVtLlN1YmplY3QsXG5cdFx0XHRcdFx0XHRcdHsgJ0ZvbGRlcic6IGl0ZW0uRm9sZGVyLCAnVWlkJzogaXRlbS5VaWQgfVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRzZXRGb2xkZXJVaWROZXh0KGZvbGRlciwgdWlkTmV4dCk7XG5cdFx0fVxuXHR9XG5cblx0aGlkZU1lc3NhZ2VCb2RpZXMoKSB7XG5cdFx0Y29uc3QgbWVzc2FnZXNEb20gPSB0aGlzLm1lc3NhZ2VzQm9kaWVzRG9tKCk7XG5cdFx0aWYgKG1lc3NhZ2VzRG9tKSB7XG5cdFx0XHRtZXNzYWdlc0RvbS5maW5kKCcuYi10ZXh0LXBhcnQnKS5oaWRlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmcm9tRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtBcnJheX0gdWlkRm9yUmVtb3ZlXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gdG9Gb2xkZXJGdWxsTmFtZVJhdyA9ICcnXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGNvcHkgPSBmYWxzZVxuXHQgKi9cblx0cmVtb3ZlTWVzc2FnZXNGcm9tTGlzdChmcm9tRm9sZGVyRnVsbE5hbWVSYXcsIHVpZEZvclJlbW92ZSwgdG9Gb2xkZXJGdWxsTmFtZVJhdyA9ICcnLCBjb3B5ID0gZmFsc2UpIHtcblx0XHR1aWRGb3JSZW1vdmUgPSBfLm1hcCh1aWRGb3JSZW1vdmUsIChtVmFsdWUpID0+IHBJbnQobVZhbHVlKSk7XG5cblx0XHRsZXQgdW5zZWVuQ291bnQgPSAwLFxuXHRcdFx0bWVzc2FnZUxpc3QgPSB0aGlzLm1lc3NhZ2VMaXN0KCksXG5cdFx0XHRjdXJyZW50TWVzc2FnZSA9IHRoaXMubWVzc2FnZSgpO1xuXG5cdFx0Y29uc3QgdHJhc2hGb2xkZXIgPSBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcigpLFxuXHRcdFx0c3BhbUZvbGRlciA9IEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKSxcblx0XHRcdGZyb21Gb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KGZyb21Gb2xkZXJGdWxsTmFtZVJhdyksXG5cdFx0XHR0b0ZvbGRlciA9ICcnID09PSB0b0ZvbGRlckZ1bGxOYW1lUmF3ID8gbnVsbCA6IGdldEZvbGRlckZyb21DYWNoZUxpc3QodG9Gb2xkZXJGdWxsTmFtZVJhdyB8fCAnJyksXG5cdFx0XHRjdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcgPSBGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdG1lc3NhZ2VzID1cblx0XHRcdFx0Y3VycmVudEZvbGRlckZ1bGxOYW1lUmF3ID09PSBmcm9tRm9sZGVyRnVsbE5hbWVSYXdcblx0XHRcdFx0XHQ/IF8uZmlsdGVyKG1lc3NhZ2VMaXN0LCAoaXRlbSkgPT4gaXRlbSAmJiAtMSA8IGluQXJyYXkocEludChpdGVtLnVpZCksIHVpZEZvclJlbW92ZSkpXG5cdFx0XHRcdFx0OiBbXTtcblxuXHRcdF8uZWFjaChtZXNzYWdlcywgKGl0ZW0pID0+IHtcblx0XHRcdGlmIChpdGVtICYmIGl0ZW0udW5zZWVuKCkpIHtcblx0XHRcdFx0dW5zZWVuQ291bnQgKz0gMTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmIChmcm9tRm9sZGVyICYmICFjb3B5KSB7XG5cdFx0XHRmcm9tRm9sZGVyLm1lc3NhZ2VDb3VudEFsbChcblx0XHRcdFx0MCA8PSBmcm9tRm9sZGVyLm1lc3NhZ2VDb3VudEFsbCgpIC0gdWlkRm9yUmVtb3ZlLmxlbmd0aCA/IGZyb21Gb2xkZXIubWVzc2FnZUNvdW50QWxsKCkgLSB1aWRGb3JSZW1vdmUubGVuZ3RoIDogMFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKDAgPCB1bnNlZW5Db3VudCkge1xuXHRcdFx0XHRmcm9tRm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZChcblx0XHRcdFx0XHQwIDw9IGZyb21Gb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKCkgLSB1bnNlZW5Db3VudCA/IGZyb21Gb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKCkgLSB1bnNlZW5Db3VudCA6IDBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodG9Gb2xkZXIpIHtcblx0XHRcdGlmICh0cmFzaEZvbGRlciA9PT0gdG9Gb2xkZXIuZnVsbE5hbWVSYXcgfHwgc3BhbUZvbGRlciA9PT0gdG9Gb2xkZXIuZnVsbE5hbWVSYXcpIHtcblx0XHRcdFx0dW5zZWVuQ291bnQgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHR0b0ZvbGRlci5tZXNzYWdlQ291bnRBbGwodG9Gb2xkZXIubWVzc2FnZUNvdW50QWxsKCkgKyB1aWRGb3JSZW1vdmUubGVuZ3RoKTtcblx0XHRcdGlmICgwIDwgdW5zZWVuQ291bnQpIHtcblx0XHRcdFx0dG9Gb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKHRvRm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZCgpICsgdW5zZWVuQ291bnQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0b0ZvbGRlci5hY3Rpb25CbGluayh0cnVlKTtcblx0XHR9XG5cblx0XHRpZiAoMCA8IG1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdFx0aWYgKGNvcHkpIHtcblx0XHRcdFx0Xy5lYWNoKG1lc3NhZ2VzLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdGl0ZW0uY2hlY2tlZChmYWxzZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdElzTm90Q29tcGxldGVkKHRydWUpO1xuXG5cdFx0XHRcdF8uZWFjaChtZXNzYWdlcywgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRpZiAoY3VycmVudE1lc3NhZ2UgJiYgY3VycmVudE1lc3NhZ2UuaGFzaCA9PT0gaXRlbS5oYXNoKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50TWVzc2FnZSA9IG51bGw7XG5cdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aXRlbS5kZWxldGVkKHRydWUpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRfLmVhY2gobWVzc2FnZXMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0LnJlbW92ZShpdGVtKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSwgTWFnaWNzLlRpbWUzNTBtcyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCcnICE9PSBmcm9tRm9sZGVyRnVsbE5hbWVSYXcpIHtcblx0XHRcdHNldEZvbGRlckhhc2goZnJvbUZvbGRlckZ1bGxOYW1lUmF3LCAnJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCcnICE9PSB0b0ZvbGRlckZ1bGxOYW1lUmF3KSB7XG5cdFx0XHRzZXRGb2xkZXJIYXNoKHRvRm9sZGVyRnVsbE5hbWVSYXcsICcnKTtcblx0XHR9XG5cblx0XHRpZiAoJycgIT09IHRoaXMubWVzc2FnZUxpc3RUaHJlYWRVaWQoKSkge1xuXHRcdFx0bWVzc2FnZUxpc3QgPSB0aGlzLm1lc3NhZ2VMaXN0KCk7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0bWVzc2FnZUxpc3QgJiZcblx0XHRcdFx0MCA8IG1lc3NhZ2VMaXN0Lmxlbmd0aCAmJlxuXHRcdFx0XHQhIV8uZmluZChtZXNzYWdlTGlzdCwgKGl0ZW0pID0+ICEhKGl0ZW0gJiYgaXRlbS5kZWxldGVkKCkgJiYgaXRlbS51aWQgPT09IHRoaXMubWVzc2FnZUxpc3RUaHJlYWRVaWQoKSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IF8uZmluZChtZXNzYWdlTGlzdCwgKGl0ZW0pID0+IGl0ZW0gJiYgIWl0ZW0uZGVsZXRlZCgpKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2UgJiYgdGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZCgpICE9PSBwU3RyaW5nKG1lc3NhZ2UudWlkKSkge1xuXHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RUaHJlYWRVaWQocFN0cmluZyhtZXNzYWdlLnVpZCkpO1xuXG5cdFx0XHRcdFx0c2V0SGFzaChcblx0XHRcdFx0XHRcdG1haWxCb3goXG5cdFx0XHRcdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZUhhc2goKSxcblx0XHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdFBhZ2UoKSxcblx0XHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdFNlYXJjaCgpLFxuXHRcdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKClcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIW1lc3NhZ2UpIHtcblx0XHRcdFx0XHRpZiAoMSA8IHRoaXMubWVzc2FnZUxpc3RQYWdlKCkpIHtcblx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RQYWdlKHRoaXMubWVzc2FnZUxpc3RQYWdlKCkgLSAxKTtcblxuXHRcdFx0XHRcdFx0c2V0SGFzaChcblx0XHRcdFx0XHRcdFx0bWFpbEJveChcblx0XHRcdFx0XHRcdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVIYXNoKCksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdFBhZ2UoKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0U2VhcmNoKCksXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZCgpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RUaHJlYWRVaWQoJycpO1xuXG5cdFx0XHRcdFx0XHRzZXRIYXNoKFxuXHRcdFx0XHRcdFx0XHRtYWlsQm94KFxuXHRcdFx0XHRcdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZUhhc2goKSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0UGFnZUJlZm9yZVRocmVhZCgpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3RTZWFyY2goKVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gbWVzc2FnZVRleHRCb2R5XG5cdCAqL1xuXHRpbml0QmxvY2txdW90ZVN3aXRjaGVyKG1lc3NhZ2VUZXh0Qm9keSkge1xuXHRcdGlmIChtZXNzYWdlVGV4dEJvZHkpIHtcblx0XHRcdGNvbnN0ICRvTGlzdCA9ICQoJ2Jsb2NrcXVvdGU6bm90KC5ybC1icS1zd2l0Y2hlciknLCBtZXNzYWdlVGV4dEJvZHkpLmZpbHRlcihmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQwID09PVxuXHRcdFx0XHRcdCQodGhpcylcblx0XHRcdFx0XHRcdC5wYXJlbnQoKVxuXHRcdFx0XHRcdFx0LmNsb3Nlc3QoJ2Jsb2NrcXVvdGUnLCBtZXNzYWdlVGV4dEJvZHkpLmxlbmd0aFxuXHRcdFx0XHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmICgkb0xpc3QgJiYgMCA8ICRvTGlzdC5sZW5ndGgpIHtcblx0XHRcdFx0JG9MaXN0LmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0Y29uc3QgJHRoaXMgPSAkKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXG5cdFx0XHRcdFx0bGV0IGggPSAkdGhpcy5oZWlnaHQoKTtcblx0XHRcdFx0XHRpZiAoMCA9PT0gaCkge1xuXHRcdFx0XHRcdFx0aCA9IGdldFJlYWxIZWlnaHQoJHRoaXMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICgnJyAhPT0gdHJpbSgkdGhpcy50ZXh0KCkpICYmICgwID09PSBoIHx8IDEwMCA8IGgpKSB7XG5cdFx0XHRcdFx0XHQkdGhpcy5hZGRDbGFzcygncmwtYnEtc3dpdGNoZXIgaGlkZGVuLWJxJyk7XG5cdFx0XHRcdFx0XHQkKCc8c3BhbiBjbGFzcz1cInJsQmxvY2txdW90ZVN3aXRjaGVyXCI+PGkgY2xhc3M9XCJpY29uLWVsbGlwc2lzXCIgLz48L3NwYW4+Jylcblx0XHRcdFx0XHRcdFx0Lmluc2VydEJlZm9yZSgkdGhpcylcblx0XHRcdFx0XHRcdFx0Lm9uKCdjbGljay5ybEJsb2NrcXVvdGVTd2l0Y2hlcicsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy50b2dnbGVDbGFzcygnaGlkZGVuLWJxJyk7XG5cdFx0XHRcdFx0XHRcdFx0d2luZG93UmVzaXplKCk7XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC5hZnRlcignPGJyIC8+Jylcblx0XHRcdFx0XHRcdFx0LmJlZm9yZSgnPGJyIC8+Jyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IG1lc3NhZ2VUZXh0Qm9keVxuXHQgKiBAcGFyYW0ge09iamVjdH0gbWVzc2FnZVxuXHQgKi9cblx0aW5pdE9wZW5QZ3BDb250cm9scyhtZXNzYWdlVGV4dEJvZHksIG1lc3NhZ2UpIHtcblx0XHRpZiAobWVzc2FnZVRleHRCb2R5ICYmIG1lc3NhZ2VUZXh0Qm9keS5maW5kKSB7XG5cdFx0XHRtZXNzYWdlVGV4dEJvZHkuZmluZCgnLmItcGxhaW4tb3BlbnBncDpub3QoLmluaXRlZCknKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRQZ3BTdG9yZS5pbml0TWVzc2FnZUJvZHlDb250cm9scygkKHRoaXMpLCBtZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHNldE1lc3NhZ2UoZGF0YSwgY2FjaGVkKSB7XG5cdFx0bGV0IGlzTmV3ID0gZmFsc2UsXG5cdFx0XHRib2R5ID0gbnVsbCxcblx0XHRcdGlkID0gJycsXG5cdFx0XHRwbGFpbiA9ICcnLFxuXHRcdFx0cmVzdWx0SHRtbCA9ICcnLFxuXHRcdFx0cGdwU2lnbmVkID0gZmFsc2UsXG5cdFx0XHRtZXNzYWdlc0RvbSA9IHRoaXMubWVzc2FnZXNCb2RpZXNEb20oKSxcblx0XHRcdHNlbGVjdGVkTWVzc2FnZSA9IHRoaXMuc2VsZWN0b3JNZXNzYWdlU2VsZWN0ZWQoKSxcblx0XHRcdG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2UoKTtcblxuXHRcdGlmIChcblx0XHRcdGRhdGEgJiZcblx0XHRcdG1lc3NhZ2UgJiZcblx0XHRcdGRhdGEuUmVzdWx0ICYmXG5cdFx0XHQnT2JqZWN0L01lc3NhZ2UnID09PSBkYXRhLlJlc3VsdFsnQE9iamVjdCddICYmXG5cdFx0XHRtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3ID09PSBkYXRhLlJlc3VsdC5Gb2xkZXJcblx0XHQpIHtcblx0XHRcdGNvbnN0IHRocmVhZHMgPSBtZXNzYWdlLnRocmVhZHMoKTtcblx0XHRcdGlmIChtZXNzYWdlLnVpZCAhPT0gZGF0YS5SZXN1bHQuVWlkICYmIDEgPCB0aHJlYWRzLmxlbmd0aCAmJiAtMSA8IGluQXJyYXkoZGF0YS5SZXN1bHQuVWlkLCB0aHJlYWRzKSkge1xuXHRcdFx0XHRtZXNzYWdlID0gTWVzc2FnZU1vZGVsLm5ld0luc3RhbmNlRnJvbUpzb24oZGF0YS5SZXN1bHQpO1xuXHRcdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHRcdG1lc3NhZ2UudGhyZWFkcyh0aHJlYWRzKTtcblx0XHRcdFx0XHRpbml0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKG1lc3NhZ2UpO1xuXG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlKHRoaXMuc3RhdGljTWVzc2FnZS5wb3B1bGF0ZUJ5TWVzc2FnZUxpc3RJdGVtKG1lc3NhZ2UpKTtcblx0XHRcdFx0XHRtZXNzYWdlID0gdGhpcy5tZXNzYWdlKCk7XG5cblx0XHRcdFx0XHRpc05ldyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS51aWQgPT09IGRhdGEuUmVzdWx0LlVpZCkge1xuXHRcdFx0XHR0aGlzLm1lc3NhZ2VFcnJvcignJyk7XG5cblx0XHRcdFx0bWVzc2FnZS5pbml0VXBkYXRlQnlNZXNzYWdlSnNvbihkYXRhLlJlc3VsdCk7XG5cdFx0XHRcdGFkZFJlcXVlc3RlZE1lc3NhZ2UobWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdywgbWVzc2FnZS51aWQpO1xuXG5cdFx0XHRcdGlmICghY2FjaGVkKSB7XG5cdFx0XHRcdFx0bWVzc2FnZS5pbml0RmxhZ3NCeUpzb24oZGF0YS5SZXN1bHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bWVzc2FnZXNEb20gPSBtZXNzYWdlc0RvbSAmJiBtZXNzYWdlc0RvbVswXSA/IG1lc3NhZ2VzRG9tIDogbnVsbDtcblx0XHRcdFx0aWYgKG1lc3NhZ2VzRG9tKSB7XG5cdFx0XHRcdFx0aWQgPSAncmwtbWdzLScgKyBtZXNzYWdlLmhhc2gucmVwbGFjZSgvW15hLXpBLVowLTldL2csICcnKTtcblxuXHRcdFx0XHRcdGNvbnN0IHRleHRCb2R5ID0gbWVzc2FnZXNEb20uZmluZCgnIycgKyBpZCk7XG5cdFx0XHRcdFx0aWYgKCF0ZXh0Qm9keSB8fCAhdGV4dEJvZHlbMF0pIHtcblx0XHRcdFx0XHRcdGxldCBpc0h0bWwgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGlmIChpc05vcm1hbChkYXRhLlJlc3VsdC5IdG1sKSAmJiAnJyAhPT0gZGF0YS5SZXN1bHQuSHRtbCkge1xuXHRcdFx0XHRcdFx0XHRpc0h0bWwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRIdG1sID0gZGF0YS5SZXN1bHQuSHRtbC50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpc05vcm1hbChkYXRhLlJlc3VsdC5QbGFpbikgJiYgJycgIT09IGRhdGEuUmVzdWx0LlBsYWluKSB7XG5cdFx0XHRcdFx0XHRcdGlzSHRtbCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRIdG1sID0gcGxhaW5Ub0h0bWwoZGF0YS5SZXN1bHQuUGxhaW4udG9TdHJpbmcoKSwgZmFsc2UpO1xuXG5cdFx0XHRcdFx0XHRcdGlmICgobWVzc2FnZS5pc1BncFNpZ25lZCgpIHx8IG1lc3NhZ2UuaXNQZ3BFbmNyeXB0ZWQoKSkgJiYgUGdwU3RvcmUuY2FwYU9wZW5QR1AoKSkge1xuXHRcdFx0XHRcdFx0XHRcdHBsYWluID0gcFN0cmluZyhkYXRhLlJlc3VsdC5QbGFpbik7XG5cblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1BncEVuY3J5cHRlZCA9IC8tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS8udGVzdChwbGFpbik7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFpc1BncEVuY3J5cHRlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGdwU2lnbmVkID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly0tLS0tQkVHSU4gUEdQIFNJR05FRCBNRVNTQUdFLS0tLS0vLnRlc3QocGxhaW4pICYmIC8tLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLS8udGVzdChwbGFpbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0JGRpdi5lbXB0eSgpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChwZ3BTaWduZWQgJiYgbWVzc2FnZS5pc1BncFNpZ25lZCgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHRIdG1sID0gJGRpdi5hcHBlbmQoJCgnPHByZSBjbGFzcz1cImItcGxhaW4tb3BlbnBncCBzaWduZWRcIj48L3ByZT4nKS50ZXh0KHBsYWluKSkuaHRtbCgpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNQZ3BFbmNyeXB0ZWQgJiYgbWVzc2FnZS5pc1BncEVuY3J5cHRlZCgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHRIdG1sID0gJGRpdi5hcHBlbmQoJCgnPHByZSBjbGFzcz1cImItcGxhaW4tb3BlbnBncCBlbmNyeXB0ZWRcIj48L3ByZT4nKS50ZXh0KHBsYWluKSkuaHRtbCgpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHRIdG1sID0gJzxwcmU+JyArIHJlc3VsdEh0bWwgKyAnPC9wcmU+Jztcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQkZGl2LmVtcHR5KCk7XG5cblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLmlzUGdwU2lnbmVkKHBncFNpZ25lZCk7XG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZS5pc1BncEVuY3J5cHRlZChpc1BncEVuY3J5cHRlZCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0SHRtbCA9ICc8cHJlPicgKyByZXN1bHRIdG1sICsgJzwvcHJlPic7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGlzSHRtbCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRIdG1sID0gJzxwcmU+JyArIHJlc3VsdEh0bWwgKyAnPC9wcmU+Jztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuaU1lc3NhZ2VCb2R5Q2FjaGVDb3VudCArPSAxO1xuXG5cdFx0XHRcdFx0XHRib2R5ID0gJCgnPGRpdiBpZD1cIicgKyBpZCArICdcIiA+PC9kaXY+Jylcblx0XHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3JsLWNhY2hlLWNsYXNzJyk7XG5cdFx0XHRcdFx0XHRib2R5LmRhdGEoJ3JsLWNhY2hlLWNvdW50JywgR2xvYmFsc0RhdGEuaU1lc3NhZ2VCb2R5Q2FjaGVDb3VudCk7XG5cblx0XHRcdFx0XHRcdGJvZHkuaHRtbChmaW5kRW1haWxBbmRMaW5rcyhyZXN1bHRIdG1sKSkuYWRkQ2xhc3MoJ2ItdGV4dC1wYXJ0ICcgKyAoaXNIdG1sID8gJ2h0bWwnIDogJ3BsYWluJykpO1xuXG5cdFx0XHRcdFx0XHRtZXNzYWdlLmlzSHRtbCghIWlzSHRtbCk7XG5cdFx0XHRcdFx0XHRtZXNzYWdlLmhhc0ltYWdlcyghIWRhdGEuUmVzdWx0Lkhhc0V4dGVybmFscyk7XG5cblx0XHRcdFx0XHRcdG1lc3NhZ2UuYm9keSA9IGJvZHk7XG5cdFx0XHRcdFx0XHRpZiAobWVzc2FnZS5ib2R5KSB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VzRG9tLmFwcGVuZChtZXNzYWdlLmJvZHkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRtZXNzYWdlLnN0b3JlRGF0YUluRG9tKCk7XG5cblx0XHRcdFx0XHRcdGlmIChkYXRhLlJlc3VsdC5IYXNJbnRlcm5hbHMpIHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZS5zaG93SW50ZXJuYWxJbWFnZXModHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChtZXNzYWdlLmhhc0ltYWdlcygpICYmIFNldHRpbmdzU3RvcmUuc2hvd0ltYWdlcygpKSB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2hvd0V4dGVybmFsSW1hZ2VzKHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzLnB1cmdlTWVzc2FnZUJvZHlDYWNoZVRocm90dGxlKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2UuYm9keSA9IHRleHRCb2R5O1xuXHRcdFx0XHRcdFx0aWYgKG1lc3NhZ2UuYm9keSkge1xuXHRcdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5pTWVzc2FnZUJvZHlDYWNoZUNvdW50ICs9IDE7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UuYm9keS5kYXRhKCdybC1jYWNoZS1jb3VudCcsIEdsb2JhbHNEYXRhLmlNZXNzYWdlQm9keUNhY2hlQ291bnQpO1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLmZldGNoRGF0YUZyb21Eb20oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VBY3RpdmVEb20obWVzc2FnZS5ib2R5KTtcblxuXHRcdFx0XHRcdHRoaXMuaGlkZU1lc3NhZ2VCb2RpZXMoKTtcblxuXHRcdFx0XHRcdGlmIChib2R5KSB7XG5cdFx0XHRcdFx0XHR0aGlzLmluaXRPcGVuUGdwQ29udHJvbHMoYm9keSwgbWVzc2FnZSk7XG5cblx0XHRcdFx0XHRcdHRoaXMuaW5pdEJsb2NrcXVvdGVTd2l0Y2hlcihib2R5KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRtZXNzYWdlLmJvZHkuc2hvdygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5pdE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShtZXNzYWdlKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2UudW5zZWVuKCkgfHwgbWVzc2FnZS5oYXNVbnNlZW5TdWJNZXNzYWdlKCkpIHtcblx0XHRcdFx0XHRnZXRBcHAoKS5tZXNzYWdlTGlzdEFjdGlvbihtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LCBNZXNzYWdlU2V0QWN0aW9uLlNldFNlZW4sIFttZXNzYWdlXSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXNOZXcpIHtcblx0XHRcdFx0XHRtZXNzYWdlID0gdGhpcy5tZXNzYWdlKCk7XG5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRzZWxlY3RlZE1lc3NhZ2UgJiZcblx0XHRcdFx0XHRcdG1lc3NhZ2UgJiZcblx0XHRcdFx0XHRcdChtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3ICE9PSBzZWxlY3RlZE1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcgfHwgbWVzc2FnZS51aWQgIT09IHNlbGVjdGVkTWVzc2FnZS51aWQpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdG9yTWVzc2FnZVNlbGVjdGVkKG51bGwpO1xuXHRcdFx0XHRcdFx0aWYgKDEgPT09IHRoaXMubWVzc2FnZUxpc3QoKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3Rvck1lc3NhZ2VGb2N1c2VkKG51bGwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIXNlbGVjdGVkTWVzc2FnZSAmJiBtZXNzYWdlKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZE1lc3NhZ2UgPSBfLmZpbmQoXG5cdFx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3QoKSxcblx0XHRcdFx0XHRcdFx0KHN1Yk1lc3NhZ2UpID0+XG5cdFx0XHRcdFx0XHRcdFx0c3ViTWVzc2FnZSAmJlxuXHRcdFx0XHRcdFx0XHRcdHN1Yk1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcgPT09IG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcgJiZcblx0XHRcdFx0XHRcdFx0XHRzdWJNZXNzYWdlLnVpZCA9PT0gbWVzc2FnZS51aWRcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGlmIChzZWxlY3RlZE1lc3NhZ2UpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3Rvck1lc3NhZ2VTZWxlY3RlZChzZWxlY3RlZE1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdG9yTWVzc2FnZUZvY3VzZWQoc2VsZWN0ZWRNZXNzYWdlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3aW5kb3dSZXNpemUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZWxlY3RNZXNzYWdlKG9NZXNzYWdlKSB7XG5cdFx0aWYgKG9NZXNzYWdlKSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2UodGhpcy5zdGF0aWNNZXNzYWdlLnBvcHVsYXRlQnlNZXNzYWdlTGlzdEl0ZW0ob01lc3NhZ2UpKTtcblx0XHRcdHRoaXMucG9wdWxhdGVNZXNzYWdlQm9keSh0aGlzLm1lc3NhZ2UoKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubWVzc2FnZShudWxsKTtcblx0XHR9XG5cdH1cblxuXHRzZWxlY3RNZXNzYWdlQnlGb2xkZXJBbmRVaWQoc0ZvbGRlciwgc1VpZCkge1xuXHRcdGlmIChzRm9sZGVyICYmIHNVaWQpIHtcblx0XHRcdHRoaXMubWVzc2FnZSh0aGlzLnN0YXRpY01lc3NhZ2UucG9wdWxhdGVCeU1lc3NhZ2VMaXN0SXRlbShudWxsKSk7XG5cdFx0XHR0aGlzLm1lc3NhZ2UoKS5mb2xkZXJGdWxsTmFtZVJhdyA9IHNGb2xkZXI7XG5cdFx0XHR0aGlzLm1lc3NhZ2UoKS51aWQgPSBzVWlkO1xuXG5cdFx0XHR0aGlzLnBvcHVsYXRlTWVzc2FnZUJvZHkodGhpcy5tZXNzYWdlKCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2UobnVsbCk7XG5cdFx0fVxuXHR9XG5cblx0cG9wdWxhdGVNZXNzYWdlQm9keShvTWVzc2FnZSkge1xuXHRcdGlmIChvTWVzc2FnZSkge1xuXHRcdFx0aWYgKFJlbW90ZS5tZXNzYWdlKHRoaXMub25NZXNzYWdlUmVzcG9uc2UsIG9NZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LCBvTWVzc2FnZS51aWQpKSB7XG5cdFx0XHRcdHRoaXMubWVzc2FnZUN1cnJlbnRMb2FkaW5nKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jlc3VsdFxuXHQgKiBAcGFyYW0ge0FqYXhKc29uRGVmYXVsdFJlc3BvbnNlfSBvRGF0YVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJDYWNoZWRcblx0ICovXG5cdG9uTWVzc2FnZVJlc3BvbnNlKHNSZXN1bHQsIG9EYXRhLCBiQ2FjaGVkKSB7XG5cdFx0dGhpcy5oaWRlTWVzc2FnZUJvZGllcygpO1xuXG5cdFx0dGhpcy5tZXNzYWdlQ3VycmVudExvYWRpbmcoZmFsc2UpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEgJiYgb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHR0aGlzLnNldE1lc3NhZ2Uob0RhdGEsIGJDYWNoZWQpO1xuXHRcdH0gZWxzZSBpZiAoU3RvcmFnZVJlc3VsdFR5cGUuVW5sb2FkID09PSBzUmVzdWx0KSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VFcnJvcignJyk7XG5cdFx0fSBlbHNlIGlmIChTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydCAhPT0gc1Jlc3VsdCkge1xuXHRcdFx0dGhpcy5tZXNzYWdlKG51bGwpO1xuXHRcdFx0dGhpcy5tZXNzYWdlRXJyb3IoXG5cdFx0XHRcdG9EYXRhICYmIG9EYXRhLkVycm9yQ29kZSA/IGdldE5vdGlmaWNhdGlvbihvRGF0YS5FcnJvckNvZGUpIDogZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IpXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FycmF5fSBsaXN0XG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRjYWxjdWxhdGVNZXNzYWdlTGlzdEhhc2gobGlzdCkge1xuXHRcdHJldHVybiBfLm1hcChsaXN0LCAobWVzc2FnZSkgPT4gJycgKyBtZXNzYWdlLmhhc2ggKyAnXycgKyBtZXNzYWdlLnRocmVhZHNMZW4oKSArICdfJyArIG1lc3NhZ2UuZmxhZ0hhc2goKSkuam9pbihcblx0XHRcdCd8J1xuXHRcdCk7XG5cdH1cblxuXHRzZXRNZXNzYWdlTGlzdChkYXRhLCBjYWNoZWQpIHtcblx0XHRpZiAoXG5cdFx0XHRkYXRhICYmXG5cdFx0XHRkYXRhLlJlc3VsdCAmJlxuXHRcdFx0J0NvbGxlY3Rpb24vTWVzc2FnZUNvbGxlY3Rpb24nID09PSBkYXRhLlJlc3VsdFsnQE9iamVjdCddICYmXG5cdFx0XHRkYXRhLlJlc3VsdFsnQENvbGxlY3Rpb24nXSAmJlxuXHRcdFx0aXNBcnJheShkYXRhLlJlc3VsdFsnQENvbGxlY3Rpb24nXSlcblx0XHQpIHtcblx0XHRcdGxldCBuZXdDb3VudCA9IDAsXG5cdFx0XHRcdHVucmVhZENvdW50Q2hhbmdlID0gZmFsc2U7XG5cblx0XHRcdGNvbnN0IGxpc3QgPSBbXSxcblx0XHRcdFx0dXRjID0gbW9tZW50Tm93VW5peCgpLFxuXHRcdFx0XHRpQ291bnQgPSBwSW50KGRhdGEuUmVzdWx0Lk1lc3NhZ2VSZXN1bHRDb3VudCksXG5cdFx0XHRcdGlPZmZzZXQgPSBwSW50KGRhdGEuUmVzdWx0Lk9mZnNldCk7XG5cblx0XHRcdGNvbnN0IGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoaXNOb3JtYWwoZGF0YS5SZXN1bHQuRm9sZGVyKSA/IGRhdGEuUmVzdWx0LkZvbGRlciA6ICcnKTtcblxuXHRcdFx0aWYgKGZvbGRlciAmJiAhY2FjaGVkKSB7XG5cdFx0XHRcdGZvbGRlci5pbnRlcnZhbCA9IHV0YztcblxuXHRcdFx0XHRzZXRGb2xkZXJIYXNoKGRhdGEuUmVzdWx0LkZvbGRlciwgZGF0YS5SZXN1bHQuRm9sZGVySGFzaCk7XG5cblx0XHRcdFx0aWYgKGlzTm9ybWFsKGRhdGEuUmVzdWx0Lk1lc3NhZ2VDb3VudCkpIHtcblx0XHRcdFx0XHRmb2xkZXIubWVzc2FnZUNvdW50QWxsKGRhdGEuUmVzdWx0Lk1lc3NhZ2VDb3VudCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXNOb3JtYWwoZGF0YS5SZXN1bHQuTWVzc2FnZVVuc2VlbkNvdW50KSkge1xuXHRcdFx0XHRcdGlmIChwSW50KGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSkgIT09IHBJbnQoZGF0YS5SZXN1bHQuTWVzc2FnZVVuc2VlbkNvdW50KSkge1xuXHRcdFx0XHRcdFx0dW5yZWFkQ291bnRDaGFuZ2UgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoZGF0YS5SZXN1bHQuTWVzc2FnZVVuc2VlbkNvdW50KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuaW5pdFVpZE5leHRBbmROZXdNZXNzYWdlcyhmb2xkZXIuZnVsbE5hbWVSYXcsIGRhdGEuUmVzdWx0LlVpZE5leHQsIGRhdGEuUmVzdWx0Lk5ld01lc3NhZ2VzKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHVucmVhZENvdW50Q2hhbmdlICYmIGZvbGRlcikge1xuXHRcdFx0XHRjbGVhck1lc3NhZ2VGbGFnc0Zyb21DYWNoZUJ5Rm9sZGVyKGZvbGRlci5mdWxsTmFtZVJhdyk7XG5cdFx0XHR9XG5cblx0XHRcdF8uZWFjaChkYXRhLlJlc3VsdFsnQENvbGxlY3Rpb24nXSwgKGpzb25NZXNzYWdlKSA9PiB7XG5cdFx0XHRcdGlmIChqc29uTWVzc2FnZSAmJiAnT2JqZWN0L01lc3NhZ2UnID09PSBqc29uTWVzc2FnZVsnQE9iamVjdCddKSB7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IE1lc3NhZ2VNb2RlbC5uZXdJbnN0YW5jZUZyb21Kc29uKGpzb25NZXNzYWdlKTtcblx0XHRcdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0aWYgKGhhc05ld01lc3NhZ2VBbmRSZW1vdmVGcm9tQ2FjaGUobWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdywgbWVzc2FnZS51aWQpICYmIDUgPj0gbmV3Q291bnQpIHtcblx0XHRcdFx0XHRcdFx0bmV3Q291bnQgKz0gMTtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZS5uZXdGb3JBbmltYXRpb24odHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG1lc3NhZ2UuZGVsZXRlZChmYWxzZSk7XG5cblx0XHRcdFx0XHRcdGlmIChjYWNoZWQpIHtcblx0XHRcdFx0XHRcdFx0aW5pdE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShtZXNzYWdlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZShtZXNzYWdlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bGlzdC5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubWVzc2FnZUxpc3RDb3VudChpQ291bnQpO1xuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdFNlYXJjaChpc05vcm1hbChkYXRhLlJlc3VsdC5TZWFyY2gpID8gZGF0YS5SZXN1bHQuU2VhcmNoIDogJycpO1xuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdFBhZ2Uod2luZG93Lk1hdGguY2VpbChpT2Zmc2V0IC8gU2V0dGluZ3NTdG9yZS5tZXNzYWdlc1BlclBhZ2UoKSArIDEpKTtcblx0XHRcdHRoaXMubWVzc2FnZUxpc3RUaHJlYWRVaWQoaXNOb3JtYWwoZGF0YS5SZXN1bHQuVGhyZWFkVWlkKSA/IHBTdHJpbmcoZGF0YS5SZXN1bHQuVGhyZWFkVWlkKSA6ICcnKTtcblxuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdEVuZEZvbGRlcihpc05vcm1hbChkYXRhLlJlc3VsdC5Gb2xkZXIpID8gZGF0YS5SZXN1bHQuRm9sZGVyIDogJycpO1xuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdEVuZFNlYXJjaCh0aGlzLm1lc3NhZ2VMaXN0U2VhcmNoKCkpO1xuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdEVuZFRocmVhZFVpZCh0aGlzLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKCkpO1xuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdEVuZFBhZ2UodGhpcy5tZXNzYWdlTGlzdFBhZ2UoKSk7XG5cblx0XHRcdHRoaXMubWVzc2FnZUxpc3REaXNhYmxlQXV0b1NlbGVjdCh0cnVlKTtcblxuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdChsaXN0KTtcblx0XHRcdHRoaXMubWVzc2FnZUxpc3RJc05vdENvbXBsZXRlZChmYWxzZSk7XG5cblx0XHRcdGNsZWFyTmV3TWVzc2FnZUNhY2hlKCk7XG5cblx0XHRcdGlmIChmb2xkZXIgJiYgKGNhY2hlZCB8fCB1bnJlYWRDb3VudENoYW5nZSB8fCBTZXR0aW5nc1N0b3JlLnVzZVRocmVhZHMoKSkpIHtcblx0XHRcdFx0Z2V0QXBwKCkuZm9sZGVySW5mb3JtYXRpb24oZm9sZGVyLmZ1bGxOYW1lUmF3LCBsaXN0KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdENvdW50KDApO1xuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdChbXSk7XG5cdFx0XHR0aGlzLm1lc3NhZ2VMaXN0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKGRhdGEgJiYgZGF0YS5FcnJvckNvZGUgPyBkYXRhLkVycm9yQ29kZSA6IE5vdGlmaWNhdGlvbi5DYW50R2V0TWVzc2FnZUxpc3QpKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IE1lc3NhZ2VVc2VyU3RvcmUoKTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IHsgQ2FwYSwgTWVzc2FnZVNldEFjdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyB0cmltLCBwSW50LCBpc0FycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCAqIGFzIExpbmtzIGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxubGV0IEZPTERFUlNfQ0FDSEUgPSB7fSxcblx0Rk9MREVSU19OQU1FX0NBQ0hFID0ge30sXG5cdEZPTERFUlNfSEFTSF9DQUNIRSA9IHt9LFxuXHRGT0xERVJTX1VJRF9ORVhUX0NBQ0hFID0ge30sXG5cdE1FU1NBR0VfRkxBR1NfQ0FDSEUgPSB7fSxcblx0TkVXX01FU1NBR0VfQ0FDSEUgPSB7fSxcblx0aW5ib3hGb2xkZXJOYW1lID0gJyc7XG5cbmNvbnN0IFJFUVVFU1RFRF9NRVNTQUdFX0NBQ0hFID0ge30sXG5cdGNhcGFHcmF2YXRhciA9IFNldHRpbmdzLmNhcGEoQ2FwYS5HcmF2YXRhcik7XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhcigpIHtcblx0Rk9MREVSU19DQUNIRSA9IHt9O1xuXHRGT0xERVJTX05BTUVfQ0FDSEUgPSB7fTtcblx0Rk9MREVSU19IQVNIX0NBQ0hFID0ge307XG5cdEZPTERFUlNfVUlEX05FWFRfQ0FDSEUgPSB7fTtcblx0TUVTU0FHRV9GTEFHU19DQUNIRSA9IHt9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVc2VyUGljKGVtYWlsLCBjYWxsYmFjaykge1xuXHRlbWFpbCA9IHRyaW0oZW1haWwpO1xuXHRjYWxsYmFjayhjYXBhR3JhdmF0YXIgJiYgJycgIT09IGVtYWlsID8gTGlua3MuYXZhdGFyTGluayhlbWFpbCkgOiAnJywgZW1haWwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVJhd1xuICogQHBhcmFtIHtzdHJpbmd9IHVpZFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lc3NhZ2VLZXkoZm9sZGVyRnVsbE5hbWVSYXcsIHVpZCkge1xuXHRyZXR1cm4gYCR7Zm9sZGVyRnVsbE5hbWVSYXd9IyR7dWlkfWA7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlclxuICogQHBhcmFtIHtzdHJpbmd9IHVpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkUmVxdWVzdGVkTWVzc2FnZShmb2xkZXIsIHVpZCkge1xuXHRSRVFVRVNURURfTUVTU0FHRV9DQUNIRVtnZXRNZXNzYWdlS2V5KGZvbGRlciwgdWlkKV0gPSB0cnVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSB1aWRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVxdWVzdGVkTWVzc2FnZShmb2xkZXIsIHVpZCkge1xuXHRyZXR1cm4gdHJ1ZSA9PT0gUkVRVUVTVEVEX01FU1NBR0VfQ0FDSEVbZ2V0TWVzc2FnZUtleShmb2xkZXIsIHVpZCldO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVJhd1xuICogQHBhcmFtIHtzdHJpbmd9IHVpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkTmV3TWVzc2FnZUNhY2hlKGZvbGRlckZ1bGxOYW1lUmF3LCB1aWQpIHtcblx0TkVXX01FU1NBR0VfQ0FDSEVbZ2V0TWVzc2FnZUtleShmb2xkZXJGdWxsTmFtZVJhdywgdWlkKV0gPSB0cnVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVJhd1xuICogQHBhcmFtIHtzdHJpbmd9IHVpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzTmV3TWVzc2FnZUFuZFJlbW92ZUZyb21DYWNoZShmb2xkZXJGdWxsTmFtZVJhdywgdWlkKSB7XG5cdGlmIChORVdfTUVTU0FHRV9DQUNIRVtnZXRNZXNzYWdlS2V5KGZvbGRlckZ1bGxOYW1lUmF3LCB1aWQpXSkge1xuXHRcdE5FV19NRVNTQUdFX0NBQ0hFW2dldE1lc3NhZ2VLZXkoZm9sZGVyRnVsbE5hbWVSYXcsIHVpZCldID0gbnVsbDtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhck5ld01lc3NhZ2VDYWNoZSgpIHtcblx0TkVXX01FU1NBR0VfQ0FDSEUgPSB7fTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9sZGVySW5ib3hOYW1lKCkge1xuXHRyZXR1cm4gJycgPT09IGluYm94Rm9sZGVyTmFtZSA/ICdJTkJPWCcgOiBpbmJveEZvbGRlck5hbWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXJGdWxsTmFtZVJhdyhmb2xkZXJIYXNoKSB7XG5cdHJldHVybiAnJyAhPT0gZm9sZGVySGFzaCAmJiBGT0xERVJTX05BTUVfQ0FDSEVbZm9sZGVySGFzaF0gPyBGT0xERVJTX05BTUVfQ0FDSEVbZm9sZGVySGFzaF0gOiAnJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVySGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lUmF3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb2xkZXJGdWxsTmFtZVJhdyhmb2xkZXJIYXNoLCBmb2xkZXJGdWxsTmFtZVJhdykge1xuXHRGT0xERVJTX05BTUVfQ0FDSEVbZm9sZGVySGFzaF0gPSBmb2xkZXJGdWxsTmFtZVJhdztcblx0aWYgKCdJTkJPWCcgPT09IGZvbGRlckZ1bGxOYW1lUmF3IHx8ICcnID09PSBpbmJveEZvbGRlck5hbWUpIHtcblx0XHRpbmJveEZvbGRlck5hbWUgPSBmb2xkZXJGdWxsTmFtZVJhdztcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVJhd1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRlckhhc2goZm9sZGVyRnVsbE5hbWVSYXcpIHtcblx0cmV0dXJuICcnICE9PSBmb2xkZXJGdWxsTmFtZVJhdyAmJiBGT0xERVJTX0hBU0hfQ0FDSEVbZm9sZGVyRnVsbE5hbWVSYXddID8gRk9MREVSU19IQVNIX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lUmF3XSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVJhd1xuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckhhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZvbGRlckhhc2goZm9sZGVyRnVsbE5hbWVSYXcsIGZvbGRlckhhc2gpIHtcblx0aWYgKCcnICE9PSBmb2xkZXJGdWxsTmFtZVJhdykge1xuXHRcdEZPTERFUlNfSEFTSF9DQUNIRVtmb2xkZXJGdWxsTmFtZVJhd10gPSBmb2xkZXJIYXNoO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lUmF3XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9sZGVyVWlkTmV4dChmb2xkZXJGdWxsTmFtZVJhdykge1xuXHRyZXR1cm4gJycgIT09IGZvbGRlckZ1bGxOYW1lUmF3ICYmIEZPTERFUlNfVUlEX05FWFRfQ0FDSEVbZm9sZGVyRnVsbE5hbWVSYXddXG5cdFx0PyBGT0xERVJTX1VJRF9ORVhUX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lUmF3XVxuXHRcdDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lUmF3XG4gKiBAcGFyYW0ge3N0cmluZ30gdWlkTmV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9sZGVyVWlkTmV4dChmb2xkZXJGdWxsTmFtZVJhdywgdWlkTmV4dCkge1xuXHRGT0xERVJTX1VJRF9ORVhUX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lUmF3XSA9IHVpZE5leHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lUmF3XG4gKiBAcmV0dXJucyB7P0ZvbGRlck1vZGVsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChmb2xkZXJGdWxsTmFtZVJhdykge1xuXHRyZXR1cm4gJycgIT09IGZvbGRlckZ1bGxOYW1lUmF3ICYmIEZPTERFUlNfQ0FDSEVbZm9sZGVyRnVsbE5hbWVSYXddID8gRk9MREVSU19DQUNIRVtmb2xkZXJGdWxsTmFtZVJhd10gOiBudWxsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVJhd1xuICogQHBhcmFtIHs/Rm9sZGVyTW9kZWx9IGZvbGRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9sZGVyVG9DYWNoZUxpc3QoZm9sZGVyRnVsbE5hbWVSYXcsIGZvbGRlcikge1xuXHRGT0xERVJTX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lUmF3XSA9IGZvbGRlcjtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyRnVsbE5hbWVSYXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZvbGRlckZyb21DYWNoZUxpc3QoZm9sZGVyRnVsbE5hbWVSYXcpIHtcblx0c2V0Rm9sZGVyVG9DYWNoZUxpc3QoZm9sZGVyRnVsbE5hbWVSYXcsIG51bGwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHVpZFxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShmb2xkZXJGdWxsTmFtZSwgdWlkKSB7XG5cdHJldHVybiBNRVNTQUdFX0ZMQUdTX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lXSAmJiBNRVNTQUdFX0ZMQUdTX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lXVt1aWRdXG5cdFx0PyBNRVNTQUdFX0ZMQUdTX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lXVt1aWRdXG5cdFx0OiBudWxsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJGdWxsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHVpZFxuICogQHBhcmFtIHtBcnJheX0gZmxhZ3NDYWNoZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TWVzc2FnZUZsYWdzVG9DYWNoZShmb2xkZXJGdWxsTmFtZSwgdWlkLCBmbGFnc0NhY2hlKSB7XG5cdGlmICghTUVTU0FHRV9GTEFHU19DQUNIRVtmb2xkZXJGdWxsTmFtZV0pIHtcblx0XHRNRVNTQUdFX0ZMQUdTX0NBQ0hFW2ZvbGRlckZ1bGxOYW1lXSA9IHt9O1xuXHR9XG5cblx0TUVTU0FHRV9GTEFHU19DQUNIRVtmb2xkZXJGdWxsTmFtZV1bdWlkXSA9IGZsYWdzQ2FjaGU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlckZ1bGxOYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhck1lc3NhZ2VGbGFnc0Zyb21DYWNoZUJ5Rm9sZGVyKGZvbGRlckZ1bGxOYW1lKSB7XG5cdE1FU1NBR0VfRkxBR1NfQ0FDSEVbZm9sZGVyRnVsbE5hbWVdID0ge307XG59XG5cbi8qKlxuICogQHBhcmFtIHsoTWVzc2FnZU1vZGVsfG51bGwpfSBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKG1lc3NhZ2UpIHtcblx0aWYgKG1lc3NhZ2UpIHtcblx0XHRjb25zdCB1aWQgPSBtZXNzYWdlLnVpZCxcblx0XHRcdGZsYWdzID0gZ2V0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsIHVpZCk7XG5cblx0XHRpZiAoZmxhZ3MgJiYgMCA8IGZsYWdzLmxlbmd0aCkge1xuXHRcdFx0bWVzc2FnZS5mbGFnZ2VkKCEhZmxhZ3NbMV0pO1xuXG5cdFx0XHRpZiAoIW1lc3NhZ2UuaXNTaW1wbGVNZXNzYWdlKSB7XG5cdFx0XHRcdG1lc3NhZ2UudW5zZWVuKCEhZmxhZ3NbMF0pO1xuXHRcdFx0XHRtZXNzYWdlLmFuc3dlcmVkKCEhZmxhZ3NbMl0pO1xuXHRcdFx0XHRtZXNzYWdlLmZvcndhcmRlZCghIWZsYWdzWzNdKTtcblx0XHRcdFx0bWVzc2FnZS5pc1JlYWRSZWNlaXB0KCEhZmxhZ3NbNF0pO1xuXHRcdFx0XHRtZXNzYWdlLmRlbGV0ZWRNYXJrKCEhZmxhZ3NbNV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICgwIDwgbWVzc2FnZS50aHJlYWRzKCkubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCB1bnNlZW5TdWJVaWQgPSBfLmZpbmQobWVzc2FnZS50aHJlYWRzKCksIChzU3ViVWlkKSA9PiB7XG5cdFx0XHRcdGlmICh1aWQgIT09IHNTdWJVaWQpIHtcblx0XHRcdFx0XHRjb25zdCBzdWJGbGFncyA9IGdldE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LCBzU3ViVWlkKTtcblx0XHRcdFx0XHRyZXR1cm4gc3ViRmxhZ3MgJiYgMCA8IHN1YkZsYWdzLmxlbmd0aCAmJiAhIXN1YkZsYWdzWzBdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBmbGFnZ2VkU3ViVWlkID0gXy5maW5kKG1lc3NhZ2UudGhyZWFkcygpLCAoc1N1YlVpZCkgPT4ge1xuXHRcdFx0XHRpZiAodWlkICE9PSBzU3ViVWlkKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3ViRmxhZ3MgPSBnZXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUobWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdywgc1N1YlVpZCk7XG5cdFx0XHRcdFx0cmV0dXJuIHN1YkZsYWdzICYmIDAgPCBzdWJGbGFncy5sZW5ndGggJiYgISFzdWJGbGFnc1sxXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblxuXHRcdFx0bWVzc2FnZS5oYXNVbnNlZW5TdWJNZXNzYWdlKHVuc2VlblN1YlVpZCAmJiAwIDwgcEludCh1bnNlZW5TdWJVaWQpKTtcblx0XHRcdG1lc3NhZ2UuaGFzRmxhZ2dlZFN1Yk1lc3NhZ2UoZmxhZ2dlZFN1YlVpZCAmJiAwIDwgcEludChmbGFnZ2VkU3ViVWlkKSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHsoTWVzc2FnZU1vZGVsfG51bGwpfSBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGUobWVzc2FnZSkge1xuXHRpZiAobWVzc2FnZSkge1xuXHRcdHNldE1lc3NhZ2VGbGFnc1RvQ2FjaGUobWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdywgbWVzc2FnZS51aWQsIFtcblx0XHRcdG1lc3NhZ2UudW5zZWVuKCksXG5cdFx0XHRtZXNzYWdlLmZsYWdnZWQoKSxcblx0XHRcdG1lc3NhZ2UuYW5zd2VyZWQoKSxcblx0XHRcdG1lc3NhZ2UuZm9yd2FyZGVkKCksXG5cdFx0XHRtZXNzYWdlLmlzUmVhZFJlY2VpcHQoKSxcblx0XHRcdG1lc3NhZ2UuZGVsZXRlZE1hcmsoKVxuXHRcdF0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlclxuICogQHBhcmFtIHtzdHJpbmd9IHVpZFxuICogQHBhcmFtIHtBcnJheX0gZmxhZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZUJ5Rm9sZGVyQW5kVWlkKGZvbGRlciwgdWlkLCBmbGFncykge1xuXHRpZiAoaXNBcnJheShmbGFncykgJiYgMCA8IGZsYWdzLmxlbmd0aCkge1xuXHRcdHNldE1lc3NhZ2VGbGFnc1RvQ2FjaGUoZm9sZGVyLCB1aWQsIGZsYWdzKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSB1aWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBzZXRBY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZUJ5U2V0QWN0aW9uKGZvbGRlciwgdWlkLCBzZXRBY3Rpb24pIHtcblx0bGV0IHVucmVhZCA9IDA7XG5cdGNvbnN0IGZsYWdzID0gZ2V0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKGZvbGRlciwgdWlkKTtcblxuXHRpZiAoaXNBcnJheShmbGFncykgJiYgMCA8IGZsYWdzLmxlbmd0aCkge1xuXHRcdGlmIChmbGFnc1swXSkge1xuXHRcdFx0dW5yZWFkID0gMTtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKHNldEFjdGlvbikge1xuXHRcdFx0Y2FzZSBNZXNzYWdlU2V0QWN0aW9uLlNldFNlZW46XG5cdFx0XHRcdGZsYWdzWzBdID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBNZXNzYWdlU2V0QWN0aW9uLlVuc2V0U2Vlbjpcblx0XHRcdFx0ZmxhZ3NbMF0gPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgTWVzc2FnZVNldEFjdGlvbi5TZXRGbGFnOlxuXHRcdFx0XHRmbGFnc1sxXSA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBNZXNzYWdlU2V0QWN0aW9uLlVuc2V0RmxhZzpcblx0XHRcdFx0ZmxhZ3NbMV0gPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0fVxuXG5cdFx0c2V0TWVzc2FnZUZsYWdzVG9DYWNoZShmb2xkZXIsIHVpZCwgZmxhZ3MpO1xuXHR9XG5cblx0cmV0dXJuIHVucmVhZDtcbn1cbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCB7IHBTdHJpbmcsIHBJbnQsIGlzVW5kLCBpc05vcm1hbCwgdHJpbSwgZW5jb2RlVVJJQ29tcG9uZW50IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jb25zdCBST09UID0gJy4vJyxcblx0SEFTSF9QUkVGSVggPSAnIy8nLFxuXHRTRVJWRVJfUFJFRklYID0gJy4vPycsXG5cdFNVQl9RVUVSWV9QUkVGSVggPSAnJnFbXT0nLFxuXHRWRVJTSU9OID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3ZlcnNpb24nKSxcblx0V0VCX1BSRUZJWCA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd3ZWJQYXRoJykgfHwgJycsXG5cdFZFUlNJT05fUFJFRklYID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3dlYlZlcnNpb25QYXRoJykgfHwgJ3JhaW5sb29wL3YvJyArIFZFUlNJT04gKyAnLycsXG5cdFNUQVRJQ19QUkVGSVggPSBWRVJTSU9OX1BSRUZJWCArICdzdGF0aWMvJyxcblx0QURNSU5fSE9TVF9VU0UgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhZG1pbkhvc3RVc2UnKSxcblx0QURNSU5fUEFUSCA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhZG1pblBhdGgnKSB8fCAnYWRtaW4nO1xuXG5sZXQgQVVUSF9QUkVGSVggPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnQXV0aEFjY291bnRIYXNoJykgfHwgJzAnO1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVBdXRoU3VmZml4KCkge1xuXHRBVVRIX1BSRUZJWCA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdXRoQWNjb3VudEhhc2gnKSB8fCAnMCc7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YlF1ZXJ5UHJlZml4KCkge1xuXHRyZXR1cm4gU1VCX1FVRVJZX1BSRUZJWDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZz19IHN0YXJ0dXBVcmxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290KHN0YXJ0dXBVcmwgPSAnJykge1xuXHRyZXR1cm4gSEFTSF9QUkVGSVggKyBwU3RyaW5nKHN0YXJ0dXBVcmwpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290QWRtaW4oKSB7XG5cdHJldHVybiBBRE1JTl9IT1NUX1VTRSA/IFJPT1QgOiBTRVJWRVJfUFJFRklYICsgQURNSU5fUEFUSDtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9vdFVzZXIoKSB7XG5cdHJldHVybiBST09UO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRSYXcodHlwZSwgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0Y3VzdG9tU3BlY1N1ZmZpeCA9IGlzVW5kKGN1c3RvbVNwZWNTdWZmaXgpID8gQVVUSF9QUkVGSVggOiBjdXN0b21TcGVjU3VmZml4O1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggK1xuXHRcdCcvUmF3LycgK1xuXHRcdFNVQl9RVUVSWV9QUkVGSVggK1xuXHRcdCcvJyArXG5cdFx0Y3VzdG9tU3BlY1N1ZmZpeCArXG5cdFx0Jy8nICtcblx0XHR0eXBlICtcblx0XHQnLycgK1xuXHRcdFNVQl9RVUVSWV9QUkVGSVggK1xuXHRcdCcvJyArXG5cdFx0ZG93bmxvYWRcblx0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnREb3dubG9hZChkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnRG93bmxvYWQnLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50UHJldmlldyhkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnVmlldycsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRUaHVtYm5haWxQcmV2aWV3KGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdWaWV3VGh1bWJuYWlsJywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFByZXZpZXdBc1BsYWluKGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdWaWV3QXNQbGFpbicsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRGcmFtZWQoZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ0ZyYW1lZFZpZXcnLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZXJSZXF1ZXN0KHR5cGUpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnLycgKyB0eXBlICsgJy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWQoKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdVcGxvYWQnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkQ29udGFjdHMoKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdVcGxvYWRDb250YWN0cycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRCYWNrZ3JvdW5kKCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnVXBsb2FkQmFja2dyb3VuZCcpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQoKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdBcHBlbmQnKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2UoZW1haWwpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ0NoYW5nZScpICsgZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKSArICcvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWRkXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWpheChhZGQpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ0FqYXgnKSArIGFkZDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdEhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXNzYWdlVmlld0xpbmsocmVxdWVzdEhhc2gpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICtcblx0XHQnL1Jhdy8nICtcblx0XHRTVUJfUVVFUllfUFJFRklYICtcblx0XHQnLycgK1xuXHRcdEFVVEhfUFJFRklYICtcblx0XHQnL1ZpZXdBc1BsYWluLycgK1xuXHRcdFNVQl9RVUVSWV9QUkVGSVggK1xuXHRcdCcvJyArXG5cdFx0cmVxdWVzdEhhc2hcblx0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdEhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXNzYWdlRG93bmxvYWRMaW5rKHJlcXVlc3RIYXNoKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArICcvUmF3LycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnL0Rvd25sb2FkLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgcmVxdWVzdEhhc2hcblx0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdmF0YXJMaW5rKGVtYWlsKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9SYXcvMC9BdmF0YXIvJyArIGVuY29kZVVSSUNvbXBvbmVudChlbWFpbCkgKyAnLyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaWNMaW5rKGhhc2gpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8wL1B1YmxpYy8nICsgaGFzaCArICcvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJCYWNrZ3JvdW5kKGhhc2gpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJy9SYXcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvVXNlckJhY2tncm91bmQvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBoYXNoXG5cdCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBocEluZm8oKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9JbmZvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ1xuICogQHBhcmFtIHtib29sZWFufSBpc0FkbWluXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGFuZ0xpbmsobGFuZywgaXNBZG1pbikge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvTGFuZy8wLycgKyAoaXNBZG1pbiA/ICdBZG1pbicgOiAnQXBwJykgKyAnLycgKyB3aW5kb3cuZW5jb2RlVVJJKGxhbmcpICsgJy8nICsgVkVSU0lPTiArICcvJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Q29udGFjdHNWY2YoKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9SYXcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvQ29udGFjdHNWY2YvJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Q29udGFjdHNDc3YoKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9SYXcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvQ29udGFjdHNDc3YvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHhhdXRoID0gZmFsc2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb2NpYWxHb29nbGUoeGF1dGggPSBmYWxzZSkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggK1xuXHRcdCdTb2NpYWxHb29nbGUnICtcblx0XHQoJycgIT09IEFVVEhfUFJFRklYID8gJy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy8nIDogJycpICtcblx0XHQoeGF1dGggPyAnJnhhdXRoPTEnIDogJycpXG5cdCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvY2lhbFR3aXR0ZXIoKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJ1NvY2lhbFR3aXR0ZXInICsgKCcnICE9PSBBVVRIX1BSRUZJWCA/ICcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29jaWFsRmFjZWJvb2soKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArICdTb2NpYWxGYWNlYm9vaycgKyAoJycgIT09IEFVVEhfUFJFRklYID8gJy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy8nIDogJycpXG5cdCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGF0aWNQcmVmaXgocGF0aCkge1xuXHRyZXR1cm4gU1RBVElDX1BSRUZJWCArIHBhdGg7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5Q29udGFjdFBpYygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnY3NzL2ltYWdlcy9lbXB0eS1jb250YWN0LnBuZycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvdW5kKGZpbGVOYW1lKSB7XG5cdHJldHVybiBzdGF0aWNQcmVmaXgoJ3NvdW5kcy8nICsgZmlsZU5hbWUpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3RpZmljYXRpb25NYWlsSWNvbigpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnY3NzL2ltYWdlcy9pY29tLW1lc3NhZ2Utbm90aWZpY2F0aW9uLnBuZycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuUGdwSnMoKSB7XG5cdHJldHVybiBzdGF0aWNQcmVmaXgoJ2pzL21pbi9vcGVucGdwLm1pbi5qcycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuUGdwV29ya2VySnMoKSB7XG5cdHJldHVybiBzdGF0aWNQcmVmaXgoJ2pzL21pbi9vcGVucGdwLndvcmtlci5taW4uanMnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gb3BlblBncFdvcmtlclBhdGgoKSB7XG5cdHJldHVybiBzdGF0aWNQcmVmaXgoJ2pzL21pbi8nKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhlbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aGVtZVByZXZpZXdMaW5rKHRoZW1lKSB7XG5cdGxldCBwcmVmaXggPSBWRVJTSU9OX1BSRUZJWDtcblx0aWYgKCdAY3VzdG9tJyA9PT0gdGhlbWUuc3Vic3RyKC03KSkge1xuXHRcdHRoZW1lID0gdHJpbSh0aGVtZS5zdWJzdHJpbmcoMCwgdGhlbWUubGVuZ3RoIC0gNykpO1xuXHRcdHByZWZpeCA9IFdFQl9QUkVGSVg7XG5cdH1cblxuXHRyZXR1cm4gcHJlZml4ICsgJ3RoZW1lcy8nICsgd2luZG93LmVuY29kZVVSSSh0aGVtZSkgKyAnL2ltYWdlcy9wcmV2aWV3LnBuZyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGluYm94Rm9sZGVyTmFtZSA9ICdJTkJPWCdcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmJveChpbmJveEZvbGRlck5hbWUgPSAnSU5CT1gnKSB7XG5cdHJldHVybiBIQVNIX1BSRUZJWCArICdtYWlsYm94LycgKyBpbmJveEZvbGRlck5hbWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmc9fSBzY3JlZW5OYW1lID0gJydcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5ncyhzY3JlZW5OYW1lID0gJycpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ3NldHRpbmdzJyArIChzY3JlZW5OYW1lID8gJy8nICsgc2NyZWVuTmFtZSA6ICcnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWJvdXQoKSB7XG5cdHJldHVybiBIQVNIX1BSRUZJWCArICdhYm91dCc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmVlbk5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZG1pbihzY3JlZW5OYW1lKSB7XG5cdGxldCByZXN1bHQgPSBIQVNIX1BSRUZJWDtcblx0c3dpdGNoIChzY3JlZW5OYW1lKSB7XG5cdFx0Y2FzZSAnQWRtaW5Eb21haW5zJzpcblx0XHRcdHJlc3VsdCArPSAnZG9tYWlucyc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdBZG1pblNlY3VyaXR5Jzpcblx0XHRcdHJlc3VsdCArPSAnc2VjdXJpdHknO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnQWRtaW5MaWNlbnNpbmcnOlxuXHRcdFx0cmVzdWx0ICs9ICdsaWNlbnNpbmcnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Ly8gbm8gZGVmYXVsdFxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9sZGVyXG4gKiBAcGFyYW0ge251bWJlcj19IHBhZ2UgPSAxXG4gKiBAcGFyYW0ge3N0cmluZz19IHNlYXJjaCA9ICcnXG4gKiBAcGFyYW0ge3N0cmluZz19IHRocmVhZFVpZCA9ICcnXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFpbEJveChmb2xkZXIsIHBhZ2UgPSAxLCBzZWFyY2ggPSAnJywgdGhyZWFkVWlkID0gJycpIHtcblx0cGFnZSA9IGlzTm9ybWFsKHBhZ2UpID8gcEludChwYWdlKSA6IDE7XG5cdHNlYXJjaCA9IHBTdHJpbmcoc2VhcmNoKTtcblxuXHRsZXQgcmVzdWx0ID0gSEFTSF9QUkVGSVggKyAnbWFpbGJveC8nO1xuXG5cdGlmICgnJyAhPT0gZm9sZGVyKSB7XG5cdFx0Y29uc3QgcmVzdWx0VGhyZWFkVWlkID0gcEludCh0aHJlYWRVaWQpO1xuXHRcdHJlc3VsdCArPSB3aW5kb3cuZW5jb2RlVVJJKGZvbGRlcikgKyAoMCA8IHJlc3VsdFRocmVhZFVpZCA/ICd+JyArIHJlc3VsdFRocmVhZFVpZCA6ICcnKTtcblx0fVxuXG5cdGlmICgxIDwgcGFnZSkge1xuXHRcdHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9bL10rJC8sICcnKTtcblx0XHRyZXN1bHQgKz0gJy9wJyArIHBhZ2U7XG5cdH1cblxuXHRpZiAoJycgIT09IHNlYXJjaCkge1xuXHRcdHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9bL10rJC8sICcnKTtcblx0XHRyZXN1bHQgKz0gJy8nICsgd2luZG93LmVuY29kZVVSSShzZWFyY2gpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCBfIGZyb20gJ18nO1xuXG5pbXBvcnQgeyBwU3RyaW5nLCBwSW50LCBpc0FycmF5LCB0cmltLCBib29sVG9BamF4IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHtcblx0Q09OVEFDVFNfU1lOQ19BSkFYX1RJTUVPVVQsXG5cdERFRkFVTFRfQUpBWF9USU1FT1VULFxuXHRTRUFSQ0hfQUpBWF9USU1FT1VULFxuXHRTQVZFX01FU1NBR0VfQUpBWF9USU1FT1VULFxuXHRTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUXG59IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuXG5pbXBvcnQge1xuXHRnZXRGb2xkZXJIYXNoLFxuXHRnZXRGb2xkZXJJbmJveE5hbWUsXG5cdGdldEZvbGRlclVpZE5leHQsXG5cdGdldEZvbGRlckZyb21DYWNoZUxpc3QsXG5cdGdldE1lc3NhZ2VGbGFnc0Zyb21DYWNoZVxufSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgeyBzdWJRdWVyeVByZWZpeCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgKiBhcyBCYXNlNjQgZnJvbSAnQ29tbW9uL0Jhc2U2NCc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FwcCc7XG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9TZXR0aW5ncyc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUgfSBmcm9tICdSZW1vdGUvQWJzdHJhY3RBamF4JztcblxuY2xhc3MgUmVtb3RlVXNlckFqYXggZXh0ZW5kcyBBYnN0cmFjdEFqYXhSZW1vdGUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub1JlcXVlc3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Zm9sZGVycyhmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0J0ZvbGRlcnMnLFxuXHRcdFx0e1xuXHRcdFx0XHQnU2VudEZvbGRlcic6IFNldHRpbmdzLnNldHRpbmdzR2V0KCdTZW50Rm9sZGVyJyksXG5cdFx0XHRcdCdEcmFmdEZvbGRlcic6IFNldHRpbmdzLnNldHRpbmdzR2V0KCdEcmFmdEZvbGRlcicpLFxuXHRcdFx0XHQnU3BhbUZvbGRlcic6IFNldHRpbmdzLnNldHRpbmdzR2V0KCdTcGFtRm9sZGVyJyksXG5cdFx0XHRcdCdUcmFzaEZvbGRlcic6IFNldHRpbmdzLnNldHRpbmdzR2V0KCdUcmFzaEZvbGRlcicpLFxuXHRcdFx0XHQnQXJjaGl2ZUZvbGRlcic6IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBcmNoaXZlRm9sZGVyJylcblx0XHRcdH0sXG5cdFx0XHRudWxsLFxuXHRcdFx0JycsXG5cdFx0XHRbJ0ZvbGRlcnMnXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0VtYWlsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTG9naW5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNQYXNzd29yZFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJTaWduTWVcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzTGFuZ3VhZ2Vcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzQWRkaXRpb25hbENvZGVcblx0ICogQHBhcmFtIHtib29sZWFuPX0gYkFkZGl0aW9uYWxDb2RlU2lnbk1lXG5cdCAqL1xuXHRsb2dpbihmQ2FsbGJhY2ssIHNFbWFpbCwgc0xvZ2luLCBzUGFzc3dvcmQsIGJTaWduTWUsIHNMYW5ndWFnZSwgc0FkZGl0aW9uYWxDb2RlLCBiQWRkaXRpb25hbENvZGVTaWduTWUpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0xvZ2luJywge1xuXHRcdFx0J0VtYWlsJzogc0VtYWlsLFxuXHRcdFx0J0xvZ2luJzogc0xvZ2luLFxuXHRcdFx0J1Bhc3N3b3JkJzogc1Bhc3N3b3JkLFxuXHRcdFx0J0xhbmd1YWdlJzogc0xhbmd1YWdlIHx8ICcnLFxuXHRcdFx0J0FkZGl0aW9uYWxDb2RlJzogc0FkZGl0aW9uYWxDb2RlIHx8ICcnLFxuXHRcdFx0J0FkZGl0aW9uYWxDb2RlU2lnbk1lJzogYkFkZGl0aW9uYWxDb2RlU2lnbk1lID8gJzEnIDogJzAnLFxuXHRcdFx0J1NpZ25NZSc6IGJTaWduTWUgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRnZXRUd29GYWN0b3IoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdHZXRUd29GYWN0b3JJbmZvJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Y3JlYXRlVHdvRmFjdG9yKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQ3JlYXRlVHdvRmFjdG9yU2VjcmV0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Y2xlYXJUd29GYWN0b3IoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdDbGVhclR3b0ZhY3RvckluZm8nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRzaG93VHdvRmFjdG9yU2VjcmV0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnU2hvd1R3b0ZhY3RvclNlY3JldCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNDb2RlXG5cdCAqL1xuXHR0ZXN0VHdvRmFjdG9yKGZDYWxsYmFjaywgc0NvZGUpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1Rlc3RUd29GYWN0b3JJbmZvJywge1xuXHRcdFx0J0NvZGUnOiBzQ29kZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtib29sZWFufSBiRW5hYmxlXG5cdCAqL1xuXHRlbmFibGVUd29GYWN0b3IoZkNhbGxiYWNrLCBiRW5hYmxlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdFbmFibGVUd29GYWN0b3InLCB7XG5cdFx0XHQnRW5hYmxlJzogYkVuYWJsZSA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGNsZWFyVHdvRmFjdG9ySW5mbyhmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0NsZWFyVHdvRmFjdG9ySW5mbycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGNvbnRhY3RzU3luYyhmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0NvbnRhY3RzU3luYycsIG51bGwsIENPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkVuYWJsZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1VybFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1VzZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNQYXNzd29yZFxuXHQgKi9cblx0c2F2ZUNvbnRhY3RzU3luY0RhdGEoZkNhbGxiYWNrLCBiRW5hYmxlLCBzVXJsLCBzVXNlciwgc1Bhc3N3b3JkKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdTYXZlQ29udGFjdHNTeW5jRGF0YScsIHtcblx0XHRcdCdFbmFibGUnOiBiRW5hYmxlID8gJzEnIDogJzAnLFxuXHRcdFx0J1VybCc6IHNVcmwsXG5cdFx0XHQnVXNlcic6IHNVc2VyLFxuXHRcdFx0J1Bhc3N3b3JkJzogc1Bhc3N3b3JkXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0VtYWlsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUGFzc3dvcmRcblx0ICogQHBhcmFtIHtib29sZWFuPX0gYk5ld1xuXHQgKi9cblx0YWNjb3VudFNldHVwKGZDYWxsYmFjaywgc0VtYWlsLCBzUGFzc3dvcmQsIGJOZXcgPSB0cnVlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBY2NvdW50U2V0dXAnLCB7XG5cdFx0XHQnRW1haWwnOiBzRW1haWwsXG5cdFx0XHQnUGFzc3dvcmQnOiBzUGFzc3dvcmQsXG5cdFx0XHQnTmV3JzogYk5ldyA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNFbWFpbFRvRGVsZXRlXG5cdCAqL1xuXHRhY2NvdW50RGVsZXRlKGZDYWxsYmFjaywgc0VtYWlsVG9EZWxldGUpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FjY291bnREZWxldGUnLCB7XG5cdFx0XHQnRW1haWxUb0RlbGV0ZSc6IHNFbWFpbFRvRGVsZXRlXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge0FycmF5fSBhQWNjb3VudHNcblx0ICogQHBhcmFtIHtBcnJheX0gYUlkZW50aXRpZXNcblx0ICovXG5cdGFjY291bnRzQW5kSWRlbnRpdGllc1NvcnRPcmRlcihmQ2FsbGJhY2ssIGFBY2NvdW50cywgYUlkZW50aXRpZXMpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FjY291bnRzQW5kSWRlbnRpdGllc1NvcnRPcmRlcicsIHtcblx0XHRcdCdBY2NvdW50cyc6IGFBY2NvdW50cyxcblx0XHRcdCdJZGVudGl0aWVzJzogYUlkZW50aXRpZXNcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNFbWFpbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXBseVRvXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQmNjXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzU2lnbmF0dXJlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlNpZ25hdHVyZUluc2VydEJlZm9yZVxuXHQgKi9cblx0aWRlbnRpdHlVcGRhdGUoZkNhbGxiYWNrLCBzSWQsIHNFbWFpbCwgc05hbWUsIHNSZXBseVRvLCBzQmNjLCBzU2lnbmF0dXJlLCBiU2lnbmF0dXJlSW5zZXJ0QmVmb3JlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdJZGVudGl0eVVwZGF0ZScsIHtcblx0XHRcdCdJZCc6IHNJZCxcblx0XHRcdCdFbWFpbCc6IHNFbWFpbCxcblx0XHRcdCdOYW1lJzogc05hbWUsXG5cdFx0XHQnUmVwbHlUbyc6IHNSZXBseVRvLFxuXHRcdFx0J0JjYyc6IHNCY2MsXG5cdFx0XHQnU2lnbmF0dXJlJzogc1NpZ25hdHVyZSxcblx0XHRcdCdTaWduYXR1cmVJbnNlcnRCZWZvcmUnOiBiU2lnbmF0dXJlSW5zZXJ0QmVmb3JlID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0lkVG9EZWxldGVcblx0ICovXG5cdGlkZW50aXR5RGVsZXRlKGZDYWxsYmFjaywgc0lkVG9EZWxldGUpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0lkZW50aXR5RGVsZXRlJywge1xuXHRcdFx0J0lkVG9EZWxldGUnOiBzSWRUb0RlbGV0ZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGFjY291bnRzQW5kSWRlbnRpdGllcyhmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FjY291bnRzQW5kSWRlbnRpdGllcycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGFjY291bnRzQ291bnRzKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWNjb3VudHNDb3VudHMnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGZpbHRlcnNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHJhd1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmF3SXNBY3RpdmVcblx0ICovXG5cdGZpbHRlcnNTYXZlKGZDYWxsYmFjaywgZmlsdGVycywgcmF3LCBpc1Jhd0lzQWN0aXZlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdGaWx0ZXJzU2F2ZScsIHtcblx0XHRcdCdSYXcnOiByYXcsXG5cdFx0XHQnUmF3SXNBY3RpdmUnOiBib29sVG9BamF4KGlzUmF3SXNBY3RpdmUpLFxuXHRcdFx0J0ZpbHRlcnMnOiBfLm1hcChmaWx0ZXJzLCAoaXRlbSkgPT4gaXRlbS50b0pzb24oKSlcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRmaWx0ZXJzR2V0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnRmlsdGVycycsIHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHR0ZW1wbGF0ZXMoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdUZW1wbGF0ZXMnLCB7fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSURcblx0ICovXG5cdHRlbXBsYXRlR2V0QnlJZChmQ2FsbGJhY2ssIHNJRCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnVGVtcGxhdGVHZXRCeUlEJywge1xuXHRcdFx0J0lEJzogc0lEXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSURcblx0ICovXG5cdHRlbXBsYXRlRGVsZXRlKGZDYWxsYmFjaywgc0lEKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdUZW1wbGF0ZURlbGV0ZScsIHtcblx0XHRcdCdJZFRvRGVsZXRlJzogc0lEXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSURcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQm9keVxuXHQgKi9cblx0dGVtcGxhdGVTZXR1cChmQ2FsbGJhY2ssIHNJRCwgc05hbWUsIHNCb2R5KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdUZW1wbGF0ZVNldHVwJywge1xuXHRcdFx0J0lEJzogc0lELFxuXHRcdFx0J05hbWUnOiBzTmFtZSxcblx0XHRcdCdCb2R5Jzogc0JvZHlcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge251bWJlcj19IGlPZmZzZXQgPSAwXG5cdCAqIEBwYXJhbSB7bnVtYmVyPX0gaUxpbWl0ID0gMjBcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzU2VhcmNoID0gJydcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzVGhyZWFkVWlkID0gJydcblx0ICogQHBhcmFtIHtib29sZWFuPX0gYlNpbGVudCA9IGZhbHNlXG5cdCAqL1xuXHRtZXNzYWdlTGlzdChmQ2FsbGJhY2ssIHNGb2xkZXJGdWxsTmFtZVJhdywgaU9mZnNldCA9IDAsIGlMaW1pdCA9IDIwLCBzU2VhcmNoID0gJycsIHNUaHJlYWRVaWQgPSAnJywgYlNpbGVudCA9IGZhbHNlKSB7XG5cdFx0c0ZvbGRlckZ1bGxOYW1lUmF3ID0gcFN0cmluZyhzRm9sZGVyRnVsbE5hbWVSYXcpO1xuXG5cdFx0Y29uc3QgZm9sZGVySGFzaCA9IGdldEZvbGRlckhhc2goc0ZvbGRlckZ1bGxOYW1lUmF3KSxcblx0XHRcdHVzZVRocmVhZHMgPSBBcHBTdG9yZS50aHJlYWRzQWxsb3dlZCgpICYmIFNldHRpbmdzU3RvcmUudXNlVGhyZWFkcygpLFxuXHRcdFx0aW5ib3hVaWROZXh0ID0gZ2V0Rm9sZGVySW5ib3hOYW1lKCkgPT09IHNGb2xkZXJGdWxsTmFtZVJhdyA/IGdldEZvbGRlclVpZE5leHQoc0ZvbGRlckZ1bGxOYW1lUmF3KSA6ICcnO1xuXG5cdFx0aWYgKCcnICE9PSBmb2xkZXJIYXNoICYmICgnJyA9PT0gc1NlYXJjaCB8fCAtMSA9PT0gc1NlYXJjaC5pbmRleE9mKCdpczonKSkpIHtcblx0XHRcdHJldHVybiB0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHRcdCdNZXNzYWdlTGlzdCcsXG5cdFx0XHRcdHt9LFxuXHRcdFx0XHQnJyA9PT0gc1NlYXJjaCA/IERFRkFVTFRfQUpBWF9USU1FT1VUIDogU0VBUkNIX0FKQVhfVElNRU9VVCxcblx0XHRcdFx0J01lc3NhZ2VMaXN0LycgK1xuXHRcdFx0XHRcdHN1YlF1ZXJ5UHJlZml4KCkgK1xuXHRcdFx0XHRcdCcvJyArXG5cdFx0XHRcdFx0QmFzZTY0LnVybHNhZmVfZW5jb2RlKFxuXHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRzRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0XHRcdGlPZmZzZXQsXG5cdFx0XHRcdFx0XHRcdGlMaW1pdCxcblx0XHRcdFx0XHRcdFx0c1NlYXJjaCxcblx0XHRcdFx0XHRcdFx0QXBwU3RvcmUucHJvamVjdEhhc2goKSxcblx0XHRcdFx0XHRcdFx0Zm9sZGVySGFzaCxcblx0XHRcdFx0XHRcdFx0aW5ib3hVaWROZXh0LFxuXHRcdFx0XHRcdFx0XHR1c2VUaHJlYWRzID8gJzEnIDogJzAnLFxuXHRcdFx0XHRcdFx0XHR1c2VUaHJlYWRzID8gc1RocmVhZFVpZCA6ICcnXG5cdFx0XHRcdFx0XHRdLmpvaW4oU3RyaW5nLmZyb21DaGFyQ29kZSgwKSlcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRiU2lsZW50ID8gW10gOiBbJ01lc3NhZ2VMaXN0J11cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnTWVzc2FnZUxpc3QnLFxuXHRcdFx0e1xuXHRcdFx0XHRGb2xkZXI6IHNGb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0T2Zmc2V0OiBpT2Zmc2V0LFxuXHRcdFx0XHRMaW1pdDogaUxpbWl0LFxuXHRcdFx0XHRTZWFyY2g6IHNTZWFyY2gsXG5cdFx0XHRcdFVpZE5leHQ6IGluYm94VWlkTmV4dCxcblx0XHRcdFx0VXNlVGhyZWFkczogdXNlVGhyZWFkcyA/ICcxJyA6ICcwJyxcblx0XHRcdFx0VGhyZWFkVWlkOiB1c2VUaHJlYWRzID8gc1RocmVhZFVpZCA6ICcnXG5cdFx0XHR9LFxuXHRcdFx0JycgPT09IHNTZWFyY2ggPyBERUZBVUxUX0FKQVhfVElNRU9VVCA6IFNFQVJDSF9BSkFYX1RJTUVPVVQsXG5cdFx0XHQnJyxcblx0XHRcdGJTaWxlbnQgPyBbXSA6IFsnTWVzc2FnZUxpc3QnXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge0FycmF5fSBhRG93bmxvYWRzXG5cdCAqL1xuXHRtZXNzYWdlVXBsb2FkQXR0YWNobWVudHMoZkNhbGxiYWNrLCBhRG93bmxvYWRzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdNZXNzYWdlVXBsb2FkQXR0YWNobWVudHMnLFxuXHRcdFx0e1xuXHRcdFx0XHQnQXR0YWNobWVudHMnOiBhRG93bmxvYWRzXG5cdFx0XHR9LFxuXHRcdFx0OTk5MDAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtudW1iZXJ9IGlVaWRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRtZXNzYWdlKGZDYWxsYmFjaywgc0ZvbGRlckZ1bGxOYW1lUmF3LCBpVWlkKSB7XG5cdFx0c0ZvbGRlckZ1bGxOYW1lUmF3ID0gcFN0cmluZyhzRm9sZGVyRnVsbE5hbWVSYXcpO1xuXHRcdGlVaWQgPSBwSW50KGlVaWQpO1xuXG5cdFx0aWYgKGdldEZvbGRlckZyb21DYWNoZUxpc3Qoc0ZvbGRlckZ1bGxOYW1lUmF3KSAmJiAwIDwgaVVpZCkge1xuXHRcdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0XHQnTWVzc2FnZScsXG5cdFx0XHRcdHt9LFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHQnTWVzc2FnZS8nICtcblx0XHRcdFx0XHRzdWJRdWVyeVByZWZpeCgpICtcblx0XHRcdFx0XHQnLycgK1xuXHRcdFx0XHRcdEJhc2U2NC51cmxzYWZlX2VuY29kZShcblx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0c0ZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdFx0XHRpVWlkLFxuXHRcdFx0XHRcdFx0XHRBcHBTdG9yZS5wcm9qZWN0SGFzaCgpLFxuXHRcdFx0XHRcdFx0XHRBcHBTdG9yZS50aHJlYWRzQWxsb3dlZCgpICYmIFNldHRpbmdzU3RvcmUudXNlVGhyZWFkcygpID8gJzEnIDogJzAnXG5cdFx0XHRcdFx0XHRdLmpvaW4oU3RyaW5nLmZyb21DaGFyQ29kZSgwKSlcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRbJ01lc3NhZ2UnXVxuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtBcnJheX0gYUV4dGVybmFsc1xuXHQgKi9cblx0Y29tcG9zZVVwbG9hZEV4dGVybmFscyhmQ2FsbGJhY2ssIGFFeHRlcm5hbHMpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0J0NvbXBvc2VVcGxvYWRFeHRlcm5hbHMnLFxuXHRcdFx0e1xuXHRcdFx0XHQnRXh0ZXJuYWxzJzogYUV4dGVybmFsc1xuXHRcdFx0fSxcblx0XHRcdDk5OTAwMFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1VybFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0FjY2Vzc1Rva2VuXG5cdCAqL1xuXHRjb21wb3NlVXBsb2FkRHJpdmUoZkNhbGxiYWNrLCBzVXJsLCBzQWNjZXNzVG9rZW4pIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0J0NvbXBvc2VVcGxvYWREcml2ZScsXG5cdFx0XHR7XG5cdFx0XHRcdCdBY2Nlc3NUb2tlbic6IHNBY2Nlc3NUb2tlbixcblx0XHRcdFx0J1VybCc6IHNVcmxcblx0XHRcdH0sXG5cdFx0XHQ5OTkwMDBcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlclxuXHQgKiBAcGFyYW0ge0FycmF5PX0gbGlzdCA9IFtdXG5cdCAqL1xuXHRmb2xkZXJJbmZvcm1hdGlvbihmQ2FsbGJhY2ssIGZvbGRlciwgbGlzdCA9IFtdKSB7XG5cdFx0bGV0IHJlcXVlc3QgPSB0cnVlO1xuXHRcdGNvbnN0IHVpZHMgPSBbXTtcblxuXHRcdGlmIChpc0FycmF5KGxpc3QpICYmIDAgPCBsaXN0Lmxlbmd0aCkge1xuXHRcdFx0cmVxdWVzdCA9IGZhbHNlO1xuXHRcdFx0Xy5lYWNoKGxpc3QsIChtZXNzYWdlTGlzdEl0ZW0pID0+IHtcblx0XHRcdFx0aWYgKCFnZXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUobWVzc2FnZUxpc3RJdGVtLmZvbGRlckZ1bGxOYW1lUmF3LCBtZXNzYWdlTGlzdEl0ZW0udWlkKSkge1xuXHRcdFx0XHRcdHVpZHMucHVzaChtZXNzYWdlTGlzdEl0ZW0udWlkKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICgwIDwgbWVzc2FnZUxpc3RJdGVtLnRocmVhZHMoKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRfLmVhY2gobWVzc2FnZUxpc3RJdGVtLnRocmVhZHMoKSwgKHVpZCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFnZXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUobWVzc2FnZUxpc3RJdGVtLmZvbGRlckZ1bGxOYW1lUmF3LCB1aWQpKSB7XG5cdFx0XHRcdFx0XHRcdHVpZHMucHVzaCh1aWQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKDAgPCB1aWRzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXF1ZXN0ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdCkge1xuXHRcdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdGb2xkZXJJbmZvcm1hdGlvbicsIHtcblx0XHRcdFx0J0ZvbGRlcic6IGZvbGRlcixcblx0XHRcdFx0J0ZsYWdzVWlkcyc6IGlzQXJyYXkodWlkcykgPyB1aWRzLmpvaW4oJywnKSA6ICcnLFxuXHRcdFx0XHQnVWlkTmV4dCc6IGdldEZvbGRlckluYm94TmFtZSgpID09PSBmb2xkZXIgPyBnZXRGb2xkZXJVaWROZXh0KGZvbGRlcikgOiAnJ1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChTZXR0aW5nc1N0b3JlLnVzZVRocmVhZHMoKSkge1xuXHRcdFx0Z2V0QXBwKCkucmVsb2FkRmxhZ3NDdXJyZW50TWVzc2FnZUxpc3RBbmRNZXNzYWdlRnJvbUNhY2hlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtBcnJheX0gYUZvbGRlcnNcblx0ICovXG5cdGZvbGRlckluZm9ybWF0aW9uTXVsdGlwbHkoZkNhbGxiYWNrLCBhRm9sZGVycykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnRm9sZGVySW5mb3JtYXRpb25NdWx0aXBseScsIHtcblx0XHRcdCdGb2xkZXJzJzogYUZvbGRlcnNcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRsb2dvdXQoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdMb2dvdXQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtBcnJheX0gYVVpZHNcblx0ICogQHBhcmFtIHtib29sZWFufSBiU2V0RmxhZ2dlZFxuXHQgKi9cblx0bWVzc2FnZVNldEZsYWdnZWQoZkNhbGxiYWNrLCBzRm9sZGVyRnVsbE5hbWVSYXcsIGFVaWRzLCBiU2V0RmxhZ2dlZCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnTWVzc2FnZVNldEZsYWdnZWQnLCB7XG5cdFx0XHQnRm9sZGVyJzogc0ZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0J1VpZHMnOiBhVWlkcy5qb2luKCcsJyksXG5cdFx0XHQnU2V0QWN0aW9uJzogYlNldEZsYWdnZWQgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtBcnJheX0gYVVpZHNcblx0ICogQHBhcmFtIHtib29sZWFufSBiU2V0U2VlblxuXHQgKi9cblx0bWVzc2FnZVNldFNlZW4oZkNhbGxiYWNrLCBzRm9sZGVyRnVsbE5hbWVSYXcsIGFVaWRzLCBiU2V0U2Vlbikge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnTWVzc2FnZVNldFNlZW4nLCB7XG5cdFx0XHQnRm9sZGVyJzogc0ZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0J1VpZHMnOiBhVWlkcy5qb2luKCcsJyksXG5cdFx0XHQnU2V0QWN0aW9uJzogYlNldFNlZW4gPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtib29sZWFufSBiU2V0U2VlblxuXHQgKiBAcGFyYW0ge0FycmF5fSBhVGhyZWFkVWlkcyA9IG51bGxcblx0ICovXG5cdG1lc3NhZ2VTZXRTZWVuVG9BbGwoZkNhbGxiYWNrLCBzRm9sZGVyRnVsbE5hbWVSYXcsIGJTZXRTZWVuLCBhVGhyZWFkVWlkcyA9IG51bGwpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ01lc3NhZ2VTZXRTZWVuVG9BbGwnLCB7XG5cdFx0XHQnRm9sZGVyJzogc0ZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0J1NldEFjdGlvbic6IGJTZXRTZWVuID8gJzEnIDogJzAnLFxuXHRcdFx0J1RocmVhZFVpZHMnOiBhVGhyZWFkVWlkcyA/IGFUaHJlYWRVaWRzLmpvaW4oJywnKSA6ICcnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0lkZW50aXR5SURcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNNZXNzYWdlRm9sZGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTWVzc2FnZVVpZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0RyYWZ0Rm9sZGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVG9cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNDY1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0JjY1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1JlcGx5VG9cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNTdWJqZWN0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlRleHRJc0h0bWxcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUZXh0XG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFBdHRhY2htZW50c1xuXHQgKiBAcGFyYW0geyhBcnJheXxudWxsKX0gYURyYWZ0SW5mb1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0luUmVwbHlUb1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1JlZmVyZW5jZXNcblx0ICogQHBhcmFtIHtib29sZWFufSBiTWFya0FzSW1wb3J0YW50XG5cdCAqL1xuXHRzYXZlTWVzc2FnZShcblx0XHRmQ2FsbGJhY2ssXG5cdFx0c0lkZW50aXR5SUQsXG5cdFx0c01lc3NhZ2VGb2xkZXIsXG5cdFx0c01lc3NhZ2VVaWQsXG5cdFx0c0RyYWZ0Rm9sZGVyLFxuXHRcdHNUbyxcblx0XHRzQ2MsXG5cdFx0c0JjYyxcblx0XHRzUmVwbHlUbyxcblx0XHRzU3ViamVjdCxcblx0XHRiVGV4dElzSHRtbCxcblx0XHRzVGV4dCxcblx0XHRhQXR0YWNobWVudHMsXG5cdFx0YURyYWZ0SW5mbyxcblx0XHRzSW5SZXBseVRvLFxuXHRcdHNSZWZlcmVuY2VzLFxuXHRcdGJNYXJrQXNJbXBvcnRhbnRcblx0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdTYXZlTWVzc2FnZScsXG5cdFx0XHR7XG5cdFx0XHRcdCdJZGVudGl0eUlEJzogc0lkZW50aXR5SUQsXG5cdFx0XHRcdCdNZXNzYWdlRm9sZGVyJzogc01lc3NhZ2VGb2xkZXIsXG5cdFx0XHRcdCdNZXNzYWdlVWlkJzogc01lc3NhZ2VVaWQsXG5cdFx0XHRcdCdEcmFmdEZvbGRlcic6IHNEcmFmdEZvbGRlcixcblx0XHRcdFx0J1RvJzogc1RvLFxuXHRcdFx0XHQnQ2MnOiBzQ2MsXG5cdFx0XHRcdCdCY2MnOiBzQmNjLFxuXHRcdFx0XHQnUmVwbHlUbyc6IHNSZXBseVRvLFxuXHRcdFx0XHQnU3ViamVjdCc6IHNTdWJqZWN0LFxuXHRcdFx0XHQnVGV4dElzSHRtbCc6IGJUZXh0SXNIdG1sID8gJzEnIDogJzAnLFxuXHRcdFx0XHQnVGV4dCc6IHNUZXh0LFxuXHRcdFx0XHQnRHJhZnRJbmZvJzogYURyYWZ0SW5mbyxcblx0XHRcdFx0J0luUmVwbHlUbyc6IHNJblJlcGx5VG8sXG5cdFx0XHRcdCdSZWZlcmVuY2VzJzogc1JlZmVyZW5jZXMsXG5cdFx0XHRcdCdNYXJrQXNJbXBvcnRhbnQnOiBiTWFya0FzSW1wb3J0YW50ID8gJzEnIDogJzAnLFxuXHRcdFx0XHQnQXR0YWNobWVudHMnOiBhQXR0YWNobWVudHNcblx0XHRcdH0sXG5cdFx0XHRTQVZFX01FU1NBR0VfQUpBWF9USU1FT1VUXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTWVzc2FnZUZvbGRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc01lc3NhZ2VVaWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZWFkUmVjZWlwdFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1N1YmplY3Rcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUZXh0XG5cdCAqL1xuXHRzZW5kUmVhZFJlY2VpcHRNZXNzYWdlKGZDYWxsYmFjaywgc01lc3NhZ2VGb2xkZXIsIHNNZXNzYWdlVWlkLCBzUmVhZFJlY2VpcHQsIHNTdWJqZWN0LCBzVGV4dCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnU2VuZFJlYWRSZWNlaXB0TWVzc2FnZScsIHtcblx0XHRcdCdNZXNzYWdlRm9sZGVyJzogc01lc3NhZ2VGb2xkZXIsXG5cdFx0XHQnTWVzc2FnZVVpZCc6IHNNZXNzYWdlVWlkLFxuXHRcdFx0J1JlYWRSZWNlaXB0Jzogc1JlYWRSZWNlaXB0LFxuXHRcdFx0J1N1YmplY3QnOiBzU3ViamVjdCxcblx0XHRcdCdUZXh0Jzogc1RleHRcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzSWRlbnRpdHlJRFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc01lc3NhZ2VGb2xkZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNNZXNzYWdlVWlkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzU2VudEZvbGRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RvXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQ2Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IHNCY2Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXBseVRvXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzU3ViamVjdFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJUZXh0SXNIdG1sXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVGV4dFxuXHQgKiBAcGFyYW0ge0FycmF5fSBhQXR0YWNobWVudHNcblx0ICogQHBhcmFtIHsoQXJyYXl8bnVsbCl9IGFEcmFmdEluZm9cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJblJlcGx5VG9cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZWZlcmVuY2VzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlJlcXVlc3REc25cblx0ICogQHBhcmFtIHtib29sZWFufSBiUmVxdWVzdFJlYWRSZWNlaXB0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYk1hcmtBc0ltcG9ydGFudFxuXHQgKi9cblx0c2VuZE1lc3NhZ2UoXG5cdFx0ZkNhbGxiYWNrLFxuXHRcdHNJZGVudGl0eUlELFxuXHRcdHNNZXNzYWdlRm9sZGVyLFxuXHRcdHNNZXNzYWdlVWlkLFxuXHRcdHNTZW50Rm9sZGVyLFxuXHRcdHNUbyxcblx0XHRzQ2MsXG5cdFx0c0JjYyxcblx0XHRzUmVwbHlUbyxcblx0XHRzU3ViamVjdCxcblx0XHRiVGV4dElzSHRtbCxcblx0XHRzVGV4dCxcblx0XHRhQXR0YWNobWVudHMsXG5cdFx0YURyYWZ0SW5mbyxcblx0XHRzSW5SZXBseVRvLFxuXHRcdHNSZWZlcmVuY2VzLFxuXHRcdGJSZXF1ZXN0RHNuLFxuXHRcdGJSZXF1ZXN0UmVhZFJlY2VpcHQsXG5cdFx0Yk1hcmtBc0ltcG9ydGFudFxuXHQpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0J1NlbmRNZXNzYWdlJyxcblx0XHRcdHtcblx0XHRcdFx0J0lkZW50aXR5SUQnOiBzSWRlbnRpdHlJRCxcblx0XHRcdFx0J01lc3NhZ2VGb2xkZXInOiBzTWVzc2FnZUZvbGRlcixcblx0XHRcdFx0J01lc3NhZ2VVaWQnOiBzTWVzc2FnZVVpZCxcblx0XHRcdFx0J1NlbnRGb2xkZXInOiBzU2VudEZvbGRlcixcblx0XHRcdFx0J1RvJzogc1RvLFxuXHRcdFx0XHQnQ2MnOiBzQ2MsXG5cdFx0XHRcdCdCY2MnOiBzQmNjLFxuXHRcdFx0XHQnUmVwbHlUbyc6IHNSZXBseVRvLFxuXHRcdFx0XHQnU3ViamVjdCc6IHNTdWJqZWN0LFxuXHRcdFx0XHQnVGV4dElzSHRtbCc6IGJUZXh0SXNIdG1sID8gJzEnIDogJzAnLFxuXHRcdFx0XHQnVGV4dCc6IHNUZXh0LFxuXHRcdFx0XHQnRHJhZnRJbmZvJzogYURyYWZ0SW5mbyxcblx0XHRcdFx0J0luUmVwbHlUbyc6IHNJblJlcGx5VG8sXG5cdFx0XHRcdCdSZWZlcmVuY2VzJzogc1JlZmVyZW5jZXMsXG5cdFx0XHRcdCdEc24nOiBiUmVxdWVzdERzbiA/ICcxJyA6ICcwJyxcblx0XHRcdFx0J1JlYWRSZWNlaXB0UmVxdWVzdCc6IGJSZXF1ZXN0UmVhZFJlY2VpcHQgPyAnMScgOiAnMCcsXG5cdFx0XHRcdCdNYXJrQXNJbXBvcnRhbnQnOiBiTWFya0FzSW1wb3J0YW50ID8gJzEnIDogJzAnLFxuXHRcdFx0XHQnQXR0YWNobWVudHMnOiBhQXR0YWNobWVudHNcblx0XHRcdH0sXG5cdFx0XHRTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvRGF0YVxuXHQgKi9cblx0c2F2ZVN5c3RlbUZvbGRlcnMoZkNhbGxiYWNrLCBvRGF0YSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnU3lzdGVtRm9sZGVyc1VwZGF0ZScsIG9EYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvRGF0YVxuXHQgKi9cblx0c2F2ZVNldHRpbmdzKGZDYWxsYmFjaywgb0RhdGEpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1NldHRpbmdzVXBkYXRlJywgb0RhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IHZhbHVlRm5cblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZuXG5cdCAqL1xuXHRzYXZlU2V0dGluZ3NIZWxwZXIoa2V5LCB2YWx1ZUZuLCBmbikge1xuXHRcdHJldHVybiAodmFsdWUpID0+IHtcblx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKGZuIHx8IG51bGwsIHtcblx0XHRcdFx0W2tleV06IHZhbHVlRm4gPyB2YWx1ZUZuKHZhbHVlKSA6IHZhbHVlXG5cdFx0XHR9KTtcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZXZQYXNzd29yZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmV3UGFzc3dvcmRcblx0ICovXG5cdGNoYW5nZVBhc3N3b3JkKGZDYWxsYmFjaywgcHJldlBhc3N3b3JkLCBuZXdQYXNzd29yZCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQ2hhbmdlUGFzc3dvcmQnLCB7XG5cdFx0XHQnUHJldlBhc3N3b3JkJzogcHJldlBhc3N3b3JkLFxuXHRcdFx0J05ld1Bhc3N3b3JkJzogbmV3UGFzc3dvcmRcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyRnVsbE5hbWVSYXdcblx0ICovXG5cdGZvbGRlckNsZWFyKGZDYWxsYmFjaywgc0ZvbGRlckZ1bGxOYW1lUmF3KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdGb2xkZXJDbGVhcicsIHtcblx0XHRcdCdGb2xkZXInOiBzRm9sZGVyRnVsbE5hbWVSYXdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtib29sZWFufSBiU3Vic2NyaWJlXG5cdCAqL1xuXHRmb2xkZXJTZXRTdWJzY3JpYmUoZkNhbGxiYWNrLCBzRm9sZGVyRnVsbE5hbWVSYXcsIGJTdWJzY3JpYmUpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0ZvbGRlclN1YnNjcmliZScsIHtcblx0XHRcdCdGb2xkZXInOiBzRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHQnU3Vic2NyaWJlJzogYlN1YnNjcmliZSA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJDaGVja2FibGVcblx0ICovXG5cdGZvbGRlclNldENoZWNrYWJsZShmQ2FsbGJhY2ssIHNGb2xkZXJGdWxsTmFtZVJhdywgYkNoZWNrYWJsZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnRm9sZGVyQ2hlY2thYmxlJywge1xuXHRcdFx0J0ZvbGRlcic6IHNGb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdCdDaGVja2FibGUnOiBiQ2hlY2thYmxlID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RvRm9sZGVyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFVaWRzXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0xlYXJuaW5nXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJNYXJrQXNSZWFkXG5cdCAqL1xuXHRtZXNzYWdlc01vdmUoZkNhbGxiYWNrLCBzRm9sZGVyLCBzVG9Gb2xkZXIsIGFVaWRzLCBzTGVhcm5pbmcsIGJNYXJrQXNSZWFkKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdNZXNzYWdlTW92ZScsXG5cdFx0XHR7XG5cdFx0XHRcdCdGcm9tRm9sZGVyJzogc0ZvbGRlcixcblx0XHRcdFx0J1RvRm9sZGVyJzogc1RvRm9sZGVyLFxuXHRcdFx0XHQnVWlkcyc6IGFVaWRzLmpvaW4oJywnKSxcblx0XHRcdFx0J01hcmtBc1JlYWQnOiBiTWFya0FzUmVhZCA/ICcxJyA6ICcwJyxcblx0XHRcdFx0J0xlYXJuaW5nJzogc0xlYXJuaW5nIHx8ICcnXG5cdFx0XHR9LFxuXHRcdFx0bnVsbCxcblx0XHRcdCcnLFxuXHRcdFx0WydNZXNzYWdlTGlzdCddXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVG9Gb2xkZXJcblx0ICogQHBhcmFtIHtBcnJheX0gYVVpZHNcblx0ICovXG5cdG1lc3NhZ2VzQ29weShmQ2FsbGJhY2ssIHNGb2xkZXIsIHNUb0ZvbGRlciwgYVVpZHMpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ01lc3NhZ2VDb3B5Jywge1xuXHRcdFx0J0Zyb21Gb2xkZXInOiBzRm9sZGVyLFxuXHRcdFx0J1RvRm9sZGVyJzogc1RvRm9sZGVyLFxuXHRcdFx0J1VpZHMnOiBhVWlkcy5qb2luKCcsJylcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRm9sZGVyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFVaWRzXG5cdCAqL1xuXHRtZXNzYWdlc0RlbGV0ZShmQ2FsbGJhY2ssIHNGb2xkZXIsIGFVaWRzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdNZXNzYWdlRGVsZXRlJyxcblx0XHRcdHtcblx0XHRcdFx0J0ZvbGRlcic6IHNGb2xkZXIsXG5cdFx0XHRcdCdVaWRzJzogYVVpZHMuam9pbignLCcpXG5cdFx0XHR9LFxuXHRcdFx0bnVsbCxcblx0XHRcdCcnLFxuXHRcdFx0WydNZXNzYWdlTGlzdCddXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRhcHBEZWxheVN0YXJ0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQXBwRGVsYXlTdGFydCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdHF1b3RhKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnUXVvdGEnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBpT2Zmc2V0XG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBpTGltaXRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNTZWFyY2hcblx0ICovXG5cdGNvbnRhY3RzKGZDYWxsYmFjaywgaU9mZnNldCwgaUxpbWl0LCBzU2VhcmNoKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdDb250YWN0cycsXG5cdFx0XHR7XG5cdFx0XHRcdCdPZmZzZXQnOiBpT2Zmc2V0LFxuXHRcdFx0XHQnTGltaXQnOiBpTGltaXQsXG5cdFx0XHRcdCdTZWFyY2gnOiBzU2VhcmNoXG5cdFx0XHR9LFxuXHRcdFx0bnVsbCxcblx0XHRcdCcnLFxuXHRcdFx0WydDb250YWN0cyddXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUmVxdWVzdFVpZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1VpZFxuXHQgKiBAcGFyYW0ge0FycmF5fSBhUHJvcGVydGllc1xuXHQgKi9cblx0Y29udGFjdFNhdmUoZkNhbGxiYWNrLCBzUmVxdWVzdFVpZCwgc1VpZCwgYVByb3BlcnRpZXMpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0NvbnRhY3RTYXZlJywge1xuXHRcdFx0J1JlcXVlc3RVaWQnOiBzUmVxdWVzdFVpZCxcblx0XHRcdCdVaWQnOiB0cmltKHNVaWQpLFxuXHRcdFx0J1Byb3BlcnRpZXMnOiBhUHJvcGVydGllc1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtBcnJheX0gYVVpZHNcblx0ICovXG5cdGNvbnRhY3RzRGVsZXRlKGZDYWxsYmFjaywgYVVpZHMpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0NvbnRhY3RzRGVsZXRlJywge1xuXHRcdFx0J1VpZHMnOiBhVWlkcy5qb2luKCcsJylcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUXVlcnlcblx0ICogQHBhcmFtIHtudW1iZXJ9IGlQYWdlXG5cdCAqL1xuXHRzdWdnZXN0aW9ucyhmQ2FsbGJhY2ssIHNRdWVyeSwgaVBhZ2UpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KFxuXHRcdFx0ZkNhbGxiYWNrLFxuXHRcdFx0J1N1Z2dlc3Rpb25zJyxcblx0XHRcdHtcblx0XHRcdFx0J1F1ZXJ5Jzogc1F1ZXJ5LFxuXHRcdFx0XHQnUGFnZSc6IGlQYWdlXG5cdFx0XHR9LFxuXHRcdFx0bnVsbCxcblx0XHRcdCcnLFxuXHRcdFx0WydTdWdnZXN0aW9ucyddXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRjbGVhclVzZXJCYWNrZ3JvdW5kKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQ2xlYXJVc2VyQmFja2dyb3VuZCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGZhY2Vib29rVXNlcihmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ1NvY2lhbEZhY2Vib29rVXNlckluZm9ybWF0aW9uJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0ZmFjZWJvb2tEaXNjb25uZWN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnU29jaWFsRmFjZWJvb2tEaXNjb25uZWN0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0dHdpdHRlclVzZXIoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdTb2NpYWxUd2l0dGVyVXNlckluZm9ybWF0aW9uJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0dHdpdHRlckRpc2Nvbm5lY3QoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdTb2NpYWxUd2l0dGVyRGlzY29ubmVjdCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGdvb2dsZVVzZXIoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdTb2NpYWxHb29nbGVVc2VySW5mb3JtYXRpb24nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRnb29nbGVEaXNjb25uZWN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnU29jaWFsR29vZ2xlRGlzY29ubmVjdCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdHNvY2lhbFVzZXJzKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnU29jaWFsVXNlcnMnKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgUmVtb3RlVXNlckFqYXgoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwXCIpOyIsImltcG9ydCBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9mb3ItZWFjaFwiO1xuaW1wb3J0IF9PYmplY3Qka2V5cyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9rZXlzXCI7XG5pbXBvcnQgX3JlZHVjZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZWR1Y2VcIjtcbmltcG9ydCBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZXZlcnNlXCI7XG5pbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL3NsaWNlXCI7XG5pbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcHBseURlY29yYXRlZERlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eSwgZGVjb3JhdG9ycywgZGVzY3JpcHRvciwgY29udGV4dCkge1xuICB2YXIgX2NvbnRleHQsIF9jb250ZXh0MiwgX2NvbnRleHQzO1xuXG4gIHZhciBkZXNjID0ge307XG5cbiAgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRrZXlzKGRlc2NyaXB0b3IpKS5jYWxsKF9jb250ZXh0LCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgZGVzY1trZXldID0gZGVzY3JpcHRvcltrZXldO1xuICB9KTtcblxuICBkZXNjLmVudW1lcmFibGUgPSAhIWRlc2MuZW51bWVyYWJsZTtcbiAgZGVzYy5jb25maWd1cmFibGUgPSAhIWRlc2MuY29uZmlndXJhYmxlO1xuXG4gIGlmICgndmFsdWUnIGluIGRlc2MgfHwgZGVzYy5pbml0aWFsaXplcikge1xuICAgIGRlc2Mud3JpdGFibGUgPSB0cnVlO1xuICB9XG5cbiAgZGVzYyA9IF9yZWR1Y2VJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0MiA9IF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDMgPSBfc2xpY2VJbnN0YW5jZVByb3BlcnR5KGRlY29yYXRvcnMpLmNhbGwoZGVjb3JhdG9ycykpLmNhbGwoX2NvbnRleHQzKSkuY2FsbChfY29udGV4dDIsIGZ1bmN0aW9uIChkZXNjLCBkZWNvcmF0b3IpIHtcbiAgICByZXR1cm4gZGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHksIGRlc2MpIHx8IGRlc2M7XG4gIH0sIGRlc2MpO1xuXG4gIGlmIChjb250ZXh0ICYmIGRlc2MuaW5pdGlhbGl6ZXIgIT09IHZvaWQgMCkge1xuICAgIGRlc2MudmFsdWUgPSBkZXNjLmluaXRpYWxpemVyID8gZGVzYy5pbml0aWFsaXplci5jYWxsKGNvbnRleHQpIDogdm9pZCAwO1xuICAgIGRlc2MuaW5pdGlhbGl6ZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoZGVzYy5pbml0aWFsaXplciA9PT0gdm9pZCAwKSB7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBkZXNjKTtcblxuICAgIGRlc2MgPSBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGRlc2M7XG59IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmtleTsiLCIvKipcbiAqIEByZXR1cm5zIHtBcHBVc2VyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwKCkge1xuXHRyZXR1cm4gcmVxdWlyZSgnQXBwL1VzZXInKS5kZWZhdWx0O1xufVxuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmNvbnN0IFNVQlMgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmNcbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViKG5hbWUsIGZ1bmMsIGNvbnRleHQpIHtcblx0aWYgKGlzT2JqZWN0KG5hbWUpKSB7XG5cdFx0Y29udGV4dCA9IGZ1bmMgfHwgbnVsbDtcblx0XHRmdW5jID0gbnVsbDtcblxuXHRcdF8uZWFjaChuYW1lLCAoc3ViRnVuYywgc3ViTmFtZSkgPT4ge1xuXHRcdFx0c3ViKHN1Yk5hbWUsIHN1YkZ1bmMsIGNvbnRleHQpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdFx0U1VCU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNVQlNbbmFtZV0ucHVzaChbZnVuYywgY29udGV4dF0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBhcmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWIobmFtZSwgYXJncykge1xuXHRQbHVnaW5zLnJ1bkhvb2soJ3JsLXB1YicsIFtuYW1lLCBhcmdzXSk7XG5cblx0aWYgKCFpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdF8uZWFjaChTVUJTW25hbWVdLCAoaXRlbXMpID0+IHtcblx0XHRcdGlmIChpdGVtc1swXSkge1xuXHRcdFx0XHRpdGVtc1swXS5hcHBseShpdGVtc1sxXSB8fCBudWxsLCBhcmdzIHx8IFtdKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwiZXhwb3J0IGNvbnN0IE1FU1NBR0VTX1BFUl9QQUdFID0gMjA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVMgPSBbMTAsIDIwLCAzMCwgNTAsIDEwMF07XG5cbmV4cG9ydCBjb25zdCBDT05UQUNUU19QRVJfUEFHRSA9IDUwO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BSkFYX1RJTUVPVVQgPSAzMDAwMDtcblxuZXhwb3J0IGNvbnN0IFNFQVJDSF9BSkFYX1RJTUVPVVQgPSAzMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUID0gMzAwMDAwO1xuXG5leHBvcnQgY29uc3QgU0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCA9IDIwMDAwMDtcblxuZXhwb3J0IGNvbnN0IENPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUID0gMjAwMDAwO1xuXG5leHBvcnQgY29uc3QgVU5VU0VEX09QVElPTl9WQUxVRSA9ICdfX1VOVVNFX18nO1xuXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FID0gJ3JsY3NjJztcblxuZXhwb3J0IGNvbnN0IElNQVBfREVGQVVMVF9QT1JUID0gMTQzO1xuXG5leHBvcnQgY29uc3QgSU1BUF9ERUZBVUxUX1NFQ1VSRV9QT1JUID0gOTkzO1xuXG5leHBvcnQgY29uc3QgU01UUF9ERUZBVUxUX1BPUlQgPSAyNTtcblxuZXhwb3J0IGNvbnN0IFNNVFBfREVGQVVMVF9TRUNVUkVfUE9SVCA9IDQ2NTtcblxuZXhwb3J0IGNvbnN0IFNJRVZFX0RFRkFVTFRfUE9SVCA9IDQxOTA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQgPSAxNTtcblxuZXhwb3J0IGNvbnN0IEFKQVhfRVJST1JfTElNSVQgPSA3O1xuXG5leHBvcnQgY29uc3QgVE9LRU5fRVJST1JfTElNSVQgPSAxMDtcblxuZXhwb3J0IGNvbnN0IFJBSU5MT09QX1RSSUFMX0tFWSA9ICdSQUlOTE9PUC1UUklBTC1LRVknO1xuXG4vKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuZXhwb3J0IGNvbnN0IERBVEFfSU1BR0VfVVNFUl9ET1RfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQzRBQUFBdUNBWUFBQUJYdVNzM0FBQUhIa2xFUVZSb1E3VlpXMDhiVnhDZVhSdXdJYlRHWEl3TnRCQmFxandnVlVpUjhsRGxiemE5cWUxRHBWWjlhTlEvMEtwUGVhSkswN1NwY3VFZUNFbVVBT2JtMjFiZnJMOWxPTmpleFNZcldmYnVuajM3elhkbXZwa3o5b0lnQ0tURDBXZzB4UGQ5NFREUDgzUTB6dldhNTB2emtsU3JkYW5WYW5xZjQvRDg0R0JHcitGK09wM1M4ZnFvSnhMT2RuWmdUdnNPL25ZaGVuSEErVUM3Q1dGMXVYd2tiOSsrbGRQVFV3VmVyVmJWcUZRcXBSOFlQalEwSkNNakk1TE5EaWpvUmdQM1BRVnU1KzVFb3IyWEdMZzdJVjRHa0lkSEovTG16UnM1T0RpSXdOYnJkUjBPMEdDY3E0WHo0ZUZobVp5Y2xQNyt0RFFhSWlrL0JHNVhLUW40U3dHM3pKVExaWG45K3JVY2xJOFVIRDVZVm9ERE44YlN6WGhPTndMNDhmRnhHUjRlaWx6RlpUMXVGUklCNXlUOEJxQ2RuUjNaM2QwVlA5VW42WFJhd1lKcGdnVnJaQnYzOE1FNFhLdFVLbkx0MmpVcGxVb3kxUFIvbDNVN1Q2c1ZTQVFjZ01Ba2o4UERROW5lM3Bham95TVJMN3plS3NZWldIZ1dZREdtdjc4L21tZHdjRkErbUpsU2d6aUhEV3JFUnJzakVYRFhlZ1RpMXRaVytETHhJMmJ4SXJxRk5ZVFh5RHlDRndlTUFIQ3diOGU0Um5UTnVPc3FlM3Q3c3JhMjFwVEQwS2N0NjY2RThYbGNaeXp3OS9SVVVYSzVuSzVvVWluVVFJNlRRM2N5bk8vdjc4dnE2cXJLWENOd2xUaUpKcHlOR2MzblpIcDZ1cVYyZHdyUVdPQ3RaQkRBVjFaV3dzUWs3ZjB3aVFuNWtmZmJBdS8wL0tXQll6SUMxK1h1a2ZHeDBSR1ptcHBLbEMydElWMEJoNGFEY1pXN0hoa2ZIOHVyTExaTDdUMnBpaHZsa01Obno1NkZpYWRIeGljTDQxSXNGcE40MWJreHNZeGJSZEZvOWp3QjhLZFBuMTRKOEtuU3BCUUtoUXM2M25QbWJDVlJjQlVBUjJMcTFWVm1wa3N5TVRGeEFYamNFc1F5YmllZ0VTaW9uang1b3NDWk9lTmUxTzQrRWhDQVg3YlFTZ1FjeFJIVE1nQWdjejUrL0Rpcy9oTDR1SFUzL0I0WUdOQVNHSElLeHVFcWwwaytsMDVBZUlBRjF2UG56NVZ4RkZtZERsYUpyTXRaSVRKZVNzWENPVGxNdW5LeGpMdE1ZT0tOalExNThlSkZ1QXVLa1VPYjVzRXdnZmYxOVNrSlVCVmtUaFpVYm5YWnJ0Q0tCUTZnYm5XSWtqWnB5bmUzZWpBV29HbkE3SWN6NmlydkJMZ2JPTWljQ002VGt4UHgvTEFrYlhmZ1djc2F6dUUya0ZSc0tENVorQ2lxRHVtS25jcFp2aWVXY1M2ZERWRDh4aVlDTmZscEpkd2Nkd0pPZjlhaXJMbVZRN0RQek14SVlXTHNYR1hvVnFMdDVrME0zSzNKVVZQRFpkYldOenNDcDQ4VFBGZHZkblpXVXozMm5EaGE3Yko2M2tnQUpQelNkUmtzOS9LZjl4TUpBUTFncTJOcGFVbXkyWXo0emFyNG5RQzN4Yjk5QVF3Q2NHekxBQXd1aEc4WWlXdmNPS3RzK3I0R09lNW5NaG01ZWZPbTlsVUEzRTN2U1pKUnJLdkUwZm5Qdi8vSnk1Y3ZvNWNUSElQUWJTamhPb3FxNjlldlMxOWY2bHhES0s0K3NWaGlnWlB0S0pxYnJRZXF4ZDUrV1I0K2ZLZ3FnVDBrMlhYM25oaVBnRVRXWEZoWWtGenVQWjJ5VnExR1RTT1hwRTQ3L1ZqZ05uRDRtNEdHNy9MaHNUeDY5RWl3RDRWcjJNd0lJeGdiQUgxOGZLeDF5Zno4dkVvZ052R3RXbkN1aExaYTlVVEFyZVZXRnNIeS9iLytWcmJkbDdFNVJFTVFEMmpEb1ViQnl0eSsvWm5VNjRHa1UySHp5Skxoa3RVMWNMdjhuQVJna1lTMmQzYWpBZ3dHOHFVMm9MbURaOTJDTWFPam83SzR1Q2laZ2JEV2FSV2duWmhQeExock1VQ3ZyNjlyaXdLWmsxTEhGN1hxcldBTzloSnhINm96TnpjbkN4L1BxenRaZzltZjZTUU1zY0N0bTJDNWtlNEJHTWxIV1RVcDM2MDM2QUphakRWckZNekJyaGhXc2xRc1NyRllpT3FWcE1yaU5ZSWdxRlJxMmozRkFiL3pmZlQ2enV4Rlh4c056czNOVFhuMTZsVzRnWWlXOTZ3MUZ5ZWRGKzgzeEcvMkZOR0NScFU0TmphbU1zbitPWjl4RTVSWHFkYURkUHBpYjZSV0N6dXdLRjlSeHFJMkFWTlFCd1FZSm9LMHdkQmVqbnF0RWlrUDNwZlA1MVhqVVRFU2wxMkZxSkVLeHNFb3JBUllERDQ0T05UZUlEN1lwc0VuclJ2UWZXQUkyZThXZkRhVFVTSXdKMGlCQ21GT3RPVUFIdlZNUHAvVFB3dllGVllGSXVQOGwrREJnd2RhYTJNaXF3YTBHZ1l3ZmVNbHRvdmJEZmg2YzF2SWdNWWNsaVNzS3Y0SVdGcjZWREh4dmxkdkJBSCsxc0ErY25sNVdZT1BtbXI5aXIrMWw5STBDZ3oweWpoWGpmSkowSlJPbm1leldibDE2NWF5ci81ZnF3Y0JOcjdJZmhqTXFLY3ZFU1NNNGVSY0Nhc1EzYkROT2JtS1BMZEdVR3Bac04yNGNVTkxCbTl6YXp1NGQrK2U2cXBOQkZhVHVVUzI2VTVkcHVSMUN4eUE3SjlkZHJNUnFsejRwd0xMWWF3eW1QZCsrLzJQQUR0MnVnY0d3cTlnQ0NkaFE5NkM2eFd3YTZqMWNldXErSTBFaFcwaThNQUlWSmZlTDNkL0RWRDhFS2kxMlA2LzJTMmpWL0VjY1ZCNTRPL2Vqei85SEdDcG9CQk10YTVyWE1YTHU1M0QxWEF3amhYd3Z2ditoNEJBWFZlNGJPdTNPM0NoeEYwOExpWkZHM2ZlbDE5OUc5Q0gzZkx5cXYyNE5jQjQ0TVJocGRLNzg4VTNDcHlLd3NDdzU5MHhtZlNwenNCdDBGcWMzdWQzdnRaaWd4V2NWWkNrbFZwU2lOMHczcTVFL2g5VEdNSVV1QTMrRVFBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG5leHBvcnQgY29uc3QgREFUQV9JTUFHRV9UUkFOU1BfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRSVcyTmtBQUlBQUFvQUFnZ0E5R2tBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmV4cG9ydCBjb25zdCBEQVRBX0lNQUdFX0xBWllfUExBQ0VIT0xERVJfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc1FBQUE3RUFaVXJEaHNBQUFBTlNVUkJWQmhYWXpoOCtQQi9BQWZmQTBuTlB1Q0xBQUFBQUVsRlRrU3VRbUNDJztcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IGRlbGVnYXRlUnVuLCBpbkZvY3VzIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IEtleVN0YXRlLCBFdmVudEtleUNvZGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgJHdpbiwga2V5U2NvcGUgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0YkRpc2FiZUNsb3NlT25Fc2MgPSBmYWxzZTtcblx0c0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLk5vbmU7XG5cdHNDdXJyZW50S2V5U2NvcGUgPSBLZXlTdGF0ZS5Ob25lO1xuXG5cdHZpZXdNb2RlbFZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0bW9kYWxWaXNpYmlsaXR5ID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAwIH0pO1xuXG5cdHZpZXdNb2RlbE5hbWUgPSAnJztcblx0dmlld01vZGVsTmFtZXMgPSBbXTtcblx0dmlld01vZGVsRG9tID0gbnVsbDtcblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRzdG9yZUFuZFNldEtleVNjb3BlKCkge1xuXHRcdHRoaXMuc0N1cnJlbnRLZXlTY29wZSA9IGtleVNjb3BlKCk7XG5cdFx0a2V5U2NvcGUodGhpcy5zRGVmYXVsdEtleVNjb3BlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHJlc3RvcmVLZXlTY29wZSgpIHtcblx0XHRrZXlTY29wZSh0aGlzLnNDdXJyZW50S2V5U2NvcGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0cmVnaXN0ZXJQb3B1cEtleURvd24oKSB7XG5cdFx0JHdpbi5vbigna2V5ZG93bicsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50ICYmIHRoaXMubW9kYWxWaXNpYmlsaXR5ICYmIHRoaXMubW9kYWxWaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0aWYgKCF0aGlzLmJEaXNhYmVDbG9zZU9uRXNjICYmIEV2ZW50S2V5Q29kZS5Fc2MgPT09IGV2ZW50LmtleUNvZGUpIHtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLCAnY2FuY2VsQ29tbWFuZCcpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIGlmIChFdmVudEtleUNvZGUuQmFja3NwYWNlID09PSBldmVudC5rZXlDb2RlICYmICFpbkZvY3VzKCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cdH1cblxuXHRjYW5jZWxDb21tYW5kKCkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eS1mdW5jdGlvblxuXHRjbG9zZUNvbW1hbmQoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG59XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgU29jaWFsU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmdvb2dsZSA9IHt9O1xuXHRcdHRoaXMudHdpdHRlciA9IHt9O1xuXHRcdHRoaXMuZmFjZWJvb2sgPSB7fTtcblx0XHR0aGlzLmRyb3Bib3ggPSB7fTtcblxuXHRcdC8vIEdvb2dsZVxuXHRcdHRoaXMuZ29vZ2xlLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmNsaWVudElEID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5nb29nbGUuY2xpZW50U2VjcmV0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5nb29nbGUuYXBpS2V5ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmdvb2dsZS5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUudXNlck5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmxvZ2dpbmVkID0ga28uY29tcHV0ZWQoKCkgPT4gJycgIT09IHRoaXMuZ29vZ2xlLnVzZXJOYW1lKCkpO1xuXG5cdFx0dGhpcy5nb29nbGUuY2FwYSA9IHt9O1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuYXV0aCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuYXV0aEdtYWlsID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5kcml2ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEucHJldmlldyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZSA9IHt9O1xuXHRcdHRoaXMuZ29vZ2xlLnJlcXVpcmUuY2xpZW50U2V0dGluZ3MgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdHRoaXMuZ29vZ2xlLmVuYWJsZWQoKSAmJiAodGhpcy5nb29nbGUuY2FwYS5hdXRoKCkgfHwgdGhpcy5nb29nbGUuY2FwYS5hdXRoR21haWwoKSB8fCB0aGlzLmdvb2dsZS5jYXBhLmRyaXZlKCkpXG5cdFx0KTtcblxuXHRcdHRoaXMuZ29vZ2xlLnJlcXVpcmUuYXBpS2V5U2V0dGluZ3MgPSBrby5jb21wdXRlZCgoKSA9PiB0aGlzLmdvb2dsZS5lbmFibGVkKCkgJiYgdGhpcy5nb29nbGUuY2FwYS5kcml2ZSgpKTtcblxuXHRcdC8vIEZhY2Vib29rXG5cdFx0dGhpcy5mYWNlYm9vay5lbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBJRCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZmFjZWJvb2suYXBwU2VjcmV0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5mYWNlYm9vay51c2VyTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZmFjZWJvb2suc3VwcG9ydGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZhY2Vib29rLmxvZ2dpbmVkID0ga28uY29tcHV0ZWQoKCkgPT4gJycgIT09IHRoaXMuZmFjZWJvb2sudXNlck5hbWUoKSk7XG5cblx0XHQvLyBUd2l0dGVyXG5cdFx0dGhpcy50d2l0dGVyLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnR3aXR0ZXIuY29uc3VtZXJLZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnR3aXR0ZXIuY29uc3VtZXJTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnR3aXR0ZXIubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdpdHRlci51c2VyTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy50d2l0dGVyLmxvZ2dpbmVkID0ga28uY29tcHV0ZWQoKCkgPT4gJycgIT09IHRoaXMudHdpdHRlci51c2VyTmFtZSgpKTtcblxuXHRcdC8vIERyb3Bib3hcblx0XHR0aGlzLmRyb3Bib3guZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZHJvcGJveC5hcGlLZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHRoaXMuZ29vZ2xlLmVuYWJsZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWwnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2xpZW50SUQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0dvb2dsZUNsaWVudElEJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNsaWVudFNlY3JldChTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQ2xpZW50U2VjcmV0JykpO1xuXHRcdHRoaXMuZ29vZ2xlLmFwaUtleShTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQXBpS2V5JykpO1xuXG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsQXV0aCcpKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmF1dGhHbWFpbCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbEF1dGhHbWFpbCcpKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmRyaXZlKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsRHJpdmUnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5wcmV2aWV3KCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsUHJldmlldycpKTtcblxuXHRcdHRoaXMuZmFjZWJvb2suZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0ZhY2Vib29rU29jaWFsJykpO1xuXHRcdHRoaXMuZmFjZWJvb2suYXBwSUQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0ZhY2Vib29rQXBwSUQnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBTZWNyZXQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0ZhY2Vib29rQXBwU2VjcmV0JykpO1xuXHRcdHRoaXMuZmFjZWJvb2suc3VwcG9ydGVkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1N1cHBvcnRlZEZhY2Vib29rU29jaWFsJykpO1xuXG5cdFx0dGhpcy50d2l0dGVyLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93VHdpdHRlclNvY2lhbCcpKTtcblx0XHR0aGlzLnR3aXR0ZXIuY29uc3VtZXJLZXkgPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUd2l0dGVyQ29uc3VtZXJLZXknKSk7XG5cdFx0dGhpcy50d2l0dGVyLmNvbnN1bWVyU2VjcmV0ID0ga28ub2JzZXJ2YWJsZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVHdpdHRlckNvbnN1bWVyU2VjcmV0JykpO1xuXG5cdFx0dGhpcy5kcm9wYm94LmVuYWJsZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dEcm9wYm94U29jaWFsJykpO1xuXHRcdHRoaXMuZHJvcGJveC5hcGlLZXkoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0Ryb3Bib3hBcGlLZXknKSk7XG5cdH1cblxuXHRhcHBlbmREcm9wYm94KCkge1xuXHRcdGlmICghd2luZG93LkRyb3Bib3ggJiYgdGhpcy5kcm9wYm94LmVuYWJsZWQoKSAmJiB0aGlzLmRyb3Bib3guYXBpS2V5KCkpIHtcblx0XHRcdGlmICghd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkcm9wYm94anMnKSkge1xuXHRcdFx0XHRjb25zdCBzY3JpcHQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cdFx0XHRcdHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG5cdFx0XHRcdHNjcmlwdC5zcmMgPSAnaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc3RhdGljL2FwaS8yL2Ryb3BpbnMuanMnO1xuXHRcdFx0XHQkKHNjcmlwdClcblx0XHRcdFx0XHQuYXR0cignaWQnLCAnZHJvcGJveGpzJylcblx0XHRcdFx0XHQuYXR0cignZGF0YS1hcHAta2V5JywgdGhpcy5kcm9wYm94LmFwaUtleSgpKTtcblxuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgU29jaWFsU3RvcmUoKTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBGb2N1c2VkLCBLZXlTdGF0ZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7IGtleVNjb3BlLCBsZWZ0UGFuZWxEaXNhYmxlZCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IGlzTm9uRW1wdHlBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEFwcFN0b3JlIH0gZnJvbSAnU3RvcmVzL0Fic3RyYWN0QXBwJztcblxuY2xhc3MgQXBwVXNlclN0b3JlIGV4dGVuZHMgQWJzdHJhY3RBcHBTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmN1cnJlbnRBdWRpbyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5mb2N1c2VkU3RhdGUgPSBrby5vYnNlcnZhYmxlKEZvY3VzZWQuTm9uZSk7XG5cblx0XHRjb25zdCBpc01vYmlsZSA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGUnKTtcblxuXHRcdHRoaXMuZm9jdXNlZFN0YXRlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdHN3aXRjaCAodmFsdWUpIHtcblx0XHRcdFx0Y2FzZSBGb2N1c2VkLk1lc3NhZ2VMaXN0OlxuXHRcdFx0XHRcdGtleVNjb3BlKEtleVN0YXRlLk1lc3NhZ2VMaXN0KTtcblx0XHRcdFx0XHRpZiAoaXNNb2JpbGUpIHtcblx0XHRcdFx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGb2N1c2VkLk1lc3NhZ2VWaWV3OlxuXHRcdFx0XHRcdGtleVNjb3BlKEtleVN0YXRlLk1lc3NhZ2VWaWV3KTtcblx0XHRcdFx0XHRpZiAoaXNNb2JpbGUpIHtcblx0XHRcdFx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGb2N1c2VkLkZvbGRlckxpc3Q6XG5cdFx0XHRcdFx0a2V5U2NvcGUoS2V5U3RhdGUuRm9sZGVyTGlzdCk7XG5cdFx0XHRcdFx0aWYgKGlzTW9iaWxlKSB7XG5cdFx0XHRcdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZChmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5wcm9qZWN0SGFzaCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudGhyZWFkc0FsbG93ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuY29tcG9zZUluRWRpdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5jb250YWN0c0F1dG9zYXZlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy51c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuY29udGFjdHNJc0FsbG93ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudHNBY3Rpb25zID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMuZGV2RW1haWwgPSAnJztcblx0XHR0aGlzLmRldlBhc3N3b3JkID0gJyc7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHRzdXBlci5wb3B1bGF0ZSgpO1xuXG5cdFx0dGhpcy5wcm9qZWN0SGFzaChTZXR0aW5ncy5zZXR0aW5nc0dldCgnUHJvamVjdEhhc2gnKSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzQXV0b3NhdmUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQ29udGFjdHNBdXRvc2F2ZScpKTtcblx0XHR0aGlzLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMnKSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzSXNBbGxvd2VkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbnRhY3RzSXNBbGxvd2VkJykpO1xuXG5cdFx0Y29uc3QgYXR0YWNobWVudHNBY3Rpb25zID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2F0dGFjaG1lbnRzQWN0aW9ucycpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNBY3Rpb25zKGlzTm9uRW1wdHlBcnJheShhdHRhY2htZW50c0FjdGlvbnMpID8gYXR0YWNobWVudHNBY3Rpb25zIDogW10pO1xuXG5cdFx0dGhpcy5kZXZFbWFpbCA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdEZXZFbWFpbCcpO1xuXHRcdHRoaXMuZGV2UGFzc3dvcmQgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnRGV2UGFzc3dvcmQnKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQXBwVXNlclN0b3JlKCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlclwiKTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsInZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuVG9Ob2RlcyB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuY2xhc3MgQWJzdHJhY3RDb21wb25lbnQge1xuXHRkaXNwb3NhYmxlID0gW107XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLmRpc3Bvc2FibGUuZm9yRWFjaCgoZnVuY1RvRGlzcG9zZSkgPT4ge1xuXHRcdFx0aWYgKGZ1bmNUb0Rpc3Bvc2UgJiYgZnVuY1RvRGlzcG9zZS5kaXNwb3NlKSB7XG5cdFx0XHRcdGZ1bmNUb0Rpc3Bvc2UuZGlzcG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSBDbGFzc09iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlSUQgPSAnJ1xuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgY29tcG9uZW50RXhwb3J0SGVscGVyID0gKENsYXNzT2JqZWN0LCB0ZW1wbGF0ZUlEID0gJycpID0+ICh7XG5cdHRlbXBsYXRlOiB0ZW1wbGF0ZUlEID8geyBlbGVtZW50OiB0ZW1wbGF0ZUlEIH0gOiAnPGI+PC9iPicsXG5cdHZpZXdNb2RlbDoge1xuXHRcdGNyZWF0ZVZpZXdNb2RlbDogKHBhcmFtcywgY29tcG9uZW50SW5mbykgPT4ge1xuXHRcdFx0cGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuXHRcdFx0cGFyYW1zLmVsZW1lbnQgPSBudWxsO1xuXG5cdFx0XHRpZiAoY29tcG9uZW50SW5mbyAmJiBjb21wb25lbnRJbmZvLmVsZW1lbnQpIHtcblx0XHRcdFx0cGFyYW1zLmNvbXBvbmVudCA9IGNvbXBvbmVudEluZm87XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50ID0gJChjb21wb25lbnRJbmZvLmVsZW1lbnQpO1xuXG5cdFx0XHRcdGkxOG5Ub05vZGVzKHBhcmFtcy5lbGVtZW50KTtcblxuXHRcdFx0XHRpZiAoIWlzVW5kKHBhcmFtcy5pbmxpbmUpICYmIGtvLnVud3JhcChwYXJhbXMuaW5saW5lKSkge1xuXHRcdFx0XHRcdHBhcmFtcy5lbGVtZW50LmNzcygnZGlzcGxheScsICdpbmxpbmUtYmxvY2snKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IENsYXNzT2JqZWN0KHBhcmFtcyk7XG5cdFx0fVxuXHR9XG59KTtcblxuZXhwb3J0IHsgQWJzdHJhY3RDb21wb25lbnQsIGNvbXBvbmVudEV4cG9ydEhlbHBlciB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dFwiKTsiLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG5cbnZhciB3cmFwQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoTmF0aXZlQ29uc3RydWN0b3IpIHtcbiAgdmFyIFdyYXBwZXIgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgTmF0aXZlQ29uc3RydWN0b3IpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gTmF0aXZlQ29uc3RydWN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgV3JhcHBlci5wcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBXcmFwcGVyO1xufTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5ub1RhcmdldEdldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbCA6IFNUQVRJQyA/IGdsb2JhbFtUQVJHRVRdIDogKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgKHBhdGhbVEFSR0VUXSA9IHt9KTtcbiAgdmFyIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG5cbiAgdmFyIEZPUkNFRCwgVVNFX05BVElWRSwgVklSVFVBTF9QUk9UT1RZUEU7XG4gIHZhciBrZXksIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSwgbmF0aXZlUHJvcGVydHksIHJlc3VsdFByb3BlcnR5LCBkZXNjcmlwdG9yO1xuXG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgVVNFX05BVElWRSA9ICFGT1JDRUQgJiYgbmF0aXZlU291cmNlICYmIGhhcyhuYXRpdmVTb3VyY2UsIGtleSk7XG5cbiAgICB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUpIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hdGl2ZVNvdXJjZSwga2V5KTtcbiAgICAgIG5hdGl2ZVByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSBuYXRpdmVQcm9wZXJ0eSA9IG5hdGl2ZVNvdXJjZVtrZXldO1xuXG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBpbXBsZW1lbnRhdGlvblxuICAgIHNvdXJjZVByb3BlcnR5ID0gKFVTRV9OQVRJVkUgJiYgbmF0aXZlUHJvcGVydHkpID8gbmF0aXZlUHJvcGVydHkgOiBzb3VyY2Vba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFICYmIHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSA9PT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgaWYgKG9wdGlvbnMuYmluZCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IGJpbmQoc291cmNlUHJvcGVydHksIGdsb2JhbCk7XG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5ncyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSAnZnVuY3Rpb24nKSByZXN1bHRQcm9wZXJ0eSA9IGJpbmQoRnVuY3Rpb24uY2FsbCwgc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0YXJnZXRba2V5XSA9IHJlc3VsdFByb3BlcnR5O1xuXG4gICAgaWYgKFBST1RPKSB7XG4gICAgICBWSVJUVUFMX1BST1RPVFlQRSA9IFRBUkdFVCArICdQcm90b3R5cGUnO1xuICAgICAgaWYgKCFoYXMocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSwge30pO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IHZpcnR1YWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdW2tleV0gPSBzb3VyY2VQcm9wZXJ0eTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAhdGFyZ2V0UHJvdG90eXBlW2tleV0pIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgTUVTU0FHRVNfUEVSX1BBR0UsIE1FU1NBR0VTX1BFUl9QQUdFX1ZBTFVFUyB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgTGF5b3V0LCBFZGl0b3JEZWZhdWx0VHlwZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7ICRodG1sIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgcEludCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBTZXR0aW5nc1VzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuaUF1dG9Mb2dvdXRUaW1lciA9IDA7XG5cblx0XHR0aGlzLmxheW91dCA9IGtvXG5cdFx0XHQub2JzZXJ2YWJsZShMYXlvdXQuU2lkZVByZXZpZXcpXG5cdFx0XHQuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IFtMYXlvdXQuU2lkZVByZXZpZXcsIExheW91dC5Cb3R0b21QcmV2aWV3LCBMYXlvdXQuTm9QcmV2aWV3XSB9KTtcblxuXHRcdHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUgPSBrby5vYnNlcnZhYmxlKEVkaXRvckRlZmF1bHRUeXBlLkh0bWwpLmV4dGVuZCh7XG5cdFx0XHRsaW1pdGVkTGlzdDogW1xuXHRcdFx0XHRFZGl0b3JEZWZhdWx0VHlwZS5IdG1sLFxuXHRcdFx0XHRFZGl0b3JEZWZhdWx0VHlwZS5QbGFpbixcblx0XHRcdFx0RWRpdG9yRGVmYXVsdFR5cGUuSHRtbEZvcmNlZCxcblx0XHRcdFx0RWRpdG9yRGVmYXVsdFR5cGUuUGxhaW5Gb3JjZWRcblx0XHRcdF1cblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZXNQZXJQYWdlID0ga28ub2JzZXJ2YWJsZShNRVNTQUdFU19QRVJfUEFHRSkuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IE1FU1NBR0VTX1BFUl9QQUdFX1ZBTFVFUyB9KTtcblxuXHRcdHRoaXMuc2hvd0ltYWdlcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudXNlQ2hlY2tib3hlc0luTGlzdCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5hbGxvd0RyYWZ0QXV0b3NhdmUgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMudXNlVGhyZWFkcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMucmVwbHlTYW1lRm9sZGVyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmF1dG9Mb2dvdXQgPSBrby5vYnNlcnZhYmxlKE1hZ2ljcy5UaW1lMzBtSW5NaW4pO1xuXG5cdFx0dGhpcy5jb21wdXRlcnMoKTtcblx0XHR0aGlzLnN1YnNjcmliZXJzKCk7XG5cdH1cblxuXHRjb21wdXRlcnMoKSB7XG5cdFx0dGhpcy51c2VQcmV2aWV3UGFuZSA9IGtvLmNvbXB1dGVkKCgpID0+IExheW91dC5Ob1ByZXZpZXcgIT09IHRoaXMubGF5b3V0KCkpO1xuXHR9XG5cblx0c3Vic2NyaWJlcnMoKSB7XG5cdFx0dGhpcy5sYXlvdXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLW5vLXByZXZpZXctcGFuZScsIExheW91dC5Ob1ByZXZpZXcgPT09IHZhbHVlKTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1zaWRlLXByZXZpZXctcGFuZScsIExheW91dC5TaWRlUHJldmlldyA9PT0gdmFsdWUpO1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLWJvdHRvbS1wcmV2aWV3LXBhbmUnLCBMYXlvdXQuQm90dG9tUHJldmlldyA9PT0gdmFsdWUpO1xuXHRcdFx0RXZlbnRzLnB1YignbGF5b3V0JywgW3ZhbHVlXSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHR0aGlzLmxheW91dChwSW50KFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYXlvdXQnKSkpO1xuXHRcdHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0VkaXRvckRlZmF1bHRUeXBlJykpO1xuXG5cdFx0dGhpcy5hdXRvTG9nb3V0KHBJbnQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dG9Mb2dvdXQnKSkpO1xuXHRcdHRoaXMubWVzc2FnZXNQZXJQYWdlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdNUFAnKSk7XG5cblx0XHR0aGlzLnNob3dJbWFnZXMoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnU2hvd0ltYWdlcycpKTtcblx0XHR0aGlzLnVzZUNoZWNrYm94ZXNJbkxpc3QoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlQ2hlY2tib3hlc0luTGlzdCcpKTtcblx0XHR0aGlzLmFsbG93RHJhZnRBdXRvc2F2ZSghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0RyYWZ0QXV0b3NhdmUnKSk7XG5cdFx0dGhpcy51c2VUaHJlYWRzKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZVRocmVhZHMnKSk7XG5cdFx0dGhpcy5yZXBseVNhbWVGb2xkZXIoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnUmVwbHlTYW1lRm9sZGVyJykpO1xuXG5cdFx0RXZlbnRzLnN1YigncmwuYXV0by1sb2dvdXQtcmVmcmVzaCcsICgpID0+IHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5pQXV0b0xvZ291dFRpbWVyKTtcblx0XHRcdGlmICgwIDwgdGhpcy5hdXRvTG9nb3V0KCkgJiYgIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBY2NvdW50U2lnbk1lJykpIHtcblx0XHRcdFx0dGhpcy5pQXV0b0xvZ291dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdEV2ZW50cy5wdWIoJ3JsLmF1dG8tbG9nb3V0Jyk7XG5cdFx0XHRcdH0sIHRoaXMuYXV0b0xvZ291dCgpICogTWFnaWNzLlRpbWUxbSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRFdmVudHMucHViKCdybC5hdXRvLWxvZ291dC1yZWZyZXNoJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFNldHRpbmdzVXNlclN0b3JlKCk7XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCB7IGlzRnVuYywgaXNBcnJheSwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZGF0YSBhcyBHbG9iYWxzRGF0YSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jb25zdCBTSU1QTEVfSE9PS1MgPSB7fSxcblx0VVNFUl9WSUVXX01PREVMU19IT09LUyA9IFtdLFxuXHRBRE1JTl9WSUVXX01PREVMU19IT09LUyA9IFtdO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkSG9vayhuYW1lLCBjYWxsYmFjaykge1xuXHRpZiAoaXNGdW5jKGNhbGxiYWNrKSkge1xuXHRcdGlmICghaXNBcnJheShTSU1QTEVfSE9PS1NbbmFtZV0pKSB7XG5cdFx0XHRTSU1QTEVfSE9PS1NbbmFtZV0gPSBbXTtcblx0XHR9XG5cblx0XHRTSU1QTEVfSE9PS1NbbmFtZV0ucHVzaChjYWxsYmFjayk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtBcnJheT19IGFyZ3MgPSBbXVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuSG9vayhuYW1lLCBhcmdzID0gW10pIHtcblx0aWYgKGlzQXJyYXkoU0lNUExFX0hPT0tTW25hbWVdKSkge1xuXHRcdF8uZWFjaChTSU1QTEVfSE9PS1NbbmFtZV0sIChjYWxsYmFjaykgPT4ge1xuXHRcdFx0Y2FsbGJhY2soLi4uYXJncyk7XG5cdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMgez99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWluU2V0dGluZ3NHZXQobmFtZSkge1xuXHRyZXR1cm4gU2V0dGluZ3Muc2V0dGluZ3NHZXQobmFtZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcGFyYW1ldGVyc1xuICogQHBhcmFtIHs/bnVtYmVyPX0gdGltZW91dFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3RlUmVxdWVzdChjYWxsYmFjaywgYWN0aW9uLCBwYXJhbWV0ZXJzLCB0aW1lb3V0KSB7XG5cdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fKSB7XG5cdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5yZW1vdGUoKS5kZWZhdWx0UmVxdWVzdChjYWxsYmFjaywgJ1BsdWdpbicgKyBhY3Rpb24sIHBhcmFtZXRlcnMsIHRpbWVvdXQpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcm91dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNldHRpbmdzVmlld01vZGVsKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlKSB7XG5cdFVTRVJfVklFV19NT0RFTFNfSE9PS1MucHVzaChbU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGVdKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2V0dGluZ3NWaWV3TW9kZWxGb3JBZG1pbihTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZSkge1xuXHRBRE1JTl9WSUVXX01PREVMU19IT09LUy5wdXNoKFtTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZV0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRtaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blNldHRpbmdzVmlld01vZGVsSG9va3MoYWRtaW4pIHtcblx0Y29uc3QgS25vaW4gPSByZXF1aXJlKCdLbm9pbi9Lbm9pbicpO1xuXHRfLmVhY2goYWRtaW4gPyBBRE1JTl9WSUVXX01PREVMU19IT09LUyA6IFVTRVJfVklFV19NT0RFTFNfSE9PS1MsICh2aWV3KSA9PiB7XG5cdFx0S25vaW4uYWRkU2V0dGluZ3NWaWV3TW9kZWwodmlld1swXSwgdmlld1sxXSwgdmlld1syXSwgdmlld1szXSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbHVnaW5TZWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMgez99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc0dldChwbHVnaW5TZWN0aW9uLCBuYW1lKSB7XG5cdGxldCBwbHVnaW5zID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1BsdWdpbnMnKTtcblx0cGx1Z2lucyA9IHBsdWdpbnMgJiYgIWlzVW5kKHBsdWdpbnNbcGx1Z2luU2VjdGlvbl0pID8gcGx1Z2luc1twbHVnaW5TZWN0aW9uXSA6IG51bGw7XG5cdHJldHVybiBwbHVnaW5zID8gKGlzVW5kKHBsdWdpbnNbbmFtZV0pID8gbnVsbCA6IHBsdWdpbnNbbmFtZV0pIDogbnVsbDtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXMoU3ltYm9sLCBuYW1lKSkgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIGVsc2UgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhcyhXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpIHx8ICEoTkFUSVZFX1NZTUJPTCB8fCB0eXBlb2YgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID09ICdzdHJpbmcnKSkge1xuICAgIGlmIChOQVRJVkVfU1lNQk9MICYmIGhhcyhTeW1ib2wsIG5hbWUpKSB7XG4gICAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBTeW1ib2xbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgICB9XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcblxuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGxvZywgaXNBcnJheSwgaXNOb25FbXB0eUFycmF5LCBwU3RyaW5nLCBpc1VuZCwgdHJpbSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCBBY2NvdW50U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQWNjb3VudCc7XG5cbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgUGdwVXNlclN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jYXBhT3BlblBHUCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5vcGVucGdwID0gbnVsbDtcblxuXHRcdHRoaXMub3BlbnBncGtleXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMub3BlbnBncEtleXJpbmcgPSBudWxsO1xuXG5cdFx0dGhpcy5vcGVucGdwa2V5c1B1YmxpYyA9IGtvLmNvbXB1dGVkKCgpID0+IF8uZmlsdGVyKHRoaXMub3BlbnBncGtleXMoKSwgKGl0ZW0pID0+ICEhKGl0ZW0gJiYgIWl0ZW0uaXNQcml2YXRlKSkpO1xuXHRcdHRoaXMub3BlbnBncGtleXNQcml2YXRlID0ga28uY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy5vcGVucGdwa2V5cygpLCAoaXRlbSkgPT4gISEoaXRlbSAmJiBpdGVtLmlzUHJpdmF0ZSkpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzU3VwcG9ydGVkKCkge1xuXHRcdHJldHVybiAhIXRoaXMub3BlbnBncDtcblx0fVxuXG5cdGZpbmRLZXlCeUhleChrZXlzLCBoYXNoKSB7XG5cdFx0cmV0dXJuIF8uZmluZChrZXlzLCAoaXRlbSkgPT4gaGFzaCAmJiBpdGVtICYmIChoYXNoID09PSBpdGVtLmlkIHx8IC0xIDwgaXRlbS5pZHMuaW5kZXhPZihoYXNoKSkpO1xuXHR9XG5cblx0ZmluZFB1YmxpY0tleUJ5SGV4KGhhc2gpIHtcblx0XHRyZXR1cm4gdGhpcy5maW5kS2V5QnlIZXgodGhpcy5vcGVucGdwa2V5c1B1YmxpYygpLCBoYXNoKTtcblx0fVxuXG5cdGZpbmRQcml2YXRlS2V5QnlIZXgoaGFzaCkge1xuXHRcdHJldHVybiB0aGlzLmZpbmRLZXlCeUhleCh0aGlzLm9wZW5wZ3BrZXlzUHJpdmF0ZSgpLCBoYXNoKTtcblx0fVxuXG5cdGZpbmRQdWJsaWNLZXlzQnlFbWFpbChlbWFpbCkge1xuXHRcdHJldHVybiBfLmNvbXBhY3QoXG5cdFx0XHRfLmZsYXR0ZW4oXG5cdFx0XHRcdF8ubWFwKHRoaXMub3BlbnBncGtleXNQdWJsaWMoKSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRjb25zdCBrZXkgPSBpdGVtICYmIC0xIDwgaXRlbS5lbWFpbHMuaW5kZXhPZihlbWFpbCkgPyBpdGVtIDogbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4ga2V5ID8ga2V5LmdldE5hdGl2ZUtleXMoKSA6IFtudWxsXTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdHRydWVcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0ZmluZFB1YmxpY0tleXNCeVNpZ25pbmdLZXlJZHMoc2lnbmluZ0tleUlkcykge1xuXHRcdHJldHVybiBfLmNvbXBhY3QoXG5cdFx0XHRfLmZsYXR0ZW4oXG5cdFx0XHRcdF8ubWFwKHNpZ25pbmdLZXlJZHMsIChpZCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGtleSA9IGlkICYmIGlkLnRvSGV4ID8gdGhpcy5maW5kUHVibGljS2V5QnlIZXgoaWQudG9IZXgoKSkgOiBudWxsO1xuXHRcdFx0XHRcdHJldHVybiBrZXkgPyBrZXkuZ2V0TmF0aXZlS2V5cygpIDogW251bGxdO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHRmaW5kUHJpdmF0ZUtleXNCeUVuY3J5cHRpb25LZXlJZHMoZW5jcnlwdGlvbktleUlkcywgcmVjaXBpZW50cywgcmV0dXJuV3JhcEtleXMpIHtcblx0XHRsZXQgcmVzdWx0ID0gaXNBcnJheShlbmNyeXB0aW9uS2V5SWRzKVxuXHRcdFx0PyBfLmNvbXBhY3QoXG5cdFx0XHRcdFx0Xy5mbGF0dGVuKFxuXHRcdFx0XHRcdFx0Xy5tYXAoZW5jcnlwdGlvbktleUlkcywgKGlkKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGlkICYmIGlkLnRvSGV4ID8gdGhpcy5maW5kUHJpdmF0ZUtleUJ5SGV4KGlkLnRvSGV4KCkpIDogbnVsbDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleSA/IChyZXR1cm5XcmFwS2V5cyA/IFtrZXldIDoga2V5LmdldE5hdGl2ZUtleXMoKSkgOiBbbnVsbF07XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpXG5cdFx0XHQgIClcblx0XHRcdDogW107XG5cblx0XHRpZiAoMCA9PT0gcmVzdWx0Lmxlbmd0aCAmJiBpc05vbkVtcHR5QXJyYXkocmVjaXBpZW50cykpIHtcblx0XHRcdHJlc3VsdCA9IF8udW5pcShcblx0XHRcdFx0Xy5jb21wYWN0KFxuXHRcdFx0XHRcdF8uZmxhdHRlbihcblx0XHRcdFx0XHRcdF8ubWFwKHJlY2lwaWVudHMsIChzRW1haWwpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IHNFbWFpbCA/IHRoaXMuZmluZEFsbFByaXZhdGVLZXlzQnlFbWFpbE5vdE5hdGl2ZShzRW1haWwpIDogbnVsbDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleXNcblx0XHRcdFx0XHRcdFx0XHQ/IHJldHVybldyYXBLZXlzXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IGtleXNcblx0XHRcdFx0XHRcdFx0XHRcdDogXy5mbGF0dGVuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF8ubWFwKGtleXMsIChrZXkpID0+IGtleS5nZXROYXRpdmVLZXlzKCkpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHRcdDogW251bGxdO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpLFxuXHRcdFx0XHQoa2V5KSA9PiBrZXkuaWRcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcblx0ICogQHJldHVybnMgez99XG5cdCAqL1xuXHRmaW5kUHVibGljS2V5QnlFbWFpbE5vdE5hdGl2ZShlbWFpbCkge1xuXHRcdHJldHVybiBfLmZpbmQodGhpcy5vcGVucGdwa2V5c1B1YmxpYygpLCAoaXRlbSkgPT4gaXRlbSAmJiAtMSA8IGl0ZW0uZW1haWxzLmluZGV4T2YoZW1haWwpKSB8fCBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuXHQgKiBAcmV0dXJucyB7P31cblx0ICovXG5cdGZpbmRQcml2YXRlS2V5QnlFbWFpbE5vdE5hdGl2ZShlbWFpbCkge1xuXHRcdHJldHVybiBfLmZpbmQodGhpcy5vcGVucGdwa2V5c1ByaXZhdGUoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgLTEgPCBpdGVtLmVtYWlscy5pbmRleE9mKGVtYWlsKSkgfHwgbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcblx0ICogQHJldHVybnMgez99XG5cdCAqL1xuXHRmaW5kQWxsUHVibGljS2V5c0J5RW1haWxOb3ROYXRpdmUoZW1haWwpIHtcblx0XHRyZXR1cm4gXy5maWx0ZXIodGhpcy5vcGVucGdwa2V5c1B1YmxpYygpLCAoaXRlbSkgPT4gaXRlbSAmJiAtMSA8IGl0ZW0uZW1haWxzLmluZGV4T2YoZW1haWwpKSB8fCBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuXHQgKiBAcmV0dXJucyB7P31cblx0ICovXG5cdGZpbmRBbGxQcml2YXRlS2V5c0J5RW1haWxOb3ROYXRpdmUoZW1haWwpIHtcblx0XHRyZXR1cm4gXy5maWx0ZXIodGhpcy5vcGVucGdwa2V5c1ByaXZhdGUoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgLTEgPCBpdGVtLmVtYWlscy5pbmRleE9mKGVtYWlsKSkgfHwgbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBwYXNzd29yZFxuXHQgKiBAcmV0dXJucyB7P31cblx0ICovXG5cdGZpbmRQcml2YXRlS2V5QnlFbWFpbChlbWFpbCwgcGFzc3dvcmQpIHtcblx0XHRsZXQgcHJpdmF0ZUtleSA9IG51bGw7XG5cdFx0Y29uc3Qga2V5ID0gXy5maW5kKHRoaXMub3BlbnBncGtleXNQcml2YXRlKCksIChpdGVtKSA9PiBpdGVtICYmIC0xIDwgaXRlbS5lbWFpbHMuaW5kZXhPZihlbWFpbCkpO1xuXG5cdFx0aWYgKGtleSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cHJpdmF0ZUtleSA9IGtleS5nZXROYXRpdmVLZXlzKClbMF0gfHwgbnVsbDtcblx0XHRcdFx0aWYgKHByaXZhdGVLZXkpIHtcblx0XHRcdFx0XHRwcml2YXRlS2V5LmRlY3J5cHQocFN0cmluZyhwYXNzd29yZCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHByaXZhdGVLZXkgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBwcml2YXRlS2V5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gcGFzc3dvcmRcblx0ICogQHJldHVybnMgez99XG5cdCAqL1xuXHRmaW5kU2VsZlByaXZhdGVLZXkocGFzc3dvcmQpIHtcblx0XHRyZXR1cm4gdGhpcy5maW5kUHJpdmF0ZUtleUJ5RW1haWwoQWNjb3VudFN0b3JlLmVtYWlsKCksIHBhc3N3b3JkKTtcblx0fVxuXG5cdGRlY3J5cHRNZXNzYWdlKG1lc3NhZ2UsIHJlY2lwaWVudHMsIGZDYWxsYmFjaykge1xuXHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2UuZ2V0RW5jcnlwdGlvbktleUlkcykge1xuXHRcdFx0Y29uc3QgcHJpdmF0ZUtleXMgPSB0aGlzLmZpbmRQcml2YXRlS2V5c0J5RW5jcnlwdGlvbktleUlkcyhtZXNzYWdlLmdldEVuY3J5cHRpb25LZXlJZHMoKSwgcmVjaXBpZW50cywgdHJ1ZSk7XG5cdFx0XHRpZiAocHJpdmF0ZUtleXMgJiYgMCA8IHByaXZhdGVLZXlzLmxlbmd0aCkge1xuXHRcdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9NZXNzYWdlT3BlblBncCcpLCBbXG5cdFx0XHRcdFx0KGRlY3J5cHRlZEtleSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGRlY3J5cHRlZEtleSkge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLmRlY3J5cHQoZGVjcnlwdGVkS2V5KS50aGVuKFxuXHRcdFx0XHRcdFx0XHRcdChkZWNyeXB0ZWRNZXNzYWdlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcHJpdmF0ZUtleSA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZGVjcnlwdGVkTWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcml2YXRlS2V5ID0gdGhpcy5maW5kUHJpdmF0ZUtleUJ5SGV4KGRlY3J5cHRlZEtleS5wcmltYXJ5S2V5LmtleWlkLnRvSGV4KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJpdmF0ZUtleSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudmVyaWZ5TWVzc2FnZShkZWNyeXB0ZWRNZXNzYWdlLCAob1ZhbGlkS2V5LCBhU2lnbmluZ0tleUlkcykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZkNhbGxiYWNrKHByaXZhdGVLZXksIGRlY3J5cHRlZE1lc3NhZ2UsIG9WYWxpZEtleSB8fCBudWxsLCBhU2lnbmluZ0tleUlkcyB8fCBudWxsKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmQ2FsbGJhY2socHJpdmF0ZUtleSwgZGVjcnlwdGVkTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZDYWxsYmFjayhwcml2YXRlS2V5LCBkZWNyeXB0ZWRNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGZDYWxsYmFjayhudWxsLCBudWxsKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRmQ2FsbGJhY2sobnVsbCwgbnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRwcml2YXRlS2V5c1xuXHRcdFx0XHRdKTtcblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZkNhbGxiYWNrKG51bGwsIG51bGwpO1xuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0dmVyaWZ5TWVzc2FnZShtZXNzYWdlLCBmQ2FsbGJhY2spIHtcblx0XHRpZiAobWVzc2FnZSAmJiBtZXNzYWdlLmdldFNpZ25pbmdLZXlJZHMpIHtcblx0XHRcdGNvbnN0IHNpZ25pbmdLZXlJZHMgPSBtZXNzYWdlLmdldFNpZ25pbmdLZXlJZHMoKTtcblx0XHRcdGlmIChzaWduaW5nS2V5SWRzICYmIDAgPCBzaWduaW5nS2V5SWRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBwdWJsaWNLZXlzID0gdGhpcy5maW5kUHVibGljS2V5c0J5U2lnbmluZ0tleUlkcyhzaWduaW5nS2V5SWRzKTtcblx0XHRcdFx0aWYgKHB1YmxpY0tleXMgJiYgMCA8IHB1YmxpY0tleXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IG1lc3NhZ2UudmVyaWZ5KHB1YmxpY0tleXMpLFxuXHRcdFx0XHRcdFx0XHR2YWxpZCA9IF8uZmluZChfLmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IFtdLCAoaXRlbSkgPT4gaXRlbSAmJiBpdGVtLnZhbGlkICYmIGl0ZW0ua2V5aWQpO1xuXG5cdFx0XHRcdFx0XHRpZiAodmFsaWQgJiYgdmFsaWQua2V5aWQgJiYgdmFsaWQua2V5aWQgJiYgdmFsaWQua2V5aWQudG9IZXgpIHtcblx0XHRcdFx0XHRcdFx0ZkNhbGxiYWNrKHRoaXMuZmluZFB1YmxpY0tleUJ5SGV4KHZhbGlkLmtleWlkLnRvSGV4KCkpKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0bG9nKGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZDYWxsYmFjayhudWxsLCBzaWduaW5nS2V5SWRzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZDYWxsYmFjayhudWxsKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjb250cm9sc0hlbHBlcihkb20sIHZlckNvbnRyb2wsIHN1Y2Nlc3MsIHRpdGxlLCB0ZXh0KSB7XG5cdFx0aWYgKHN1Y2Nlc3MpIHtcblx0XHRcdGRvbVxuXHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ2Vycm9yJylcblx0XHRcdFx0LmFkZENsYXNzKCdzdWNjZXNzJylcblx0XHRcdFx0LmF0dHIoJ3RpdGxlJywgdGl0bGUpO1xuXHRcdFx0dmVyQ29udHJvbFxuXHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ2Vycm9yJylcblx0XHRcdFx0LmFkZENsYXNzKCdzdWNjZXNzJylcblx0XHRcdFx0LmF0dHIoJ3RpdGxlJywgdGl0bGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkb21cblx0XHRcdFx0LnJlbW92ZUNsYXNzKCdzdWNjZXNzJylcblx0XHRcdFx0LmFkZENsYXNzKCdlcnJvcicpXG5cdFx0XHRcdC5hdHRyKCd0aXRsZScsIHRpdGxlKTtcblx0XHRcdHZlckNvbnRyb2xcblx0XHRcdFx0LnJlbW92ZUNsYXNzKCdzdWNjZXNzJylcblx0XHRcdFx0LmFkZENsYXNzKCdlcnJvcicpXG5cdFx0XHRcdC5hdHRyKCd0aXRsZScsIHRpdGxlKTtcblx0XHR9XG5cblx0XHRpZiAoIWlzVW5kKHRleHQpKSB7XG5cdFx0XHRkb20udGV4dCh0cmltKHRleHQpKTtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgZG9tQ29udHJvbEVuY3J5cHRlZENsaWNrSGVscGVyKHN0b3JlLCBkb20sIGFybW9yZWRNZXNzYWdlLCByZWNpcGllbnRzKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0bGV0IG1lc3NhZ2UgPSBudWxsO1xuXHRcdFx0Y29uc3QgJHRoaXMgPSAkKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXG5cdFx0XHRpZiAoJHRoaXMuaGFzQ2xhc3MoJ3N1Y2Nlc3MnKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdG1lc3NhZ2UgPSBzdG9yZS5vcGVucGdwLm1lc3NhZ2UucmVhZEFybW9yZWQoYXJtb3JlZE1lc3NhZ2UpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRsb2coZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2UuZ2V0VGV4dCAmJiBtZXNzYWdlLnZlcmlmeSAmJiBtZXNzYWdlLmRlY3J5cHQpIHtcblx0XHRcdFx0c3RvcmUuZGVjcnlwdE1lc3NhZ2UoXG5cdFx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0XHRyZWNpcGllbnRzLFxuXHRcdFx0XHRcdCh2YWxpZFByaXZhdGVLZXksIGRlY3J5cHRlZE1lc3NhZ2UsIHZhbGlkUHVibGljS2V5LCBzaWduaW5nS2V5SWRzKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZGVjcnlwdGVkTWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAodmFsaWRQdWJsaWNLZXkpIHtcblx0XHRcdFx0XHRcdFx0XHRzdG9yZS5jb250cm9sc0hlbHBlcihcblx0XHRcdFx0XHRcdFx0XHRcdGRvbSxcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdGkxOG4oJ1BHUF9OT1RJRklDQVRJT05TL0dPT0RfU0lHTkFUVVJFJywge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQnVVNFUic6IHZhbGlkUHVibGljS2V5LnVzZXIgKyAnICgnICsgdmFsaWRQdWJsaWNLZXkuaWQgKyAnKSdcblx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVjcnlwdGVkTWVzc2FnZS5nZXRUZXh0KClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHZhbGlkUHJpdmF0ZUtleSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGtleUlkcyA9IGlzTm9uRW1wdHlBcnJheShzaWduaW5nS2V5SWRzKSA/IHNpZ25pbmdLZXlJZHMgOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRcdFx0YWRkaXRpb25hbCA9IGtleUlkc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IF8uY29tcGFjdChfLm1hcChrZXlJZHMsIChpdGVtKSA9PiAoaXRlbSAmJiBpdGVtLnRvSGV4ID8gaXRlbS50b0hleCgpIDogbnVsbCkpKS5qb2luKCcsICcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogJyc7XG5cblx0XHRcdFx0XHRcdFx0XHRzdG9yZS5jb250cm9sc0hlbHBlcihcblx0XHRcdFx0XHRcdFx0XHRcdGRvbSxcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9VTlZFUklGSVJFRF9TSUdOQVRVUkUnKSArIChhZGRpdGlvbmFsID8gJyAoJyArIGFkZGl0aW9uYWwgKyAnKScgOiAnJyksXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWNyeXB0ZWRNZXNzYWdlLmdldFRleHQoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RvcmUuY29udHJvbHNIZWxwZXIoZG9tLCAkdGhpcywgZmFsc2UsIGkxOG4oJ1BHUF9OT1RJRklDQVRJT05TL0RFQ1JZUFRJT05fRVJST1InKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0b3JlLmNvbnRyb2xzSGVscGVyKGRvbSwgJHRoaXMsIGZhbHNlLCBpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9ERUNSWVBUSU9OX0VSUk9SJykpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHN0b3JlLmNvbnRyb2xzSGVscGVyKGRvbSwgJHRoaXMsIGZhbHNlLCBpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9ERUNSWVBUSU9OX0VSUk9SJykpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cdH1cblxuXHRzdGF0aWMgZG9tQ29udHJvbFNpZ25lZENsaWNrSGVscGVyKHN0b3JlLCBkb20sIGFybW9yZWRNZXNzYWdlKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0bGV0IG1lc3NhZ2UgPSBudWxsO1xuXHRcdFx0Y29uc3QgJHRoaXMgPSAkKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXG5cdFx0XHRpZiAoJHRoaXMuaGFzQ2xhc3MoJ3N1Y2Nlc3MnKSB8fCAkdGhpcy5oYXNDbGFzcygnZXJyb3InKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdG1lc3NhZ2UgPSBzdG9yZS5vcGVucGdwLmNsZWFydGV4dC5yZWFkQXJtb3JlZChhcm1vcmVkTWVzc2FnZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGxvZyhlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS5nZXRUZXh0ICYmIG1lc3NhZ2UudmVyaWZ5KSB7XG5cdFx0XHRcdHN0b3JlLnZlcmlmeU1lc3NhZ2UobWVzc2FnZSwgKHZhbGlkS2V5LCBzaWduaW5nS2V5SWRzKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbGlkS2V5KSB7XG5cdFx0XHRcdFx0XHRzdG9yZS5jb250cm9sc0hlbHBlcihcblx0XHRcdFx0XHRcdFx0ZG9tLFxuXHRcdFx0XHRcdFx0XHQkdGhpcyxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0aTE4bignUEdQX05PVElGSUNBVElPTlMvR09PRF9TSUdOQVRVUkUnLCB7XG5cdFx0XHRcdFx0XHRcdFx0J1VTRVInOiB2YWxpZEtleS51c2VyICsgJyAoJyArIHZhbGlkS2V5LmlkICsgJyknXG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLmdldFRleHQoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5SWRzID0gaXNOb25FbXB0eUFycmF5KHNpZ25pbmdLZXlJZHMpID8gc2lnbmluZ0tleUlkcyA6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGFkZGl0aW9uYWwgPSBrZXlJZHNcblx0XHRcdFx0XHRcdFx0XHQ/IF8uY29tcGFjdChfLm1hcChrZXlJZHMsIChpdGVtKSA9PiAoaXRlbSAmJiBpdGVtLnRvSGV4ID8gaXRlbS50b0hleCgpIDogbnVsbCkpKS5qb2luKCcsICcpXG5cdFx0XHRcdFx0XHRcdFx0OiAnJztcblxuXHRcdFx0XHRcdFx0c3RvcmUuY29udHJvbHNIZWxwZXIoXG5cdFx0XHRcdFx0XHRcdGRvbSxcblx0XHRcdFx0XHRcdFx0JHRoaXMsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9VTlZFUklGSVJFRF9TSUdOQVRVUkUnKSArIChhZGRpdGlvbmFsID8gJyAoJyArIGFkZGl0aW9uYWwgKyAnKScgOiAnJylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHN0b3JlLmNvbnRyb2xzSGVscGVyKGRvbSwgJHRoaXMsIGZhbHNlLCBpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9ERUNSWVBUSU9OX0VSUk9SJykpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHsqfSBkb21cblx0ICogQHBhcmFtIHtNZXNzYWdlTW9kZWx9IHJhaW5Mb29wTWVzc2FnZVxuXHQgKi9cblx0aW5pdE1lc3NhZ2VCb2R5Q29udHJvbHMoZG9tLCByYWluTG9vcE1lc3NhZ2UpIHtcblx0XHRpZiAoZG9tICYmICFkb20uaGFzQ2xhc3MoJ2luaXRlZCcpKSB7XG5cdFx0XHRkb20uYWRkQ2xhc3MoJ2luaXRlZCcpO1xuXG5cdFx0XHRjb25zdCBlbmNyeXB0ZWQgPSBkb20uaGFzQ2xhc3MoJ2VuY3J5cHRlZCcpLFxuXHRcdFx0XHRzaWduZWQgPSBkb20uaGFzQ2xhc3MoJ3NpZ25lZCcpLFxuXHRcdFx0XHRyZWNpcGllbnRzID0gcmFpbkxvb3BNZXNzYWdlID8gcmFpbkxvb3BNZXNzYWdlLmdldEVtYWlscyhbJ2Zyb20nLCAndG8nLCAnY2MnXSkgOiBbXTtcblxuXHRcdFx0bGV0IHZlckNvbnRyb2wgPSBudWxsO1xuXG5cdFx0XHRpZiAoZW5jcnlwdGVkIHx8IHNpZ25lZCkge1xuXHRcdFx0XHRjb25zdCBkb21UZXh0ID0gZG9tLnRleHQoKTtcblx0XHRcdFx0ZG9tLmRhdGEoJ29wZW5wZ3Atb3JpZ2luYWwnLCBkb21UZXh0KTtcblxuXHRcdFx0XHRpZiAoZW5jcnlwdGVkKSB7XG5cdFx0XHRcdFx0dmVyQ29udHJvbCA9ICQoJzxkaXYgY2xhc3M9XCJiLW9wZW5wZ3AtY29udHJvbFwiPjxpIGNsYXNzPVwiaWNvbi1sb2NrXCI+PC9pPjwvZGl2PicpXG5cdFx0XHRcdFx0XHQuYXR0cigndGl0bGUnLCBpMThuKCdNRVNTQUdFL1BHUF9FTkNSWVBURURfTUVTU0FHRV9ERVNDJykpXG5cdFx0XHRcdFx0XHQub24oJ2NsaWNrJywgUGdwVXNlclN0b3JlLmRvbUNvbnRyb2xFbmNyeXB0ZWRDbGlja0hlbHBlcih0aGlzLCBkb20sIGRvbVRleHQsIHJlY2lwaWVudHMpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzaWduZWQpIHtcblx0XHRcdFx0XHR2ZXJDb250cm9sID0gJCgnPGRpdiBjbGFzcz1cImItb3BlbnBncC1jb250cm9sXCI+PGkgY2xhc3M9XCJpY29uLWxvY2tcIj48L2k+PC9kaXY+Jylcblx0XHRcdFx0XHRcdC5hdHRyKCd0aXRsZScsIGkxOG4oJ01FU1NBR0UvUEdQX1NJR05FRF9NRVNTQUdFX0RFU0MnKSlcblx0XHRcdFx0XHRcdC5vbignY2xpY2snLCBQZ3BVc2VyU3RvcmUuZG9tQ29udHJvbFNpZ25lZENsaWNrSGVscGVyKHRoaXMsIGRvbSwgZG9tVGV4dCkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHZlckNvbnRyb2wpIHtcblx0XHRcdFx0XHRkb20uYmVmb3JlKHZlckNvbnRyb2wpLmJlZm9yZSgnPGRpdj48L2Rpdj4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgUGdwVXNlclN0b3JlKCk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZXhlY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUuZXhlY1xuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIEFjY291bnRVc2VyU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmVtYWlsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5wYXJlbnRFbWFpbCA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5zaWduYXR1cmUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuYWNjb3VudHMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMuYWNjb3VudHMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTEwMG1zIH0pO1xuXG5cdFx0dGhpcy5jb21wdXRlcnMoKTtcblx0fVxuXG5cdGNvbXB1dGVycygpIHtcblx0XHR0aGlzLmFjY291bnRzRW1haWxzID0ga28uY29tcHV0ZWQoKCkgPT4gXy5jb21wYWN0KF8ubWFwKHRoaXMuYWNjb3VudHMoKSwgKGl0ZW0pID0+IChpdGVtID8gaXRlbS5lbWFpbCA6IG51bGwpKSkpO1xuXG5cdFx0dGhpcy5hY2NvdW50c1VucmVhZENvdW50ID0ga28uY29tcHV0ZWQoKCkgPT4gMCk7XG5cdFx0Ly8gdGhpcy5hY2NvdW50c1VucmVhZENvdW50ID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdC8vIFx0bGV0IHJlc3VsdCA9IDA7XG5cdFx0Ly8gXHRfLmVhY2godGhpcy5hY2NvdW50cygpLCAoaXRlbSkgPT4ge1xuXHRcdC8vIFx0XHRpZiAoaXRlbSlcblx0XHQvLyBcdFx0e1xuXHRcdC8vIFx0XHRcdHJlc3VsdCArPSBpdGVtLmNvdW50KCk7XG5cdFx0Ly8gXHRcdH1cblx0XHQvLyBcdH0pO1xuXHRcdC8vIFx0cmV0dXJuIHJlc3VsdDtcblx0XHQvLyB9KTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHRoaXMuZW1haWwoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0VtYWlsJykpO1xuXHRcdHRoaXMucGFyZW50RW1haWwoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1BhcmVudEVtYWlsJykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNSb290QWNjb3VudCgpIHtcblx0XHRyZXR1cm4gJycgPT09IHRoaXMucGFyZW50RW1haWwoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQWNjb3VudFVzZXJTdG9yZSgpO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGVUb1N0cmluZyA9IEZ1bmN0aW9uUHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyBGdW5jdGlvbiBpbnN0YW5jZXMgYC5uYW1lYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi1pbnN0YW5jZXMtbmFtZVxuaWYgKERFU0NSSVBUT1JTICYmICEoTkFNRSBpbiBGdW5jdGlvblByb3RvdHlwZSkpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE5BTUUsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb25Qcm90b3R5cGVUb1N0cmluZy5jYWxsKHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCIvLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtaW50ZXJ2YWxcIik7IiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIGdldFN1YnN0aXR1dGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChSRVBMQUNFLCBuYXRpdmVSZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUsIHJlYXNvbikge1xuICB2YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSByZWFzb24uUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkU7XG4gIHZhciBSRVBMQUNFX0tFRVBTXyQwID0gcmVhc29uLlJFUExBQ0VfS0VFUFNfJDA7XG4gIHZhciBVTlNBRkVfU1VCU1RJVFVURSA9IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID8gJyQnIDogJyQwJztcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiByZXBsYWNlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gcmVwbGFjZXIuY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IG5hdGl2ZVJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgaWYgKFxuICAgICAgICAoIVJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFICYmIFJFUExBQ0VfS0VFUFNfJDApIHx8XG4gICAgICAgICh0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnc3RyaW5nJyAmJiByZXBsYWNlVmFsdWUuaW5kZXhPZihVTlNBRkVfU1VCU1RJVFVURSkgPT09IC0xKVxuICAgICAgKSB7XG4gICAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlUmVwbGFjZSwgcmVnZXhwLCB0aGlzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuXG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcblxuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuXG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSk7XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCB7IENvb2tpZURyaXZlciB9IGZyb20gJ0NvbW1vbi9DbGllbnRTdG9yYWdlRHJpdmVyL0Nvb2tpZSc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VEcml2ZXIgfSBmcm9tICdDb21tb24vQ2xpZW50U3RvcmFnZURyaXZlci9Mb2NhbFN0b3JhZ2UnO1xuXG5jb25zdCBTdXBwb3J0ZWRTdG9yYWdlRHJpdmVyID0gXy5maW5kKFxuXHRbTG9jYWxTdG9yYWdlRHJpdmVyLCBDb29raWVEcml2ZXJdLFxuXHQoU3RvcmFnZURyaXZlcikgPT4gU3RvcmFnZURyaXZlciAmJiBTdG9yYWdlRHJpdmVyLnN1cHBvcnRlZCgpXG4pO1xuXG5jb25zdCBkcml2ZXIgPSBTdXBwb3J0ZWRTdG9yYWdlRHJpdmVyID8gbmV3IFN1cHBvcnRlZFN0b3JhZ2VEcml2ZXIoKSA6IG51bGw7XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGtleVxuICogQHBhcmFtIHsqfSBkYXRhXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldChrZXksIGRhdGEpIHtcblx0cmV0dXJuIGRyaXZlciA/IGRyaXZlci5zZXQoJ3AnICsga2V5LCBkYXRhKSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBrZXlcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGtleSkge1xuXHRyZXR1cm4gZHJpdmVyID8gZHJpdmVyLmdldCgncCcgKyBrZXkpIDogbnVsbDtcbn1cbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5sZXQgX21vbWVudCA9IG51bGw7XG5sZXQgX21vbWVudE5vdyA9IDA7XG5cbmNvbnN0IHVwZGF0ZU1vbWVudE5vdyA9IF8uZGVib3VuY2UoXG5cdCgpID0+IHtcblx0XHRfbW9tZW50ID0gbW9tZW50KCk7XG5cdH0sXG5cdDUwMCxcblx0dHJ1ZVxuKTtcblxuY29uc3QgdXBkYXRlTW9tZW50Tm93VW5peCA9IF8uZGVib3VuY2UoXG5cdCgpID0+IHtcblx0XHRfbW9tZW50Tm93ID0gbW9tZW50KCkudW5peCgpO1xuXHR9LFxuXHQ1MDAsXG5cdHRydWVcbik7XG5cbi8qKlxuICogQHJldHVybnMge21vbWVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbWVudE5vdygpIHtcblx0dXBkYXRlTW9tZW50Tm93KCk7XG5cdHJldHVybiBfbW9tZW50IHx8IG1vbWVudCgpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb21lbnROb3dVbml4KCkge1xuXHR1cGRhdGVNb21lbnROb3dVbml4KCk7XG5cdHJldHVybiBfbW9tZW50Tm93IHx8IDA7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hTdWJ0cmFjdEZvcm1hdERhdGVIZWxwZXIoZGF0ZSkge1xuXHRyZXR1cm4gbW9tZW50Tm93KClcblx0XHQuY2xvbmUoKVxuXHRcdC5zdWJ0cmFjdChkYXRlLCAnZGF5cycpXG5cdFx0LmZvcm1hdCgnWVlZWS5NTS5ERCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBtXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmb3JtYXRDdXN0b21TaG9ydERhdGUobSkge1xuXHRjb25zdCBub3cgPSBtb21lbnROb3coKTtcblx0aWYgKG0gJiYgbm93KSB7XG5cdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRjYXNlIDQgPj0gbm93LmRpZmYobSwgJ2hvdXJzJyk6XG5cdFx0XHRcdHJldHVybiBtLmZyb21Ob3coKTtcblx0XHRcdGNhc2Ugbm93LmZvcm1hdCgnTCcpID09PSBtLmZvcm1hdCgnTCcpOlxuXHRcdFx0XHRyZXR1cm4gaTE4bignTUVTU0FHRV9MSVNUL1RPREFZX0FUJywge1xuXHRcdFx0XHRcdFRJTUU6IG0uZm9ybWF0KCdMVCcpXG5cdFx0XHRcdH0pO1xuXHRcdFx0Y2FzZSBub3dcblx0XHRcdFx0LmNsb25lKClcblx0XHRcdFx0LnN1YnRyYWN0KDEsICdkYXlzJylcblx0XHRcdFx0LmZvcm1hdCgnTCcpID09PSBtLmZvcm1hdCgnTCcpOlxuXHRcdFx0XHRyZXR1cm4gaTE4bignTUVTU0FHRV9MSVNUL1lFU1RFUkRBWV9BVCcsIHtcblx0XHRcdFx0XHRUSU1FOiBtLmZvcm1hdCgnTFQnKVxuXHRcdFx0XHR9KTtcblx0XHRcdGNhc2Ugbm93LnllYXIoKSA9PT0gbS55ZWFyKCk6XG5cdFx0XHRcdHJldHVybiBtLmZvcm1hdCgnRCBNTU0uJyk7XG5cdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG0gPyBtLmZvcm1hdCgnTEwnKSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lU3RhbXBJblVUQ1xuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFN0clxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdCh0aW1lU3RhbXBJblVUQywgZm9ybWF0U3RyKSB7XG5cdGxldCBtID0gbnVsbCxcblx0XHRyZXN1bHQgPSAnJztcblxuXHRjb25zdCBub3cgPSBtb21lbnROb3dVbml4KCk7XG5cblx0dGltZVN0YW1wSW5VVEMgPSAwIDwgdGltZVN0YW1wSW5VVEMgPyB0aW1lU3RhbXBJblVUQyA6IDAgPT09IHRpbWVTdGFtcEluVVRDID8gbm93IDogMDtcblx0dGltZVN0YW1wSW5VVEMgPSBub3cgPCB0aW1lU3RhbXBJblVUQyA/IG5vdyA6IHRpbWVTdGFtcEluVVRDO1xuXG5cdG0gPSAwIDwgdGltZVN0YW1wSW5VVEMgPyBtb21lbnQudW5peCh0aW1lU3RhbXBJblVUQykgOiBudWxsO1xuXG5cdGlmIChtICYmIDE5NzAgPT09IG0ueWVhcigpKSB7XG5cdFx0bSA9IG51bGw7XG5cdH1cblxuXHRpZiAobSkge1xuXHRcdHN3aXRjaCAoZm9ybWF0U3RyKSB7XG5cdFx0XHRjYXNlICdGUk9NTk9XJzpcblx0XHRcdFx0cmVzdWx0ID0gbS5mcm9tTm93KCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnU0hPUlQnOlxuXHRcdFx0XHRyZXN1bHQgPSBmb3JtYXRDdXN0b21TaG9ydERhdGUobSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnRlVMTCc6XG5cdFx0XHRcdHJlc3VsdCA9IG0uZm9ybWF0KCdMTEwnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXN1bHQgPSBtLmZvcm1hdChmb3JtYXRTdHIpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbWVudFRvTm9kZShlbGVtZW50KSB7XG5cdGxldCBrZXkgPSAnJyxcblx0XHR0aW1lID0gMDtcblx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblxuXHR0aW1lID0gJGVsLmRhdGEoJ21vbWVudC10aW1lJyk7XG5cdGlmICh0aW1lKSB7XG5cdFx0a2V5ID0gJGVsLmRhdGEoJ21vbWVudC1mb3JtYXQnKTtcblx0XHRpZiAoa2V5KSB7XG5cdFx0XHQkZWwudGV4dChmb3JtYXQodGltZSwga2V5KSk7XG5cdFx0fVxuXG5cdFx0a2V5ID0gJGVsLmRhdGEoJ21vbWVudC1mb3JtYXQtdGl0bGUnKTtcblx0XHRpZiAoa2V5KSB7XG5cdFx0XHQkZWwuYXR0cigndGl0bGUnLCBmb3JtYXQodGltZSwga2V5KSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWQoKSB7XG5cdF8uZGVmZXIoKCkgPT4ge1xuXHRcdCQoJy5tb21lbnQnLCB3aW5kb3cuZG9jdW1lbnQpLmVhY2goKGluZGV4LCBpdGVtKSA9PiB7XG5cdFx0XHRtb21lbnRUb05vZGUoaXRlbSk7XG5cdFx0fSk7XG5cdH0pO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93Lmhhc2hlcjsiLCJpbXBvcnQgeyBpc05vbkVtcHR5QXJyYXksIGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IEVtYWlsTW9kZWwgfSBmcm9tICdNb2RlbC9FbWFpbCc7XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheS48RW1haWxNb2RlbD59IGVtYWlsc1xuICogQHBhcmFtIHtib29sZWFuPX0gZnJpZW5kbHlWaWV3ID0gZmFsc2VcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBXaXRoTGluayA9IGZhbHNlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1haWxBcnJheVRvU3RyaW5nKGVtYWlscywgZnJpZW5kbHlWaWV3ID0gZmFsc2UsIHdyYXBXaXRoTGluayA9IGZhbHNlKSB7XG5cdGxldCBpbmRleCA9IDAsXG5cdFx0bGVuID0gMDtcblxuXHRjb25zdCByZXN1bHQgPSBbXTtcblx0aWYgKGlzTm9uRW1wdHlBcnJheShlbWFpbHMpKSB7XG5cdFx0Zm9yIChsZW4gPSBlbWFpbHMubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuXHRcdFx0cmVzdWx0LnB1c2goZW1haWxzW2luZGV4XS50b0xpbmUoZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmspKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0LmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheS48RW1haWxNb2RlbD59IGVtYWlsc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsQXJyYXlUb1N0cmluZ0NsZWFyKGVtYWlscykge1xuXHRsZXQgaW5kZXggPSAwLFxuXHRcdGxlbiA9IDA7XG5cblx0Y29uc3QgcmVzdWx0ID0gW107XG5cdGlmIChpc05vbkVtcHR5QXJyYXkoZW1haWxzKSkge1xuXHRcdGZvciAobGVuID0gZW1haWxzLmxlbmd0aDsgaW5kZXggPCBsZW47IGluZGV4KyspIHtcblx0XHRcdGlmIChlbWFpbHNbaW5kZXhdICYmIGVtYWlsc1tpbmRleF0uZW1haWwgJiYgJycgIT09IGVtYWlsc1tpbmRleF0ubmFtZSkge1xuXHRcdFx0XHRyZXN1bHQucHVzaChlbWFpbHNbaW5kZXhdLmVtYWlsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0LmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHs/QXJyYXl9IGpzb25cbiAqIEByZXR1cm5zIHtBcnJheS48RW1haWxNb2RlbD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWFpbEFycmF5RnJvbUpzb24oanNvbikge1xuXHRsZXQgaW5kZXggPSAwLFxuXHRcdGxlbiA9IDAsXG5cdFx0ZW1haWwgPSBudWxsO1xuXG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRpZiAoaXNOb25FbXB0eUFycmF5KGpzb24pKSB7XG5cdFx0Zm9yIChpbmRleCA9IDAsIGxlbiA9IGpzb24ubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuXHRcdFx0ZW1haWwgPSBFbWFpbE1vZGVsLm5ld0luc3RhbmNlRnJvbUpzb24oanNvbltpbmRleF0pO1xuXHRcdFx0aWYgKGVtYWlsKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVtYWlsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXkuPEVtYWlsTW9kZWw+fSBpbnB1dEVtYWlsc1xuICogQHBhcmFtIHtPYmplY3R9IHVuaWNcbiAqIEBwYXJhbSB7QXJyYXl9IGxvY2FsRW1haWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBseUhlbHBlcihpbnB1dEVtYWlscywgdW5pYywgbG9jYWxFbWFpbHMpIHtcblx0aWYgKGlucHV0RW1haWxzICYmIDAgPCBpbnB1dEVtYWlscy5sZW5ndGgpIHtcblx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdGNvbnN0IGxlbiA9IGlucHV0RW1haWxzLmxlbmd0aDtcblxuXHRcdGZvciAoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuXHRcdFx0aWYgKGlzVW5kKHVuaWNbaW5wdXRFbWFpbHNbaW5kZXhdLmVtYWlsXSkpIHtcblx0XHRcdFx0dW5pY1tpbnB1dEVtYWlsc1tpbmRleF0uZW1haWxdID0gdHJ1ZTtcblx0XHRcdFx0bG9jYWxFbWFpbHMucHVzaChpbnB1dEVtYWlsc1tpbmRleF0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLm5vVGFyZ2V0R2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxbVEFSR0VUXSB8fCBzZXRHbG9iYWwoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5ub1RhcmdldEdldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiaW1wb3J0IHsgaXNBcnJheSwgZGlzcG9zZU9iamVjdCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdE1vZGVsIHtcblx0c01vZGVsTmFtZSA9ICcnO1xuXHRkaXNwb3NhYmxlcyA9IFtdO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lID0gJydcblx0ICovXG5cdGNvbnN0cnVjdG9yKG1vZGVsTmFtZSA9ICcnKSB7XG5cdFx0dGhpcy5zTW9kZWxOYW1lID0gbW9kZWxOYW1lIHx8ICcnO1xuXHR9XG5cblx0cmVnRGlzcG9zYWJsZXModmFsdWUpIHtcblx0XHRpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0dGhpcy5kaXNwb3NhYmxlcy5wdXNoKGl0ZW0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSkge1xuXHRcdFx0dGhpcy5kaXNwb3NhYmxlcy5wdXNoKHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkRlc3Ryb3koKSB7XG5cdFx0ZGlzcG9zZU9iamVjdCh0aGlzKTtcblx0fVxufVxuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHVuc2FmZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMudW5zYWZlIDogZmFsc2U7XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zID8gISFvcHRpb25zLmVudW1lcmFibGUgOiBmYWxzZTtcbiAgdmFyIG5vVGFyZ2V0R2V0ID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5ub1RhcmdldEdldCA6IGZhbHNlO1xuICB2YXIgc3RhdGU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnICYmICFoYXModmFsdWUsICduYW1lJykpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCBrZXkpO1xuICAgIH1cbiAgICBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgICBpZiAoIXN0YXRlLnNvdXJjZSkge1xuICAgICAgc3RhdGUuc291cmNlID0gVEVNUExBVEUuam9pbih0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogJycpO1xuICAgIH1cbiAgfVxuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBzZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCF1bnNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICB9IGVsc2UgaWYgKCFub1RhcmdldEdldCAmJiBPW2tleV0pIHtcbiAgICBzaW1wbGUgPSB0cnVlO1xuICB9XG4gIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCBrZXksIHZhbHVlKTtcbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IpIHtcbiAgcmV0dXJuIHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG59O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIExhbmd1YWdlU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmxhbmd1YWdlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5sYW5ndWFnZXNBZG1pbiA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlID0ga29cblx0XHRcdC5vYnNlcnZhYmxlKCcnKVxuXHRcdFx0LmV4dGVuZCh7IGxpbWl0ZWRMaXN0OiB0aGlzLmxhbmd1YWdlcyB9KVxuXHRcdFx0LmV4dGVuZCh7IHJldmVyc2libGU6IHRydWUgfSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlQWRtaW4gPSBrb1xuXHRcdFx0Lm9ic2VydmFibGUoJycpXG5cdFx0XHQuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMubGFuZ3VhZ2VzQWRtaW4gfSlcblx0XHRcdC5leHRlbmQoeyByZXZlcnNpYmxlOiB0cnVlIH0pO1xuXG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZUFkbWluID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHRjb25zdCBhTGFuZ3VhZ2VzID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2xhbmd1YWdlcycpLFxuXHRcdFx0YUxhbmd1YWdlc0FkbWluID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2xhbmd1YWdlc0FkbWluJyk7XG5cblx0XHR0aGlzLmxhbmd1YWdlcyhpc0FycmF5KGFMYW5ndWFnZXMpID8gYUxhbmd1YWdlcyA6IFtdKTtcblx0XHR0aGlzLmxhbmd1YWdlc0FkbWluKGlzQXJyYXkoYUxhbmd1YWdlc0FkbWluKSA/IGFMYW5ndWFnZXNBZG1pbiA6IFtdKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2UoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0xhbmd1YWdlJykpO1xuXHRcdHRoaXMubGFuZ3VhZ2VBZG1pbihTZXR0aW5ncy5zZXR0aW5nc0dldCgnTGFuZ3VhZ2VBZG1pbicpKTtcblxuXHRcdHRoaXMudXNlckxhbmd1YWdlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyTGFuZ3VhZ2UnKSk7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2VBZG1pbihTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckxhbmd1YWdlQWRtaW4nKSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IExhbmd1YWdlU3RvcmUoKTtcbiIsIi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFyaWFibGUgPT0gJ2Z1bmN0aW9uJyA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIG5hdGl2ZUpvaW4gPSBbXS5qb2luO1xuXG52YXIgRVMzX1NUUklOR1MgPSBJbmRleGVkT2JqZWN0ICE9IE9iamVjdDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnam9pbicsICcsJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuam9pbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5qb2luXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBFUzNfU1RSSU5HUyB8fCAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUpvaW4uY2FsbCh0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFyaWFibGUgPT0gJ2Z1bmN0aW9uJyA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwidmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgVG9JbnRlZ2VyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2VyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNOYU4oYXJndW1lbnQgPSArYXJndW1lbnQpID8gMCA6IChhcmd1bWVudCA+IDAgPyBmbG9vciA6IGNlaWwpKGFyZ3VtZW50KTtcbn07XG4iLCIvLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcblxudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZURlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBhZGRyZXNzcGFyc2VyIGZyb20gJ2VtYWlsanMtYWRkcmVzc3BhcnNlcic7XG5pbXBvcnQgeyB0cmltLCBlbmNvZGVIdG1sLCBpc05vbkVtcHR5QXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5jbGFzcyBFbWFpbE1vZGVsIHtcblx0ZW1haWwgPSAnJztcblx0bmFtZSA9ICcnO1xuXHRka2ltU3RhdHVzID0gJyc7XG5cdGRraW1WYWx1ZSA9ICcnO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZz19IGVtYWlsID0gJydcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lID0gJydcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBka2ltU3RhdHVzID0gJ25vbmUnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gZGtpbVZhbHVlID0gJydcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVtYWlsID0gJycsIG5hbWUgPSAnJywgZGtpbVN0YXR1cyA9ICdub25lJywgZGtpbVZhbHVlID0gJycpIHtcblx0XHR0aGlzLmVtYWlsID0gZW1haWw7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHR0aGlzLmRraW1TdGF0dXMgPSBka2ltU3RhdHVzO1xuXHRcdHRoaXMuZGtpbVZhbHVlID0gZGtpbVZhbHVlO1xuXG5cdFx0dGhpcy5jbGVhckR1cGxpY2F0ZU5hbWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSB7QWpheEpzb25FbWFpbH0ganNvblxuXHQgKiBAcmV0dXJucyB7P0VtYWlsTW9kZWx9XG5cdCAqL1xuXHRzdGF0aWMgbmV3SW5zdGFuY2VGcm9tSnNvbihqc29uKSB7XG5cdFx0Y29uc3QgZW1haWwgPSBuZXcgRW1haWxNb2RlbCgpO1xuXHRcdHJldHVybiBlbWFpbC5pbml0QnlKc29uKGpzb24pID8gZW1haWwgOiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5lbWFpbCA9ICcnO1xuXHRcdHRoaXMubmFtZSA9ICcnO1xuXG5cdFx0dGhpcy5ka2ltU3RhdHVzID0gJ25vbmUnO1xuXHRcdHRoaXMuZGtpbVZhbHVlID0gJyc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHR2YWxpZGF0ZSgpIHtcblx0XHRyZXR1cm4gJycgIT09IHRoaXMubmFtZSB8fCAnJyAhPT0gdGhpcy5lbWFpbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHdpdGhvdXROYW1lID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGhhc2god2l0aG91dE5hbWUgPSBmYWxzZSkge1xuXHRcdHJldHVybiAnIycgKyAod2l0aG91dE5hbWUgPyAnJyA6IHRoaXMubmFtZSkgKyAnIycgKyB0aGlzLmVtYWlsICsgJyMnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0Y2xlYXJEdXBsaWNhdGVOYW1lKCkge1xuXHRcdGlmICh0aGlzLm5hbWUgPT09IHRoaXMuZW1haWwpIHtcblx0XHRcdHRoaXMubmFtZSA9ICcnO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRzZWFyY2gocXVlcnkpIHtcblx0XHRyZXR1cm4gLTEgPCAodGhpcy5uYW1lICsgJyAnICsgdGhpcy5lbWFpbCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHF1ZXJ5LnRvTG93ZXJDYXNlKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QWpheEpzb25FbWFpbH0gb0pzb25FbWFpbFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGluaXRCeUpzb24oanNvbikge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZTtcblx0XHRpZiAoanNvbiAmJiAnT2JqZWN0L0VtYWlsJyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHR0aGlzLm5hbWUgPSB0cmltKGpzb24uTmFtZSk7XG5cdFx0XHR0aGlzLmVtYWlsID0gdHJpbShqc29uLkVtYWlsKTtcblx0XHRcdHRoaXMuZGtpbVN0YXR1cyA9IHRyaW0oanNvbi5Ea2ltU3RhdHVzIHx8ICcnKTtcblx0XHRcdHRoaXMuZGtpbVZhbHVlID0gdHJpbShqc29uLkRraW1WYWx1ZSB8fCAnJyk7XG5cblx0XHRcdHJlc3VsdCA9ICcnICE9PSB0aGlzLmVtYWlsO1xuXHRcdFx0dGhpcy5jbGVhckR1cGxpY2F0ZU5hbWUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZnJpZW5kbHlWaWV3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBXaXRoTGluayA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHVzZUVuY29kZUh0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0dG9MaW5lKGZyaWVuZGx5Vmlldywgd3JhcFdpdGhMaW5rID0gZmFsc2UsIHVzZUVuY29kZUh0bWwgPSBmYWxzZSkge1xuXHRcdGxldCByZXN1bHQgPSAnJztcblx0XHRpZiAoJycgIT09IHRoaXMuZW1haWwpIHtcblx0XHRcdGlmIChmcmllbmRseVZpZXcgJiYgJycgIT09IHRoaXMubmFtZSkge1xuXHRcdFx0XHRyZXN1bHQgPSB3cmFwV2l0aExpbmtcblx0XHRcdFx0XHQ/ICc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdCAgZW5jb2RlSHRtbCh0aGlzLmVtYWlsKSArXG5cdFx0XHRcdFx0ICAnP3RvPScgK1xuXHRcdFx0XHRcdCAgZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHRcdCAgJ1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHQgIGVuY29kZUh0bWwodGhpcy5uYW1lKSArXG5cdFx0XHRcdFx0ICAnPC9hPidcblx0XHRcdFx0XHQ6IHVzZUVuY29kZUh0bWxcblx0XHRcdFx0XHQ/IGVuY29kZUh0bWwodGhpcy5uYW1lKVxuXHRcdFx0XHRcdDogdGhpcy5uYW1lO1xuXHRcdFx0XHQvLyByZXN1bHQgPSB3cmFwV2l0aExpbmsgPyAnPGEgaHJlZj1cIm1haWx0bzonICsgZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHQvLyBcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArIGVuY29kZUh0bWwodGhpcy5uYW1lKSArICc8L2E+JyA6ICh1c2VFbmNvZGVIdG1sID8gZW5jb2RlSHRtbCh0aGlzLm5hbWUpIDogdGhpcy5uYW1lKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMuZW1haWw7XG5cdFx0XHRcdGlmICgnJyAhPT0gdGhpcy5uYW1lKSB7XG5cdFx0XHRcdFx0aWYgKHdyYXBXaXRoTGluaykge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID1cblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnKSArXG5cdFx0XHRcdFx0XHRcdCc8YSBocmVmPVwibWFpbHRvOicgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHRcdFx0Jz90bz0nICtcblx0XHRcdFx0XHRcdFx0ZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHRcdFx0XHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHJlc3VsdCkgK1xuXHRcdFx0XHRcdFx0XHQnPC9hPicgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKCc+Jyk7XG5cdFx0XHRcdFx0XHQvLyByZXN1bHQgPSBlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcpICsgJzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0XHQvLyBcdGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JyArIHRoaXMuZW1haWwgKyAnPicpICtcblx0XHRcdFx0XHRcdC8vIFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdC8vIFx0ZW5jb2RlSHRtbChyZXN1bHQpICtcblx0XHRcdFx0XHRcdC8vIFx0JzwvYT4nICtcblx0XHRcdFx0XHRcdC8vIFx0ZW5jb2RlSHRtbCgnPicpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSAnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgcmVzdWx0ICsgJz4nO1xuXHRcdFx0XHRcdFx0aWYgKHVzZUVuY29kZUh0bWwpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gZW5jb2RlSHRtbChyZXN1bHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh3cmFwV2l0aExpbmspIHtcblx0XHRcdFx0XHRyZXN1bHQgPVxuXHRcdFx0XHRcdFx0JzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHRcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0XHRlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHRcdCc8L2E+Jztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgc3BsaXRFbWFpbExpbmUobGluZSkge1xuXHRcdGNvbnN0IHBhcnNlZFJlc3VsdCA9IGFkZHJlc3NwYXJzZXIobGluZSk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShwYXJzZWRSZXN1bHQpKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHRcdGxldCBleGlzdHMgPSBmYWxzZTtcblx0XHRcdHBhcnNlZFJlc3VsdC5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFkZHJlc3MgPSBpdGVtLmFkZHJlc3Ncblx0XHRcdFx0XHQ/IG5ldyBFbWFpbE1vZGVsKGl0ZW0uYWRkcmVzcy5yZXBsYWNlKC9eWzxdKyguKilbPl0rJC9nLCAnJDEnKSwgaXRlbS5uYW1lIHx8ICcnKVxuXHRcdFx0XHRcdDogbnVsbDtcblxuXHRcdFx0XHRpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLmVtYWlsKSB7XG5cdFx0XHRcdFx0ZXhpc3RzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGFkZHJlc3MgPyBhZGRyZXNzLnRvTGluZShmYWxzZSkgOiBpdGVtLm5hbWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBleGlzdHMgPyByZXN1bHQgOiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0c3RhdGljIHBhcnNlRW1haWxMaW5lKGxpbmUpIHtcblx0XHRjb25zdCBwYXJzZWRSZXN1bHQgPSBhZGRyZXNzcGFyc2VyKGxpbmUpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkocGFyc2VkUmVzdWx0KSkge1xuXHRcdFx0cmV0dXJuIF8uY29tcGFjdChcblx0XHRcdFx0Xy5tYXAocGFyc2VkUmVzdWx0LCAoaXRlbSkgPT5cblx0XHRcdFx0XHRpdGVtLmFkZHJlc3MgPyBuZXcgRW1haWxNb2RlbChpdGVtLmFkZHJlc3MucmVwbGFjZSgvXls8XSsoLiopWz5dKyQvZywgJyQxJyksIGl0ZW0ubmFtZSB8fCAnJykgOiBudWxsXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbEFkZHJlc3Ncblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRwYXJzZShlbWFpbEFkZHJlc3MpIHtcblx0XHRlbWFpbEFkZHJlc3MgPSB0cmltKGVtYWlsQWRkcmVzcyk7XG5cdFx0aWYgKCcnID09PSBlbWFpbEFkZHJlc3MpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSBhZGRyZXNzcGFyc2VyKGVtYWlsQWRkcmVzcyk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShyZXN1bHQpICYmIHJlc3VsdFswXSkge1xuXHRcdFx0dGhpcy5uYW1lID0gcmVzdWx0WzBdLm5hbWUgfHwgJyc7XG5cdFx0XHR0aGlzLmVtYWlsID0gcmVzdWx0WzBdLmFkZHJlc3MgfHwgJyc7XG5cdFx0XHR0aGlzLmNsZWFyRHVwbGljYXRlTmFtZSgpO1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuZXhwb3J0IHsgRW1haWxNb2RlbCwgRW1haWxNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgeyBiTW9iaWxlRGV2aWNlLCBiU2FmYXJpIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgTGlua3MgZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcbmltcG9ydCB7IHRyaW0gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5jbGFzcyBBdWRpbyB7XG5cdG5vdGlmaWNhdG9yID0gbnVsbDtcblx0cGxheWVyID0gbnVsbDtcblxuXHRzdXBwb3J0ZWQgPSBmYWxzZTtcblx0c3VwcG9ydGVkTXAzID0gZmFsc2U7XG5cdHN1cHBvcnRlZE9nZyA9IGZhbHNlO1xuXHRzdXBwb3J0ZWRXYXYgPSBmYWxzZTtcblx0c3VwcG9ydGVkTm90aWZpY2F0aW9uID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5wbGF5ZXIgPSB0aGlzLmNyZWF0ZU5ld09iamVjdCgpO1xuXG5cdFx0dGhpcy5zdXBwb3J0ZWQgPSAhYk1vYmlsZURldmljZSAmJiAhYlNhZmFyaSAmJiAhIXRoaXMucGxheWVyICYmICEhdGhpcy5wbGF5ZXIucGxheTtcblx0XHRpZiAodGhpcy5zdXBwb3J0ZWQgJiYgdGhpcy5wbGF5ZXIgJiYgdGhpcy5wbGF5ZXIuY2FuUGxheVR5cGUpIHtcblx0XHRcdHRoaXMuc3VwcG9ydGVkTXAzID0gJycgIT09IHRoaXMucGxheWVyLmNhblBsYXlUeXBlKCdhdWRpby9tcGVnOycpLnJlcGxhY2UoL25vLywgJycpO1xuXHRcdFx0dGhpcy5zdXBwb3J0ZWRXYXYgPSAnJyAhPT0gdGhpcy5wbGF5ZXIuY2FuUGxheVR5cGUoJ2F1ZGlvL3dhdjsgY29kZWNzPVwiMVwiJykucmVwbGFjZSgvbm8vLCAnJyk7XG5cdFx0XHR0aGlzLnN1cHBvcnRlZE9nZyA9ICcnICE9PSB0aGlzLnBsYXllci5jYW5QbGF5VHlwZSgnYXVkaW8vb2dnOyBjb2RlY3M9XCJ2b3JiaXNcIicpLnJlcGxhY2UoL25vLywgJycpO1xuXHRcdFx0dGhpcy5zdXBwb3J0ZWROb3RpZmljYXRpb24gPSB0aGlzLnN1cHBvcnRlZCAmJiB0aGlzLnN1cHBvcnRlZE1wMztcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMucGxheWVyIHx8ICghdGhpcy5zdXBwb3J0ZWRNcDMgJiYgIXRoaXMuc3VwcG9ydGVkT2dnICYmICF0aGlzLnN1cHBvcnRlZFdhdikpIHtcblx0XHRcdHRoaXMuc3VwcG9ydGVkID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN1cHBvcnRlZE1wMyA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdXBwb3J0ZWRPZ2cgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3VwcG9ydGVkV2F2ID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN1cHBvcnRlZE5vdGlmaWNhdGlvbiA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnN1cHBvcnRlZCAmJiB0aGlzLnBsYXllcikge1xuXHRcdFx0Y29uc3Qgc3RvcEZuID0gKCkgPT4gdGhpcy5zdG9wKCk7XG5cblx0XHRcdHRoaXMucGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgc3RvcEZuKTtcblx0XHRcdHRoaXMucGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgc3RvcEZuKTtcblxuXHRcdFx0RXZlbnRzLnN1YignYXVkaW8uYXBpLnN0b3AnLCBzdG9wRm4pO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZU5ld09iamVjdCgpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcGxheWVyID0gd2luZG93LkF1ZGlvID8gbmV3IHdpbmRvdy5BdWRpbygpIDogbnVsbDtcblx0XHRcdGlmIChwbGF5ZXIgJiYgcGxheWVyLmNhblBsYXlUeXBlICYmIHBsYXllci5wYXVzZSAmJiBwbGF5ZXIucGxheSkge1xuXHRcdFx0XHRwbGF5ZXIucHJlbG9hZCA9ICdub25lJztcblx0XHRcdFx0cGxheWVyLmxvb3AgPSBmYWxzZTtcblx0XHRcdFx0cGxheWVyLmF1dG9wbGF5ID0gZmFsc2U7XG5cdFx0XHRcdHBsYXllci5tdXRlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcGxheWVyO1xuXHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cGF1c2VkKCkge1xuXHRcdHJldHVybiB0aGlzLnN1cHBvcnRlZCA/ICEhdGhpcy5wbGF5ZXIucGF1c2VkIDogdHJ1ZTtcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKHRoaXMuc3VwcG9ydGVkICYmIHRoaXMucGxheWVyLnBhdXNlKSB7XG5cdFx0XHR0aGlzLnBsYXllci5wYXVzZSgpO1xuXHRcdH1cblxuXHRcdEV2ZW50cy5wdWIoJ2F1ZGlvLnN0b3AnKTtcblx0fVxuXG5cdHBhdXNlKCkge1xuXHRcdHRoaXMuc3RvcCgpO1xuXHR9XG5cblx0Y2xlYXJOYW1lKG5hbWUgPSAnJywgZXh0ID0gJycpIHtcblx0XHRuYW1lID0gdHJpbShuYW1lKTtcblx0XHRpZiAoZXh0ICYmICcuJyArIGV4dCA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpLnN1YnN0cigoZXh0Lmxlbmd0aCArIDEpICogLTEpKSB7XG5cdFx0XHRuYW1lID0gdHJpbShuYW1lLnN1YnN0cigwLCBuYW1lLmxlbmd0aCAtIDQpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJycgPT09IG5hbWUgPyAnYXVkaW8nIDogbmFtZTtcblx0fVxuXG5cdHBsYXlNcDModXJsLCBuYW1lKSB7XG5cdFx0aWYgKHRoaXMuc3VwcG9ydGVkICYmIHRoaXMuc3VwcG9ydGVkTXAzKSB7XG5cdFx0XHR0aGlzLnBsYXllci5zcmMgPSB1cmw7XG5cdFx0XHR0aGlzLnBsYXllci5wbGF5KCk7XG5cblx0XHRcdEV2ZW50cy5wdWIoJ2F1ZGlvLnN0YXJ0JywgW3RoaXMuY2xlYXJOYW1lKG5hbWUsICdtcDMnKSwgJ21wMyddKTtcblx0XHR9XG5cdH1cblxuXHRwbGF5T2dnKHVybCwgbmFtZSkge1xuXHRcdGlmICh0aGlzLnN1cHBvcnRlZCAmJiB0aGlzLnN1cHBvcnRlZE9nZykge1xuXHRcdFx0dGhpcy5wbGF5ZXIuc3JjID0gdXJsO1xuXHRcdFx0dGhpcy5wbGF5ZXIucGxheSgpO1xuXG5cdFx0XHRuYW1lID0gdGhpcy5jbGVhck5hbWUobmFtZSwgJ29nYScpO1xuXHRcdFx0bmFtZSA9IHRoaXMuY2xlYXJOYW1lKG5hbWUsICdvZ2cnKTtcblxuXHRcdFx0RXZlbnRzLnB1YignYXVkaW8uc3RhcnQnLCBbbmFtZSwgJ29nZyddKTtcblx0XHR9XG5cdH1cblxuXHRwbGF5V2F2KHVybCwgbmFtZSkge1xuXHRcdGlmICh0aGlzLnN1cHBvcnRlZCAmJiB0aGlzLnN1cHBvcnRlZFdhdikge1xuXHRcdFx0dGhpcy5wbGF5ZXIuc3JjID0gdXJsO1xuXHRcdFx0dGhpcy5wbGF5ZXIucGxheSgpO1xuXG5cdFx0XHRFdmVudHMucHViKCdhdWRpby5zdGFydCcsIFt0aGlzLmNsZWFyTmFtZShuYW1lLCAnd2F2JyksICd3YXYnXSk7XG5cdFx0fVxuXHR9XG5cblx0cGxheU5vdGlmaWNhdGlvbigpIHtcblx0XHRpZiAodGhpcy5zdXBwb3J0ZWQgJiYgdGhpcy5zdXBwb3J0ZWRNcDMpIHtcblx0XHRcdGlmICghdGhpcy5ub3RpZmljYXRvcikge1xuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdG9yID0gdGhpcy5jcmVhdGVOZXdPYmplY3QoKTtcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRvci5zcmMgPSBMaW5rcy5zb3VuZCgnbmV3LW1haWwubXAzJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLm5vdGlmaWNhdG9yICYmIHRoaXMubm90aWZpY2F0b3IucGxheSkge1xuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdG9yLnBsYXkoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEF1ZGlvKCk7XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXIoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCJ2YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbmlmICghVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gIHJlZGVmaW5lKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIHRvU3RyaW5nLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCwgdHJpbSwgcEludCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgQWJzdHJhY3RJbnB1dCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnZhbHVlID0gcGFyYW1zLnZhbHVlIHx8ICcnO1xuXHRcdHRoaXMuc2l6ZSA9IHBhcmFtcy5zaXplIHx8IDA7XG5cdFx0dGhpcy5sYWJlbCA9IHBhcmFtcy5sYWJlbCB8fCAnJztcblx0XHR0aGlzLnByZUxhYmVsID0gcGFyYW1zLnByZUxhYmVsIHx8ICcnO1xuXHRcdHRoaXMuZW5hYmxlID0gaXNVbmQocGFyYW1zLmVuYWJsZSkgPyB0cnVlIDogcGFyYW1zLmVuYWJsZTtcblx0XHR0aGlzLnRyaWdnZXIgPSBwYXJhbXMudHJpZ2dlciAmJiBwYXJhbXMudHJpZ2dlci5zdWJzY3JpYmUgPyBwYXJhbXMudHJpZ2dlciA6IG51bGw7XG5cdFx0dGhpcy5wbGFjZWhvbGRlciA9IHBhcmFtcy5wbGFjZWhvbGRlciB8fCAnJztcblxuXHRcdHRoaXMubGFiZWxlZCA9ICFpc1VuZChwYXJhbXMubGFiZWwpO1xuXHRcdHRoaXMucHJlTGFiZWxlZCA9ICFpc1VuZChwYXJhbXMucHJlTGFiZWwpO1xuXHRcdHRoaXMudHJpZ2dlcmVkID0gIWlzVW5kKHBhcmFtcy50cmlnZ2VyKSAmJiAhIXRoaXMudHJpZ2dlcjtcblxuXHRcdHRoaXMuY2xhc3NGb3JUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNsYXNzTmFtZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHNpemUgPSBrby51bndyYXAodGhpcy5zaXplKSxcblx0XHRcdFx0c3VmZml4VmFsdWUgPSB0aGlzLnRyaWdnZXIgPyAnICcgKyB0cmltKCdzZXR0aW5ncy1zYXZlZC10cmlnZ2VyLWlucHV0ICcgKyB0aGlzLmNsYXNzRm9yVHJpZ2dlcigpKSA6ICcnO1xuXHRcdFx0cmV0dXJuICgwIDwgc2l6ZSA/ICdzcGFuJyArIHNpemUgOiAnJykgKyBzdWZmaXhWYWx1ZTtcblx0XHR9KTtcblxuXHRcdGlmICghaXNVbmQocGFyYW1zLndpZHRoKSAmJiBwYXJhbXMuZWxlbWVudCkge1xuXHRcdFx0cGFyYW1zLmVsZW1lbnQuZmluZCgnaW5wdXQsc2VsZWN0LHRleHRhcmVhJykuY3NzKCd3aWR0aCcsIHBhcmFtcy53aWR0aCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy5jbGFzc05hbWUpO1xuXG5cdFx0aWYgKHRoaXMudHJpZ2dlcikge1xuXHRcdFx0dGhpcy5zZXRUcmlnZ2VyU3RhdGUodGhpcy50cmlnZ2VyKCkpO1xuXG5cdFx0XHR0aGlzLmRpc3Bvc2FibGUucHVzaCh0aGlzLnRyaWdnZXIuc3Vic2NyaWJlKHRoaXMuc2V0VHJpZ2dlclN0YXRlLCB0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0c2V0VHJpZ2dlclN0YXRlKHZhbHVlKSB7XG5cdFx0c3dpdGNoIChwSW50KHZhbHVlKSkge1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQ6XG5cdFx0XHRcdHRoaXMuY2xhc3NGb3JUcmlnZ2VyKCdzdWNjZXNzJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignZXJyb3InKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdElucHV0LCBBYnN0cmFjdElucHV0IGFzIGRlZmF1bHQgfTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlcihhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuaW1wb3J0IFByb21pc2VzUG9wdWxhdG9yIGZyb20gJ1Byb21pc2VzL1VzZXIvUG9wdWxhdG9yJztcbmltcG9ydCB7IEFic3RyYWN0QWpheFByb21pc2VzIH0gZnJvbSAnUHJvbWlzZXMvQWJzdHJhY3RBamF4JztcblxuY2xhc3MgVXNlckFqYXhVc2VyUHJvbWlzZXMgZXh0ZW5kcyBBYnN0cmFjdEFqYXhQcm9taXNlcyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmZvbGRlcnNUaW1lb3V0ID0gMDtcblx0fVxuXG5cdGZvbGRlcnNSZWxvYWQoZlRyaWdnZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5hYm9ydCgnRm9sZGVycycpXG5cdFx0XHQucG9zdFJlcXVlc3QoJ0ZvbGRlcnMnLCBmVHJpZ2dlcilcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdFByb21pc2VzUG9wdWxhdG9yLmZvbGRlcnNMaXN0KGRhdGEuUmVzdWx0KTtcblx0XHRcdFx0UHJvbWlzZXNQb3B1bGF0b3IuZm9sZGVyc0FkZGl0aW9uYWxQYXJhbWV0ZXJzKGRhdGEuUmVzdWx0KTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGZvbGRlcnNSZWxvYWRXaXRoVGltZW91dChmVHJpZ2dlcikge1xuXHRcdHRoaXMuc2V0VHJpZ2dlcihmVHJpZ2dlciwgdHJ1ZSk7XG5cblx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuZm9sZGVyc1RpbWVvdXQpO1xuXHRcdHRoaXMuZm9sZGVyc1RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmZvbGRlcnNSZWxvYWQoZlRyaWdnZXIpO1xuXHRcdH0sIDUwMCk7XG5cdH1cblxuXHRmb2xkZXJEZWxldGUoc0ZvbGRlckZ1bGxOYW1lUmF3LCBmVHJpZ2dlcikge1xuXHRcdHJldHVybiB0aGlzLnBvc3RSZXF1ZXN0KCdGb2xkZXJEZWxldGUnLCBmVHJpZ2dlciwge1xuXHRcdFx0J0ZvbGRlcic6IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHRcdH0pO1xuXHR9XG5cblx0Zm9sZGVyQ3JlYXRlKHNOZXdGb2xkZXJOYW1lLCBzUGFyZW50TmFtZSwgZlRyaWdnZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5wb3N0UmVxdWVzdCgnRm9sZGVyQ3JlYXRlJywgZlRyaWdnZXIsIHtcblx0XHRcdCdGb2xkZXInOiBzTmV3Rm9sZGVyTmFtZSxcblx0XHRcdCdQYXJlbnQnOiBzUGFyZW50TmFtZVxuXHRcdH0pO1xuXHR9XG5cblx0Zm9sZGVyUmVuYW1lKHNQcmV2Rm9sZGVyRnVsbE5hbWVSYXcsIHNOZXdGb2xkZXJOYW1lLCBmVHJpZ2dlcikge1xuXHRcdHJldHVybiB0aGlzLnBvc3RSZXF1ZXN0KCdGb2xkZXJSZW5hbWUnLCBmVHJpZ2dlciwge1xuXHRcdFx0J0ZvbGRlcic6IHNQcmV2Rm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHQnTmV3Rm9sZGVyTmFtZSc6IHNOZXdGb2xkZXJOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHRhdHRhY2htZW50c0FjdGlvbnMoc0FjdGlvbiwgYUhhc2hlcywgZlRyaWdnZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5wb3N0UmVxdWVzdCgnQXR0YWNobWVudHNBY3Rpb25zJywgZlRyaWdnZXIsIHtcblx0XHRcdCdEbyc6IHNBY3Rpb24sXG5cdFx0XHQnSGFzaGVzJzogYUhhc2hlc1xuXHRcdH0pO1xuXHR9XG5cblx0d2VsY29tZUNsb3NlKCkge1xuXHRcdHJldHVybiB0aGlzLnBvc3RSZXF1ZXN0KCdXZWxjb21lQ2xvc2UnKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgVXNlckFqYXhVc2VyUHJvbWlzZXMoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShnbG9iYWwsIGtleSwgdmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgc2V0R2xvYmFsKFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cubW9tZW50OyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LnByb2dyZXNzSnM7IiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5jbGFzcyBJZGVudGl0eVVzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuaWRlbnRpdGllcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5pZGVudGl0aWVzLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMTAwIH0pO1xuXG5cdFx0dGhpcy5pZGVudGl0aWVzSURTID0ga28uY29tcHV0ZWQoKCkgPT4gXy5jb21wYWN0KF8ubWFwKHRoaXMuaWRlbnRpdGllcygpLCAoaXRlbSkgPT4gKGl0ZW0gPyBpdGVtLmlkIDogbnVsbCkpKSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IElkZW50aXR5VXNlclN0b3JlKCk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBDb250YWN0VXNlclN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jb250YWN0cyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5jb250YWN0cy5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lMjAwbXMgfSk7XG5cdFx0dGhpcy5jb250YWN0cy5pbXBvcnRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWUyMDBtcyB9KTtcblx0XHR0aGlzLmNvbnRhY3RzLnN5bmNpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWUyMDBtcyB9KTtcblx0XHR0aGlzLmNvbnRhY3RzLmV4cG9ydGluZ1ZjZiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTIwMG1zIH0pO1xuXHRcdHRoaXMuY29udGFjdHMuZXhwb3J0aW5nQ3N2ID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lMjAwbXMgfSk7XG5cblx0XHR0aGlzLmFsbG93Q29udGFjdHNTeW5jID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5lbmFibGVDb250YWN0c1N5bmMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmNvbnRhY3RzU3luY1VybCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY29udGFjdHNTeW5jVXNlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY29udGFjdHNTeW5jUGFzcyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5hbGxvd0NvbnRhY3RzU3luYyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdDb250YWN0c1N5bmNJc0FsbG93ZWQnKSk7XG5cdFx0dGhpcy5lbmFibGVDb250YWN0c1N5bmMoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnRW5hYmxlQ29udGFjdHNTeW5jJykpO1xuXG5cdFx0dGhpcy5jb250YWN0c1N5bmNVcmwoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbnRhY3RzU3luY1VybCcpKTtcblx0XHR0aGlzLmNvbnRhY3RzU3luY1VzZXIoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbnRhY3RzU3luY1VzZXInKSk7XG5cdFx0dGhpcy5jb250YWN0c1N5bmNQYXNzKFNldHRpbmdzLnNldHRpbmdzR2V0KCdDb250YWN0c1N5bmNQYXNzd29yZCcpKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29udGFjdFVzZXJTdG9yZSgpO1xuIiwidmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMTIuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ25hdmlnYXRvcicsICd1c2VyQWdlbnQnKSB8fCAnJztcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0LCAxICsgQVNfRU5UUklFUyArIElOVEVSUlVQVEVEKTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IpO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoJ1RhcmdldCBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTtcbiAgfVxuXG4gIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gbmV4dC5jYWxsKGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsInZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVudW1lcmFibGUpIHRhcmdldFtrZXldID0gdmFsdWU7XG4gIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCB2YWx1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59O1xuXG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwiLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQpO1xuICAgIH07XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzc29mKGdsb2JhbC5wcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVRvU3RyaW5nID0gUmVnRXhwUHJvdG90eXBlW1RPX1NUUklOR107XG5cbnZhciBOT1RfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbnZhciBJTkNPUlJFQ1RfTkFNRSA9IG5hdGl2ZVRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChOT1RfR0VORVJJQyB8fCBJTkNPUlJFQ1RfTkFNRSkge1xuICByZWRlZmluZShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHAgPSBTdHJpbmcoUi5zb3VyY2UpO1xuICAgIHZhciByZiA9IFIuZmxhZ3M7XG4gICAgdmFyIGYgPSBTdHJpbmcocmYgPT09IHVuZGVmaW5lZCAmJiBSIGluc3RhbmNlb2YgUmVnRXhwICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpID8gZmxhZ3MuY2FsbChSKSA6IHJmKTtcbiAgICByZXR1cm4gJy8nICsgcCArICcvJyArIGY7XG4gIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjYWNoZSA9IHt9O1xuXG52YXIgdGhyb3dlciA9IGZ1bmN0aW9uIChpdCkgeyB0aHJvdyBpdDsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIG9wdGlvbnMpIHtcbiAgaWYgKGhhcyhjYWNoZSwgTUVUSE9EX05BTUUpKSByZXR1cm4gY2FjaGVbTUVUSE9EX05BTUVdO1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgdmFyIEFDQ0VTU09SUyA9IGhhcyhvcHRpb25zLCAnQUNDRVNTT1JTJykgPyBvcHRpb25zLkFDQ0VTU09SUyA6IGZhbHNlO1xuICB2YXIgYXJndW1lbnQwID0gaGFzKG9wdGlvbnMsIDApID8gb3B0aW9uc1swXSA6IHRocm93ZXI7XG4gIHZhciBhcmd1bWVudDEgPSBoYXMob3B0aW9ucywgMSkgPyBvcHRpb25zWzFdIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiBjYWNoZVtNRVRIT0RfTkFNRV0gPSAhIW1ldGhvZCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIGlmIChBQ0NFU1NPUlMgJiYgIURFU0NSSVBUT1JTKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgTyA9IHsgbGVuZ3RoOiAtMSB9O1xuXG4gICAgaWYgKEFDQ0VTU09SUykgZGVmaW5lUHJvcGVydHkoTywgMSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IHRocm93ZXIgfSk7XG4gICAgZWxzZSBPWzFdID0gMTtcblxuICAgIG1ldGhvZC5jYWxsKE8sIGFyZ3VtZW50MCwgYXJndW1lbnQxKTtcbiAgfSk7XG59O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuXG4vLyBsZXQgcmFpbmxvb3BDYWNoZXMgPSB3aW5kb3cuY2FjaGVzICYmIHdpbmRvdy5jYWNoZXMub3BlbiA/IHdpbmRvdy5jYWNoZXMgOiBudWxsO1xuXG4vKipcbiAqIEBwYXJhbSB7c3JjfSBzcmNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYXN5bmMgPSBmYWxzZVxuICogQHJldHVybnMge1Byb21pc2V9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqYXNzbChzcmMsIGFzeW5jID0gZmFsc2UpIHtcblx0aWYgKCF3aW5kb3cuUHJvbWlzZSB8fCAhd2luZG93LlByb21pc2UuYWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdQcm9taXNlcyBhcmUgbm90IGF2YWlsYWJsZSB5b3VyIGVudmlyb25tZW50LicpO1xuXHR9XG5cblx0aWYgKCFzcmMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3NyYyBzaG91bGQgbm90IGJlIGVtcHR5LicpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyB3aW5kb3cuUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblxuXHRcdGVsZW1lbnQub25sb2FkID0gKCkgPT4ge1xuXHRcdFx0cmVzb2x2ZShzcmMpO1xuXHRcdH07XG5cblx0XHRlbGVtZW50Lm9uZXJyb3IgPSAoKSA9PiB7XG5cdFx0XHRyZWplY3QobmV3IEVycm9yKHNyYykpO1xuXHRcdH07XG5cblx0XHRlbGVtZW50LmFzeW5jID0gdHJ1ZSA9PT0gYXN5bmM7XG5cdFx0ZWxlbWVudC5zcmMgPSBzcmM7XG5cblx0XHR3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTtcblx0fSkgLyogLnRoZW4oKHMpID0+IHtcblxuXHRcdGNvbnN0IGZvdW5kID0gcyAmJiByYWlubG9vcENhY2hlcyA/IHMubWF0Y2goL3JhaW5sb29wXFwvdlxcLyhbXlxcL10rKVxcL3N0YXRpY1xcLy8pIDogbnVsbDtcblx0XHRpZiAoZm91bmQgJiYgZm91bmRbMV0pXG5cdFx0e1xuXHRcdFx0cmFpbmxvb3BDYWNoZXMub3BlbigncmFpbmxvb3Atb2ZmbGluZS0nICsgZm91bmRbMV0pLnRoZW4oXG5cdFx0XHRcdChjYWNoZSkgPT4gY2FjaGUuYWRkKHMpXG5cdFx0XHQpLmNhdGNoKCgpID0+IHtcblx0XHRcdFx0cmFpbmxvb3BDYWNoZXMgPSBudWxsO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHM7XG5cdH0pKi87XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlc1wiKTsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgVGhlbWVTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudGhlbWVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLnRoZW1lQmFja2dyb3VuZE5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRoZW1lQmFja2dyb3VuZEhhc2ggPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMudGhlbWUgPSBrby5vYnNlcnZhYmxlKCcnKS5leHRlbmQoeyBsaW1pdGVkTGlzdDogdGhpcy50aGVtZXMgfSk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHRjb25zdCB0aGVtZXMgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndGhlbWVzJyk7XG5cblx0XHR0aGlzLnRoZW1lcyhpc0FycmF5KHRoZW1lcykgPyB0aGVtZXMgOiBbXSk7XG5cdFx0dGhpcy50aGVtZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVGhlbWUnKSk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmROYW1lKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyQmFja2dyb3VuZE5hbWUnKSk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmRIYXNoKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyQmFja2dyb3VuZEhhc2gnKSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFRoZW1lU3RvcmUoKTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IERlc2t0b3BOb3RpZmljYXRpb24sIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5pbXBvcnQgQXVkaW8gZnJvbSAnQ29tbW9uL0F1ZGlvJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIE5vdGlmaWNhdGlvblVzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZW5hYmxlU291bmROb3RpZmljYXRpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNvdW5kTm90aWZpY2F0aW9uSXNTdXBwb3J0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmRlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9ucyA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbigpO1xuXG5cdFx0XHRcdGxldCByZXN1bHQgPSBEZXNrdG9wTm90aWZpY2F0aW9uLk5vdFN1cHBvcnRlZDtcblxuXHRcdFx0XHRjb25zdCBOb3RpZmljYXRpb25DbGFzcyA9IHRoaXMubm90aWZpY2F0aW9uQ2xhc3MoKTtcblx0XHRcdFx0aWYgKE5vdGlmaWNhdGlvbkNsYXNzICYmIE5vdGlmaWNhdGlvbkNsYXNzLnBlcm1pc3Npb24pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKE5vdGlmaWNhdGlvbkNsYXNzLnBlcm1pc3Npb24udG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0XHRcdFx0Y2FzZSAnZ3JhbnRlZCc6XG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IERlc2t0b3BOb3RpZmljYXRpb24uQWxsb3dlZDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdkZW5pZWQnOlxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBEZXNrdG9wTm90aWZpY2F0aW9uLkRlbmllZDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdkZWZhdWx0Jzpcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gRGVza3RvcE5vdGlmaWNhdGlvbi5Ob3RBbGxvd2VkO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAod2luZG93LndlYmtpdE5vdGlmaWNhdGlvbnMgJiYgd2luZG93LndlYmtpdE5vdGlmaWNhdGlvbnMuY2hlY2tQZXJtaXNzaW9uKSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gd2luZG93LndlYmtpdE5vdGlmaWNhdGlvbnMuY2hlY2tQZXJtaXNzaW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSlcblx0XHRcdC5leHRlbmQoeyBub3RpZnk6ICdhbHdheXMnIH0pO1xuXG5cdFx0dGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uID0ga29cblx0XHRcdC5jb21wdXRlZCh7XG5cdFx0XHRcdHJlYWQ6ICgpID0+XG5cdFx0XHRcdFx0dGhpcy5hbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24oKSAmJiBEZXNrdG9wTm90aWZpY2F0aW9uLkFsbG93ZWQgPT09IHRoaXMuZGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCksXG5cdFx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IE5vdGlmaWNhdGlvbkNsYXNzID0gdGhpcy5ub3RpZmljYXRpb25DbGFzcygpLFxuXHRcdFx0XHRcdFx0XHRwZXJtaXNzaW9uID0gdGhpcy5kZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKTtcblxuXHRcdFx0XHRcdFx0aWYgKE5vdGlmaWNhdGlvbkNsYXNzICYmIERlc2t0b3BOb3RpZmljYXRpb24uQWxsb3dlZCA9PT0gcGVybWlzc2lvbikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbih0cnVlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoTm90aWZpY2F0aW9uQ2xhc3MgJiYgRGVza3RvcE5vdGlmaWNhdGlvbi5Ob3RBbGxvd2VkID09PSBwZXJtaXNzaW9uKSB7XG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbkNsYXNzLnJlcXVlc3RQZXJtaXNzaW9uKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbi52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChEZXNrdG9wTm90aWZpY2F0aW9uLkFsbG93ZWQgPT09IHRoaXMuZGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbigpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24odHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbigpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmFsbG93RGVza3RvcE5vdGlmaWNhdGlvbihmYWxzZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuYWxsb3dEZXNrdG9wTm90aWZpY2F0aW9uKGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZXh0ZW5kKHsgbm90aWZ5OiAnYWx3YXlzJyB9KTtcblxuXHRcdGlmICghdGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uLnZhbHVlSGFzTXV0YXRlZCkge1xuXHRcdFx0dGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uLnZhbHVlSGFzTXV0YXRlZCA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5hbGxvd0Rlc2t0b3BOb3RpZmljYXRpb24udmFsdWVIYXNNdXRhdGVkKCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHRoaXMuY29tcHV0ZXJzKCk7XG5cblx0XHR0aGlzLmluaXROb3RpZmljYXRpb25QbGF5ZXIoKTtcblx0fVxuXG5cdGNvbXB1dGVycygpIHtcblx0XHR0aGlzLmlzRGVza3RvcE5vdGlmaWNhdGlvblN1cHBvcnRlZCA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gRGVza3RvcE5vdGlmaWNhdGlvbi5Ob3RTdXBwb3J0ZWQgIT09IHRoaXMuZGVza3RvcE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKClcblx0XHQpO1xuXG5cdFx0dGhpcy5pc0Rlc2t0b3BOb3RpZmljYXRpb25EZW5pZWQgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdERlc2t0b3BOb3RpZmljYXRpb24uTm90U3VwcG9ydGVkID09PSB0aGlzLmRlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpIHx8XG5cdFx0XHRcdERlc2t0b3BOb3RpZmljYXRpb24uRGVuaWVkID09PSB0aGlzLmRlc2t0b3BOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpXG5cdFx0KTtcblx0fVxuXG5cdGluaXROb3RpZmljYXRpb25QbGF5ZXIoKSB7XG5cdFx0aWYgKEF1ZGlvICYmIEF1ZGlvLnN1cHBvcnRlZE5vdGlmaWNhdGlvbikge1xuXHRcdFx0dGhpcy5zb3VuZE5vdGlmaWNhdGlvbklzU3VwcG9ydGVkKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVuYWJsZVNvdW5kTm90aWZpY2F0aW9uKGZhbHNlKTtcblx0XHRcdHRoaXMuc291bmROb3RpZmljYXRpb25Jc1N1cHBvcnRlZChmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0cGxheVNvdW5kTm90aWZpY2F0aW9uKHNraXBTZXR0aW5nKSB7XG5cdFx0aWYgKEF1ZGlvICYmIEF1ZGlvLnN1cHBvcnRlZE5vdGlmaWNhdGlvbiAmJiAoc2tpcFNldHRpbmcgPyB0cnVlIDogdGhpcy5lbmFibGVTb3VuZE5vdGlmaWNhdGlvbigpKSkge1xuXHRcdFx0QXVkaW8ucGxheU5vdGlmaWNhdGlvbigpO1xuXHRcdH1cblx0fVxuXG5cdGRpc3BsYXlEZXNrdG9wTm90aWZpY2F0aW9uKGltYWdlU3JjLCB0aXRsZSwgdGV4dCwgbmVzc2FnZURhdGEpIHtcblx0XHRpZiAodGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uKCkpIHtcblx0XHRcdGNvbnN0IE5vdGlmaWNhdGlvbkNsYXNzID0gdGhpcy5ub3RpZmljYXRpb25DbGFzcygpLFxuXHRcdFx0XHRub3RpZmljYXRpb24gPSBOb3RpZmljYXRpb25DbGFzc1xuXHRcdFx0XHRcdD8gbmV3IE5vdGlmaWNhdGlvbkNsYXNzKHRpdGxlLCB7XG5cdFx0XHRcdFx0XHRcdGJvZHk6IHRleHQsXG5cdFx0XHRcdFx0XHRcdGljb246IGltYWdlU3JjXG5cdFx0XHRcdFx0ICB9KVxuXHRcdFx0XHRcdDogbnVsbDtcblxuXHRcdFx0aWYgKG5vdGlmaWNhdGlvbikge1xuXHRcdFx0XHRpZiAobm90aWZpY2F0aW9uLnNob3cpIHtcblx0XHRcdFx0XHRub3RpZmljYXRpb24uc2hvdygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG5lc3NhZ2VEYXRhKSB7XG5cdFx0XHRcdFx0bm90aWZpY2F0aW9uLm9uY2xpY2sgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHR3aW5kb3cuZm9jdXMoKTtcblxuXHRcdFx0XHRcdFx0aWYgKG5lc3NhZ2VEYXRhLkZvbGRlciAmJiBuZXNzYWdlRGF0YS5VaWQpIHtcblx0XHRcdFx0XHRcdFx0RXZlbnRzLnB1YignbWFpbGJveC5tZXNzYWdlLnNob3cnLCBbbmVzc2FnZURhdGEuRm9sZGVyLCBuZXNzYWdlRGF0YS5VaWRdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoXG5cdFx0XHRcdFx0KGZ1bmN0aW9uKGxvY2FsTm90aWZpY2F0aW9ucykge1xuXHRcdFx0XHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGxvY2FsTm90aWZpY2F0aW9ucy5jYW5jZWwpIHtcblx0XHRcdFx0XHRcdFx0XHRsb2NhbE5vdGlmaWNhdGlvbnMuY2FuY2VsKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAobG9jYWxOb3RpZmljYXRpb25zLmNsb3NlKSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYWxOb3RpZmljYXRpb25zLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSkobm90aWZpY2F0aW9uKSxcblx0XHRcdFx0XHRNYWdpY3MuVGltZTdzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5lbmFibGVTb3VuZE5vdGlmaWNhdGlvbighIVNldHRpbmdzLnNldHRpbmdzR2V0KCdTb3VuZE5vdGlmaWNhdGlvbicpKTtcblx0XHR0aGlzLmVuYWJsZURlc2t0b3BOb3RpZmljYXRpb24oISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnRGVza3RvcE5vdGlmaWNhdGlvbnMnKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMgeyp8bnVsbH1cblx0ICovXG5cdG5vdGlmaWNhdGlvbkNsYXNzKCkge1xuXHRcdHJldHVybiB3aW5kb3cuTm90aWZpY2F0aW9uICYmIHdpbmRvdy5Ob3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24gPyB3aW5kb3cuTm90aWZpY2F0aW9uIDogbnVsbDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTm90aWZpY2F0aW9uVXNlclN0b3JlKCk7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdC5jYWxsKGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi50b1N0cmluZztcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGAzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICh0eXBlb2Ygc3RvcmUuaW5zcGVjdFNvdXJjZSAhPSAnZnVuY3Rpb24nKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIG9iamVjdEhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICB2YXIgd21nZXQgPSBzdG9yZS5nZXQ7XG4gIHZhciB3bWhhcyA9IHN0b3JlLmhhcztcbiAgdmFyIHdtc2V0ID0gc3RvcmUuc2V0O1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHdtaGFzLmNhbGwoc3RvcmUsIGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgd21zZXQuY2FsbChzdG9yZSwgaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWdldC5jYWxsKHN0b3JlLCBpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWhhcy5jYWxsKHN0b3JlLCBpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChvYmplY3RIYXMoaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IEp1YSBmcm9tICdKdWEnO1xuXG5pbXBvcnQge1xuXHRDYXBhLFxuXHRNYWdpY3MsXG5cdEtleVN0YXRlLFxuXHRDb21wb3NlVHlwZSxcblx0U3RvcmFnZVJlc3VsdFR5cGUsXG5cdEVkaXRvckRlZmF1bHRUeXBlLFxuXHROb3RpZmljYXRpb24sXG5cdFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24sXG5cdFVwbG9hZEVycm9yQ29kZVxufSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQge1xuXHR0cmltLFxuXHRpc0FycmF5LFxuXHRpc05vcm1hbCxcblx0ZGVsZWdhdGVSdW4sXG5cdGlzTm9uRW1wdHlBcnJheSxcblx0Y2xlYXJCcVN3aXRjaGVyLFxuXHRyZXBseVN1YmplY3RBZGQsXG5cdGVuY29kZUh0bWwsXG5cdG5vb3BGYWxzZSxcblx0aW5Gb2N1cyxcblx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3ksXG5cdHBJbnQsXG5cdGlzVW5kXG59IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IFVOVVNFRF9PUFRJT05fVkFMVUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IGJYTUxIdHRwUmVxdWVzdFN1cHBvcnRlZCwgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IHVwbG9hZCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBpMThuLCBnZXROb3RpZmljYXRpb24sIGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZSB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGZvcm1hdCBhcyBtb21lbnRvckZvcm1hdCB9IGZyb20gJ0NvbW1vbi9Nb21lbnRvcic7XG5pbXBvcnQgeyBnZXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUsIHNldE1lc3NhZ2VGbGFnc1RvQ2FjaGUsIHNldEZvbGRlckhhc2ggfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgeyBIdG1sRWRpdG9yIH0gZnJvbSAnQ29tbW9uL0h0bWxFZGl0b3InO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBJZGVudGl0eVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0lkZW50aXR5JztcbmltcG9ydCBBY2NvdW50U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQWNjb3VudCc7XG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcbmltcG9ydCBQZ3BTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9QZ3AnO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcbmltcG9ydCBTb2NpYWxTdG9yZSBmcm9tICdTdG9yZXMvU29jaWFsJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5cbmltcG9ydCB7IENvbXBvc2VBdHRhY2htZW50TW9kZWwgfSBmcm9tICdNb2RlbC9Db21wb3NlQXR0YWNobWVudCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCwgaXNQb3B1cFZpc2libGUsIHNob3dTY3JlZW5Qb3B1cCwgaGlkZVNjcmVlblBvcHVwLCByb3V0ZU9uLCByb3V0ZU9mZiB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvQ29tcG9zZScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNDb21wb3NlJ1xufSlcbmNsYXNzIENvbXBvc2VQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGNvbnN0IGZFbWFpbE91dEluSGVscGVyID0gKGNvbnRleHQsIGlkZW50aXR5LCBuYW1lLCBpc0luKSA9PiB7XG5cdFx0XHRpZiAoaWRlbnRpdHkgJiYgY29udGV4dCAmJiBpZGVudGl0eVtuYW1lXSgpICYmIChpc0luID8gdHJ1ZSA6IGNvbnRleHRbbmFtZV0oKSkpIHtcblx0XHRcdFx0Y29uc3QgaWRlbnRpdHlFbWFpbCA9IGlkZW50aXR5W25hbWVdKCk7XG5cdFx0XHRcdGxldCBsaXN0ID0gdHJpbShjb250ZXh0W25hbWVdKCkpLnNwbGl0KC9bLF0vKTtcblxuXHRcdFx0XHRsaXN0ID0gXy5maWx0ZXIobGlzdCwgKGVtYWlsKSA9PiB7XG5cdFx0XHRcdFx0ZW1haWwgPSB0cmltKGVtYWlsKTtcblx0XHRcdFx0XHRyZXR1cm4gZW1haWwgJiYgdHJpbShpZGVudGl0eUVtYWlsKSAhPT0gZW1haWw7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChpc0luKSB7XG5cdFx0XHRcdFx0bGlzdC5wdXNoKGlkZW50aXR5RW1haWwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29udGV4dFtuYW1lXShsaXN0LmpvaW4oJywnKSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMub0xhc3RNZXNzYWdlID0gbnVsbDtcblx0XHR0aGlzLm9FZGl0b3IgPSBudWxsO1xuXHRcdHRoaXMuYURyYWZ0SW5mbyA9IG51bGw7XG5cdFx0dGhpcy5zSW5SZXBseVRvID0gJyc7XG5cdFx0dGhpcy5iRnJvbURyYWZ0ID0gZmFsc2U7XG5cdFx0dGhpcy5zUmVmZXJlbmNlcyA9ICcnO1xuXG5cdFx0dGhpcy5zTGFzdEZvY3VzZWRGaWVsZCA9ICd0byc7XG5cblx0XHR0aGlzLnJlc2l6ZXJUcmlnZ2VyID0gXy5iaW5kKHRoaXMucmVzaXplclRyaWdnZXIsIHRoaXMpO1xuXG5cdFx0dGhpcy5hbGxvd0NvbnRhY3RzID0gISFBcHBTdG9yZS5jb250YWN0c0lzQWxsb3dlZCgpO1xuXHRcdHRoaXMuYWxsb3dGb2xkZXJzID0gISFTZXR0aW5ncy5jYXBhKENhcGEuRm9sZGVycyk7XG5cblx0XHR0aGlzLmJTa2lwTmV4dEhpZGUgPSBmYWxzZTtcblx0XHR0aGlzLmNvbXBvc2VJbkVkaXQgPSBBcHBTdG9yZS5jb21wb3NlSW5FZGl0O1xuXHRcdHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUgPSBTZXR0aW5nc1N0b3JlLmVkaXRvckRlZmF1bHRUeXBlO1xuXG5cdFx0dGhpcy5jYXBhT3BlblBHUCA9IFBncFN0b3JlLmNhcGFPcGVuUEdQO1xuXG5cdFx0dGhpcy5pZGVudGl0aWVzRHJvcGRvd25UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnRvID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50by5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY2MuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYmNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5iY2MuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMucmVwbHlUbyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucmVwbHlUby5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHQvLyB0aGlzLnRvLnN1YnNjcmliZSgodikgPT4gY29uc29sZS5sb2codikpO1xuXG5cdFx0a28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRcdGNhc2UgdGhpcy50by5mb2N1c2VkKCk6XG5cdFx0XHRcdFx0dGhpcy5zTGFzdEZvY3VzZWRGaWVsZCA9ICd0byc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgdGhpcy5jYy5mb2N1c2VkKCk6XG5cdFx0XHRcdFx0dGhpcy5zTGFzdEZvY3VzZWRGaWVsZCA9ICdjYyc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgdGhpcy5iY2MuZm9jdXNlZCgpOlxuXHRcdFx0XHRcdHRoaXMuc0xhc3RGb2N1c2VkRmllbGQgPSAnYmNjJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXHRcdH0pLmV4dGVuZCh7IG5vdGlmeTogJ2Fsd2F5cycgfSk7XG5cblx0XHR0aGlzLnN1YmplY3QgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnN1YmplY3QuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5pc0h0bWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMucmVxdWVzdERzbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMucmVxdWVzdFJlYWRSZWNlaXB0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5tYXJrQXNJbXBvcnRhbnQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuc2VuZEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zZW5kU3VjY2Vzc0J1dFNhdmVFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2F2ZWRFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5zZW5kQnV0dG9uU3VjY2VzcyA9IGtvLmNvbXB1dGVkKCgpID0+ICF0aGlzLnNlbmRFcnJvcigpICYmICF0aGlzLnNlbmRTdWNjZXNzQnV0U2F2ZUVycm9yKCkpO1xuXG5cdFx0dGhpcy5zZW5kRXJyb3JEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zYXZlZEVycm9yRGVzYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5zZW5kRXJyb3Iuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnNlbmRFcnJvckRlc2MoJycpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zYXZlZEVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy5zYXZlZEVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNlbmRTdWNjZXNzQnV0U2F2ZUVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy5zYXZlZEVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNhdmVkVGltZSA9IGtvLm9ic2VydmFibGUoMCk7XG5cdFx0dGhpcy5zYXZlZFRpbWVUZXh0ID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdDAgPCB0aGlzLnNhdmVkVGltZSgpID8gaTE4bignQ09NUE9TRS9TQVZFRF9USU1FJywgeyAnVElNRSc6IG1vbWVudG9yRm9ybWF0KHRoaXMuc2F2ZWRUaW1lKCkgLSAxLCAnTFQnKSB9KSA6ICcnXG5cdFx0KTtcblxuXHRcdHRoaXMuZW1wdHlUb0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5lbXB0eVRvRXJyb3JUb29sdGlwID0ga28uY29tcHV0ZWQoKCkgPT4gKHRoaXMuZW1wdHlUb0Vycm9yKCkgPyBpMThuKCdDT01QT1NFL0VNUFRZX1RPX0VSUk9SX0RFU0MnKSA6ICcnKSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5FcnJvckVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzRXJyb3JUb29sdGlwID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRcdGNhc2UgdGhpcy5hdHRhY2htZW50c0luUHJvY2Vzc0Vycm9yKCk6XG5cdFx0XHRcdFx0cmVzdWx0ID0gaTE4bignQ09NUE9TRS9BVFRBQ0hNRU5UU19VUExPQURfRVJST1JfREVTQycpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIHRoaXMuYXR0YWNobWVudHNJbkVycm9yRXJyb3IoKTpcblx0XHRcdFx0XHRyZXN1bHQgPSBpMThuKCdDT01QT1NFL0FUVEFDSE1FTlRTX0VSUk9SX0RFU0MnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2hvd0NjID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zaG93QmNjID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zaG93UmVwbHlUbyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5jYy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoZmFsc2UgPT09IHRoaXMuc2hvd0NjKCkgJiYgMCA8IHZhbHVlLmxlbmd0aCkge1xuXHRcdFx0XHR0aGlzLnNob3dDYyh0cnVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuYmNjLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmIChmYWxzZSA9PT0gdGhpcy5zaG93QmNjKCkgJiYgMCA8IHZhbHVlLmxlbmd0aCkge1xuXHRcdFx0XHR0aGlzLnNob3dCY2ModHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnJlcGx5VG8uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKGZhbHNlID09PSB0aGlzLnNob3dSZXBseVRvKCkgJiYgMCA8IHZhbHVlLmxlbmd0aCkge1xuXHRcdFx0XHR0aGlzLnNob3dSZXBseVRvKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5kcmFmdEZvbGRlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZHJhZnRVaWQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnNlbmRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNhdmluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudHMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c0luUHJvY2VzcyA9IGtvLmNvbXB1dGVkKCgpID0+IF8uZmlsdGVyKHRoaXMuYXR0YWNobWVudHMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgIWl0ZW0uY29tcGxldGUoKSkpO1xuXHRcdHRoaXMuYXR0YWNobWVudHNJblJlYWR5ID0ga28uY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy5hdHRhY2htZW50cygpLCAoaXRlbSkgPT4gaXRlbSAmJiBpdGVtLmNvbXBsZXRlKCkpKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5FcnJvciA9IGtvLmNvbXB1dGVkKCgpID0+IF8uZmlsdGVyKHRoaXMuYXR0YWNobWVudHMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgIT09IGl0ZW0uZXJyb3IoKSkpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c0NvdW50ID0ga28uY29tcHV0ZWQoKCkgPT4gdGhpcy5hdHRhY2htZW50cygpLmxlbmd0aCk7XG5cdFx0dGhpcy5hdHRhY2htZW50c0luRXJyb3JDb3VudCA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMuYXR0YWNobWVudHNJbkVycm9yKCkubGVuZ3RoKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzQ291bnQgPSBrby5jb21wdXRlZCgoKSA9PiB0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzKCkubGVuZ3RoKTtcblx0XHR0aGlzLmlzRHJhZnRGb2xkZXJNZXNzYWdlID0ga28uY29tcHV0ZWQoKCkgPT4gJycgIT09IHRoaXMuZHJhZnRGb2xkZXIoKSAmJiAnJyAhPT0gdGhpcy5kcmFmdFVpZCgpKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudHNQbGFjZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50cy5zdWJzY3JpYmUodGhpcy5yZXNpemVyVHJpZ2dlcik7XG5cdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlLnN1YnNjcmliZSh0aGlzLnJlc2l6ZXJUcmlnZ2VyKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudHNJbkVycm9yQ291bnQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKDAgPT09IHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuYXR0YWNobWVudHNJbkVycm9yRXJyb3IoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb21wb3NlVXBsb2FkZXJCdXR0b24gPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuY29tcG9zZVVwbG9hZGVyRHJvcFBsYWNlID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblx0XHR0aGlzLmRyYWdBbmREcm9wRW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZHJhZ0FuZERyb3BPdmVyID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEgfSk7XG5cdFx0dGhpcy5kcmFnQW5kRHJvcFZpc2libGUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMSB9KTtcblx0XHR0aGlzLmF0dGFjaGVNdWx0aXBsZUFsbG93ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFkZEF0dGFjaG1lbnRFbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmNvbXBvc2VFZGl0b3JBcmVhID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdHRoaXMuaWRlbnRpdGllcyA9IElkZW50aXR5U3RvcmUuaWRlbnRpdGllcztcblx0XHR0aGlzLmlkZW50aXRpZXNPcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8ubWFwKElkZW50aXR5U3RvcmUuaWRlbnRpdGllcygpLCAoaXRlbSkgPT4gKHtcblx0XHRcdFx0J2l0ZW0nOiBpdGVtLFxuXHRcdFx0XHQnb3B0VmFsdWUnOiBpdGVtLmlkKCksXG5cdFx0XHRcdCdvcHRUZXh0JzogaXRlbS5mb3JtYXR0ZWROYW1lKClcblx0XHRcdH0pKVxuXHRcdCk7XG5cblx0XHR0aGlzLmN1cnJlbnRJZGVudGl0eSA9IGtvLm9ic2VydmFibGUodGhpcy5pZGVudGl0aWVzKClbMF0gPyB0aGlzLmlkZW50aXRpZXMoKVswXSA6IG51bGwpO1xuXG5cdFx0dGhpcy5jdXJyZW50SWRlbnRpdHkuZXh0ZW5kKHtcblx0XHRcdHRvZ2dsZVN1YnNjcmliZTogW1xuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHQoaWRlbnRpdHkpID0+IHtcblx0XHRcdFx0XHRmRW1haWxPdXRJbkhlbHBlcih0aGlzLCBpZGVudGl0eSwgJ2JjYycpO1xuXHRcdFx0XHRcdGZFbWFpbE91dEluSGVscGVyKHRoaXMsIGlkZW50aXR5LCAncmVwbHlUbycpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQoaWRlbnRpdHkpID0+IHtcblx0XHRcdFx0XHRmRW1haWxPdXRJbkhlbHBlcih0aGlzLCBpZGVudGl0eSwgJ2JjYycsIHRydWUpO1xuXHRcdFx0XHRcdGZFbWFpbE91dEluSGVscGVyKHRoaXMsIGlkZW50aXR5LCAncmVwbHlUbycsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fSk7XG5cblx0XHR0aGlzLmN1cnJlbnRJZGVudGl0eVZpZXcgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5jdXJyZW50SWRlbnRpdHkoKTtcblx0XHRcdHJldHVybiBpdGVtID8gaXRlbS5mb3JtYXR0ZWROYW1lKCkgOiAndW5rbm93bic7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnRvLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh0aGlzLmVtcHR5VG9FcnJvcigpICYmIDAgPCB2YWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5lbXB0eVRvRXJyb3IoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c0luUHJvY2Vzcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5hdHRhY2htZW50c0luUHJvY2Vzc0Vycm9yKCkgJiYgaXNBcnJheSh2YWx1ZSkgJiYgMCA9PT0gdmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuYXR0YWNobWVudHNJblByb2Nlc3NFcnJvcihmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnJlc2l6ZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogNTAgfSk7XG5cblx0XHR0aGlzLnJlc2l6ZXIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdGlmICh0aGlzLm9FZGl0b3IpIHtcblx0XHRcdFx0dGhpcy5vRWRpdG9yLnJlc2l6ZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYW5CZVNlbnRPclNhdmVkID0ga28uY29tcHV0ZWQoKCkgPT4gIXRoaXMuc2VuZGluZygpICYmICF0aGlzLnNhdmluZygpKTtcblxuXHRcdHRoaXMuc2VuZE1lc3NhZ2VSZXNwb25zZSA9IF8uYmluZCh0aGlzLnNlbmRNZXNzYWdlUmVzcG9uc2UsIHRoaXMpO1xuXHRcdHRoaXMuc2F2ZU1lc3NhZ2VSZXNwb25zZSA9IF8uYmluZCh0aGlzLnNhdmVNZXNzYWdlUmVzcG9uc2UsIHRoaXMpO1xuXG5cdFx0RXZlbnRzLnN1YignaW50ZXJ2YWwuMm0nLCAoKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRoaXMubW9kYWxWaXNpYmlsaXR5KCkgJiZcblx0XHRcdFx0IUZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyTm90RW5hYmxlZCgpICYmXG5cdFx0XHRcdFNldHRpbmdzU3RvcmUuYWxsb3dEcmFmdEF1dG9zYXZlKCkgJiZcblx0XHRcdFx0IXRoaXMuaXNFbXB0eUZvcm0oZmFsc2UpICYmXG5cdFx0XHRcdCF0aGlzLnNhdmluZygpICYmXG5cdFx0XHRcdCF0aGlzLnNlbmRpbmcoKSAmJlxuXHRcdFx0XHQhdGhpcy5zYXZlZEVycm9yKClcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLnNhdmVDb21tYW5kKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNob3dDYy5zdWJzY3JpYmUodGhpcy5yZXNpemVyVHJpZ2dlcik7XG5cdFx0dGhpcy5zaG93QmNjLnN1YnNjcmliZSh0aGlzLnJlc2l6ZXJUcmlnZ2VyKTtcblx0XHR0aGlzLnNob3dSZXBseVRvLnN1YnNjcmliZSh0aGlzLnJlc2l6ZXJUcmlnZ2VyKTtcblxuXHRcdHRoaXMuZHJvcGJveEVuYWJsZWQgPSBTb2NpYWxTdG9yZS5kcm9wYm94LmVuYWJsZWQ7XG5cdFx0dGhpcy5kcm9wYm94QXBpS2V5ID0gU29jaWFsU3RvcmUuZHJvcGJveC5hcGlLZXk7XG5cblx0XHR0aGlzLmRyaXZlRW5hYmxlZCA9IGtvLm9ic2VydmFibGUoXG5cdFx0XHRiWE1MSHR0cFJlcXVlc3RTdXBwb3J0ZWQgJiZcblx0XHRcdFx0ISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWwnKSAmJlxuXHRcdFx0XHQhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbERyaXZlJykgJiZcblx0XHRcdFx0ISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQ2xpZW50SUQnKSAmJlxuXHRcdFx0XHQhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVBcGlLZXknKVxuXHRcdCk7XG5cblx0XHR0aGlzLmRyaXZlVmlzaWJsZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5kcml2ZUNhbGxiYWNrID0gXy5iaW5kKHRoaXMuZHJpdmVDYWxsYmFjaywgdGhpcyk7XG5cblx0XHR0aGlzLm9uTWVzc2FnZVVwbG9hZEF0dGFjaG1lbnRzID0gXy5iaW5kKHRoaXMub25NZXNzYWdlVXBsb2FkQXR0YWNobWVudHMsIHRoaXMpO1xuXG5cdFx0dGhpcy5iRGlzYWJlQ2xvc2VPbkVzYyA9IHRydWU7XG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuQ29tcG9zZTtcblxuXHRcdHRoaXMudHJ5VG9DbG9zZVBvcHVwID0gXy5kZWJvdW5jZShfLmJpbmQodGhpcy50cnlUb0Nsb3NlUG9wdXAsIHRoaXMpLCBNYWdpY3MuVGltZTIwMG1zKTtcblxuXHRcdHRoaXMuZW1haWxzU291cmNlID0gXy5iaW5kKHRoaXMuZW1haWxzU291cmNlLCB0aGlzKTtcblx0XHR0aGlzLmF1dG9zYXZlRnVuY3Rpb24gPSBfLmJpbmQodGhpcy5hdXRvc2F2ZUZ1bmN0aW9uLCB0aGlzKTtcblxuXHRcdHRoaXMuaVRpbWVyID0gMDtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmNhbkJlU2VudE9yU2F2ZWQoKSlcblx0c2VuZENvbW1hbmQoKSB7XG5cdFx0Y29uc3Qgc1RvID0gdHJpbSh0aGlzLnRvKCkpLFxuXHRcdFx0c0NjID0gdHJpbSh0aGlzLmNjKCkpLFxuXHRcdFx0c0JjYyA9IHRyaW0odGhpcy5iY2MoKSk7XG5cdFx0bGV0IHNTZW50Rm9sZGVyID0gRm9sZGVyU3RvcmUuc2VudEZvbGRlcigpO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50c0luUHJvY2Vzc0Vycm9yKGZhbHNlKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5FcnJvckVycm9yKGZhbHNlKTtcblx0XHR0aGlzLmVtcHR5VG9FcnJvcihmYWxzZSk7XG5cblx0XHRpZiAoMCA8IHRoaXMuYXR0YWNobWVudHNJblByb2Nlc3MoKS5sZW5ndGgpIHtcblx0XHRcdHRoaXMuYXR0YWNobWVudHNJblByb2Nlc3NFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMuYXR0YWNobWVudHNQbGFjZSh0cnVlKTtcblx0XHR9IGVsc2UgaWYgKDAgPCB0aGlzLmF0dGFjaG1lbnRzSW5FcnJvcigpLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5hdHRhY2htZW50c0luRXJyb3JFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMuYXR0YWNobWVudHNQbGFjZSh0cnVlKTtcblx0XHR9XG5cblx0XHRpZiAoJycgPT09IHNUbyAmJiAnJyA9PT0gc0NjICYmICcnID09PSBzQmNjKSB7XG5cdFx0XHR0aGlzLmVtcHR5VG9FcnJvcih0cnVlKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuZW1wdHlUb0Vycm9yKCkgJiYgIXRoaXMuYXR0YWNobWVudHNJbkVycm9yRXJyb3IoKSAmJiAhdGhpcy5hdHRhY2htZW50c0luUHJvY2Vzc0Vycm9yKCkpIHtcblx0XHRcdGlmIChTZXR0aW5nc1N0b3JlLnJlcGx5U2FtZUZvbGRlcigpKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRpc0FycmF5KHRoaXMuYURyYWZ0SW5mbykgJiZcblx0XHRcdFx0XHQzID09PSB0aGlzLmFEcmFmdEluZm8ubGVuZ3RoICYmXG5cdFx0XHRcdFx0aXNOb3JtYWwodGhpcy5hRHJhZnRJbmZvWzJdKSAmJlxuXHRcdFx0XHRcdDAgPCB0aGlzLmFEcmFmdEluZm9bMl0ubGVuZ3RoXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHNTZW50Rm9sZGVyID0gdGhpcy5hRHJhZnRJbmZvWzJdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICghdGhpcy5hbGxvd0ZvbGRlcnMpIHtcblx0XHRcdFx0c1NlbnRGb2xkZXIgPSBVTlVTRURfT1BUSU9OX1ZBTFVFO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoJycgPT09IHNTZW50Rm9sZGVyKSB7XG5cdFx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0ZvbGRlclN5c3RlbScpLCBbU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbi5TZW50XSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNlbmRFcnJvcihmYWxzZSk7XG5cdFx0XHRcdHRoaXMuc2VuZGluZyh0cnVlKTtcblxuXHRcdFx0XHRpZiAoaXNBcnJheSh0aGlzLmFEcmFmdEluZm8pICYmIDMgPT09IHRoaXMuYURyYWZ0SW5mby5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb25zdCBmbGFnc0NhY2hlID0gZ2V0TWVzc2FnZUZsYWdzRnJvbUNhY2hlKHRoaXMuYURyYWZ0SW5mb1syXSwgdGhpcy5hRHJhZnRJbmZvWzFdKTtcblx0XHRcdFx0XHRpZiAoZmxhZ3NDYWNoZSkge1xuXHRcdFx0XHRcdFx0aWYgKCdmb3J3YXJkJyA9PT0gdGhpcy5hRHJhZnRJbmZvWzBdKSB7XG5cdFx0XHRcdFx0XHRcdGZsYWdzQ2FjaGVbM10gPSB0cnVlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZmxhZ3NDYWNoZVsyXSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHNldE1lc3NhZ2VGbGFnc1RvQ2FjaGUodGhpcy5hRHJhZnRJbmZvWzJdLCB0aGlzLmFEcmFmdEluZm9bMV0sIGZsYWdzQ2FjaGUpO1xuXHRcdFx0XHRcdFx0Z2V0QXBwKCkucmVsb2FkRmxhZ3NDdXJyZW50TWVzc2FnZUxpc3RBbmRNZXNzYWdlRnJvbUNhY2hlKCk7XG5cdFx0XHRcdFx0XHRzZXRGb2xkZXJIYXNoKHRoaXMuYURyYWZ0SW5mb1syXSwgJycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNTZW50Rm9sZGVyID0gVU5VU0VEX09QVElPTl9WQUxVRSA9PT0gc1NlbnRGb2xkZXIgPyAnJyA6IHNTZW50Rm9sZGVyO1xuXG5cdFx0XHRcdHNldEZvbGRlckhhc2godGhpcy5kcmFmdEZvbGRlcigpLCAnJyk7XG5cdFx0XHRcdHNldEZvbGRlckhhc2goc1NlbnRGb2xkZXIsICcnKTtcblxuXHRcdFx0XHRSZW1vdGUuc2VuZE1lc3NhZ2UoXG5cdFx0XHRcdFx0dGhpcy5zZW5kTWVzc2FnZVJlc3BvbnNlLFxuXHRcdFx0XHRcdHRoaXMuY3VycmVudElkZW50aXR5KCkgPyB0aGlzLmN1cnJlbnRJZGVudGl0eSgpLmlkKCkgOiAnJyxcblx0XHRcdFx0XHR0aGlzLmRyYWZ0Rm9sZGVyKCksXG5cdFx0XHRcdFx0dGhpcy5kcmFmdFVpZCgpLFxuXHRcdFx0XHRcdHNTZW50Rm9sZGVyLFxuXHRcdFx0XHRcdHNUbyxcblx0XHRcdFx0XHR0aGlzLmNjKCksXG5cdFx0XHRcdFx0dGhpcy5iY2MoKSxcblx0XHRcdFx0XHR0aGlzLnJlcGx5VG8oKSxcblx0XHRcdFx0XHR0aGlzLnN1YmplY3QoKSxcblx0XHRcdFx0XHR0aGlzLm9FZGl0b3IgPyB0aGlzLm9FZGl0b3IuaXNIdG1sKCkgOiBmYWxzZSxcblx0XHRcdFx0XHR0aGlzLm9FZGl0b3IgPyB0aGlzLm9FZGl0b3IuZ2V0RGF0YSh0cnVlKSA6ICcnLFxuXHRcdFx0XHRcdHRoaXMucHJlcGVhckF0dGFjaG1lbnRzRm9yU2VuZE9yU2F2ZSgpLFxuXHRcdFx0XHRcdHRoaXMuYURyYWZ0SW5mbyxcblx0XHRcdFx0XHR0aGlzLnNJblJlcGx5VG8sXG5cdFx0XHRcdFx0dGhpcy5zUmVmZXJlbmNlcyxcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3REc24oKSxcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RSZWFkUmVjZWlwdCgpLFxuXHRcdFx0XHRcdHRoaXMubWFya0FzSW1wb3J0YW50KClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5jYW5CZVNlbnRPclNhdmVkKCkpXG5cdHNhdmVDb21tYW5kKCkge1xuXHRcdGlmICghdGhpcy5hbGxvd0ZvbGRlcnMpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoRm9sZGVyU3RvcmUuZHJhZnRGb2xkZXJOb3RFbmFibGVkKCkpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0ZvbGRlclN5c3RlbScpLCBbU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbi5EcmFmdF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNhdmVkRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5zYXZpbmcodHJ1ZSk7XG5cblx0XHRcdHRoaXMuYXV0b3NhdmVTdGFydCgpO1xuXG5cdFx0XHRzZXRGb2xkZXJIYXNoKEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKCksICcnKTtcblxuXHRcdFx0UmVtb3RlLnNhdmVNZXNzYWdlKFxuXHRcdFx0XHR0aGlzLnNhdmVNZXNzYWdlUmVzcG9uc2UsXG5cdFx0XHRcdHRoaXMuY3VycmVudElkZW50aXR5KCkgPyB0aGlzLmN1cnJlbnRJZGVudGl0eSgpLmlkKCkgOiAnJyxcblx0XHRcdFx0dGhpcy5kcmFmdEZvbGRlcigpLFxuXHRcdFx0XHR0aGlzLmRyYWZ0VWlkKCksXG5cdFx0XHRcdEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKCksXG5cdFx0XHRcdHRoaXMudG8oKSxcblx0XHRcdFx0dGhpcy5jYygpLFxuXHRcdFx0XHR0aGlzLmJjYygpLFxuXHRcdFx0XHR0aGlzLnJlcGx5VG8oKSxcblx0XHRcdFx0dGhpcy5zdWJqZWN0KCksXG5cdFx0XHRcdHRoaXMub0VkaXRvciA/IHRoaXMub0VkaXRvci5pc0h0bWwoKSA6IGZhbHNlLFxuXHRcdFx0XHR0aGlzLm9FZGl0b3IgPyB0aGlzLm9FZGl0b3IuZ2V0RGF0YSh0cnVlKSA6ICcnLFxuXHRcdFx0XHR0aGlzLnByZXBlYXJBdHRhY2htZW50c0ZvclNlbmRPclNhdmUoKSxcblx0XHRcdFx0dGhpcy5hRHJhZnRJbmZvLFxuXHRcdFx0XHR0aGlzLnNJblJlcGx5VG8sXG5cdFx0XHRcdHRoaXMuc1JlZmVyZW5jZXMsXG5cdFx0XHRcdHRoaXMubWFya0FzSW1wb3J0YW50KClcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5pc0RyYWZ0Rm9sZGVyTWVzc2FnZSgpKVxuXHRkZWxldGVDb21tYW5kKCkge1xuXHRcdGNvbnN0IFBvcHVwc0Fza1ZpZXdNb2RlbCA9IHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQXNrJyk7XG5cdFx0aWYgKCFpc1BvcHVwVmlzaWJsZShQb3B1cHNBc2tWaWV3TW9kZWwpICYmIHRoaXMubW9kYWxWaXNpYmlsaXR5KCkpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChQb3B1cHNBc2tWaWV3TW9kZWwsIFtcblx0XHRcdFx0aTE4bignUE9QVVBTX0FTSy9ERVNDX1dBTlRfREVMRVRFX01FU1NBR0VTJyksXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRcdFx0Z2V0QXBwKCkuZGVsZXRlTWVzc2FnZXNGcm9tRm9sZGVyV2l0aG91dENoZWNrKHRoaXMuZHJhZnRGb2xkZXIoKSwgW3RoaXMuZHJhZnRVaWQoKV0pO1xuXHRcdFx0XHRcdFx0aGlkZVNjcmVlblBvcHVwKENvbXBvc2VQb3B1cFZpZXcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XSk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuY2FuQmVTZW50T3JTYXZlZCgpKVxuXHRza2lwQ29tbWFuZCgpIHtcblx0XHR0aGlzLmJTa2lwTmV4dEhpZGUgPSB0cnVlO1xuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5tb2RhbFZpc2liaWxpdHkoKSAmJlxuXHRcdFx0IXRoaXMuc2F2aW5nKCkgJiZcblx0XHRcdCF0aGlzLnNlbmRpbmcoKSAmJlxuXHRcdFx0IUZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyTm90RW5hYmxlZCgpICYmXG5cdFx0XHRTZXR0aW5nc1N0b3JlLmFsbG93RHJhZnRBdXRvc2F2ZSgpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnNhdmVDb21tYW5kKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy50cnlUb0Nsb3NlUG9wdXAoKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmFsbG93Q29udGFjdHMpXG5cdGNvbnRhY3RzQ29tbWFuZCgpIHtcblx0XHRpZiAodGhpcy5hbGxvd0NvbnRhY3RzKSB7XG5cdFx0XHR0aGlzLnNraXBDb21tYW5kKCk7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29udGFjdHMnKSwgW3RydWUsIHRoaXMuc0xhc3RGb2N1c2VkRmllbGRdKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMjAwbXMpO1xuXHRcdH1cblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmRyb3Bib3hFbmFibGVkKCkpXG5cdGRyb3Bib3hDb21tYW5kKCkge1xuXHRcdGlmICh3aW5kb3cuRHJvcGJveCkge1xuXHRcdFx0d2luZG93LkRyb3Bib3guY2hvb3NlKHtcblx0XHRcdFx0c3VjY2VzczogKGZpbGVzKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGZpbGVzICYmIGZpbGVzWzBdICYmIGZpbGVzWzBdLmxpbmspIHtcblx0XHRcdFx0XHRcdHRoaXMuYWRkRHJvcGJveEF0dGFjaG1lbnQoZmlsZXNbMF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0bGlua1R5cGU6ICdkaXJlY3QnLFxuXHRcdFx0XHRtdWx0aXNlbGVjdDogZmFsc2Vcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmRyaXZlRW5hYmxlZCgpKVxuXHRkcml2ZUNvbW1hbmQoKSB7XG5cdFx0dGhpcy5kcml2ZU9wZW5Qb3B1cCgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0YXV0b3NhdmVGdW5jdGlvbigpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzLm1vZGFsVmlzaWJpbGl0eSgpICYmXG5cdFx0XHQhRm9sZGVyU3RvcmUuZHJhZnRGb2xkZXJOb3RFbmFibGVkKCkgJiZcblx0XHRcdFNldHRpbmdzU3RvcmUuYWxsb3dEcmFmdEF1dG9zYXZlKCkgJiZcblx0XHRcdCF0aGlzLmlzRW1wdHlGb3JtKGZhbHNlKSAmJlxuXHRcdFx0IXRoaXMuc2F2aW5nKCkgJiZcblx0XHRcdCF0aGlzLnNlbmRpbmcoKSAmJlxuXHRcdFx0IXRoaXMuc2F2ZWRFcnJvcigpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnNhdmVDb21tYW5kKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5hdXRvc2F2ZVN0YXJ0KCk7XG5cdH1cblxuXHRhdXRvc2F2ZVN0YXJ0KCkge1xuXHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5pVGltZXIpO1xuXHRcdHRoaXMuaVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQodGhpcy5hdXRvc2F2ZUZ1bmN0aW9uLCBNYWdpY3MuVGltZTFtKTtcblx0fVxuXG5cdGF1dG9zYXZlU3RvcCgpIHtcblx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuaVRpbWVyKTtcblx0fVxuXG5cdGVtYWlsc1NvdXJjZShvRGF0YSwgZlJlc3BvbnNlKSB7XG5cdFx0Z2V0QXBwKCkuZ2V0QXV0b2NvbXBsZXRlKG9EYXRhLnRlcm0sIChhRGF0YSkgPT4ge1xuXHRcdFx0ZlJlc3BvbnNlKF8ubWFwKGFEYXRhLCAob0VtYWlsSXRlbSkgPT4gb0VtYWlsSXRlbS50b0xpbmUoZmFsc2UpKSk7XG5cdFx0fSk7XG5cdH1cblxuXHRvcGVuT3BlblBncFBvcHVwKCkge1xuXHRcdGlmIChQZ3BTdG9yZS5jYXBhT3BlblBHUCgpICYmIHRoaXMub0VkaXRvciAmJiAhdGhpcy5vRWRpdG9yLmlzSHRtbCgpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlT3BlblBncCcpLCBbXG5cdFx0XHRcdChyZXN1bHQpID0+IHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvcigoZWRpdG9yKSA9PiB7XG5cdFx0XHRcdFx0XHRlZGl0b3Iuc2V0UGxhaW4ocmVzdWx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5vRWRpdG9yLmdldERhdGEoZmFsc2UpLFxuXHRcdFx0XHR0aGlzLmN1cnJlbnRJZGVudGl0eSgpLFxuXHRcdFx0XHR0aGlzLnRvKCksXG5cdFx0XHRcdHRoaXMuY2MoKSxcblx0XHRcdFx0dGhpcy5iY2MoKVxuXHRcdFx0XSk7XG5cdFx0fVxuXHR9XG5cblx0cmVsb2FkRHJhZnRGb2xkZXIoKSB7XG5cdFx0Y29uc3QgZHJhZnRGb2xkZXIgPSBGb2xkZXJTdG9yZS5kcmFmdEZvbGRlcigpO1xuXHRcdGlmICgnJyAhPT0gZHJhZnRGb2xkZXIgJiYgVU5VU0VEX09QVElPTl9WQUxVRSAhPT0gZHJhZnRGb2xkZXIpIHtcblx0XHRcdHNldEZvbGRlckhhc2goZHJhZnRGb2xkZXIsICcnKTtcblx0XHRcdGlmIChGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSA9PT0gZHJhZnRGb2xkZXIpIHtcblx0XHRcdFx0Z2V0QXBwKCkucmVsb2FkTWVzc2FnZUxpc3QodHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnZXRBcHAoKS5mb2xkZXJJbmZvcm1hdGlvbihkcmFmdEZvbGRlcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmluZElkZW50aXR5QnlNZXNzYWdlKGNvbXBvc2VUeXBlLCBtZXNzYWdlKSB7XG5cdFx0bGV0IHJlc3VsdEluZGV4ID0gMTAwMCxcblx0XHRcdHJlc3VsdElkZW50aXR5ID0gbnVsbDtcblx0XHRjb25zdCBpZGVudGl0aWVzID0gSWRlbnRpdHlTdG9yZS5pZGVudGl0aWVzKCksXG5cdFx0XHRpZGVudGl0aWVzQ2FjaGUgPSB7fSxcblx0XHRcdGZFYWNoSGVscGVyID0gKGl0ZW0pID0+IHtcblx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5lbWFpbCAmJiBpZGVudGl0aWVzQ2FjaGVbaXRlbS5lbWFpbF0pIHtcblx0XHRcdFx0XHRpZiAoIXJlc3VsdElkZW50aXR5IHx8IHJlc3VsdEluZGV4ID4gaWRlbnRpdGllc0NhY2hlW2l0ZW0uZW1haWxdWzFdKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHRJZGVudGl0eSA9IGlkZW50aXRpZXNDYWNoZVtpdGVtLmVtYWlsXVswXTtcblx0XHRcdFx0XHRcdHJlc3VsdEluZGV4ID0gaWRlbnRpdGllc0NhY2hlW2l0ZW0uZW1haWxdWzFdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdF8uZWFjaChpZGVudGl0aWVzLCAoaXRlbSwgaW5kZXgpID0+IHtcblx0XHRcdGlkZW50aXRpZXNDYWNoZVtpdGVtLmVtYWlsKCldID0gW2l0ZW0sIGluZGV4XTtcblx0XHR9KTtcblxuXHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRzd2l0Y2ggKGNvbXBvc2VUeXBlKSB7XG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRW1wdHk6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuUmVwbHk6XG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuUmVwbHlBbGw6XG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRm9yd2FyZDpcblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5Gb3J3YXJkQXNBdHRhY2htZW50OlxuXHRcdFx0XHRcdF8uZWFjaChfLnVuaW9uKG1lc3NhZ2UudG8sIG1lc3NhZ2UuY2MsIG1lc3NhZ2UuYmNjKSwgZkVhY2hIZWxwZXIpO1xuXHRcdFx0XHRcdGlmICghcmVzdWx0SWRlbnRpdHkpIHtcblx0XHRcdFx0XHRcdF8uZWFjaChtZXNzYWdlLmRlbGl2ZXJlZFRvLCBmRWFjaEhlbHBlcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLkRyYWZ0OlxuXHRcdFx0XHRcdF8uZWFjaChfLnVuaW9uKG1lc3NhZ2UuZnJvbSwgbWVzc2FnZS5yZXBseVRvKSwgZkVhY2hIZWxwZXIpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdElkZW50aXR5IHx8IGlkZW50aXRpZXNbMF0gfHwgbnVsbDtcblx0fVxuXG5cdHNlbGVjdElkZW50aXR5KGlkZW50aXR5KSB7XG5cdFx0aWYgKGlkZW50aXR5ICYmIGlkZW50aXR5Lml0ZW0pIHtcblx0XHRcdHRoaXMuY3VycmVudElkZW50aXR5KGlkZW50aXR5Lml0ZW0pO1xuXHRcdFx0dGhpcy5zZXRTaWduYXR1cmVGcm9tSWRlbnRpdHkoaWRlbnRpdHkuaXRlbSk7XG5cdFx0fVxuXHR9XG5cblx0c2VuZE1lc3NhZ2VSZXNwb25zZShzdGF0dXNSZXN1bHQsIGRhdGEpIHtcblx0XHRsZXQgcmVzdWx0ID0gZmFsc2UsXG5cdFx0XHRtZXNzYWdlID0gJyc7XG5cblx0XHR0aGlzLnNlbmRpbmcoZmFsc2UpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHN0YXR1c1Jlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRyZXN1bHQgPSB0cnVlO1xuXHRcdFx0aWYgKHRoaXMubW9kYWxWaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2Nsb3NlQ29tbWFuZCcpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSgpICYmICFyZXN1bHQpIHtcblx0XHRcdGlmIChkYXRhICYmIE5vdGlmaWNhdGlvbi5DYW50U2F2ZU1lc3NhZ2UgPT09IGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2VuZFN1Y2Nlc3NCdXRTYXZlRXJyb3IodHJ1ZSk7XG5cdFx0XHRcdHRoaXMuc2F2ZWRFcnJvckRlc2ModHJpbShpMThuKCdDT01QT1NFL1NBVkVEX0VSUk9SX09OX1NFTkQnKSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWVzc2FnZSA9IGdldE5vdGlmaWNhdGlvbihcblx0XHRcdFx0XHRkYXRhICYmIGRhdGEuRXJyb3JDb2RlID8gZGF0YS5FcnJvckNvZGUgOiBOb3RpZmljYXRpb24uQ2FudFNlbmRNZXNzYWdlLFxuXHRcdFx0XHRcdGRhdGEgJiYgZGF0YS5FcnJvck1lc3NhZ2UgPyBkYXRhLkVycm9yTWVzc2FnZSA6ICcnXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0dGhpcy5zZW5kRXJyb3IodHJ1ZSk7XG5cdFx0XHRcdHRoaXMuc2VuZEVycm9yRGVzYyhtZXNzYWdlIHx8IGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uQ2FudFNlbmRNZXNzYWdlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5yZWxvYWREcmFmdEZvbGRlcigpO1xuXHR9XG5cblx0c2F2ZU1lc3NhZ2VSZXNwb25zZShzdGF0dXNSZXN1bHQsIG9EYXRhKSB7XG5cdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHN0YXR1c1Jlc3VsdCAmJiBvRGF0YSAmJiBvRGF0YS5SZXN1bHQpIHtcblx0XHRcdGlmIChvRGF0YS5SZXN1bHQuTmV3Rm9sZGVyICYmIG9EYXRhLlJlc3VsdC5OZXdVaWQpIHtcblx0XHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAodGhpcy5iRnJvbURyYWZ0KSB7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCk7XG5cdFx0XHRcdFx0aWYgKG1lc3NhZ2UgJiYgdGhpcy5kcmFmdEZvbGRlcigpID09PSBtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3ICYmIHRoaXMuZHJhZnRVaWQoKSA9PT0gbWVzc2FnZS51aWQpIHtcblx0XHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlKG51bGwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZHJhZnRGb2xkZXIob0RhdGEuUmVzdWx0Lk5ld0ZvbGRlcik7XG5cdFx0XHRcdHRoaXMuZHJhZnRVaWQob0RhdGEuUmVzdWx0Lk5ld1VpZCk7XG5cblx0XHRcdFx0dGhpcy5zYXZlZFRpbWUod2luZG93Lk1hdGgucm91bmQobmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmJGcm9tRHJhZnQpIHtcblx0XHRcdFx0XHRzZXRGb2xkZXJIYXNoKHRoaXMuZHJhZnRGb2xkZXIoKSwgJycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFyZXN1bHQpIHtcblx0XHRcdHRoaXMuc2F2ZWRFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMuc2F2ZWRFcnJvckRlc2MoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5DYW50U2F2ZU1lc3NhZ2UpKTtcblx0XHR9XG5cblx0XHR0aGlzLnJlbG9hZERyYWZ0Rm9sZGVyKCk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0dGhpcy5hdXRvc2F2ZVN0b3AoKTtcblxuXHRcdGlmICghdGhpcy5iU2tpcE5leHRIaWRlKSB7XG5cdFx0XHRBcHBTdG9yZS5jb21wb3NlSW5FZGl0KGZhbHNlKTtcblx0XHRcdHRoaXMucmVzZXQoKTtcblx0XHR9XG5cblx0XHR0aGlzLmJTa2lwTmV4dEhpZGUgPSBmYWxzZTtcblxuXHRcdHRoaXMudG8uZm9jdXNlZChmYWxzZSk7XG5cblx0XHRyb3V0ZU9uKCk7XG5cdH1cblxuXHRlZGl0b3IoZk9uSW5pdCkge1xuXHRcdGlmIChmT25Jbml0KSB7XG5cdFx0XHRpZiAoIXRoaXMub0VkaXRvciAmJiB0aGlzLmNvbXBvc2VFZGl0b3JBcmVhKCkpIHtcblx0XHRcdFx0Ly8gXy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMub0VkaXRvciA9IG5ldyBIdG1sRWRpdG9yKFxuXHRcdFx0XHRcdHRoaXMuY29tcG9zZUVkaXRvckFyZWEoKSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGZPbkluaXQodGhpcy5vRWRpdG9yKTtcblx0XHRcdFx0XHRcdHRoaXMucmVzaXplclRyaWdnZXIoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdChiSHRtbCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5pc0h0bWwoISFiSHRtbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyB9LCAxMDAwKTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5vRWRpdG9yKSB7XG5cdFx0XHRcdGZPbkluaXQodGhpcy5vRWRpdG9yKTtcblx0XHRcdFx0dGhpcy5yZXNpemVyVHJpZ2dlcigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbnZlclNpZ25hdHVyZShzaWduYXR1cmUpIHtcblx0XHRsZXQgbGltaXQgPSAxMCxcblx0XHRcdGZyb21MaW5lID0gJyc7XG5cblx0XHRjb25zdCBtb21lbnRzID0gW10sXG5cdFx0XHRtb21lbnRSZWd4ID0gL3t7TU9NRU5UOihbXn1dKyl9fS9nO1xuXG5cdFx0c2lnbmF0dXJlID0gc2lnbmF0dXJlLnJlcGxhY2UoL1tcXHJdL2csICcnKTtcblxuXHRcdGZyb21MaW5lID0gdGhpcy5vTGFzdE1lc3NhZ2UgPyB0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIodGhpcy5vTGFzdE1lc3NhZ2UuZnJvbSwgdHJ1ZSkgOiAnJztcblx0XHRpZiAoJycgIT09IGZyb21MaW5lKSB7XG5cdFx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUucmVwbGFjZSgve3tGUk9NLUZVTEx9fS9nLCBmcm9tTGluZSk7XG5cblx0XHRcdGlmICgtMSA9PT0gZnJvbUxpbmUuaW5kZXhPZignICcpICYmIDAgPCBmcm9tTGluZS5pbmRleE9mKCdAJykpIHtcblx0XHRcdFx0ZnJvbUxpbmUgPSBmcm9tTGluZS5yZXBsYWNlKC9AW1xcU10rLywgJycpO1xuXHRcdFx0fVxuXG5cdFx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUucmVwbGFjZSgve3tGUk9NfX0vZywgZnJvbUxpbmUpO1xuXHRcdH1cblxuXHRcdHNpZ25hdHVyZSA9IHNpZ25hdHVyZS5yZXBsYWNlKC9bXFxzXXsxLDJ9e3tGUk9NfX0vZywgJ3t7RlJPTX19Jyk7XG5cdFx0c2lnbmF0dXJlID0gc2lnbmF0dXJlLnJlcGxhY2UoL1tcXHNdezEsMn17e0ZST00tRlVMTH19L2csICd7e0ZST00tRlVMTH19Jyk7XG5cblx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUucmVwbGFjZSgve3tGUk9NfX0vZywgJycpO1xuXHRcdHNpZ25hdHVyZSA9IHNpZ25hdHVyZS5yZXBsYWNlKC97e0ZST00tRlVMTH19L2csICcnKTtcblxuXHRcdGlmICgtMSA8IHNpZ25hdHVyZS5pbmRleE9mKCd7e0RBVEV9fScpKSB7XG5cdFx0XHRzaWduYXR1cmUgPSBzaWduYXR1cmUucmVwbGFjZSgve3tEQVRFfX0vZywgbW9tZW50b3JGb3JtYXQoMCwgJ2xsbGwnKSk7XG5cdFx0fVxuXG5cdFx0aWYgKC0xIDwgc2lnbmF0dXJlLmluZGV4T2YoJ3t7VElNRX19JykpIHtcblx0XHRcdHNpZ25hdHVyZSA9IHNpZ25hdHVyZS5yZXBsYWNlKC97e1RJTUV9fS9nLCBtb21lbnRvckZvcm1hdCgwLCAnTFQnKSk7XG5cdFx0fVxuXHRcdGlmICgtMSA8IHNpZ25hdHVyZS5pbmRleE9mKCd7e01PTUVOVDonKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bGV0IG1hdGNoID0gbnVsbDtcblx0XHRcdFx0d2hpbGUgKG51bGwgIT09IChtYXRjaCA9IG1vbWVudFJlZ3guZXhlYyhzaWduYXR1cmUpKSkge1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uZC1hc3NpZ25cblx0XHRcdFx0XHRpZiAobWF0Y2ggJiYgbWF0Y2hbMF0gJiYgbWF0Y2hbMV0pIHtcblx0XHRcdFx0XHRcdG1vbWVudHMucHVzaChbbWF0Y2hbMF0sIG1hdGNoWzFdXSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bGltaXQgLT0gMTtcblx0XHRcdFx0XHRpZiAoMCA9PT0gbGltaXQpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChtb21lbnRzICYmIDAgPCBtb21lbnRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdF8uZWFjaChtb21lbnRzLCAoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0c2lnbmF0dXJlID0gc2lnbmF0dXJlLnJlcGxhY2UoZGF0YVswXSwgbW9tZW50b3JGb3JtYXQoMCwgZGF0YVsxXSkpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2lnbmF0dXJlID0gc2lnbmF0dXJlLnJlcGxhY2UoL3t7TU9NRU5UOltefV0rfX0vZywgJycpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblxuXHRcdHJldHVybiBzaWduYXR1cmU7XG5cdH1cblxuXHRzZXRTaWduYXR1cmVGcm9tSWRlbnRpdHkoaWRlbnRpdHkpIHtcblx0XHRpZiAoaWRlbnRpdHkpIHtcblx0XHRcdHRoaXMuZWRpdG9yKChlZGl0b3IpID0+IHtcblx0XHRcdFx0bGV0IGlzSHRtbCA9IGZhbHNlLFxuXHRcdFx0XHRcdHNpZ25hdHVyZSA9IGlkZW50aXR5LnNpZ25hdHVyZSgpO1xuXG5cdFx0XHRcdGlmICgnJyAhPT0gc2lnbmF0dXJlKSB7XG5cdFx0XHRcdFx0aWYgKCc6SFRNTDonID09PSBzaWduYXR1cmUuc3Vic3RyKDAsIDYpKSB7XG5cdFx0XHRcdFx0XHRpc0h0bWwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0c2lnbmF0dXJlID0gc2lnbmF0dXJlLnN1YnN0cig2KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRlZGl0b3Iuc2V0U2lnbmF0dXJlKHRoaXMuY29udmVyU2lnbmF0dXJlKHNpZ25hdHVyZSksIGlzSHRtbCwgISFpZGVudGl0eS5zaWduYXR1cmVJbnNlcnRCZWZvcmUoKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmc9fSB0eXBlID0gQ29tcG9zZVR5cGUuRW1wdHlcblx0ICogQHBhcmFtIHs/TWVzc2FnZU1vZGVsfEFycmF5PX0gb01lc3NhZ2VPckFycmF5ID0gbnVsbFxuXHQgKiBAcGFyYW0ge0FycmF5PX0gYVRvRW1haWxzID0gbnVsbFxuXHQgKiBAcGFyYW0ge0FycmF5PX0gYUNjRW1haWxzID0gbnVsbFxuXHQgKiBAcGFyYW0ge0FycmF5PX0gYUJjY0VtYWlscyA9IG51bGxcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzQ3VzdG9tU3ViamVjdCA9IG51bGxcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzQ3VzdG9tUGxhaW5UZXh0ID0gbnVsbFxuXHQgKi9cblx0b25TaG93KHR5cGUsIG9NZXNzYWdlT3JBcnJheSwgYVRvRW1haWxzLCBhQ2NFbWFpbHMsIGFCY2NFbWFpbHMsIHNDdXN0b21TdWJqZWN0LCBzQ3VzdG9tUGxhaW5UZXh0KSB7XG5cdFx0cm91dGVPZmYoKTtcblxuXHRcdHRoaXMuYXV0b3NhdmVTdGFydCgpO1xuXG5cdFx0aWYgKEFwcFN0b3JlLmNvbXBvc2VJbkVkaXQoKSkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgQ29tcG9zZVR5cGUuRW1wdHk7XG5cdFx0XHRpZiAoQ29tcG9zZVR5cGUuRW1wdHkgIT09IHR5cGUpIHtcblx0XHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQXNrJyksIFtcblx0XHRcdFx0XHRpMThuKCdDT01QT1NFL0RJU0NBUkRfVU5TQVZFRF9EQVRBJyksXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5pbml0T25TaG93KHR5cGUsIG9NZXNzYWdlT3JBcnJheSwgYVRvRW1haWxzLCBhQ2NFbWFpbHMsIGFCY2NFbWFpbHMsIHNDdXN0b21TdWJqZWN0LCBzQ3VzdG9tUGxhaW5UZXh0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdF0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5hZGRFbWFpbHNUbyh0aGlzLnRvLCBhVG9FbWFpbHMpO1xuXHRcdFx0XHR0aGlzLmFkZEVtYWlsc1RvKHRoaXMuY2MsIGFDY0VtYWlscyk7XG5cdFx0XHRcdHRoaXMuYWRkRW1haWxzVG8odGhpcy5iY2MsIGFCY2NFbWFpbHMpO1xuXG5cdFx0XHRcdGlmIChpc05vcm1hbChzQ3VzdG9tU3ViamVjdCkgJiYgJycgIT09IHNDdXN0b21TdWJqZWN0ICYmICcnID09PSB0aGlzLnN1YmplY3QoKSkge1xuXHRcdFx0XHRcdHRoaXMuc3ViamVjdChzQ3VzdG9tU3ViamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5pbml0T25TaG93KHR5cGUsIG9NZXNzYWdlT3JBcnJheSwgYVRvRW1haWxzLCBhQ2NFbWFpbHMsIGFCY2NFbWFpbHMsIHNDdXN0b21TdWJqZWN0LCBzQ3VzdG9tUGxhaW5UZXh0KTtcblx0XHR9XG5cdH1cblxuXHRvbldhcm1VcCgpIHtcblx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkgJiYgIXRoaXMubW9kYWxWaXNpYmlsaXR5KCkpIHtcblx0XHRcdHRoaXMuZWRpdG9yKChlZGl0b3IpID0+IGVkaXRvci5tb2RlVG9nZ2xlKGZhbHNlKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZLb1ZhbHVlXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGVtYWlsc1xuXHQgKi9cblx0YWRkRW1haWxzVG8oZktvVmFsdWUsIGVtYWlscykge1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkoZW1haWxzKSkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0cmltKGZLb1ZhbHVlKCkpLFxuXHRcdFx0XHR2YWx1ZXMgPSBfLnVuaXEoXy5jb21wYWN0KF8ubWFwKGVtYWlscywgKGl0ZW0pID0+IChpdGVtID8gaXRlbS50b0xpbmUoZmFsc2UpIDogbnVsbCkpKSk7XG5cblx0XHRcdGZLb1ZhbHVlKHZhbHVlICsgKCcnID09PSB2YWx1ZSA/ICcnIDogJywgJykgKyB0cmltKHZhbHVlcy5qb2luKCcsICcpKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFMaXN0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkZyaWVuZGx5XG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRlbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKGFMaXN0LCBiRnJpZW5kbHkpIHtcblx0XHRiRnJpZW5kbHkgPSAhIWJGcmllbmRseTtcblx0XHRyZXR1cm4gXy5tYXAoYUxpc3QsIChpdGVtKSA9PiBpdGVtLnRvTGluZShiRnJpZW5kbHkpKS5qb2luKCcsICcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc1R5cGUgPSBDb21wb3NlVHlwZS5FbXB0eVxuXHQgKiBAcGFyYW0gez9NZXNzYWdlTW9kZWx8QXJyYXk9fSBvTWVzc2FnZU9yQXJyYXkgPSBudWxsXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhVG9FbWFpbHMgPSBudWxsXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQ2NFbWFpbHMgPSBudWxsXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQmNjRW1haWxzID0gbnVsbFxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNDdXN0b21TdWJqZWN0ID0gbnVsbFxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNDdXN0b21QbGFpblRleHQgPSBudWxsXG5cdCAqL1xuXHRpbml0T25TaG93KHNUeXBlLCBvTWVzc2FnZU9yQXJyYXksIGFUb0VtYWlscywgYUNjRW1haWxzLCBhQmNjRW1haWxzLCBzQ3VzdG9tU3ViamVjdCwgc0N1c3RvbVBsYWluVGV4dCkge1xuXHRcdEFwcFN0b3JlLmNvbXBvc2VJbkVkaXQodHJ1ZSk7XG5cblx0XHRsZXQgc0Zyb20gPSAnJyxcblx0XHRcdHNUbyA9ICcnLFxuXHRcdFx0c0NjID0gJycsXG5cdFx0XHRzRGF0ZSA9ICcnLFxuXHRcdFx0c1N1YmplY3QgPSAnJyxcblx0XHRcdHNUZXh0ID0gJycsXG5cdFx0XHRzUmVwbHlUaXRsZSA9ICcnLFxuXHRcdFx0aWRlbnRpdHkgPSBudWxsLFxuXHRcdFx0YURyYWZ0SW5mbyA9IG51bGwsXG5cdFx0XHRtZXNzYWdlID0gbnVsbDtcblxuXHRcdGNvbnN0IGV4Y2x1ZGVFbWFpbCA9IHt9LFxuXHRcdFx0bUVtYWlsID0gQWNjb3VudFN0b3JlLmVtYWlsKCksXG5cdFx0XHRsaW5lQ29tcG9zZVR5cGUgPSBzVHlwZSB8fCBDb21wb3NlVHlwZS5FbXB0eTtcblxuXHRcdG9NZXNzYWdlT3JBcnJheSA9IG9NZXNzYWdlT3JBcnJheSB8fCBudWxsO1xuXHRcdGlmIChvTWVzc2FnZU9yQXJyYXkgJiYgaXNOb3JtYWwob01lc3NhZ2VPckFycmF5KSkge1xuXHRcdFx0bWVzc2FnZSA9XG5cdFx0XHRcdGlzQXJyYXkob01lc3NhZ2VPckFycmF5KSAmJiAxID09PSBvTWVzc2FnZU9yQXJyYXkubGVuZ3RoXG5cdFx0XHRcdFx0PyBvTWVzc2FnZU9yQXJyYXlbMF1cblx0XHRcdFx0XHQ6ICFpc0FycmF5KG9NZXNzYWdlT3JBcnJheSlcblx0XHRcdFx0XHQ/IG9NZXNzYWdlT3JBcnJheVxuXHRcdFx0XHRcdDogbnVsbDtcblx0XHR9XG5cblx0XHR0aGlzLm9MYXN0TWVzc2FnZSA9IG1lc3NhZ2U7XG5cblx0XHRpZiAobnVsbCAhPT0gbUVtYWlsKSB7XG5cdFx0XHRleGNsdWRlRW1haWxbbUVtYWlsXSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZXNldCgpO1xuXG5cdFx0aWRlbnRpdHkgPSB0aGlzLmZpbmRJZGVudGl0eUJ5TWVzc2FnZShsaW5lQ29tcG9zZVR5cGUsIG1lc3NhZ2UpO1xuXHRcdGlmIChpZGVudGl0eSkge1xuXHRcdFx0ZXhjbHVkZUVtYWlsW2lkZW50aXR5LmVtYWlsKCldID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGFUb0VtYWlscykpIHtcblx0XHRcdHRoaXMudG8odGhpcy5lbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKGFUb0VtYWlscykpO1xuXHRcdH1cblxuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkoYUNjRW1haWxzKSkge1xuXHRcdFx0dGhpcy5jYyh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIoYUNjRW1haWxzKSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShhQmNjRW1haWxzKSkge1xuXHRcdFx0dGhpcy5iY2ModGhpcy5lbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKGFCY2NFbWFpbHMpKTtcblx0XHR9XG5cblx0XHRpZiAoJycgIT09IGxpbmVDb21wb3NlVHlwZSAmJiBtZXNzYWdlKSB7XG5cdFx0XHRzRGF0ZSA9IG1vbWVudG9yRm9ybWF0KG1lc3NhZ2UuZGF0ZVRpbWVTdGFtcEluVVRDKCksICdGVUxMJyk7XG5cdFx0XHRzU3ViamVjdCA9IG1lc3NhZ2Uuc3ViamVjdCgpO1xuXHRcdFx0YURyYWZ0SW5mbyA9IG1lc3NhZ2UuYURyYWZ0SW5mbztcblxuXHRcdFx0Y29uc3QgY2xvbmVkVGV4dCA9ICQobWVzc2FnZS5ib2R5KS5jbG9uZSgpO1xuXHRcdFx0aWYgKGNsb25lZFRleHQpIHtcblx0XHRcdFx0Y2xlYXJCcVN3aXRjaGVyKGNsb25lZFRleHQpO1xuXG5cdFx0XHRcdHNUZXh0ID0gY2xvbmVkVGV4dC5odG1sKCk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCByZXNwbHlBbGxQYXJ0cyA9IG51bGw7XG5cdFx0XHRzd2l0Y2ggKGxpbmVDb21wb3NlVHlwZSkge1xuXHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLkVtcHR5OlxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuUmVwbHk6XG5cdFx0XHRcdFx0dGhpcy50byh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIobWVzc2FnZS5yZXBseUVtYWlscyhleGNsdWRlRW1haWwpKSk7XG5cdFx0XHRcdFx0dGhpcy5zdWJqZWN0KHJlcGx5U3ViamVjdEFkZCgnUmUnLCBzU3ViamVjdCkpO1xuXHRcdFx0XHRcdHRoaXMucHJlcGVhck1lc3NhZ2VBdHRhY2htZW50cyhtZXNzYWdlLCBsaW5lQ29tcG9zZVR5cGUpO1xuXHRcdFx0XHRcdHRoaXMuYURyYWZ0SW5mbyA9IFsncmVwbHknLCBtZXNzYWdlLnVpZCwgbWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhd107XG5cdFx0XHRcdFx0dGhpcy5zSW5SZXBseVRvID0gbWVzc2FnZS5zTWVzc2FnZUlkO1xuXHRcdFx0XHRcdHRoaXMuc1JlZmVyZW5jZXMgPSB0cmltKHRoaXMuc0luUmVwbHlUbyArICcgJyArIG1lc3NhZ2Uuc1JlZmVyZW5jZXMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuUmVwbHlBbGw6XG5cdFx0XHRcdFx0cmVzcGx5QWxsUGFydHMgPSBtZXNzYWdlLnJlcGx5QWxsRW1haWxzKGV4Y2x1ZGVFbWFpbCk7XG5cdFx0XHRcdFx0dGhpcy50byh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIocmVzcGx5QWxsUGFydHNbMF0pKTtcblx0XHRcdFx0XHR0aGlzLmNjKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihyZXNwbHlBbGxQYXJ0c1sxXSkpO1xuXHRcdFx0XHRcdHRoaXMuc3ViamVjdChyZXBseVN1YmplY3RBZGQoJ1JlJywgc1N1YmplY3QpKTtcblx0XHRcdFx0XHR0aGlzLnByZXBlYXJNZXNzYWdlQXR0YWNobWVudHMobWVzc2FnZSwgbGluZUNvbXBvc2VUeXBlKTtcblx0XHRcdFx0XHR0aGlzLmFEcmFmdEluZm8gPSBbJ3JlcGx5JywgbWVzc2FnZS51aWQsIG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXddO1xuXHRcdFx0XHRcdHRoaXMuc0luUmVwbHlUbyA9IG1lc3NhZ2Uuc01lc3NhZ2VJZDtcblx0XHRcdFx0XHR0aGlzLnNSZWZlcmVuY2VzID0gdHJpbSh0aGlzLnNJblJlcGx5VG8gKyAnICcgKyBtZXNzYWdlLnJlZmVyZW5jZXMoKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5Gb3J3YXJkOlxuXHRcdFx0XHRcdHRoaXMuc3ViamVjdChyZXBseVN1YmplY3RBZGQoJ0Z3ZCcsIHNTdWJqZWN0KSk7XG5cdFx0XHRcdFx0dGhpcy5wcmVwZWFyTWVzc2FnZUF0dGFjaG1lbnRzKG1lc3NhZ2UsIGxpbmVDb21wb3NlVHlwZSk7XG5cdFx0XHRcdFx0dGhpcy5hRHJhZnRJbmZvID0gWydmb3J3YXJkJywgbWVzc2FnZS51aWQsIG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXddO1xuXHRcdFx0XHRcdHRoaXMuc0luUmVwbHlUbyA9IG1lc3NhZ2Uuc01lc3NhZ2VJZDtcblx0XHRcdFx0XHR0aGlzLnNSZWZlcmVuY2VzID0gdHJpbSh0aGlzLnNJblJlcGx5VG8gKyAnICcgKyBtZXNzYWdlLnNSZWZlcmVuY2VzKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLkZvcndhcmRBc0F0dGFjaG1lbnQ6XG5cdFx0XHRcdFx0dGhpcy5zdWJqZWN0KHJlcGx5U3ViamVjdEFkZCgnRndkJywgc1N1YmplY3QpKTtcblx0XHRcdFx0XHR0aGlzLnByZXBlYXJNZXNzYWdlQXR0YWNobWVudHMobWVzc2FnZSwgbGluZUNvbXBvc2VUeXBlKTtcblx0XHRcdFx0XHR0aGlzLmFEcmFmdEluZm8gPSBbJ2ZvcndhcmQnLCBtZXNzYWdlLnVpZCwgbWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhd107XG5cdFx0XHRcdFx0dGhpcy5zSW5SZXBseVRvID0gbWVzc2FnZS5zTWVzc2FnZUlkO1xuXHRcdFx0XHRcdHRoaXMuc1JlZmVyZW5jZXMgPSB0cmltKHRoaXMuc0luUmVwbHlUbyArICcgJyArIG1lc3NhZ2Uuc1JlZmVyZW5jZXMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRHJhZnQ6XG5cdFx0XHRcdFx0dGhpcy50byh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIobWVzc2FnZS50bykpO1xuXHRcdFx0XHRcdHRoaXMuY2ModGhpcy5lbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKG1lc3NhZ2UuY2MpKTtcblx0XHRcdFx0XHR0aGlzLmJjYyh0aGlzLmVtYWlsQXJyYXlUb1N0cmluZ0xpbmVIZWxwZXIobWVzc2FnZS5iY2MpKTtcblx0XHRcdFx0XHR0aGlzLnJlcGx5VG8odGhpcy5lbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKG1lc3NhZ2UucmVwbHlUbykpO1xuXG5cdFx0XHRcdFx0dGhpcy5iRnJvbURyYWZ0ID0gdHJ1ZTtcblxuXHRcdFx0XHRcdHRoaXMuZHJhZnRGb2xkZXIobWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdyk7XG5cdFx0XHRcdFx0dGhpcy5kcmFmdFVpZChtZXNzYWdlLnVpZCk7XG5cblx0XHRcdFx0XHR0aGlzLnN1YmplY3Qoc1N1YmplY3QpO1xuXHRcdFx0XHRcdHRoaXMucHJlcGVhck1lc3NhZ2VBdHRhY2htZW50cyhtZXNzYWdlLCBsaW5lQ29tcG9zZVR5cGUpO1xuXG5cdFx0XHRcdFx0dGhpcy5hRHJhZnRJbmZvID0gaXNOb25FbXB0eUFycmF5KGFEcmFmdEluZm8pICYmIDMgPT09IGFEcmFmdEluZm8ubGVuZ3RoID8gYURyYWZ0SW5mbyA6IG51bGw7XG5cdFx0XHRcdFx0dGhpcy5zSW5SZXBseVRvID0gbWVzc2FnZS5zSW5SZXBseVRvO1xuXHRcdFx0XHRcdHRoaXMuc1JlZmVyZW5jZXMgPSBtZXNzYWdlLnNSZWZlcmVuY2VzO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRWRpdEFzTmV3OlxuXHRcdFx0XHRcdHRoaXMudG8odGhpcy5lbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKG1lc3NhZ2UudG8pKTtcblx0XHRcdFx0XHR0aGlzLmNjKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihtZXNzYWdlLmNjKSk7XG5cdFx0XHRcdFx0dGhpcy5iY2ModGhpcy5lbWFpbEFycmF5VG9TdHJpbmdMaW5lSGVscGVyKG1lc3NhZ2UuYmNjKSk7XG5cdFx0XHRcdFx0dGhpcy5yZXBseVRvKHRoaXMuZW1haWxBcnJheVRvU3RyaW5nTGluZUhlbHBlcihtZXNzYWdlLnJlcGx5VG8pKTtcblxuXHRcdFx0XHRcdHRoaXMuc3ViamVjdChzU3ViamVjdCk7XG5cdFx0XHRcdFx0dGhpcy5wcmVwZWFyTWVzc2FnZUF0dGFjaG1lbnRzKG1lc3NhZ2UsIGxpbmVDb21wb3NlVHlwZSk7XG5cblx0XHRcdFx0XHR0aGlzLmFEcmFmdEluZm8gPSBpc05vbkVtcHR5QXJyYXkoYURyYWZ0SW5mbykgJiYgMyA9PT0gYURyYWZ0SW5mby5sZW5ndGggPyBhRHJhZnRJbmZvIDogbnVsbDtcblx0XHRcdFx0XHR0aGlzLnNJblJlcGx5VG8gPSBtZXNzYWdlLnNJblJlcGx5VG87XG5cdFx0XHRcdFx0dGhpcy5zUmVmZXJlbmNlcyA9IG1lc3NhZ2Uuc1JlZmVyZW5jZXM7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblxuXHRcdFx0c3dpdGNoIChsaW5lQ29tcG9zZVR5cGUpIHtcblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseTpcblx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseUFsbDpcblx0XHRcdFx0XHRzRnJvbSA9IG1lc3NhZ2UuZnJvbVRvTGluZShmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0c1JlcGx5VGl0bGUgPSBpMThuKCdDT01QT1NFL1JFUExZX01FU1NBR0VfVElUTEUnLCB7XG5cdFx0XHRcdFx0XHQnREFURVRJTUUnOiBzRGF0ZSxcblx0XHRcdFx0XHRcdCdFTUFJTCc6IHNGcm9tXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRzVGV4dCA9ICc8YnIgLz48YnIgLz4nICsgc1JlcGx5VGl0bGUgKyAnOicgKyAnPGJyIC8+PGJyIC8+JyArICc8YmxvY2txdW90ZT4nICsgdHJpbShzVGV4dCkgKyAnPC9ibG9ja3F1b3RlPic7XG5cblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLkZvcndhcmQ6XG5cdFx0XHRcdFx0c0Zyb20gPSBtZXNzYWdlLmZyb21Ub0xpbmUoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdHNUbyA9IG1lc3NhZ2UudG9Ub0xpbmUoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdHNDYyA9IG1lc3NhZ2UuY2NUb0xpbmUoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdHNUZXh0ID1cblx0XHRcdFx0XHRcdCc8YnIgLz48YnIgLz4nICtcblx0XHRcdFx0XHRcdGkxOG4oJ0NPTVBPU0UvRk9SV0FSRF9NRVNTQUdFX1RPUF9USVRMRScpICtcblx0XHRcdFx0XHRcdCc8YnIgLz4nICtcblx0XHRcdFx0XHRcdGkxOG4oJ0NPTVBPU0UvRk9SV0FSRF9NRVNTQUdFX1RPUF9GUk9NJykgK1xuXHRcdFx0XHRcdFx0JzogJyArXG5cdFx0XHRcdFx0XHRzRnJvbSArXG5cdFx0XHRcdFx0XHQnPGJyIC8+JyArXG5cdFx0XHRcdFx0XHRpMThuKCdDT01QT1NFL0ZPUldBUkRfTUVTU0FHRV9UT1BfVE8nKSArXG5cdFx0XHRcdFx0XHQnOiAnICtcblx0XHRcdFx0XHRcdHNUbyArXG5cdFx0XHRcdFx0XHQoMCA8IHNDYy5sZW5ndGggPyAnPGJyIC8+JyArIGkxOG4oJ0NPTVBPU0UvRk9SV0FSRF9NRVNTQUdFX1RPUF9DQycpICsgJzogJyArIHNDYyA6ICcnKSArXG5cdFx0XHRcdFx0XHQnPGJyIC8+JyArXG5cdFx0XHRcdFx0XHRpMThuKCdDT01QT1NFL0ZPUldBUkRfTUVTU0FHRV9UT1BfU0VOVCcpICtcblx0XHRcdFx0XHRcdCc6ICcgK1xuXHRcdFx0XHRcdFx0ZW5jb2RlSHRtbChzRGF0ZSkgK1xuXHRcdFx0XHRcdFx0JzxiciAvPicgK1xuXHRcdFx0XHRcdFx0aTE4bignQ09NUE9TRS9GT1JXQVJEX01FU1NBR0VfVE9QX1NVQkpFQ1QnKSArXG5cdFx0XHRcdFx0XHQnOiAnICtcblx0XHRcdFx0XHRcdGVuY29kZUh0bWwoc1N1YmplY3QpICtcblx0XHRcdFx0XHRcdCc8YnIgLz48YnIgLz4nICtcblx0XHRcdFx0XHRcdHRyaW0oc1RleHQpICtcblx0XHRcdFx0XHRcdCc8YnIgLz48YnIgLz4nO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuRm9yd2FyZEFzQXR0YWNobWVudDpcblx0XHRcdFx0XHRzVGV4dCA9ICcnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZWRpdG9yKChlZGl0b3IpID0+IHtcblx0XHRcdFx0ZWRpdG9yLnNldEh0bWwoc1RleHQsIGZhbHNlKTtcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0RWRpdG9yRGVmYXVsdFR5cGUuUGxhaW5Gb3JjZWQgPT09IHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUoKSB8fFxuXHRcdFx0XHRcdCghbWVzc2FnZS5pc0h0bWwoKSAmJiBFZGl0b3JEZWZhdWx0VHlwZS5IdG1sRm9yY2VkICE9PSB0aGlzLmVkaXRvckRlZmF1bHRUeXBlKCkpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGVkaXRvci5tb2RlVG9nZ2xlKGZhbHNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpZGVudGl0eSAmJiBDb21wb3NlVHlwZS5EcmFmdCAhPT0gbGluZUNvbXBvc2VUeXBlICYmIENvbXBvc2VUeXBlLkVkaXRBc05ldyAhPT0gbGluZUNvbXBvc2VUeXBlKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRTaWduYXR1cmVGcm9tSWRlbnRpdHkoaWRlbnRpdHkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zZXRGb2N1c0luUG9wdXAoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoQ29tcG9zZVR5cGUuRW1wdHkgPT09IGxpbmVDb21wb3NlVHlwZSkge1xuXHRcdFx0dGhpcy5zdWJqZWN0KGlzTm9ybWFsKHNDdXN0b21TdWJqZWN0KSA/ICcnICsgc0N1c3RvbVN1YmplY3QgOiAnJyk7XG5cblx0XHRcdHNUZXh0ID0gaXNOb3JtYWwoc0N1c3RvbVBsYWluVGV4dCkgPyAnJyArIHNDdXN0b21QbGFpblRleHQgOiAnJztcblxuXHRcdFx0dGhpcy5lZGl0b3IoKGVkaXRvcikgPT4ge1xuXHRcdFx0XHRlZGl0b3Iuc2V0SHRtbChzVGV4dCwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRFZGl0b3JEZWZhdWx0VHlwZS5IdG1sICE9PSB0aGlzLmVkaXRvckRlZmF1bHRUeXBlKCkgJiZcblx0XHRcdFx0XHRFZGl0b3JEZWZhdWx0VHlwZS5IdG1sRm9yY2VkICE9PSB0aGlzLmVkaXRvckRlZmF1bHRUeXBlKClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZWRpdG9yLm1vZGVUb2dnbGUoZmFsc2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlkZW50aXR5KSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRTaWduYXR1cmVGcm9tSWRlbnRpdHkoaWRlbnRpdHkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zZXRGb2N1c0luUG9wdXAoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoaXNOb25FbXB0eUFycmF5KG9NZXNzYWdlT3JBcnJheSkpIHtcblx0XHRcdF8uZWFjaChvTWVzc2FnZU9yQXJyYXksIChpdGVtKSA9PiB7XG5cdFx0XHRcdHRoaXMuYWRkTWVzc2FnZUFzQXR0YWNobWVudChpdGVtKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmVkaXRvcigoZWRpdG9yKSA9PiB7XG5cdFx0XHRcdGVkaXRvci5zZXRIdG1sKCcnLCBmYWxzZSk7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdEVkaXRvckRlZmF1bHRUeXBlLkh0bWwgIT09IHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUoKSAmJlxuXHRcdFx0XHRcdEVkaXRvckRlZmF1bHRUeXBlLkh0bWxGb3JjZWQgIT09IHRoaXMuZWRpdG9yRGVmYXVsdFR5cGUoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRlZGl0b3IubW9kZVRvZ2dsZShmYWxzZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaWRlbnRpdHkgJiYgQ29tcG9zZVR5cGUuRHJhZnQgIT09IGxpbmVDb21wb3NlVHlwZSAmJiBDb21wb3NlVHlwZS5FZGl0QXNOZXcgIT09IGxpbmVDb21wb3NlVHlwZSkge1xuXHRcdFx0XHRcdHRoaXMuc2V0U2lnbmF0dXJlRnJvbUlkZW50aXR5KGlkZW50aXR5KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuc2V0Rm9jdXNJblBvcHVwKCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRGb2N1c0luUG9wdXAoKTtcblx0XHR9XG5cblx0XHRjb25zdCBkb3dubG9hZHMgPSB0aGlzLmdldEF0dGFjaG1lbnRzRG93bmxvYWRzRm9yVXBsb2FkKCk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShkb3dubG9hZHMpKSB7XG5cdFx0XHRSZW1vdGUubWVzc2FnZVVwbG9hZEF0dGFjaG1lbnRzKHRoaXMub25NZXNzYWdlVXBsb2FkQXR0YWNobWVudHMsIGRvd25sb2Fkcyk7XG5cdFx0fVxuXG5cdFx0aWYgKGlkZW50aXR5KSB7XG5cdFx0XHR0aGlzLmN1cnJlbnRJZGVudGl0eShpZGVudGl0eSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZXNpemVyVHJpZ2dlcigpO1xuXHR9XG5cblx0b25NZXNzYWdlVXBsb2FkQXR0YWNobWVudHMoc1Jlc3VsdCwgb0RhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiBvRGF0YS5SZXN1bHQpIHtcblx0XHRcdGlmICghdGhpcy52aWV3TW9kZWxWaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0Xy5lYWNoKG9EYXRhLlJlc3VsdCwgKGlkLCB0ZW1wTmFtZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSB0aGlzLmdldEF0dGFjaG1lbnRCeUlkKGlkKTtcblx0XHRcdFx0XHRpZiAoYXR0YWNobWVudCkge1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudC50ZW1wTmFtZSh0ZW1wTmFtZSk7XG5cdFx0XHRcdFx0XHRhdHRhY2htZW50XG5cdFx0XHRcdFx0XHRcdC53YWl0aW5nKGZhbHNlKVxuXHRcdFx0XHRcdFx0XHQudXBsb2FkaW5nKGZhbHNlKVxuXHRcdFx0XHRcdFx0XHQuY29tcGxldGUodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRNZXNzYWdlQXR0YWNobWVudEZhaWxlZERvd25sb2FkVGV4dCgpO1xuXHRcdH1cblx0fVxuXG5cdHNldEZvY3VzSW5Qb3B1cCgpIHtcblx0XHRpZiAoIWJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoJycgPT09IHRoaXMudG8oKSkge1xuXHRcdFx0XHRcdHRoaXMudG8uZm9jdXNlZCh0cnVlKTtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLm9FZGl0b3IpIHtcblx0XHRcdFx0XHRpZiAoIXRoaXMudG8uZm9jdXNlZCgpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9FZGl0b3IuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLnJlc2l6ZXJUcmlnZ2VyKCk7XG5cdH1cblxuXHR0cnlUb0Nsb3NlUG9wdXAoKSB7XG5cdFx0Y29uc3QgUG9wdXBzQXNrVmlld01vZGVsID0gcmVxdWlyZSgnVmlldy9Qb3B1cC9Bc2snKTtcblx0XHRpZiAoIWlzUG9wdXBWaXNpYmxlKFBvcHVwc0Fza1ZpZXdNb2RlbCkgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0aWYgKHRoaXMuYlNraXBOZXh0SGlkZSB8fCAodGhpcy5pc0VtcHR5Rm9ybSgpICYmICF0aGlzLmRyYWZ0VWlkKCkpKSB7XG5cdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMsICdjbG9zZUNvbW1hbmQnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNob3dTY3JlZW5Qb3B1cChQb3B1cHNBc2tWaWV3TW9kZWwsIFtcblx0XHRcdFx0XHRpMThuKCdQT1BVUFNfQVNLL0RFU0NfV0FOVF9DTE9TRV9USElTX1dJTkRPVycpLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMsICdjbG9zZUNvbW1hbmQnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0dGhpcy5pbml0VXBsb2FkZXIoKTtcblxuXHRcdGtleSgnY3RybCtxLCBjb21tYW5kK3EsIGN0cmwrdywgY29tbWFuZCt3JywgS2V5U3RhdGUuQ29tcG9zZSwgbm9vcEZhbHNlKTtcblxuXHRcdGtleSgnYCcsIEtleVN0YXRlLkNvbXBvc2UsICgpID0+IHtcblx0XHRcdGlmICh0aGlzLm9FZGl0b3IgJiYgIXRoaXMub0VkaXRvci5oYXNGb2N1cygpICYmICFpbkZvY3VzKCkpIHtcblx0XHRcdFx0dGhpcy5pZGVudGl0aWVzRHJvcGRvd25UcmlnZ2VyKHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdjdHJsK2AnLCBLZXlTdGF0ZS5Db21wb3NlLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmlkZW50aXRpZXNEcm9wZG93blRyaWdnZXIodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRrZXkoJ2VzYywgY3RybCtkb3duLCBjb21tYW5kK2Rvd24nLCBLZXlTdGF0ZS5Db21wb3NlLCAoKSA9PiB7XG5cdFx0XHR0aGlzLnNraXBDb21tYW5kKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRpZiAodGhpcy5hbGxvd0ZvbGRlcnMpIHtcblx0XHRcdGtleSgnY3RybCtzLCBjb21tYW5kK3MnLCBLZXlTdGF0ZS5Db21wb3NlLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2F2ZUNvbW1hbmQoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhbGxvd0N0cmxFbnRlck9uQ29tcG9zZScpKSB7XG5cdFx0XHRrZXkoJ2N0cmwrZW50ZXIsIGNvbW1hbmQrZW50ZXInLCBLZXlTdGF0ZS5Db21wb3NlLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2VuZENvbW1hbmQoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0a2V5KCdzaGlmdCtlc2MnLCBLZXlTdGF0ZS5Db21wb3NlLCAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHR0aGlzLnRyeVRvQ2xvc2VQb3B1cCgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yignd2luZG93LnJlc2l6ZS5yZWFsJywgdGhpcy5yZXNpemVyVHJpZ2dlcik7XG5cdFx0RXZlbnRzLnN1Yignd2luZG93LnJlc2l6ZS5yZWFsJywgXy5kZWJvdW5jZSh0aGlzLnJlc2l6ZXJUcmlnZ2VyLCBNYWdpY3MuVGltZTUwbXMpKTtcblxuXHRcdFNvY2lhbFN0b3JlLmFwcGVuZERyb3Bib3goKTtcblxuXHRcdGlmICh0aGlzLmRyaXZlRW5hYmxlZCgpKSB7XG5cdFx0XHQkLmdldFNjcmlwdCgnaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvYXBpLmpzJywgKCkgPT4ge1xuXHRcdFx0XHRpZiAod2luZG93LmdhcGkpIHtcblx0XHRcdFx0XHR0aGlzLmRyaXZlVmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0d2luZG93LnNldEludGVydmFsKCgpID0+IHtcblx0XHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSgpICYmIHRoaXMub0VkaXRvcikge1xuXHRcdFx0XHR0aGlzLm9FZGl0b3IucmVzaXplKCk7XG5cdFx0XHR9XG5cdFx0fSwgTWFnaWNzLlRpbWU1cyk7XG5cdH1cblxuXHRkcml2ZUNhbGxiYWNrKGFjY2Vzc1Rva2VuLCBkYXRhKSB7XG5cdFx0aWYgKFxuXHRcdFx0ZGF0YSAmJlxuXHRcdFx0d2luZG93LlhNTEh0dHBSZXF1ZXN0ICYmXG5cdFx0XHR3aW5kb3cuZ29vZ2xlICYmXG5cdFx0XHRkYXRhW3dpbmRvdy5nb29nbGUucGlja2VyLlJlc3BvbnNlLkFDVElPTl0gPT09IHdpbmRvdy5nb29nbGUucGlja2VyLkFjdGlvbi5QSUNLRUQgJiZcblx0XHRcdGRhdGFbd2luZG93Lmdvb2dsZS5waWNrZXIuUmVzcG9uc2UuRE9DVU1FTlRTXSAmJlxuXHRcdFx0ZGF0YVt3aW5kb3cuZ29vZ2xlLnBpY2tlci5SZXNwb25zZS5ET0NVTUVOVFNdWzBdICYmXG5cdFx0XHRkYXRhW3dpbmRvdy5nb29nbGUucGlja2VyLlJlc3BvbnNlLkRPQ1VNRU5UU11bMF0uaWRcblx0XHQpIHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdFx0XHRyZXF1ZXN0Lm9wZW4oXG5cdFx0XHRcdCdHRVQnLFxuXHRcdFx0XHQnaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vZHJpdmUvdjIvZmlsZXMvJyArIGRhdGFbd2luZG93Lmdvb2dsZS5waWNrZXIuUmVzcG9uc2UuRE9DVU1FTlRTXVswXS5pZFxuXHRcdFx0KTtcblx0XHRcdHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcignQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuKTtcblx0XHRcdHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcblx0XHRcdFx0aWYgKHJlcXVlc3QgJiYgcmVxdWVzdC5yZXNwb25zZVRleHQpIHtcblx0XHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHdpbmRvdy5KU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KSxcblx0XHRcdFx0XHRcdGZFeHBvcnQgPSAoaXRlbSwgbWltZVR5cGUsIGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmV4cG9ydExpbmtzKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uZXhwb3J0TGlua3NbbWltZVR5cGVdKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5kb3dubG9hZFVybCA9IGl0ZW0uZXhwb3J0TGlua3NbbWltZVR5cGVdO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UudGl0bGUgPSBpdGVtLnRpdGxlICsgJy4nICsgZXh0O1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UubWltZVR5cGUgPSBtaW1lVHlwZTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGl0ZW0uZXhwb3J0TGlua3NbJ2FwcGxpY2F0aW9uL3BkZiddKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5kb3dubG9hZFVybCA9IGl0ZW0uZXhwb3J0TGlua3NbJ2FwcGxpY2F0aW9uL3BkZiddO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UudGl0bGUgPSBpdGVtLnRpdGxlICsgJy5wZGYnO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UubWltZVR5cGUgPSAnYXBwbGljYXRpb24vcGRmJztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRpZiAocmVzcG9uc2UgJiYgIXJlc3BvbnNlLmRvd25sb2FkVXJsICYmIHJlc3BvbnNlLm1pbWVUeXBlICYmIHJlc3BvbnNlLmV4cG9ydExpbmtzKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHJlc3BvbnNlLm1pbWVUeXBlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlICdhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWFwcHMuZG9jdW1lbnQnOlxuXHRcdFx0XHRcdFx0XHRcdGZFeHBvcnQocmVzcG9uc2UsICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsICdkb2N4Jyk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5zcHJlYWRzaGVldCc6XG5cdFx0XHRcdFx0XHRcdFx0ZkV4cG9ydChyZXNwb25zZSwgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JywgJ3hsc3gnKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSAnYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLmRyYXdpbmcnOlxuXHRcdFx0XHRcdFx0XHRcdGZFeHBvcnQocmVzcG9uc2UsICdpbWFnZS9wbmcnLCAncG5nJyk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ2FwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5wcmVzZW50YXRpb24nOlxuXHRcdFx0XHRcdFx0XHRcdGZFeHBvcnQocmVzcG9uc2UsICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJywgJ3BwdHgnKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRmRXhwb3J0KHJlc3BvbnNlLCAnYXBwbGljYXRpb24vcGRmJywgJ3BkZicpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5kb3dubG9hZFVybCkge1xuXHRcdFx0XHRcdFx0dGhpcy5hZGREcml2ZUF0dGFjaG1lbnQocmVzcG9uc2UsIGFjY2Vzc1Rva2VuKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRyZXF1ZXN0LnNlbmQoKTtcblx0XHR9XG5cdH1cblxuXHRkcml2ZUNyZWF0ZVBpa2VyKGF1dGhUb2tlbikge1xuXHRcdGlmICh3aW5kb3cuZ2FwaSAmJiBhdXRoVG9rZW4gJiYgYXV0aFRva2VuLmFjY2Vzc190b2tlbikge1xuXHRcdFx0d2luZG93LmdhcGkubG9hZCgncGlja2VyJywge1xuXHRcdFx0XHRjYWxsYmFjazogKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh3aW5kb3cuZ29vZ2xlICYmIHdpbmRvdy5nb29nbGUucGlja2VyKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBkcml2ZVBpY2tlciA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBpY2tlci5QaWNrZXJCdWlsZGVyKClcblx0XHRcdFx0XHRcdFx0Ly8gLmFkZFZpZXcod2luZG93Lmdvb2dsZS5waWNrZXIuVmlld0lkLkZPTERFUlMpXG5cdFx0XHRcdFx0XHRcdC5hZGRWaWV3KHdpbmRvdy5nb29nbGUucGlja2VyLlZpZXdJZC5ET0NTKVxuXHRcdFx0XHRcdFx0XHQuc2V0QXBwSWQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0dvb2dsZUNsaWVudElEJykpXG5cdFx0XHRcdFx0XHRcdC5zZXRPQXV0aFRva2VuKGF1dGhUb2tlbi5hY2Nlc3NfdG9rZW4pXG5cdFx0XHRcdFx0XHRcdC5zZXRDYWxsYmFjayhfLmJpbmQodGhpcy5kcml2ZUNhbGxiYWNrLCB0aGlzLCBhdXRoVG9rZW4uYWNjZXNzX3Rva2VuKSlcblx0XHRcdFx0XHRcdFx0LmVuYWJsZUZlYXR1cmUod2luZG93Lmdvb2dsZS5waWNrZXIuRmVhdHVyZS5OQVZfSElEREVOKVxuXHRcdFx0XHRcdFx0XHQvLyAuc2V0T3JpZ2luKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdClcblx0XHRcdFx0XHRcdFx0LmJ1aWxkKCk7XG5cblx0XHRcdFx0XHRcdGRyaXZlUGlja2VyLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRkcml2ZU9wZW5Qb3B1cCgpIHtcblx0XHRpZiAod2luZG93LmdhcGkpIHtcblx0XHRcdHdpbmRvdy5nYXBpLmxvYWQoJ2F1dGgnLCB7XG5cdFx0XHRcdGNhbGxiYWNrOiAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYXV0aFRva2VuID0gd2luZG93LmdhcGkuYXV0aC5nZXRUb2tlbigpLFxuXHRcdFx0XHRcdFx0ZlJlc3VsdCA9IChhdXRoUmVzdWx0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChhdXRoUmVzdWx0ICYmICFhdXRoUmVzdWx0LmVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB3aW5kb3cuZ2FwaS5hdXRoLmdldFRva2VuKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRva2VuKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmRyaXZlQ3JlYXRlUGlrZXIodG9rZW4pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmICghYXV0aFRva2VuKSB7XG5cdFx0XHRcdFx0XHR3aW5kb3cuZ2FwaS5hdXRoLmF1dGhvcml6ZShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdCdjbGllbnRfaWQnOiBTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQ2xpZW50SUQnKSxcblx0XHRcdFx0XHRcdFx0XHQnc2NvcGUnOiAnaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vYXV0aC9kcml2ZS5yZWFkb25seScsXG5cdFx0XHRcdFx0XHRcdFx0J2ltbWVkaWF0ZSc6IHRydWVcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0KGF1dGhSZXN1bHQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWZSZXN1bHQoYXV0aFJlc3VsdCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5nYXBpLmF1dGguYXV0aG9yaXplKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2NsaWVudF9pZCc6IFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRJRCcpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdzY29wZSc6ICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2RyaXZlLnJlYWRvbmx5Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnaW1tZWRpYXRlJzogZmFsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZlJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuZHJpdmVDcmVhdGVQaWtlcihhdXRoVG9rZW4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuXHQgKiBAcmV0dXJucyB7P09iamVjdH1cblx0ICovXG5cdGdldEF0dGFjaG1lbnRCeUlkKGlkKSB7XG5cdFx0cmV0dXJuIF8uZmluZCh0aGlzLmF0dGFjaG1lbnRzKCksIChpdGVtKSA9PiBpdGVtICYmIGlkID09PSBpdGVtLmlkKTtcblx0fVxuXG5cdGNhbmNlbEF0dGFjaG1lbnRIZWxwZXIoaWQsIG9KdWEpIHtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IF8uZmluZCh0aGlzLmF0dGFjaG1lbnRzKCksIChpdGVtKSA9PiBpdGVtICYmIGl0ZW0uaWQgPT09IGlkKTtcblx0XHRcdGlmIChhdHRhY2htZW50KSB7XG5cdFx0XHRcdHRoaXMuYXR0YWNobWVudHMucmVtb3ZlKGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShhdHRhY2htZW50KTtcblxuXHRcdFx0XHRpZiAob0p1YSkge1xuXHRcdFx0XHRcdG9KdWEuY2FuY2VsKGlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRpbml0VXBsb2FkZXIoKSB7XG5cdFx0aWYgKHRoaXMuY29tcG9zZVVwbG9hZGVyQnV0dG9uKCkpIHtcblx0XHRcdGNvbnN0IHVwbG9hZENhY2hlID0ge30sXG5cdFx0XHRcdGF0dGFjaG1lbnRTaXplTGltaXQgPSBwSW50KFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdHRhY2htZW50TGltaXQnKSksXG5cdFx0XHRcdG9KdWEgPSBuZXcgSnVhKHtcblx0XHRcdFx0XHQnYWN0aW9uJzogdXBsb2FkKCksXG5cdFx0XHRcdFx0J25hbWUnOiAndXBsb2FkZXInLFxuXHRcdFx0XHRcdCdxdWV1ZVNpemUnOiAyLFxuXHRcdFx0XHRcdCdtdWx0aXBsZVNpemVMaW1pdCc6IDUwLFxuXHRcdFx0XHRcdCdjbGlja0VsZW1lbnQnOiB0aGlzLmNvbXBvc2VVcGxvYWRlckJ1dHRvbigpLFxuXHRcdFx0XHRcdCdkcmFnQW5kRHJvcEVsZW1lbnQnOiB0aGlzLmNvbXBvc2VVcGxvYWRlckRyb3BQbGFjZSgpXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRpZiAob0p1YSkge1xuXHRcdFx0XHRvSnVhXG5cdFx0XHRcdFx0Ly8gLm9uKCdvbkxpbWl0UmVhY2hlZCcsIChsaW1pdCkgPT4ge1xuXHRcdFx0XHRcdC8vIFx0YWxlcnQobGltaXQpO1xuXHRcdFx0XHRcdC8vIH0pXG5cdFx0XHRcdFx0Lm9uKCdvbkRyYWdFbnRlcicsICgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuZHJhZ0FuZERyb3BPdmVyKHRydWUpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Lm9uKCdvbkRyYWdMZWF2ZScsICgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuZHJhZ0FuZERyb3BPdmVyKGZhbHNlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5vbignb25Cb2R5RHJhZ0VudGVyJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlKHRydWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5kcmFnQW5kRHJvcFZpc2libGUodHJ1ZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQub24oJ29uQm9keURyYWdMZWF2ZScsICgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuZHJhZ0FuZERyb3BWaXNpYmxlKGZhbHNlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5vbignb25Qcm9ncmVzcycsIChpZCwgbG9hZGVkLCB0b3RhbCkgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IGl0ZW0gPSB1cGxvYWRDYWNoZVtpZF07XG5cdFx0XHRcdFx0XHRpZiAoIWl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0aXRlbSA9IHRoaXMuZ2V0QXR0YWNobWVudEJ5SWQoaWQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRcdHVwbG9hZENhY2hlW2lkXSA9IGl0ZW07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0aXRlbS5wcm9ncmVzcyh3aW5kb3cuTWF0aC5mbG9vcigobG9hZGVkIC8gdG90YWwpICogMTAwKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQub24oJ29uU2VsZWN0JywgKHNJZCwgb0RhdGEpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuZHJhZ0FuZERyb3BPdmVyKGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZmlsZU5hbWUgPSBpc1VuZChvRGF0YS5GaWxlTmFtZSkgPyAnJyA6IG9EYXRhLkZpbGVOYW1lLnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRcdHNpemUgPSBpc05vcm1hbChvRGF0YS5TaXplKSA/IHBJbnQob0RhdGEuU2l6ZSkgOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRhdHRhY2htZW50ID0gbmV3IENvbXBvc2VBdHRhY2htZW50TW9kZWwoc0lkLCBmaWxlTmFtZSwgc2l6ZSk7XG5cblx0XHRcdFx0XHRcdGF0dGFjaG1lbnQuY2FuY2VsID0gdGhpcy5jYW5jZWxBdHRhY2htZW50SGVscGVyKHNJZCwgb0p1YSk7XG5cblx0XHRcdFx0XHRcdHRoaXMuYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTtcblxuXHRcdFx0XHRcdFx0dGhpcy5hdHRhY2htZW50c1BsYWNlKHRydWUpO1xuXG5cdFx0XHRcdFx0XHRpZiAoMCA8IHNpemUgJiYgMCA8IGF0dGFjaG1lbnRTaXplTGltaXQgJiYgYXR0YWNobWVudFNpemVMaW1pdCA8IHNpemUpIHtcblx0XHRcdFx0XHRcdFx0YXR0YWNobWVudFxuXHRcdFx0XHRcdFx0XHRcdC53YWl0aW5nKGZhbHNlKVxuXHRcdFx0XHRcdFx0XHRcdC51cGxvYWRpbmcodHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHQuY29tcGxldGUodHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHQuZXJyb3IoaTE4bignVVBMT0FEL0VSUk9SX0ZJTEVfSVNfVE9PX0JJRycpKTtcblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Lm9uKCdvblN0YXJ0JywgKGlkKSA9PiB7XG5cdFx0XHRcdFx0XHRsZXQgaXRlbSA9IHVwbG9hZENhY2hlW2lkXTtcblx0XHRcdFx0XHRcdGlmICghaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRpdGVtID0gdGhpcy5nZXRBdHRhY2htZW50QnlJZChpZCk7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtKSB7XG5cdFx0XHRcdFx0XHRcdFx0dXBsb2FkQ2FjaGVbaWRdID0gaXRlbTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRpdGVtXG5cdFx0XHRcdFx0XHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdFx0LnVwbG9hZGluZyh0cnVlKVxuXHRcdFx0XHRcdFx0XHRcdC5jb21wbGV0ZShmYWxzZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQub24oJ29uQ29tcGxldGUnLCAoaWQsIHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHRoaXMuZ2V0QXR0YWNobWVudEJ5SWQoaWQpLFxuXHRcdFx0XHRcdFx0XHRlcnJvckNvZGUgPSBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0LkVycm9yQ29kZSA/IGRhdGEuUmVzdWx0LkVycm9yQ29kZSA6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGF0dGFjaG1lbnRKc29uID0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQgJiYgZGF0YS5SZXN1bHQuQXR0YWNobWVudCA/IGRhdGEuUmVzdWx0LkF0dGFjaG1lbnQgOiBudWxsO1xuXG5cdFx0XHRcdFx0XHRsZXQgZXJyb3IgPSAnJztcblx0XHRcdFx0XHRcdGlmIChudWxsICE9PSBlcnJvckNvZGUpIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3IgPSBnZXRVcGxvYWRFcnJvckRlc2NCeUNvZGUoZXJyb3JDb2RlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIWF0dGFjaG1lbnRKc29uKSB7XG5cdFx0XHRcdFx0XHRcdGVycm9yID0gaTE4bignVVBMT0FEL0VSUk9SX1VOS05PV04nKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGF0dGFjaG1lbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCcnICE9PSBlcnJvciAmJiAwIDwgZXJyb3IubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXR0YWNobWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdFx0XHQudXBsb2FkaW5nKGZhbHNlKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmNvbXBsZXRlKHRydWUpXG5cdFx0XHRcdFx0XHRcdFx0XHQuZXJyb3IoZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGF0dGFjaG1lbnRKc29uKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXR0YWNobWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0XHRcdFx0XHQudXBsb2FkaW5nKGZhbHNlKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmNvbXBsZXRlKHRydWUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0YXR0YWNobWVudC5pbml0QnlVcGxvYWRKc29uKGF0dGFjaG1lbnRKc29uKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChpc1VuZCh1cGxvYWRDYWNoZVtpZF0pKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIHVwbG9hZENhY2hlW2lkXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuYWRkQXR0YWNobWVudEVuYWJsZWQodHJ1ZSkuZHJhZ0FuZERyb3BFbmFibGVkKG9KdWEuaXNEcmFnQW5kRHJvcFN1cHBvcnRlZCgpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuYWRkQXR0YWNobWVudEVuYWJsZWQoZmFsc2UpLmRyYWdBbmREcm9wRW5hYmxlZChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHRwcmVwZWFyQXR0YWNobWVudHNGb3JTZW5kT3JTYXZlKCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXHRcdF8uZWFjaCh0aGlzLmF0dGFjaG1lbnRzSW5SZWFkeSgpLCAoaXRlbSkgPT4ge1xuXHRcdFx0aWYgKGl0ZW0gJiYgJycgIT09IGl0ZW0udGVtcE5hbWUoKSAmJiBpdGVtLmVuYWJsZWQoKSkge1xuXHRcdFx0XHRyZXN1bHRbaXRlbS50ZW1wTmFtZSgpXSA9IFtpdGVtLmZpbGVOYW1lKCksIGl0ZW0uaXNJbmxpbmUgPyAnMScgOiAnMCcsIGl0ZW0uQ0lELCBpdGVtLmNvbnRlbnRMb2NhdGlvbl07XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7TWVzc2FnZU1vZGVsfSBtZXNzYWdlXG5cdCAqL1xuXHRhZGRNZXNzYWdlQXNBdHRhY2htZW50KG1lc3NhZ2UpIHtcblx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0bGV0IHRlbXAgPSBtZXNzYWdlLnN1YmplY3QoKTtcblx0XHRcdHRlbXAgPSAnLmVtbCcgPT09IHRlbXAuc3Vic3RyKC00KS50b0xvd2VyQ2FzZSgpID8gdGVtcCA6IHRlbXAgKyAnLmVtbCc7XG5cblx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBuZXcgQ29tcG9zZUF0dGFjaG1lbnRNb2RlbChtZXNzYWdlLnJlcXVlc3RIYXNoLCB0ZW1wLCBtZXNzYWdlLnNpemUoKSk7XG5cblx0XHRcdGF0dGFjaG1lbnQuZnJvbU1lc3NhZ2UgPSB0cnVlO1xuXHRcdFx0YXR0YWNobWVudC5jYW5jZWwgPSB0aGlzLmNhbmNlbEF0dGFjaG1lbnRIZWxwZXIobWVzc2FnZS5yZXF1ZXN0SGFzaCk7XG5cdFx0XHRhdHRhY2htZW50XG5cdFx0XHRcdC53YWl0aW5nKGZhbHNlKVxuXHRcdFx0XHQudXBsb2FkaW5nKHRydWUpXG5cdFx0XHRcdC5jb21wbGV0ZSh0cnVlKTtcblxuXHRcdFx0dGhpcy5hdHRhY2htZW50cy5wdXNoKGF0dGFjaG1lbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXG5cdCAqIEByZXR1cm5zIHtDb21wb3NlQXR0YWNobWVudE1vZGVsfVxuXHQgKi9cblx0YWRkQXR0YWNobWVudEhlbHBlcih1cmwsIG5hbWUsIHNpemUpIHtcblx0XHRjb25zdCBhdHRhY2htZW50ID0gbmV3IENvbXBvc2VBdHRhY2htZW50TW9kZWwodXJsLCBuYW1lLCBzaXplKTtcblxuXHRcdGF0dGFjaG1lbnQuZnJvbU1lc3NhZ2UgPSBmYWxzZTtcblx0XHRhdHRhY2htZW50LmNhbmNlbCA9IHRoaXMuY2FuY2VsQXR0YWNobWVudEhlbHBlcih1cmwpO1xuXHRcdGF0dGFjaG1lbnRcblx0XHRcdC53YWl0aW5nKGZhbHNlKVxuXHRcdFx0LnVwbG9hZGluZyh0cnVlKVxuXHRcdFx0LmNvbXBsZXRlKGZhbHNlKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTtcblxuXHRcdHRoaXMuYXR0YWNobWVudHNQbGFjZSh0cnVlKTtcblxuXHRcdHJldHVybiBhdHRhY2htZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkcm9wYm94RmlsZVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGFkZERyb3Bib3hBdHRhY2htZW50KGRyb3Bib3hGaWxlKSB7XG5cdFx0Y29uc3QgYXR0YWNobWVudFNpemVMaW1pdCA9IHBJbnQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F0dGFjaG1lbnRMaW1pdCcpKSxcblx0XHRcdG1TaXplID0gZHJvcGJveEZpbGUuYnl0ZXMsXG5cdFx0XHRhdHRhY2htZW50ID0gdGhpcy5hZGRBdHRhY2htZW50SGVscGVyKGRyb3Bib3hGaWxlLmxpbmssIGRyb3Bib3hGaWxlLm5hbWUsIG1TaXplKTtcblxuXHRcdGlmICgwIDwgbVNpemUgJiYgMCA8IGF0dGFjaG1lbnRTaXplTGltaXQgJiYgYXR0YWNobWVudFNpemVMaW1pdCA8IG1TaXplKSB7XG5cdFx0XHRhdHRhY2htZW50LnVwbG9hZGluZyhmYWxzZSkuY29tcGxldGUodHJ1ZSk7XG5cdFx0XHRhdHRhY2htZW50LmVycm9yKGkxOG4oJ1VQTE9BRC9FUlJPUl9GSUxFX0lTX1RPT19CSUcnKSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0UmVtb3RlLmNvbXBvc2VVcGxvYWRFeHRlcm5hbHMoXG5cdFx0XHQoc3RhdHVzUmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdGxldCByZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0YXR0YWNobWVudC51cGxvYWRpbmcoZmFsc2UpLmNvbXBsZXRlKHRydWUpO1xuXG5cdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzdGF0dXNSZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRcdGlmIChkYXRhLlJlc3VsdFthdHRhY2htZW50LmlkXSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGF0dGFjaG1lbnQudGVtcE5hbWUoZGF0YS5SZXN1bHRbYXR0YWNobWVudC5pZF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghcmVzdWx0KSB7XG5cdFx0XHRcdFx0YXR0YWNobWVudC5lcnJvcihnZXRVcGxvYWRFcnJvckRlc2NCeUNvZGUoVXBsb2FkRXJyb3JDb2RlLkZpbGVOb1VwbG9hZGVkKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRbZHJvcGJveEZpbGUubGlua11cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGRyaXZlRmlsZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYWNjZXNzVG9rZW5cblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRhZGREcml2ZUF0dGFjaG1lbnQoZHJpdmVGaWxlLCBhY2Nlc3NUb2tlbikge1xuXHRcdGNvbnN0IGF0dGFjaG1lbnRTaXplTGltaXQgPSBwSW50KFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdHRhY2htZW50TGltaXQnKSksXG5cdFx0XHRzaXplID0gZHJpdmVGaWxlLmZpbGVTaXplID8gcEludChkcml2ZUZpbGUuZmlsZVNpemUpIDogMCxcblx0XHRcdGF0dGFjaG1lbnQgPSB0aGlzLmFkZEF0dGFjaG1lbnRIZWxwZXIoZHJpdmVGaWxlLmRvd25sb2FkVXJsLCBkcml2ZUZpbGUudGl0bGUsIHNpemUpO1xuXG5cdFx0aWYgKDAgPCBzaXplICYmIDAgPCBhdHRhY2htZW50U2l6ZUxpbWl0ICYmIGF0dGFjaG1lbnRTaXplTGltaXQgPCBzaXplKSB7XG5cdFx0XHRhdHRhY2htZW50LnVwbG9hZGluZyhmYWxzZSkuY29tcGxldGUodHJ1ZSk7XG5cdFx0XHRhdHRhY2htZW50LmVycm9yKGkxOG4oJ1VQTE9BRC9FUlJPUl9GSUxFX0lTX1RPT19CSUcnKSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0UmVtb3RlLmNvbXBvc2VVcGxvYWREcml2ZShcblx0XHRcdChzdGF0dXNSZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHRhdHRhY2htZW50LnVwbG9hZGluZyhmYWxzZSkuY29tcGxldGUodHJ1ZSk7XG5cblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHN0YXR1c1Jlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0aWYgKGRhdGEuUmVzdWx0W2F0dGFjaG1lbnQuaWRdKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudC50ZW1wTmFtZShkYXRhLlJlc3VsdFthdHRhY2htZW50LmlkXVswXSk7XG5cdFx0XHRcdFx0XHRhdHRhY2htZW50LnNpemUocEludChkYXRhLlJlc3VsdFthdHRhY2htZW50LmlkXVsxXSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghcmVzdWx0KSB7XG5cdFx0XHRcdFx0YXR0YWNobWVudC5lcnJvcihnZXRVcGxvYWRFcnJvckRlc2NCeUNvZGUoVXBsb2FkRXJyb3JDb2RlLkZpbGVOb1VwbG9hZGVkKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkcml2ZUZpbGUuZG93bmxvYWRVcmwsXG5cdFx0XHRhY2Nlc3NUb2tlblxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge01lc3NhZ2VNb2RlbH0gbWVzc2FnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuXHQgKi9cblx0cHJlcGVhck1lc3NhZ2VBdHRhY2htZW50cyhtZXNzYWdlLCB0eXBlKSB7XG5cdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdGlmIChDb21wb3NlVHlwZS5Gb3J3YXJkQXNBdHRhY2htZW50ID09PSB0eXBlKSB7XG5cdFx0XHRcdHRoaXMuYWRkTWVzc2FnZUFzQXR0YWNobWVudChtZXNzYWdlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGF0dGFjaG1lbnRzID0gbWVzc2FnZS5hdHRhY2htZW50cygpO1xuXHRcdFx0XHRfLmVhY2goaXNOb25FbXB0eUFycmF5KGF0dGFjaG1lbnRzKSA/IGF0dGFjaG1lbnRzIDogW10sIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0bGV0IGFkZCA9IGZhbHNlO1xuXHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5SZXBseTpcblx0XHRcdFx0XHRcdGNhc2UgQ29tcG9zZVR5cGUuUmVwbHlBbGw6XG5cdFx0XHRcdFx0XHRcdGFkZCA9IGl0ZW0uaXNMaW5rZWQ7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLkZvcndhcmQ6XG5cdFx0XHRcdFx0XHRjYXNlIENvbXBvc2VUeXBlLkRyYWZ0OlxuXHRcdFx0XHRcdFx0Y2FzZSBDb21wb3NlVHlwZS5FZGl0QXNOZXc6XG5cdFx0XHRcdFx0XHRcdGFkZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChhZGQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBuZXcgQ29tcG9zZUF0dGFjaG1lbnRNb2RlbChcblx0XHRcdFx0XHRcdFx0aXRlbS5kb3dubG9hZCxcblx0XHRcdFx0XHRcdFx0aXRlbS5maWxlTmFtZSxcblx0XHRcdFx0XHRcdFx0aXRlbS5lc3RpbWF0ZWRTaXplLFxuXHRcdFx0XHRcdFx0XHRpdGVtLmlzSW5saW5lLFxuXHRcdFx0XHRcdFx0XHRpdGVtLmlzTGlua2VkLFxuXHRcdFx0XHRcdFx0XHRpdGVtLmNpZCxcblx0XHRcdFx0XHRcdFx0aXRlbS5jb250ZW50TG9jYXRpb25cblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGF0dGFjaG1lbnQuZnJvbU1lc3NhZ2UgPSB0cnVlO1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudC5jYW5jZWwgPSB0aGlzLmNhbmNlbEF0dGFjaG1lbnRIZWxwZXIoaXRlbS5kb3dubG9hZCk7XG5cdFx0XHRcdFx0XHRhdHRhY2htZW50XG5cdFx0XHRcdFx0XHRcdC53YWl0aW5nKGZhbHNlKVxuXHRcdFx0XHRcdFx0XHQudXBsb2FkaW5nKHRydWUpXG5cdFx0XHRcdFx0XHRcdC5jb21wbGV0ZShmYWxzZSk7XG5cblx0XHRcdFx0XHRcdHRoaXMuYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJlbW92ZUxpbmtlZEF0dGFjaG1lbnRzKCkge1xuXHRcdGNvbnN0IGFycmFjaG1lbnQgPSBfLmZpbmQodGhpcy5hdHRhY2htZW50cygpLCAoaXRlbSkgPT4gaXRlbSAmJiBpdGVtLmlzTGlua2VkKTtcblx0XHRpZiAoYXJyYWNobWVudCkge1xuXHRcdFx0dGhpcy5hdHRhY2htZW50cy5yZW1vdmUoYXJyYWNobWVudCk7XG5cdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShhcnJhY2htZW50KTtcblx0XHR9XG5cdH1cblxuXHRzZXRNZXNzYWdlQXR0YWNobWVudEZhaWxlZERvd25sb2FkVGV4dCgpIHtcblx0XHRfLmVhY2godGhpcy5hdHRhY2htZW50cygpLCAoYXR0YWNobWVudCkgPT4ge1xuXHRcdFx0aWYgKGF0dGFjaG1lbnQgJiYgYXR0YWNobWVudC5mcm9tTWVzc2FnZSkge1xuXHRcdFx0XHRhdHRhY2htZW50XG5cdFx0XHRcdFx0LndhaXRpbmcoZmFsc2UpXG5cdFx0XHRcdFx0LnVwbG9hZGluZyhmYWxzZSlcblx0XHRcdFx0XHQuY29tcGxldGUodHJ1ZSlcblx0XHRcdFx0XHQuZXJyb3IoZ2V0VXBsb2FkRXJyb3JEZXNjQnlDb2RlKFVwbG9hZEVycm9yQ29kZS5GaWxlTm9VcGxvYWRlZCkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGluY2x1ZGVBdHRhY2htZW50SW5Qcm9ncmVzcyA9IHRydWVcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0VtcHR5Rm9ybShpbmNsdWRlQXR0YWNobWVudEluUHJvZ3Jlc3MgPSB0cnVlKSB7XG5cdFx0Y29uc3Qgd2l0aG91dEF0dGFjaG1lbnQgPSBpbmNsdWRlQXR0YWNobWVudEluUHJvZ3Jlc3Ncblx0XHRcdD8gMCA9PT0gdGhpcy5hdHRhY2htZW50cygpLmxlbmd0aFxuXHRcdFx0OiAwID09PSB0aGlzLmF0dGFjaG1lbnRzSW5SZWFkeSgpLmxlbmd0aDtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQwID09PSB0aGlzLnRvKCkubGVuZ3RoICYmXG5cdFx0XHQwID09PSB0aGlzLmNjKCkubGVuZ3RoICYmXG5cdFx0XHQwID09PSB0aGlzLmJjYygpLmxlbmd0aCAmJlxuXHRcdFx0MCA9PT0gdGhpcy5yZXBseVRvKCkubGVuZ3RoICYmXG5cdFx0XHQwID09PSB0aGlzLnN1YmplY3QoKS5sZW5ndGggJiZcblx0XHRcdHdpdGhvdXRBdHRhY2htZW50ICYmXG5cdFx0XHQoIXRoaXMub0VkaXRvciB8fCAnJyA9PT0gdGhpcy5vRWRpdG9yLmdldERhdGEoKSlcblx0XHQpO1xuXHR9XG5cblx0cmVzZXQoKSB7XG5cdFx0dGhpcy50bygnJyk7XG5cdFx0dGhpcy5jYygnJyk7XG5cdFx0dGhpcy5iY2MoJycpO1xuXHRcdHRoaXMucmVwbHlUbygnJyk7XG5cdFx0dGhpcy5zdWJqZWN0KCcnKTtcblxuXHRcdHRoaXMucmVxdWVzdERzbihmYWxzZSk7XG5cdFx0dGhpcy5yZXF1ZXN0UmVhZFJlY2VpcHQoZmFsc2UpO1xuXHRcdHRoaXMubWFya0FzSW1wb3J0YW50KGZhbHNlKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudHNQbGFjZShmYWxzZSk7XG5cblx0XHR0aGlzLmFEcmFmdEluZm8gPSBudWxsO1xuXHRcdHRoaXMuc0luUmVwbHlUbyA9ICcnO1xuXHRcdHRoaXMuYkZyb21EcmFmdCA9IGZhbHNlO1xuXHRcdHRoaXMuc1JlZmVyZW5jZXMgPSAnJztcblxuXHRcdHRoaXMuc2VuZEVycm9yKGZhbHNlKTtcblx0XHR0aGlzLnNlbmRTdWNjZXNzQnV0U2F2ZUVycm9yKGZhbHNlKTtcblx0XHR0aGlzLnNhdmVkRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMuc2F2ZWRUaW1lKDApO1xuXHRcdHRoaXMuZW1wdHlUb0Vycm9yKGZhbHNlKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzSW5Qcm9jZXNzRXJyb3IoZmFsc2UpO1xuXG5cdFx0dGhpcy5zaG93Q2MoZmFsc2UpO1xuXHRcdHRoaXMuc2hvd0JjYyhmYWxzZSk7XG5cdFx0dGhpcy5zaG93UmVwbHlUbyhmYWxzZSk7XG5cblx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveSh0aGlzLmF0dGFjaG1lbnRzKCkpO1xuXHRcdHRoaXMuYXR0YWNobWVudHMoW10pO1xuXG5cdFx0dGhpcy5kcmFnQW5kRHJvcE92ZXIoZmFsc2UpO1xuXHRcdHRoaXMuZHJhZ0FuZERyb3BWaXNpYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZHJhZnRGb2xkZXIoJycpO1xuXHRcdHRoaXMuZHJhZnRVaWQoJycpO1xuXG5cdFx0dGhpcy5zZW5kaW5nKGZhbHNlKTtcblx0XHR0aGlzLnNhdmluZyhmYWxzZSk7XG5cblx0XHRpZiAodGhpcy5vRWRpdG9yKSB7XG5cdFx0XHR0aGlzLm9FZGl0b3IuY2xlYXIoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHRnZXRBdHRhY2htZW50c0Rvd25sb2Fkc0ZvclVwbG9hZCgpIHtcblx0XHRyZXR1cm4gXy5tYXAoXG5cdFx0XHRfLmZpbHRlcih0aGlzLmF0dGFjaG1lbnRzKCksIChpdGVtKSA9PiBpdGVtICYmICcnID09PSBpdGVtLnRlbXBOYW1lKCkpLFxuXHRcdFx0KGl0ZW0pID0+IGl0ZW0uaWRcblx0XHQpO1xuXHR9XG5cblx0cmVzaXplclRyaWdnZXIoKSB7XG5cdFx0dGhpcy5yZXNpemVyKCF0aGlzLnJlc2l6ZXIoKSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQ29tcG9zZVBvcHVwVmlldywgQ29tcG9zZVBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBQUkVGRVJSRURfU1RSSU5HKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpbnB1dC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIFN0cmluZyhrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyAoKytpZCArIHBvc3RmaXgpLnRvU3RyaW5nKDM2KTtcbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhU3RyaW5nKFN5bWJvbCgpKSB8fFxuICAgIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBzZXRHbG9iYWwoU0hBUkVELCB7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmU7XG4iLCJ2YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBUb0ludGVnZXJgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc05hTihhcmd1bWVudCA9ICthcmd1bWVudCkgPyAwIDogKGFyZ3VtZW50ID4gMCA/IGZsb29yIDogY2VpbCkoYXJndW1lbnQpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVEFHLCBTVEFUSUMsIFNFVF9NRVRIT0QpIHtcbiAgaWYgKGl0KSB7XG4gICAgdmFyIHRhcmdldCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlO1xuICAgIGlmICghaGFzKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gICAgfVxuICAgIGlmIChTRVRfTUVUSE9EICYmICFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsICd0b1N0cmluZycsIHRvU3RyaW5nKTtcbiAgICB9XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIG9iamVjdEhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIHZhciB3bWdldCA9IHN0b3JlLmdldDtcbiAgdmFyIHdtaGFzID0gc3RvcmUuaGFzO1xuICB2YXIgd21zZXQgPSBzdG9yZS5zZXQ7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICB3bXNldC5jYWxsKHN0b3JlLCBpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtZ2V0LmNhbGwoc3RvcmUsIGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtaGFzLmNhbGwoc3RvcmUsIGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gKyBtYXRjaFsxXTtcbn0gZWxzZSBpZiAodXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uICYmICt2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBtb3ZlZCB0byBlbnRyeSBwb2ludHNcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG4vLyBJRSA8PSAxMSByZXBsYWNlcyAkMCB3aXRoIHRoZSB3aG9sZSBtYXRjaCwgYXMgaWYgaXQgd2FzICQmXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82MDI0NjY2L2dldHRpbmctaWUtdG8tcmVwbGFjZS1hLXJlZ2V4LXdpdGgtdGhlLWxpdGVyYWwtc3RyaW5nLTBcbnZhciBSRVBMQUNFX0tFRVBTXyQwID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9wcmVmZXItZXNjYXBlLXJlcGxhY2VtZW50LWRvbGxhci1jaGFyIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiAnYScucmVwbGFjZSgvLi8sICckMCcpID09PSAnJDAnO1xufSkoKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbi8vIFNhZmFyaSA8PSAxMy4wLjMoPykgc3Vic3RpdHV0ZXMgbnRoIGNhcHR1cmUgd2hlcmUgbj5tIHdpdGggYW4gZW1wdHkgc3RyaW5nXG52YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAoLy4vW1JFUExBQ0VdKSB7XG4gICAgcmV0dXJuIC8uL1tSRVBMQUNFXSgnYScsICckMCcpID09PSAnJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KSgpO1xuXG4vLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbi8vIFdlZXggSlMgaGFzIGZyb3plbiBidWlsdC1pbiBwcm90b3R5cGVzLCBzbyB1c2UgdHJ5IC8gY2F0Y2ggd3JhcHBlclxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tZW1wdHktZ3JvdXAgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoICE9PSAyIHx8IHJlc3VsdFswXSAhPT0gJ2EnIHx8IHJlc3VsdFsxXSAhPT0gJ2InO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjLCBzaGFtKSB7XG4gIHZhciBTWU1CT0wgPSB3ZWxsS25vd25TeW1ib2woS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcblxuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSByZWFsIHJlZ2V4IGhlcmUgc2luY2UgaXQgY2F1c2VzIGRlb3B0aW1pemF0aW9uXG4gICAgICAvLyBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBWOFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMwNlxuICAgICAgcmUgPSB7fTtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICAgIHJlLmZsYWdzID0gJyc7XG4gICAgICByZVtTWU1CT0xdID0gLy4vW1NZTUJPTF07XG4gICAgfVxuXG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuXG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KTtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIShcbiAgICAgIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTICYmXG4gICAgICBSRVBMQUNFX0tFRVBTXyQwICYmXG4gICAgICAhUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkVcbiAgICApKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBtZXRob2RzID0gZXhlYyhTWU1CT0wsICcnW0tFWV0sIGZ1bmN0aW9uIChuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSBSZWdFeHAucHJvdG90eXBlLmV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgfSwge1xuICAgICAgUkVQTEFDRV9LRUVQU18kMDogUkVQTEFDRV9LRUVQU18kMCxcbiAgICAgIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFOiBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRVxuICAgIH0pO1xuICAgIHZhciBzdHJpbmdNZXRob2QgPSBtZXRob2RzWzBdO1xuICAgIHZhciByZWdleE1ldGhvZCA9IG1ldGhvZHNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmluZ01ldGhvZCk7XG4gICAgcmVkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByZWdleE1ldGhvZC5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJlZ2V4TWV0aG9kLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cblxuICBpZiAoc2hhbSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFJlZ0V4cC5wcm90b3R5cGVbU1lNQk9MXSwgJ3NoYW0nLCB0cnVlKTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9yZWdleHAtZXhlYycpO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cblxuICByZXR1cm4gcmVnZXhwRXhlYy5jYWxsKFIsIFMpO1xufTtcblxuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUgJiYgQ29sbGVjdGlvblByb3RvdHlwZS5mb3JFYWNoICE9PSBmb3JFYWNoKSB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCAnZm9yRWFjaCcsIGZvckVhY2gpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIENvbGxlY3Rpb25Qcm90b3R5cGUuZm9yRWFjaCA9IGZvckVhY2g7XG4gIH1cbn1cbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGNyb3Nzcm9hZHMgZnJvbSAnY3Jvc3Nyb2Fkcyc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc05vbkVtcHR5QXJyYXksIG5vb3AgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RTY3JlZW4ge1xuXHRvQ3Jvc3MgPSBudWxsO1xuXHRzU2NyZWVuTmFtZTtcblx0YVZpZXdNb2RlbHM7XG5cblx0Y29uc3RydWN0b3Ioc2NyZWVuTmFtZSwgdmlld01vZGVscyA9IFtdKSB7XG5cdFx0dGhpcy5zU2NyZWVuTmFtZSA9IHNjcmVlbk5hbWU7XG5cdFx0dGhpcy5hVmlld01vZGVscyA9IGlzQXJyYXkodmlld01vZGVscykgPyB2aWV3TW9kZWxzIDogW107XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cblx0dmlld01vZGVscygpIHtcblx0XHRyZXR1cm4gdGhpcy5hVmlld01vZGVscztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0c2NyZWVuTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zU2NyZWVuTmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7P0FycmF5KX1cblx0ICovXG5cdHJvdXRlcygpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7P09iamVjdH1cblx0ICovXG5cdF9fY3Jvc3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMub0Nyb3NzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0X19zdGFydCgpIHtcblx0XHRsZXQgcm91dGUgPSBudWxsLFxuXHRcdFx0Zk1hdGNoZXIgPSBudWxsO1xuXHRcdGNvbnN0IHJvdXRlcyA9IHRoaXMucm91dGVzKCk7XG5cblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHJvdXRlcykpIHtcblx0XHRcdGZNYXRjaGVyID0gXy5iaW5kKHRoaXMub25Sb3V0ZSB8fCBub29wLCB0aGlzKTtcblx0XHRcdHJvdXRlID0gY3Jvc3Nyb2Fkcy5jcmVhdGUoKTtcblxuXHRcdFx0cm91dGVzLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0aWYgKGl0ZW0gJiYgcm91dGUpIHtcblx0XHRcdFx0XHRyb3V0ZS5hZGRSb3V0ZShpdGVtWzBdLCBmTWF0Y2hlcikucnVsZXMgPSBpdGVtWzFdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5vQ3Jvc3MgPSByb3V0ZTtcblx0XHR9XG5cdH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5zc207IiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXMoaGlkZGVuS2V5cywga2V5KSAmJiBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIHZlcnNpb24gPSBtYXRjaFswXSA8IDQgPyAxIDogbWF0Y2hbMF0gKyBtYXRjaFsxXTtcbn0gZWxzZSBpZiAodXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uICYmICt2ZXJzaW9uO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIXByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgUFJFRkVSUkVEX1NUUklORykge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFBSRUZFUlJFRF9TVFJJTkcgJiYgdHlwZW9mIChmbiA9IGlucHV0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaW5wdXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVBSRUZFUlJFRF9TVFJJTkcgJiYgdHlwZW9mIChmbiA9IGlucHV0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0O1xuICAgIHNldHRlci5jYWxsKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyLmNhbGwoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgKi9cbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBkb2N1bWVudC5kb21haW4gJiYgbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IGFjdGl2ZVhEb2N1bWVudCA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpO1xuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJyZXF1aXJlKCcuL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSAmJiBjbGFzc29mKENvbGxlY3Rpb25Qcm90b3R5cGUpICE9PSBUT19TVFJJTkdfVEFHKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gIH1cbiAgSXRlcmF0b3JzW0NPTExFQ1RJT05fTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL3JlZ2V4cC1mbGFncycpO1xudmFyIHN0aWNreUhlbHBlcnMgPSByZXF1aXJlKCcuL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vc2hhcmVkJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xudmFyIG5hdGl2ZVJlcGxhY2UgPSBzaGFyZWQoJ25hdGl2ZS1zdHJpbmctcmVwbGFjZScsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTEubGFzdEluZGV4ICE9PSAwIHx8IHJlMi5sYXN0SW5kZXggIT09IDA7XG59KSgpO1xuXG52YXIgVU5TVVBQT1JURURfWSA9IHN0aWNreUhlbHBlcnMuVU5TVVBQT1JURURfWSB8fCBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1hc3NlcnRpb24tY2FwdHVyaW5nLWdyb3VwLCByZWdleHAvbm8tZW1wdHktZ3JvdXAsIHJlZ2V4cC9uby1sYXp5LWVuZHMgLS0gdGVzdGluZ1xudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWTtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IHJlZ2V4cEZsYWdzLmNhbGwocmUpO1xuICAgIHZhciBzb3VyY2UgPSByZS5zb3VyY2U7XG4gICAgdmFyIGNoYXJzQWRkZWQgPSAwO1xuICAgIHZhciBzdHJDb3B5ID0gc3RyO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCd5JywgJycpO1xuICAgICAgaWYgKGZsYWdzLmluZGV4T2YoJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gU3RyaW5nKHN0cikuc2xpY2UocmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIHN0cltyZS5sYXN0SW5kZXggLSAxXSAhPT0gJ1xcbicpKSB7XG4gICAgICAgIHNvdXJjZSA9ICcoPzogJyArIHNvdXJjZSArICcpJztcbiAgICAgICAgc3RyQ29weSA9ICcgJyArIHN0ckNvcHk7XG4gICAgICAgIGNoYXJzQWRkZWQrKztcbiAgICAgIH1cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBzdHIgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14oPzonICsgc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgfVxuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgc291cmNlICsgJyQoPyFcXFxccyknLCBmbGFncyk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IG1hdGNoLmlucHV0LnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaC5pbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgICAgcmUubGFzdEluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgIH0gZWxzZSByZS5sYXN0SW5kZXggPSAwO1xuICAgIH0gZWxzZSBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZS5sYXN0SW5kZXggPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gJ19fcmxBJztcbmNvbnN0IFRJTUVfS0VZID0gJ19fcmxUJztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcmFnZU5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdG9yYWdlU3VwcG9ydGVkKHN0b3JhZ2VOYW1lKSB7XG5cdGxldCBzdG9yYWdlSXNBdmFpbGFibGUgPSBmYWxzZTtcblx0dHJ5IHtcblx0XHQvLyBhdDogd2luZG93W3N0b3JhZ2VOYW1lXSBmaXJlZm94IHRocm93cyBTZWN1cml0eUVycm9yOiBUaGUgb3BlcmF0aW9uIGlzIGluc2VjdXJlLiB3aGVuIGluIGlmcmFtZVxuXHRcdHN0b3JhZ2VJc0F2YWlsYWJsZSA9IHN0b3JhZ2VOYW1lIGluIHdpbmRvdyAmJiB3aW5kb3dbc3RvcmFnZU5hbWVdICYmIHdpbmRvd1tzdG9yYWdlTmFtZV0uc2V0SXRlbTtcblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdGlmIChzdG9yYWdlSXNBdmFpbGFibGUpIHtcblx0XHRjb25zdCBzID0gd2luZG93W3N0b3JhZ2VOYW1lXSxcblx0XHRcdGtleSA9ICd0ZXN0TG9jYWxTdG9yYWdlXycgKyB3aW5kb3cuTWF0aC5yYW5kb20oKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRzLnNldEl0ZW0oa2V5LCBrZXkpO1xuXHRcdFx0aWYgKGtleSA9PT0gcy5nZXRJdGVtKGtleSkpIHtcblx0XHRcdFx0cy5yZW1vdmVJdGVtKGtleSk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuY29uc3QgU0VTU19TVE9SQUdFID0gaXNTdG9yYWdlU3VwcG9ydGVkKCdzZXNzaW9uU3RvcmFnZScpID8gd2luZG93LnNlc3Npb25TdG9yYWdlIHx8IG51bGwgOiBudWxsO1xuY29uc3QgV0lOX1NUT1JBR0UgPSB3aW5kb3cudG9wIHx8IHdpbmRvdyB8fCBudWxsO1xuXG5jb25zdCBfX2dldCA9IChrZXkpID0+IHtcblx0bGV0IHJlc3VsdCA9IG51bGw7XG5cdGlmIChTRVNTX1NUT1JBR0UpIHtcblx0XHRyZXN1bHQgPSBTRVNTX1NUT1JBR0UuZ2V0SXRlbShrZXkpIHx8IG51bGw7XG5cdH0gZWxzZSBpZiAoV0lOX1NUT1JBR0UgJiYgd2luZG93LkpTT04pIHtcblx0XHRjb25zdCBkYXRhID1cblx0XHRcdFdJTl9TVE9SQUdFLm5hbWUgJiYgJ3snID09PSBXSU5fU1RPUkFHRS5uYW1lLnRvU3RyaW5nKCkuc3Vic3RyKDAsIDEpXG5cdFx0XHRcdD8gd2luZG93LkpTT04ucGFyc2UoV0lOX1NUT1JBR0UubmFtZS50b1N0cmluZygpKVxuXHRcdFx0XHQ6IG51bGw7XG5cdFx0cmVzdWx0ID0gZGF0YSA/IGRhdGFba2V5XSB8fCBudWxsIDogbnVsbDtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBfX3NldCA9IChrZXksIHZhbHVlKSA9PiB7XG5cdGlmIChTRVNTX1NUT1JBR0UpIHtcblx0XHRTRVNTX1NUT1JBR0Uuc2V0SXRlbShrZXksIHZhbHVlKTtcblx0fSBlbHNlIGlmIChXSU5fU1RPUkFHRSAmJiB3aW5kb3cuSlNPTikge1xuXHRcdGxldCBkYXRhID1cblx0XHRcdFdJTl9TVE9SQUdFLm5hbWUgJiYgJ3snID09PSBXSU5fU1RPUkFHRS5uYW1lLnRvU3RyaW5nKCkuc3Vic3RyKDAsIDEpXG5cdFx0XHRcdD8gd2luZG93LkpTT04ucGFyc2UoV0lOX1NUT1JBR0UubmFtZS50b1N0cmluZygpKVxuXHRcdFx0XHQ6IG51bGw7XG5cdFx0ZGF0YSA9IGRhdGEgfHwge307XG5cdFx0ZGF0YVtrZXldID0gdmFsdWU7XG5cblx0XHRXSU5fU1RPUkFHRS5uYW1lID0gd2luZG93LkpTT04uc3RyaW5naWZ5KGRhdGEpO1xuXHR9XG59O1xuXG5jb25zdCB0aW1lc3RhbXAgPSAoKSA9PiB3aW5kb3cuTWF0aC5yb3VuZChuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKTtcblxuY29uc3Qgc2V0VGltZXN0YW1wID0gKCkgPT4gX19zZXQoVElNRV9LRVksIHRpbWVzdGFtcCgpKTtcblxuY29uc3QgZ2V0VGltZXN0YW1wID0gKCkgPT4ge1xuXHRjb25zdCB0aW1lID0gX19nZXQoVElNRV9LRVksIDApO1xuXHRyZXR1cm4gdGltZSA/IHdpbmRvdy5wYXJzZUludCh0aW1lLCAxMCkgfHwgMCA6IDA7XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIYXNoKCkge1xuXHRyZXR1cm4gX19nZXQoU1RPUkFHRV9LRVkpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SGFzaCgpIHtcblx0Y29uc3Qga2V5ID0gJ0F1dGhBY2NvdW50SGFzaCcsXG5cdFx0YXBwRGF0YSA9IHdpbmRvdy5fX3JsYWhfZGF0YSgpO1xuXG5cdF9fc2V0KFNUT1JBR0VfS0VZLCBhcHBEYXRhICYmIGFwcERhdGFba2V5XSA/IGFwcERhdGFba2V5XSA6ICcnKTtcblx0c2V0VGltZXN0YW1wKCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckhhc2goKSB7XG5cdF9fc2V0KFNUT1JBR0VfS0VZLCAnJyk7XG5cdHNldFRpbWVzdGFtcCgpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tUaW1lc3RhbXAoKSB7XG5cdGlmICh0aW1lc3RhbXAoKSA+IGdldFRpbWVzdGFtcCgpICsgMTAwMCAqIDYwICogNjApIHtcblx0XHQvLyA2MG1cblx0XHRjbGVhckhhc2goKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIGluaXQgc2VjdGlvblxud2luZG93LnNldEludGVydmFsKHNldFRpbWVzdGFtcCwgMTAwMCAqIDYwKTsgLy8gMW1cbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsO1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignbmF2aWdhdG9yJywgJ3VzZXJBZ2VudCcpIHx8ICcnO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSAqL1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IGRvY3VtZW50LmRvbWFpbiAmJiBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gYWN0aXZlWERvY3VtZW50ID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKCk7XG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQykge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlLCBUT19TVFJJTkdfVEFHKSkge1xuICAgIGRlZmluZVByb3BlcnR5KGl0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgfVxufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyIHNwbGl0ID0gJycuc3BsaXQ7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdC5jYWxsKGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlck91dCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBJU19GSUxURVJfT1VUID0gVFlQRSA9PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX09VVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2guY2FsbCh0YXJnZXQsIHZhbHVlKTsgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2guY2FsbCh0YXJnZXQsIHZhbHVlKTsgLy8gZmlsdGVyT3V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJPdXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyT3V0OiBjcmVhdGVNZXRob2QoNylcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY2xhc3NvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5jcm9zc3JvYWRzOyIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0Q2hlY2tib3ggZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zID0ge31cblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcyA9IHt9KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudmFsdWUgPSBwYXJhbXMudmFsdWU7XG5cdFx0aWYgKGlzVW5kKHRoaXMudmFsdWUpIHx8ICF0aGlzLnZhbHVlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy52YWx1ZSA9IGtvLm9ic2VydmFibGUoaXNVbmQodGhpcy52YWx1ZSkgPyBmYWxzZSA6ICEhdGhpcy52YWx1ZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5lbmFibGUgPSBwYXJhbXMuZW5hYmxlO1xuXHRcdGlmIChpc1VuZCh0aGlzLmVuYWJsZSkgfHwgIXRoaXMuZW5hYmxlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy5lbmFibGUgPSBrby5vYnNlcnZhYmxlKGlzVW5kKHRoaXMuZW5hYmxlKSA/IHRydWUgOiAhIXRoaXMuZW5hYmxlKTtcblx0XHR9XG5cblx0XHR0aGlzLmRpc2FibGUgPSBwYXJhbXMuZGlzYWJsZTtcblx0XHRpZiAoaXNVbmQodGhpcy5kaXNhYmxlKSB8fCAhdGhpcy5kaXNhYmxlLnN1YnNjcmliZSkge1xuXHRcdFx0dGhpcy5kaXNhYmxlID0ga28ub2JzZXJ2YWJsZShpc1VuZCh0aGlzLmRpc2FibGUpID8gZmFsc2UgOiAhIXRoaXMuZGlzYWJsZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5sYWJlbCA9IHBhcmFtcy5sYWJlbCB8fCAnJztcblx0XHR0aGlzLmlubGluZSA9IGlzVW5kKHBhcmFtcy5pbmxpbmUpID8gZmFsc2UgOiBwYXJhbXMuaW5saW5lO1xuXG5cdFx0dGhpcy5yZWFkT25seSA9IGlzVW5kKHBhcmFtcy5yZWFkT25seSkgPyBmYWxzZSA6ICEhcGFyYW1zLnJlYWRPbmx5O1xuXHRcdHRoaXMuaW52ZXJ0ZWQgPSBpc1VuZChwYXJhbXMuaW52ZXJ0ZWQpID8gZmFsc2UgOiAhIXBhcmFtcy5pbnZlcnRlZDtcblxuXHRcdHRoaXMubGFiZWxlZCA9ICFpc1VuZChwYXJhbXMubGFiZWwpO1xuXHRcdHRoaXMubGFiZWxBbmltYXRlZCA9ICEhcGFyYW1zLmxhYmVsQW5pbWF0ZWQ7XG5cdH1cblxuXHRjbGljaygpIHtcblx0XHRpZiAoIXRoaXMucmVhZE9ubHkgJiYgdGhpcy5lbmFibGUoKSAmJiAhdGhpcy5kaXNhYmxlKCkpIHtcblx0XHRcdHRoaXMudmFsdWUoIXRoaXMudmFsdWUoKSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0Q2hlY2tib3gsIEFic3RyYWN0Q2hlY2tib3ggYXMgZGVmYXVsdCB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBwYXJzZTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiBQYXJzZXMgc3RydWN0dXJlZCBlLW1haWwgYWRkcmVzc2VzIGZyb20gYW4gYWRkcmVzcyBmaWVsZFxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgXCJOYW1lIDxhZGRyZXNzQGRvbWFpbj5cIlxuICpcbiAqIHdpbGwgYmUgY29udmVydGVkIHRvXG4gKlxuICogICAgIFt7bmFtZTogXCJOYW1lXCIsIGFkZHJlc3M6IFwiYWRkcmVzc0Bkb21haW5cIn1dXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBBZGRyZXNzIGZpZWxkXG4gKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgYWRkcmVzcyBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICB2YXIgdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihzdHIpO1xuICB2YXIgdG9rZW5zID0gdG9rZW5pemVyLnRva2VuaXplKCk7XG5cbiAgdmFyIGFkZHJlc3NlcyA9IFtdO1xuICB2YXIgYWRkcmVzcyA9IFtdO1xuICB2YXIgcGFyc2VkQWRkcmVzc2VzID0gW107XG5cbiAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdvcGVyYXRvcicgJiYgKHRva2VuLnZhbHVlID09PSAnLCcgfHwgdG9rZW4udmFsdWUgPT09ICc7JykpIHtcbiAgICAgIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgICAgIH1cbiAgICAgIGFkZHJlc3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkcmVzcy5wdXNoKHRva2VuKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgIGFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICB9XG5cbiAgYWRkcmVzc2VzLmZvckVhY2goZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgICBhZGRyZXNzID0gX2hhbmRsZUFkZHJlc3MoYWRkcmVzcyk7XG4gICAgaWYgKGFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICBwYXJzZWRBZGRyZXNzZXMgPSBwYXJzZWRBZGRyZXNzZXMuY29uY2F0KGFkZHJlc3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZEFkZHJlc3Nlcztcbn07XG5cbi8qKlxuICogQ29udmVydHMgdG9rZW5zIGZvciBhIHNpbmdsZSBhZGRyZXNzIGludG8gYW4gYWRkcmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB0b2tlbnMgVG9rZW5zIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSBBZGRyZXNzIG9iamVjdFxuICovXG5mdW5jdGlvbiBfaGFuZGxlQWRkcmVzcyh0b2tlbnMpIHtcbiAgdmFyIGlzR3JvdXAgPSBmYWxzZTtcbiAgdmFyIHN0YXRlID0gJ3RleHQnO1xuICB2YXIgYWRkcmVzcyA9IHZvaWQgMDtcbiAgdmFyIGFkZHJlc3NlcyA9IFtdO1xuICB2YXIgZGF0YSA9IHtcbiAgICBhZGRyZXNzOiBbXSxcbiAgICBjb21tZW50OiBbXSxcbiAgICBncm91cDogW10sXG4gICAgdGV4dDogW11cblxuICAgIC8vIEZpbHRlciBvdXQgPGFkZHJlc3Nlcz4sIChjb21tZW50cykgYW5kIHJlZ3VsYXIgdGV4dFxuICB9O2ZvciAodmFyIGkgPSAwLCBsZW4gPSB0b2tlbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ29wZXJhdG9yJykge1xuICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBzdGF0ZSA9ICdhZGRyZXNzJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKCc6XG4gICAgICAgICAgc3RhdGUgPSAnY29tbWVudCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJzonOlxuICAgICAgICAgIHN0YXRlID0gJ2dyb3VwJztcbiAgICAgICAgICBpc0dyb3VwID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBzdGF0ZSA9ICd0ZXh0JztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRva2VuLnZhbHVlKSB7XG4gICAgICAgIGRhdGFbc3RhdGVdLnB1c2godG9rZW4udmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZXJlIGlzIG5vIHRleHQgYnV0IGEgY29tbWVudCwgcmVwbGFjZSB0aGUgdHdvXG4gIGlmICghZGF0YS50ZXh0Lmxlbmd0aCAmJiBkYXRhLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50O1xuICAgIGRhdGEuY29tbWVudCA9IFtdO1xuICB9XG5cbiAgaWYgKGlzR3JvdXApIHtcbiAgICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI2FwcGVuZGl4LUEuMS4zXG4gICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmpvaW4oJyAnKTtcbiAgICBhZGRyZXNzZXMucHVzaCh7XG4gICAgICBuYW1lOiBkYXRhLnRleHQgfHwgYWRkcmVzcyAmJiBhZGRyZXNzLm5hbWUsXG4gICAgICBncm91cDogZGF0YS5ncm91cC5sZW5ndGggPyBwYXJzZShkYXRhLmdyb3VwLmpvaW4oJywnKSkgOiBbXVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIG5vIGFkZHJlc3Mgd2FzIGZvdW5kLCB0cnkgdG8gZGV0ZWN0IG9uZSBmcm9tIHJlZ3VsYXIgdGV4dFxuICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCAmJiBkYXRhLnRleHQubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBfaSA9IGRhdGEudGV4dC5sZW5ndGggLSAxOyBfaSA+PSAwOyBfaS0tKSB7XG4gICAgICAgIGlmIChkYXRhLnRleHRbX2ldLm1hdGNoKC9eW15AXFxzXStAW15AXFxzXSskLykpIHtcbiAgICAgICAgICBkYXRhLmFkZHJlc3MgPSBkYXRhLnRleHQuc3BsaWNlKF9pLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgX3JlZ2V4SGFuZGxlciA9IGZ1bmN0aW9uIF9yZWdleEhhbmRsZXIoYWRkcmVzcykge1xuICAgICAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgICBkYXRhLmFkZHJlc3MgPSBbYWRkcmVzcy50cmltKCldO1xuICAgICAgICAgIHJldHVybiAnICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFkZHJlc3M7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIHN0aWxsIG5vIGFkZHJlc3NcbiAgICAgIGlmICghZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKHZhciBfaTIgPSBkYXRhLnRleHQubGVuZ3RoIC0gMTsgX2kyID49IDA7IF9pMi0tKSB7XG4gICAgICAgICAgZGF0YS50ZXh0W19pMl0gPSBkYXRhLnRleHRbX2kyXS5yZXBsYWNlKC9cXHMqXFxiW15AXFxzXStAW15AXFxzXStcXGJcXHMqLywgX3JlZ2V4SGFuZGxlcikudHJpbSgpO1xuICAgICAgICAgIGlmIChkYXRhLmFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIHN0aWxsIGlzIG5vIHRleHQgYnV0IGEgY29tbWVudCBleGl4dHMsIHJlcGxhY2UgdGhlIHR3b1xuICAgIGlmICghZGF0YS50ZXh0Lmxlbmd0aCAmJiBkYXRhLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgICBkYXRhLnRleHQgPSBkYXRhLmNvbW1lbnQ7XG4gICAgICBkYXRhLmNvbW1lbnQgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIG9ubHkgdGhlIGZpcnN0IGFkZHJlc3Mgb2NjdXJlbmNlLCBwdXNoIG90aGVycyB0byByZWd1bGFyIHRleHRcbiAgICBpZiAoZGF0YS5hZGRyZXNzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5jb25jYXQoZGF0YS5hZGRyZXNzLnNwbGljZSgxKSk7XG4gICAgfVxuXG4gICAgLy8gSm9pbiB2YWx1ZXMgd2l0aCBzcGFjZXNcbiAgICBkYXRhLnRleHQgPSBkYXRhLnRleHQuam9pbignICcpO1xuICAgIGRhdGEuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcy5qb2luKCcgJyk7XG5cbiAgICBpZiAoIWRhdGEuYWRkcmVzcyAmJiBpc0dyb3VwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MgPSB7XG4gICAgICAgIGFkZHJlc3M6IGRhdGEuYWRkcmVzcyB8fCBkYXRhLnRleHQgfHwgJycsXG4gICAgICAgIG5hbWU6IGRhdGEudGV4dCB8fCBkYXRhLmFkZHJlc3MgfHwgJydcbiAgICAgIH07XG5cbiAgICAgIGlmIChhZGRyZXNzLmFkZHJlc3MgPT09IGFkZHJlc3MubmFtZSkge1xuICAgICAgICBpZiAoKGFkZHJlc3MuYWRkcmVzcyB8fCAnJykubWF0Y2goL0AvKSkge1xuICAgICAgICAgIGFkZHJlc3MubmFtZSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZHJlc3MuYWRkcmVzcyA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhZGRyZXNzZXM7XG59O1xuXG4vKlxuICogT3BlcmF0b3IgdG9rZW5zIGFuZCB3aGljaCB0b2tlbnMgYXJlIGV4cGVjdGVkIHRvIGVuZCB0aGUgc2VxdWVuY2VcbiAqL1xudmFyIE9QRVJBVE9SUyA9IHtcbiAgJ1wiJzogJ1wiJyxcbiAgJygnOiAnKScsXG4gICc8JzogJz4nLFxuICAnLCc6ICcnLFxuICAvLyBHcm91cHMgYXJlIGVuZGVkIGJ5IHNlbWljb2xvbnNcbiAgJzonOiAnOycsXG4gIC8vIFNlbWljb2xvbnMgYXJlIG5vdCBhIGxlZ2FsIGRlbGltaXRlciBwZXIgdGhlIFJGQzI4MjIgZ3JhbW1hciBvdGhlclxuICAvLyB0aGFuIGZvciB0ZXJtaW5hdGluZyBhIGdyb3VwLCBidXQgdGhleSBhcmUgYWxzbyBub3QgdmFsaWQgZm9yIGFueVxuICAvLyBvdGhlciB1c2UgaW4gdGhpcyBjb250ZXh0LiAgR2l2ZW4gdGhhdCBzb21lIG1haWwgY2xpZW50cyBoYXZlXG4gIC8vIGhpc3RvcmljYWxseSBhbGxvd2VkIHRoZSBzZW1pY29sb24gYXMgYSBkZWxpbWl0ZXIgZXF1aXZhbGVudCB0byB0aGVcbiAgLy8gY29tbWEgaW4gdGhlaXIgVUksIGl0IG1ha2VzIHNlbnNlIHRvIHRyZWF0IHRoZW0gdGhlIHNhbWUgYXMgYSBjb21tYVxuICAvLyB3aGVuIHVzZWQgb3V0c2lkZSBvZiBhIGdyb3VwLlxuICAnOyc6ICcnXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBUb2tlbml6ZXIgb2JqZWN0IGZvciB0b2tlbml6aW5nIGFkZHJlc3MgZmllbGQgc3RyaW5nc1xuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciBBZGRyZXNzIGZpZWxkIHN0cmluZ1xuICAgKi9cbn07XG52YXIgVG9rZW5pemVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUb2tlbml6ZXIoc3RyKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRva2VuaXplcik7XG5cbiAgICB0aGlzLnN0ciA9IChzdHIgfHwgJycpLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5vcGVyYXRvckN1cnJlbnQgPSAnJztcbiAgICB0aGlzLm9wZXJhdG9yRXhwZWN0aW5nID0gJyc7XG4gICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxpc3QgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2tlbml6ZXMgdGhlIG9yaWdpbmFsIGlucHV0IHN0cmluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2Ygb3BlcmF0b3J8dGV4dCB0b2tlbnNcbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoVG9rZW5pemVyLCBbe1xuICAgIGtleTogJ3Rva2VuaXplJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9rZW5pemUoKSB7XG4gICAgICB2YXIgY2hyID0gdm9pZCAwO1xuICAgICAgdmFyIGxpc3QgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLnN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjaHIgPSB0aGlzLnN0ci5jaGFyQXQoaSk7XG4gICAgICAgIHRoaXMuY2hlY2tDaGFyKGNocik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSAobm9kZS52YWx1ZSB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICAgICAgbGlzdC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgY2hhcmFjdGVyIGlzIGFuIG9wZXJhdG9yIG9yIHRleHQgYW5kIGFjdHMgYWNjb3JkaW5nbHlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjaHIgQ2hhcmFjdGVyIGZyb20gdGhlIGFkZHJlc3MgZmllbGRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnY2hlY2tDaGFyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hlY2tDaGFyKGNocikge1xuICAgICAgaWYgKChjaHIgaW4gT1BFUkFUT1JTIHx8IGNociA9PT0gJ1xcXFwnKSAmJiB0aGlzLmVzY2FwZWQpIHtcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgJiYgY2hyID09PSB0aGlzLm9wZXJhdG9yRXhwZWN0aW5nKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAnb3BlcmF0b3InLFxuICAgICAgICAgIHZhbHVlOiBjaHJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKTtcbiAgICAgICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9ICcnO1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5vcGVyYXRvckV4cGVjdGluZyAmJiBjaHIgaW4gT1BFUkFUT1JTKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAnb3BlcmF0b3InLFxuICAgICAgICAgIHZhbHVlOiBjaHJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5saXN0LnB1c2godGhpcy5ub2RlKTtcbiAgICAgICAgdGhpcy5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9IE9QRVJBVE9SU1tjaHJdO1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZXNjYXBlZCAmJiBjaHIgPT09ICdcXFxcJykge1xuICAgICAgICB0aGlzLmVzY2FwZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5ub2RlKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdmFsdWU6ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVzY2FwZWQgJiYgY2hyICE9PSAnXFxcXCcpIHtcbiAgICAgICAgdGhpcy5ub2RlLnZhbHVlICs9ICdcXFxcJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub2RlLnZhbHVlICs9IGNocjtcbiAgICAgIHRoaXMuZXNjYXBlZCA9IGZhbHNlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUb2tlbml6ZXI7XG59KCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OWhaR1J5WlhOemNHRnljMlZ5TG1weklsMHNJbTVoYldWeklqcGJJbkJoY25ObElpd2ljM1J5SWl3aWRHOXJaVzVwZW1WeUlpd2lWRzlyWlc1cGVtVnlJaXdpZEc5clpXNXpJaXdpZEc5clpXNXBlbVVpTENKaFpHUnlaWE56WlhNaUxDSmhaR1J5WlhOeklpd2ljR0Z5YzJWa1FXUmtjbVZ6YzJWeklpd2labTl5UldGamFDSXNJblJ2YTJWdUlpd2lkSGx3WlNJc0luWmhiSFZsSWl3aWJHVnVaM1JvSWl3aWNIVnphQ0lzSWw5b1lXNWtiR1ZCWkdSeVpYTnpJaXdpWTI5dVkyRjBJaXdpYVhOSGNtOTFjQ0lzSW5OMFlYUmxJaXdpWkdGMFlTSXNJbU52YlcxbGJuUWlMQ0puY205MWNDSXNJblJsZUhRaUxDSnBJaXdpYkdWdUlpd2lhbTlwYmlJc0ltNWhiV1VpTENKdFlYUmphQ0lzSW5Od2JHbGpaU0lzSWw5eVpXZGxlRWhoYm1Sc1pYSWlMQ0owY21sdElpd2ljbVZ3YkdGalpTSXNJazlRUlZKQlZFOVNVeUlzSW5SdlUzUnlhVzVuSWl3aWIzQmxjbUYwYjNKRGRYSnlaVzUwSWl3aWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jaUxDSnViMlJsSWl3aVpYTmpZWEJsWkNJc0lteHBjM1FpTENKamFISWlMQ0pqYUdGeVFYUWlMQ0pqYUdWamEwTm9ZWElpWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN08ydENRV04zUWtFc1N6czdPenRCUVdSNFFqczdPenM3T3pzN096czdPenM3UVVGalpTeFRRVUZUUVN4TFFVRlVMRU5CUVdkQ1F5eEhRVUZvUWl4RlFVRnhRanRCUVVOc1F5eE5RVUZOUXl4WlFVRlpMRWxCUVVsRExGTkJRVW9zUTBGQlkwWXNSMEZCWkN4RFFVRnNRanRCUVVOQkxFMUJRVTFITEZOQlFWTkdMRlZCUVZWSExGRkJRVllzUlVGQlpqczdRVUZGUVN4TlFVRk5ReXhaUVVGWkxFVkJRV3hDTzBGQlEwRXNUVUZCU1VNc1ZVRkJWU3hGUVVGa08wRkJRMEVzVFVGQlNVTXNhMEpCUVd0Q0xFVkJRWFJDT3p0QlFVVkJTaXhUUVVGUFN5eFBRVUZRTEVOQlFXVXNWVUZCVlVNc1MwRkJWaXhGUVVGcFFqdEJRVU01UWl4UlFVRkpRU3hOUVVGTlF5eEpRVUZPTEV0QlFXVXNWVUZCWml4TFFVRTRRa1FzVFVGQlRVVXNTMEZCVGl4TFFVRm5RaXhIUVVGb1FpeEpRVUYxUWtZc1RVRkJUVVVzUzBGQlRpeExRVUZuUWl4SFFVRnlSU3hEUVVGS0xFVkJRU3RGTzBGQlF6ZEZMRlZCUVVsTUxGRkJRVkZOTEUxQlFWb3NSVUZCYjBJN1FVRkRiRUpRTEd0Q1FVRlZVU3hKUVVGV0xFTkJRV1ZRTEU5QlFXWTdRVUZEUkR0QlFVTkVRU3huUWtGQlZTeEZRVUZXTzBGQlEwUXNTMEZNUkN4TlFVdFBPMEZCUTB4QkxHTkJRVkZQTEVsQlFWSXNRMEZCWVVvc1MwRkJZanRCUVVORU8wRkJRMFlzUjBGVVJEczdRVUZYUVN4TlFVRkpTQ3hSUVVGUlRTeE5RVUZhTEVWQlFXOUNPMEZCUTJ4Q1VDeGpRVUZWVVN4SlFVRldMRU5CUVdWUUxFOUJRV1k3UVVGRFJEczdRVUZGUkVRc1dVRkJWVWNzVDBGQlZpeERRVUZyUWl4VlFVRlZSaXhQUVVGV0xFVkJRVzFDTzBGQlEyNURRU3hqUVVGVlVTeGxRVUZsVWl4UFFVRm1MRU5CUVZZN1FVRkRRU3hSUVVGSlFTeFJRVUZSVFN4TlFVRmFMRVZCUVc5Q08wRkJRMnhDVEN4M1FrRkJhMEpCTEdkQ1FVRm5RbEVzVFVGQmFFSXNRMEZCZFVKVUxFOUJRWFpDTEVOQlFXeENPMEZCUTBRN1FVRkRSaXhIUVV4RU96dEJRVTlCTEZOQlFVOURMR1ZCUVZBN1FVRkRSRHM3UVVGRlJEczdPenM3TzBGQlRVRXNVMEZCVTA4c1kwRkJWQ3hEUVVGNVFsZ3NUVUZCZWtJc1JVRkJhVU03UVVGREwwSXNUVUZCU1dFc1ZVRkJWU3hMUVVGa08wRkJRMEVzVFVGQlNVTXNVVUZCVVN4TlFVRmFPMEZCUTBFc1RVRkJTVmdzWjBKQlFVbzdRVUZEUVN4TlFVRk5SQ3haUVVGWkxFVkJRV3hDTzBGQlEwRXNUVUZCVFdFc1QwRkJUenRCUVVOWVdpeGhRVUZUTEVWQlJFVTdRVUZGV0dFc1lVRkJVeXhGUVVaRk8wRkJSMWhETEZkQlFVOHNSVUZJU1R0QlFVbFlReXhWUVVGTk96dEJRVWRTTzBGQlVHRXNSMEZCWWl4RFFWRkJMRXRCUVVzc1NVRkJTVU1zU1VGQlNTeERRVUZTTEVWQlFWZERMRTFCUVUxd1FpeFBRVUZQVXl4TlFVRTNRaXhGUVVGeFExVXNTVUZCU1VNc1IwRkJla01zUlVGQk9FTkVMRWRCUVRsRExFVkJRVzFFTzBGQlEycEVMRkZCUVUxaUxGRkJRVkZPTEU5QlFVOXRRaXhEUVVGUUxFTkJRV1E3TzBGQlJVRXNVVUZCU1dJc1RVRkJUVU1zU1VGQlRpeExRVUZsTEZWQlFXNUNMRVZCUVN0Q08wRkJRemRDTEdOQlFWRkVMRTFCUVUxRkxFdEJRV1E3UVVGRFJTeGhRVUZMTEVkQlFVdzdRVUZEUlUwc2EwSkJRVkVzVTBGQlVqdEJRVU5CTzBGQlEwWXNZVUZCU3l4SFFVRk1PMEZCUTBWQkxHdENRVUZSTEZOQlFWSTdRVUZEUVR0QlFVTkdMR0ZCUVVzc1IwRkJURHRCUVVORlFTeHJRa0ZCVVN4UFFVRlNPMEZCUTBGRUxHOUNRVUZWTEVsQlFWWTdRVUZEUVR0QlFVTkdPMEZCUTBWRExHdENRVUZSTEUxQlFWSTdRVUZhU2p0QlFXTkVMRXRCWmtRc1RVRmxUenRCUVVOTUxGVkJRVWxTTEUxQlFVMUZMRXRCUVZZc1JVRkJhVUk3UVVGRFprOHNZVUZCUzBRc1MwRkJUQ3hGUVVGWlNpeEpRVUZhTEVOQlFXbENTaXhOUVVGTlJTeExRVUYyUWp0QlFVTkVPMEZCUTBZN1FVRkRSanM3UVVGRlJEdEJRVU5CTEUxQlFVa3NRMEZCUTA4c1MwRkJTMGNzU1VGQlRDeERRVUZWVkN4TlFVRllMRWxCUVhGQ1RTeExRVUZMUXl4UFFVRk1MRU5CUVdGUUxFMUJRWFJETEVWQlFUaERPMEZCUXpWRFRTeFRRVUZMUnl4SlFVRk1MRWRCUVZsSUxFdEJRVXRETEU5QlFXcENPMEZCUTBGRUxGTkJRVXRETEU5QlFVd3NSMEZCWlN4RlFVRm1PMEZCUTBRN08wRkJSVVFzVFVGQlNVZ3NUMEZCU2l4RlFVRmhPMEZCUTFnN1FVRkRRVVVzVTBGQlMwY3NTVUZCVEN4SFFVRlpTQ3hMUVVGTFJ5eEpRVUZNTEVOQlFWVkhMRWxCUVZZc1EwRkJaU3hIUVVGbUxFTkJRVm83UVVGRFFXNUNMR05CUVZWUkxFbEJRVllzUTBGQlpUdEJRVU5pV1N4WlFVRk5VQ3hMUVVGTFJ5eEpRVUZNTEVsQlFXTm1MRmRCUVZkQkxGRkJRVkZ0UWl4SlFVUXhRanRCUVVWaVRDeGhRVUZQUml4TFFVRkxSU3hMUVVGTUxFTkJRVmRTTEUxQlFWZ3NSMEZCYjBKaUxFMUJRVTF0UWl4TFFVRkxSU3hMUVVGTUxFTkJRVmRKTEVsQlFWZ3NRMEZCWjBJc1IwRkJhRUlzUTBGQlRpeERRVUZ3UWl4SFFVRnJSRHRCUVVZMVF5eExRVUZtTzBGQlNVUXNSMEZRUkN4TlFVOVBPMEZCUTB3N1FVRkRRU3hSUVVGSkxFTkJRVU5PTEV0QlFVdGFMRTlCUVV3c1EwRkJZVTBzVFVGQlpDeEpRVUYzUWswc1MwRkJTMGNzU1VGQlRDeERRVUZWVkN4TlFVRjBReXhGUVVFNFF6dEJRVU0xUXl4WFFVRkxMRWxCUVVsVkxFdEJRVWxLTEV0QlFVdEhMRWxCUVV3c1EwRkJWVlFzVFVGQlZpeEhRVUZ0UWl4RFFVRm9ReXhGUVVGdFExVXNUVUZCU3l4RFFVRjRReXhGUVVFeVEwRXNTVUZCTTBNc1JVRkJaMFE3UVVGRE9VTXNXVUZCU1Vvc1MwRkJTMGNzU1VGQlRDeERRVUZWUXl4RlFVRldMRVZCUVdGSkxFdEJRV0lzUTBGQmJVSXNiVUpCUVc1Q0xFTkJRVW9zUlVGQk5rTTdRVUZETTBOU0xHVkJRVXRhTEU5QlFVd3NSMEZCWlZrc1MwRkJTMGNzU1VGQlRDeERRVUZWVFN4TlFVRldMRU5CUVdsQ1RDeEZRVUZxUWl4RlFVRnZRaXhEUVVGd1FpeERRVUZtTzBGQlEwRTdRVUZEUkR0QlFVTkdPenRCUVVWRUxGVkJRVWxOTEdkQ1FVRm5RaXhUUVVGb1FrRXNZVUZCWjBJc1EwRkJWWFJDTEU5QlFWWXNSVUZCYlVJN1FVRkRja01zV1VGQlNTeERRVUZEV1N4TFFVRkxXaXhQUVVGTUxFTkJRV0ZOTEUxQlFXeENMRVZCUVRCQ08wRkJRM2hDVFN4bFFVRkxXaXhQUVVGTUxFZEJRV1VzUTBGQlEwRXNVVUZCVVhWQ0xFbEJRVklzUlVGQlJDeERRVUZtTzBGQlEwRXNhVUpCUVU4c1IwRkJVRHRCUVVORUxGTkJTRVFzVFVGSFR6dEJRVU5NTEdsQ1FVRlBka0lzVDBGQlVEdEJRVU5FTzBGQlEwWXNUMEZRUkRzN1FVRlRRVHRCUVVOQkxGVkJRVWtzUTBGQlExa3NTMEZCUzFvc1QwRkJUQ3hEUVVGaFRTeE5RVUZzUWl4RlFVRXdRanRCUVVONFFpeGhRVUZMTEVsQlFVbFZMRTFCUVVsS0xFdEJRVXRITEVsQlFVd3NRMEZCVlZRc1RVRkJWaXhIUVVGdFFpeERRVUZvUXl4RlFVRnRRMVVzVDBGQlN5eERRVUY0UXl4RlFVRXlRMEVzUzBGQk0wTXNSVUZCWjBRN1FVRkRPVU5LTEdWQlFVdEhMRWxCUVV3c1EwRkJWVU1zUjBGQlZpeEpRVUZsU2l4TFFVRkxSeXhKUVVGTUxFTkJRVlZETEVkQlFWWXNSVUZCWVZFc1QwRkJZaXhEUVVGeFFpd3lRa0ZCY2tJc1JVRkJhMFJHTEdGQlFXeEVMRVZCUVdsRlF5eEpRVUZxUlN4RlFVRm1PMEZCUTBFc1kwRkJTVmdzUzBGQlMxb3NUMEZCVEN4RFFVRmhUU3hOUVVGcVFpeEZRVUY1UWp0QlFVTjJRanRCUVVORU8wRkJRMFk3UVVGRFJqdEJRVU5HT3p0QlFVVkVPMEZCUTBFc1VVRkJTU3hEUVVGRFRTeExRVUZMUnl4SlFVRk1MRU5CUVZWVUxFMUJRVmdzU1VGQmNVSk5MRXRCUVV0RExFOUJRVXdzUTBGQllWQXNUVUZCZEVNc1JVRkJPRU03UVVGRE5VTk5MRmRCUVV0SExFbEJRVXdzUjBGQldVZ3NTMEZCUzBNc1QwRkJha0k3UVVGRFFVUXNWMEZCUzBNc1QwRkJUQ3hIUVVGbExFVkJRV1k3UVVGRFJEczdRVUZGUkR0QlFVTkJMRkZCUVVsRUxFdEJRVXRhTEU5QlFVd3NRMEZCWVUwc1RVRkJZaXhIUVVGelFpeERRVUV4UWl4RlFVRTJRanRCUVVNelFrMHNWMEZCUzBjc1NVRkJUQ3hIUVVGWlNDeExRVUZMUnl4SlFVRk1MRU5CUVZWT0xFMUJRVllzUTBGQmFVSkhMRXRCUVV0YUxFOUJRVXdzUTBGQllYRkNMRTFCUVdJc1EwRkJiMElzUTBGQmNFSXNRMEZCYWtJc1EwRkJXanRCUVVORU96dEJRVVZFTzBGQlEwRlVMRk5CUVV0SExFbEJRVXdzUjBGQldVZ3NTMEZCUzBjc1NVRkJUQ3hEUVVGVlJ5eEpRVUZXTEVOQlFXVXNSMEZCWml4RFFVRmFPMEZCUTBGT0xGTkJRVXRhTEU5QlFVd3NSMEZCWlZrc1MwRkJTMW9zVDBGQlRDeERRVUZoYTBJc1NVRkJZaXhEUVVGclFpeEhRVUZzUWl4RFFVRm1PenRCUVVWQkxGRkJRVWtzUTBGQlEwNHNTMEZCUzFvc1QwRkJUaXhKUVVGcFFsVXNUMEZCY2tJc1JVRkJPRUk3UVVGRE5VSXNZVUZCVHl4RlFVRlFPMEZCUTBRc1MwRkdSQ3hOUVVWUE8wRkJRMHhXTEdkQ1FVRlZPMEZCUTFKQkxHbENRVUZUV1N4TFFVRkxXaXhQUVVGTUxFbEJRV2RDV1N4TFFVRkxSeXhKUVVGeVFpeEpRVUUyUWl4RlFVUTVRanRCUVVWU1NTeGpRVUZOVUN4TFFVRkxSeXhKUVVGTUxFbEJRV0ZJTEV0QlFVdGFMRTlCUVd4Q0xFbEJRVFpDTzBGQlJqTkNMRTlCUVZZN08wRkJTMEVzVlVGQlNVRXNVVUZCVVVFc1QwRkJVaXhMUVVGdlFrRXNVVUZCVVcxQ0xFbEJRV2hETEVWQlFYTkRPMEZCUTNCRExGbEJRVWtzUTBGQlEyNUNMRkZCUVZGQkxFOUJRVklzU1VGQmJVSXNSVUZCY0VJc1JVRkJkMEp2UWl4TFFVRjRRaXhEUVVFNFFpeEhRVUU1UWl4RFFVRktMRVZCUVhkRE8wRkJRM1JEY0VJc2EwSkJRVkZ0UWl4SlFVRlNMRWRCUVdVc1JVRkJaanRCUVVORUxGTkJSa1FzVFVGRlR6dEJRVU5NYmtJc2EwSkJRVkZCTEU5QlFWSXNSMEZCYTBJc1JVRkJiRUk3UVVGRFJEdEJRVU5HT3p0QlFVVkVSQ3huUWtGQlZWRXNTVUZCVml4RFFVRmxVQ3hQUVVGbU8wRkJRMFE3UVVGRFJqczdRVUZGUkN4VFFVRlBSQ3hUUVVGUU8wRkJRMFE3TzBGQlJVUTdPenRCUVVkQkxFbEJRVTB3UWl4WlFVRlpPMEZCUTJoQ0xFOUJRVXNzUjBGRVZ6dEJRVVZvUWl4UFFVRkxMRWRCUmxjN1FVRkhhRUlzVDBGQlN5eEhRVWhYTzBGQlNXaENMRTlCUVVzc1JVRktWenRCUVV0b1FqdEJRVU5CTEU5QlFVc3NSMEZPVnp0QlFVOW9RanRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVN4UFFVRkxPenRCUVVkUU96czdPenM3UVVGb1FtdENMRU5CUVd4Q08wbEJjMEpOTjBJc1V6dEJRVU5LTEhGQ1FVRmhSaXhIUVVGaUxFVkJRV3RDTzBGQlFVRTdPMEZCUTJoQ0xGTkJRVXRCTEVkQlFVd3NSMEZCVnl4RFFVRkRRU3hQUVVGUExFVkJRVklzUlVGQldXZERMRkZCUVZvc1JVRkJXRHRCUVVOQkxGTkJRVXRETEdWQlFVd3NSMEZCZFVJc1JVRkJka0k3UVVGRFFTeFRRVUZMUXl4cFFrRkJUQ3hIUVVGNVFpeEZRVUY2UWp0QlFVTkJMRk5CUVV0RExFbEJRVXdzUjBGQldTeEpRVUZhTzBGQlEwRXNVMEZCUzBNc1QwRkJUQ3hIUVVGbExFdEJRV1k3UVVGRFFTeFRRVUZMUXl4SlFVRk1MRWRCUVZrc1JVRkJXanRCUVVORU96dEJRVVZFT3pzN096czdPenM3SzBKQlMxazdRVUZEVml4VlFVRkpReXhaUVVGS08wRkJRMEVzVlVGQlNVUXNUMEZCVHl4RlFVRllPMEZCUTBFc1YwRkJTeXhKUVVGSlppeEpRVUZKTEVOQlFWSXNSVUZCVjBNc1RVRkJUU3hMUVVGTGRrSXNSMEZCVEN4RFFVRlRXU3hOUVVFdlFpeEZRVUYxUTFVc1NVRkJTVU1zUjBGQk0wTXNSVUZCWjBSRUxFZEJRV2hFTEVWQlFYRkVPMEZCUTI1RVowSXNZMEZCVFN4TFFVRkxkRU1zUjBGQlRDeERRVUZUZFVNc1RVRkJWQ3hEUVVGblFtcENMRU5CUVdoQ0xFTkJRVTQ3UVVGRFFTeGhRVUZMYTBJc1UwRkJUQ3hEUVVGbFJpeEhRVUZtTzBGQlEwUTdPMEZCUlVRc1YwRkJTMFFzU1VGQlRDeERRVUZWTjBJc1QwRkJWaXhEUVVGclFpeFZRVUZWTWtJc1NVRkJWaXhGUVVGblFqdEJRVU5vUTBFc1lVRkJTM2hDTEV0QlFVd3NSMEZCWVN4RFFVRkRkMElzUzBGQlMzaENMRXRCUVV3c1NVRkJZeXhGUVVGbUxFVkJRVzFDY1VJc1VVRkJia0lzUjBGQk9FSklMRWxCUVRsQ0xFVkJRV0k3UVVGRFFTeFpRVUZKVFN4TFFVRkxlRUlzUzBGQlZDeEZRVUZuUWp0QlFVTmtNRUlzWlVGQlMzaENMRWxCUVV3c1EwRkJWWE5DTEVsQlFWWTdRVUZEUkR0QlFVTkdMRTlCVEVRN08wRkJUMEVzWVVGQlQwVXNTVUZCVUR0QlFVTkVPenRCUVVWRU96czdPenM3T3pzNFFrRkxWME1zUnl4RlFVRkxPMEZCUTJRc1ZVRkJTU3hEUVVGRFFTeFBRVUZQVUN4VFFVRlFMRWxCUVc5Q1R5eFJRVUZSTEVsQlFUZENMRXRCUVhORExFdEJRVXRHTEU5QlFTOURMRVZCUVhkRU8wRkJRM1JFTEdGQlFVdEJMRTlCUVV3c1IwRkJaU3hMUVVGbU8wRkJRMFFzVDBGR1JDeE5RVVZQTEVsQlFVa3NTMEZCUzBZc2FVSkJRVXdzU1VGQk1FSkpMRkZCUVZFc1MwRkJTMG9zYVVKQlFUTkRMRVZCUVRoRU8wRkJRMjVGTEdGQlFVdERMRWxCUVV3c1IwRkJXVHRCUVVOV2VrSXNaMEpCUVUwc1ZVRkVTVHRCUVVWV1F5eHBRa0ZCVHpKQ08wRkJSa2NzVTBGQldqdEJRVWxCTEdGQlFVdEVMRWxCUVV3c1EwRkJWWGhDTEVsQlFWWXNRMEZCWlN4TFFVRkxjMElzU1VGQmNFSTdRVUZEUVN4aFFVRkxRU3hKUVVGTUxFZEJRVmtzU1VGQldqdEJRVU5CTEdGQlFVdEVMR2xDUVVGTUxFZEJRWGxDTEVWQlFYcENPMEZCUTBFc1lVRkJTMFVzVDBGQlRDeEhRVUZsTEV0QlFXWTdRVUZEUVR0QlFVTkVMRTlCVmswc1RVRlZRU3hKUVVGSkxFTkJRVU1zUzBGQlMwWXNhVUpCUVU0c1NVRkJNa0pKTEU5QlFVOVFMRk5CUVhSRExFVkJRV2xFTzBGQlEzUkVMR0ZCUVV0SkxFbEJRVXdzUjBGQldUdEJRVU5XZWtJc1owSkJRVTBzVlVGRVNUdEJRVVZXUXl4cFFrRkJUekpDTzBGQlJrY3NVMEZCV2p0QlFVbEJMR0ZCUVV0RUxFbEJRVXdzUTBGQlZYaENMRWxCUVZZc1EwRkJaU3hMUVVGTGMwSXNTVUZCY0VJN1FVRkRRU3hoUVVGTFFTeEpRVUZNTEVkQlFWa3NTVUZCV2p0QlFVTkJMR0ZCUVV0RUxHbENRVUZNTEVkQlFYbENTQ3hWUVVGVlR5eEhRVUZXTEVOQlFYcENPMEZCUTBFc1lVRkJTMFlzVDBGQlRDeEhRVUZsTEV0QlFXWTdRVUZEUVR0QlFVTkVPenRCUVVWRUxGVkJRVWtzUTBGQlF5eExRVUZMUVN4UFFVRk9MRWxCUVdsQ1JTeFJRVUZSTEVsQlFUZENMRVZCUVcxRE8wRkJRMnBETEdGQlFVdEdMRTlCUVV3c1IwRkJaU3hKUVVGbU8wRkJRMEU3UVVGRFJEczdRVUZGUkN4VlFVRkpMRU5CUVVNc1MwRkJTMFFzU1VGQlZpeEZRVUZuUWp0QlFVTmtMR0ZCUVV0QkxFbEJRVXdzUjBGQldUdEJRVU5XZWtJc1owSkJRVTBzVFVGRVNUdEJRVVZXUXl4cFFrRkJUenRCUVVaSExGTkJRVm83UVVGSlFTeGhRVUZMTUVJc1NVRkJUQ3hEUVVGVmVFSXNTVUZCVml4RFFVRmxMRXRCUVV0elFpeEpRVUZ3UWp0QlFVTkVPenRCUVVWRUxGVkJRVWtzUzBGQlMwTXNUMEZCVEN4SlFVRm5Ra1VzVVVGQlVTeEpRVUUxUWl4RlFVRnJRenRCUVVOb1F5eGhRVUZMU0N4SlFVRk1MRU5CUVZWNFFpeExRVUZXTEVsQlFXMUNMRWxCUVc1Q08wRkJRMFE3TzBGQlJVUXNWMEZCUzNkQ0xFbEJRVXdzUTBGQlZYaENMRXRCUVZZc1NVRkJiVUl5UWl4SFFVRnVRanRCUVVOQkxGZEJRVXRHTEU5QlFVd3NSMEZCWlN4TFFVRm1PMEZCUTBRaUxDSm1hV3hsSWpvaVlXUmtjbVZ6YzNCaGNuTmxjaTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1VHRnljMlZ6SUhOMGNuVmpkSFZ5WldRZ1pTMXRZV2xzSUdGa1pISmxjM05sY3lCbWNtOXRJR0Z1SUdGa1pISmxjM01nWm1sbGJHUmNiaUFxWEc0Z0tpQkZlR0Z0Y0d4bE9seHVJQ3BjYmlBcUlDQWdJRndpVG1GdFpTQThZV1JrY21WemMwQmtiMjFoYVc0K1hDSmNiaUFxWEc0Z0tpQjNhV3hzSUdKbElHTnZiblpsY25SbFpDQjBiMXh1SUNwY2JpQXFJQ0FnSUNCYmUyNWhiV1U2SUZ3aVRtRnRaVndpTENCaFpHUnlaWE56T2lCY0ltRmtaSEpsYzNOQVpHOXRZV2x1WENKOVhWeHVJQ3BjYmlBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCemRISWdRV1JrY21WemN5Qm1hV1ZzWkZ4dUlDb2dRSEpsZEhWeWJpQjdRWEp5WVhsOUlFRnVJR0Z5Y21GNUlHOW1JR0ZrWkhKbGMzTWdiMkpxWldOMGMxeHVJQ292WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JtZFc1amRHbHZiaUJ3WVhKelpTQW9jM1J5S1NCN1hHNGdJR052Ym5OMElIUnZhMlZ1YVhwbGNpQTlJRzVsZHlCVWIydGxibWw2WlhJb2MzUnlLVnh1SUNCamIyNXpkQ0IwYjJ0bGJuTWdQU0IwYjJ0bGJtbDZaWEl1ZEc5clpXNXBlbVVvS1Z4dVhHNGdJR052Ym5OMElHRmtaSEpsYzNObGN5QTlJRnRkWEc0Z0lHeGxkQ0JoWkdSeVpYTnpJRDBnVzExY2JpQWdiR1YwSUhCaGNuTmxaRUZrWkhKbGMzTmxjeUE5SUZ0ZFhHNWNiaUFnZEc5clpXNXpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNGdLSFJ2YTJWdUtTQjdYRzRnSUNBZ2FXWWdLSFJ2YTJWdUxuUjVjR1VnUFQwOUlDZHZjR1Z5WVhSdmNpY2dKaVlnS0hSdmEyVnVMblpoYkhWbElEMDlQU0FuTENjZ2ZId2dkRzlyWlc0dWRtRnNkV1VnUFQwOUlDYzdKeWtwSUh0Y2JpQWdJQ0FnSUdsbUlDaGhaR1J5WlhOekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQmhaR1J5WlhOelpYTXVjSFZ6YUNoaFpHUnlaWE56S1Z4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWVdSa2NtVnpjeUE5SUZ0ZFhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR0ZrWkhKbGMzTXVjSFZ6YUNoMGIydGxiaWxjYmlBZ0lDQjlYRzRnSUgwcFhHNWNiaUFnYVdZZ0tHRmtaSEpsYzNNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnWVdSa2NtVnpjMlZ6TG5CMWMyZ29ZV1JrY21WemN5bGNiaUFnZlZ4dVhHNGdJR0ZrWkhKbGMzTmxjeTVtYjNKRllXTm9LR1oxYm1OMGFXOXVJQ2hoWkdSeVpYTnpLU0I3WEc0Z0lDQWdZV1JrY21WemN5QTlJRjlvWVc1a2JHVkJaR1J5WlhOektHRmtaSEpsYzNNcFhHNGdJQ0FnYVdZZ0tHRmtaSEpsYzNNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNCd1lYSnpaV1JCWkdSeVpYTnpaWE1nUFNCd1lYSnpaV1JCWkdSeVpYTnpaWE11WTI5dVkyRjBLR0ZrWkhKbGMzTXBYRzRnSUNBZ2ZWeHVJQ0I5S1Z4dVhHNGdJSEpsZEhWeWJpQndZWEp6WldSQlpHUnlaWE56WlhOY2JuMDdYRzVjYmk4cUtseHVJQ29nUTI5dWRtVnlkSE1nZEc5clpXNXpJR1p2Y2lCaElITnBibWRzWlNCaFpHUnlaWE56SUdsdWRHOGdZVzRnWVdSa2NtVnpjeUJ2WW1wbFkzUmNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UwRnljbUY1ZlNCMGIydGxibk1nVkc5clpXNXpJRzlpYW1WamRGeHVJQ29nUUhKbGRIVnliaUI3VDJKcVpXTjBmU0JCWkdSeVpYTnpJRzlpYW1WamRGeHVJQ292WEc1bWRXNWpkR2x2YmlCZmFHRnVaR3hsUVdSa2NtVnpjeUFvZEc5clpXNXpLU0I3WEc0Z0lHeGxkQ0JwYzBkeWIzVndJRDBnWm1Gc2MyVmNiaUFnYkdWMElITjBZWFJsSUQwZ0ozUmxlSFFuWEc0Z0lHeGxkQ0JoWkdSeVpYTnpYRzRnSUdOdmJuTjBJR0ZrWkhKbGMzTmxjeUE5SUZ0ZFhHNGdJR052Ym5OMElHUmhkR0VnUFNCN1hHNGdJQ0FnWVdSa2NtVnpjem9nVzEwc1hHNGdJQ0FnWTI5dGJXVnVkRG9nVzEwc1hHNGdJQ0FnWjNKdmRYQTZJRnRkTEZ4dUlDQWdJSFJsZUhRNklGdGRYRzRnSUgxY2JseHVJQ0F2THlCR2FXeDBaWElnYjNWMElEeGhaR1J5WlhOelpYTStMQ0FvWTI5dGJXVnVkSE1wSUdGdVpDQnlaV2QxYkdGeUlIUmxlSFJjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREFzSUd4bGJpQTlJSFJ2YTJWdWN5NXNaVzVuZEdnN0lHa2dQQ0JzWlc0N0lHa3JLeWtnZTF4dUlDQWdJR052Ym5OMElIUnZhMlZ1SUQwZ2RHOXJaVzV6VzJsZFhHNWNiaUFnSUNCcFppQW9kRzlyWlc0dWRIbHdaU0E5UFQwZ0oyOXdaWEpoZEc5eUp5a2dlMXh1SUNBZ0lDQWdjM2RwZEdOb0lDaDBiMnRsYmk1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCallYTmxJQ2M4SnpwY2JpQWdJQ0FnSUNBZ0lDQnpkR0YwWlNBOUlDZGhaR1J5WlhOekoxeHVJQ0FnSUNBZ0lDQWdJR0p5WldGclhHNGdJQ0FnSUNBZ0lHTmhjMlVnSnlnbk9seHVJQ0FnSUNBZ0lDQWdJSE4wWVhSbElEMGdKMk52YlcxbGJuUW5YRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXdGNiaUFnSUNBZ0lDQWdZMkZ6WlNBbk9pYzZYRzRnSUNBZ0lDQWdJQ0FnYzNSaGRHVWdQU0FuWjNKdmRYQW5YRzRnSUNBZ0lDQWdJQ0FnYVhOSGNtOTFjQ0E5SUhSeWRXVmNiaUFnSUNBZ0lDQWdJQ0JpY21WaGExeHVJQ0FnSUNBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ0lDQWdJSE4wWVhSbElEMGdKM1JsZUhRblhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR2xtSUNoMGIydGxiaTUyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0JrWVhSaFczTjBZWFJsWFM1d2RYTm9LSFJ2YTJWdUxuWmhiSFZsS1Z4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4dklFbG1JSFJvWlhKbElHbHpJRzV2SUhSbGVIUWdZblYwSUdFZ1kyOXRiV1Z1ZEN3Z2NtVndiR0ZqWlNCMGFHVWdkSGR2WEc0Z0lHbG1JQ2doWkdGMFlTNTBaWGgwTG14bGJtZDBhQ0FtSmlCa1lYUmhMbU52YlcxbGJuUXViR1Z1WjNSb0tTQjdYRzRnSUNBZ1pHRjBZUzUwWlhoMElEMGdaR0YwWVM1amIyMXRaVzUwWEc0Z0lDQWdaR0YwWVM1amIyMXRaVzUwSUQwZ1cxMWNiaUFnZlZ4dVhHNGdJR2xtSUNocGMwZHliM1Z3S1NCN1hHNGdJQ0FnTHk4Z2FIUjBjRG92TDNSdmIyeHpMbWxsZEdZdWIzSm5MMmgwYld3dmNtWmpNamd5TWlOaGNIQmxibVJwZUMxQkxqRXVNMXh1SUNBZ0lHUmhkR0V1ZEdWNGRDQTlJR1JoZEdFdWRHVjRkQzVxYjJsdUtDY2dKeWxjYmlBZ0lDQmhaR1J5WlhOelpYTXVjSFZ6YUNoN1hHNGdJQ0FnSUNCdVlXMWxPaUJrWVhSaExuUmxlSFFnZkh3Z0tHRmtaSEpsYzNNZ0ppWWdZV1JrY21WemN5NXVZVzFsS1N4Y2JpQWdJQ0FnSUdkeWIzVndPaUJrWVhSaExtZHliM1Z3TG14bGJtZDBhQ0EvSUhCaGNuTmxLR1JoZEdFdVozSnZkWEF1YW05cGJpZ25MQ2NwS1NBNklGdGRYRzRnSUNBZ2ZTbGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQXZMeUJKWmlCdWJ5QmhaR1J5WlhOeklIZGhjeUJtYjNWdVpDd2dkSEo1SUhSdklHUmxkR1ZqZENCdmJtVWdabkp2YlNCeVpXZDFiR0Z5SUhSbGVIUmNiaUFnSUNCcFppQW9JV1JoZEdFdVlXUmtjbVZ6Y3k1c1pXNW5kR2dnSmlZZ1pHRjBZUzUwWlhoMExteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJR1JoZEdFdWRHVjRkQzVzWlc1bmRHZ2dMU0F4T3lCcElENDlJREE3SUdrdExTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1pHRjBZUzUwWlhoMFcybGRMbTFoZEdOb0tDOWVXMTVBWEZ4elhTdEFXMTVBWEZ4elhTc2tMeWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmtZWFJoTG1Ga1pISmxjM01nUFNCa1lYUmhMblJsZUhRdWMzQnNhV05sS0drc0lERXBYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IyWVhJZ1gzSmxaMlY0U0dGdVpHeGxjaUE5SUdaMWJtTjBhVzl1SUNoaFpHUnlaWE56S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doWkdGMFlTNWhaR1J5WlhOekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1JoZEdFdVlXUmtjbVZ6Y3lBOUlGdGhaR1J5WlhOekxuUnlhVzBvS1YxY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5QW5YRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0ZrWkhKbGMzTmNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0F2THlCemRHbHNiQ0J1YnlCaFpHUnlaWE56WEc0Z0lDQWdJQ0JwWmlBb0lXUmhkR0V1WVdSa2NtVnpjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlHUmhkR0V1ZEdWNGRDNXNaVzVuZEdnZ0xTQXhPeUJwSUQ0OUlEQTdJR2t0TFNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1JoZEdFdWRHVjRkRnRwWFNBOUlHUmhkR0V1ZEdWNGRGdHBYUzV5WlhCc1lXTmxLQzljWEhNcVhGeGlXMTVBWEZ4elhTdEFXMTVBWEZ4elhTdGNYR0pjWEhNcUx5d2dYM0psWjJWNFNHRnVaR3hsY2lrdWRISnBiU2dwWEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1JoZEdFdVlXUmtjbVZ6Y3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0p5WldGclhHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnU1dZZ2RHaGxjbVVuY3lCemRHbHNiQ0JwY3lCdWJ5QjBaWGgwSUdKMWRDQmhJR052YlcxbGJuUWdaWGhwZUhSekxDQnlaWEJzWVdObElIUm9aU0IwZDI5Y2JpQWdJQ0JwWmlBb0lXUmhkR0V1ZEdWNGRDNXNaVzVuZEdnZ0ppWWdaR0YwWVM1amIyMXRaVzUwTG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzVqYjIxdFpXNTBYRzRnSUNBZ0lDQmtZWFJoTG1OdmJXMWxiblFnUFNCYlhWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFdGxaWEFnYjI1c2VTQjBhR1VnWm1seWMzUWdZV1JrY21WemN5QnZZMk4xY21WdVkyVXNJSEIxYzJnZ2IzUm9aWEp6SUhSdklISmxaM1ZzWVhJZ2RHVjRkRnh1SUNBZ0lHbG1JQ2hrWVhSaExtRmtaSEpsYzNNdWJHVnVaM1JvSUQ0Z01Ta2dlMXh1SUNBZ0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNTBaWGgwTG1OdmJtTmhkQ2hrWVhSaExtRmtaSEpsYzNNdWMzQnNhV05sS0RFcEtWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFcHZhVzRnZG1Gc2RXVnpJSGRwZEdnZ2MzQmhZMlZ6WEc0Z0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNTBaWGgwTG1wdmFXNG9KeUFuS1Z4dUlDQWdJR1JoZEdFdVlXUmtjbVZ6Y3lBOUlHUmhkR0V1WVdSa2NtVnpjeTVxYjJsdUtDY2dKeWxjYmx4dUlDQWdJR2xtSUNnaFpHRjBZUzVoWkdSeVpYTnpJQ1ltSUdselIzSnZkWEFwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJiWFZ4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQmhaR1J5WlhOeklEMGdlMXh1SUNBZ0lDQWdJQ0JoWkdSeVpYTnpPaUJrWVhSaExtRmtaSEpsYzNNZ2ZId2daR0YwWVM1MFpYaDBJSHg4SUNjbkxGeHVJQ0FnSUNBZ0lDQnVZVzFsT2lCa1lYUmhMblJsZUhRZ2ZId2daR0YwWVM1aFpHUnlaWE56SUh4OElDY25YRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR2xtSUNoaFpHUnlaWE56TG1Ga1pISmxjM01nUFQwOUlHRmtaSEpsYzNNdWJtRnRaU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9LR0ZrWkhKbGMzTXVZV1JrY21WemN5QjhmQ0FuSnlrdWJXRjBZMmdvTDBBdktTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdGa1pISmxjM011Ym1GdFpTQTlJQ2NuWEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ1lXUmtjbVZ6Y3k1aFpHUnlaWE56SUQwZ0p5ZGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JoWkdSeVpYTnpaWE11Y0hWemFDaGhaR1J5WlhOektWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCaFpHUnlaWE56WlhOY2JuMDdYRzVjYmk4cVhHNGdLaUJQY0dWeVlYUnZjaUIwYjJ0bGJuTWdZVzVrSUhkb2FXTm9JSFJ2YTJWdWN5QmhjbVVnWlhod1pXTjBaV1FnZEc4Z1pXNWtJSFJvWlNCelpYRjFaVzVqWlZ4dUlDb3ZYRzVqYjI1emRDQlBVRVZTUVZSUFVsTWdQU0I3WEc0Z0lDZGNJaWM2SUNkY0lpY3NYRzRnSUNjb0p6b2dKeWtuTEZ4dUlDQW5QQ2M2SUNjK0p5eGNiaUFnSnl3bk9pQW5KeXhjYmlBZ0x5OGdSM0p2ZFhCeklHRnlaU0JsYm1SbFpDQmllU0J6WlcxcFkyOXNiMjV6WEc0Z0lDYzZKem9nSnpzbkxGeHVJQ0F2THlCVFpXMXBZMjlzYjI1eklHRnlaU0J1YjNRZ1lTQnNaV2RoYkNCa1pXeHBiV2wwWlhJZ2NHVnlJSFJvWlNCU1JrTXlPREl5SUdkeVlXMXRZWElnYjNSb1pYSmNiaUFnTHk4Z2RHaGhiaUJtYjNJZ2RHVnliV2x1WVhScGJtY2dZU0JuY205MWNDd2dZblYwSUhSb1pYa2dZWEpsSUdGc2MyOGdibTkwSUhaaGJHbGtJR1p2Y2lCaGJubGNiaUFnTHk4Z2IzUm9aWElnZFhObElHbHVJSFJvYVhNZ1kyOXVkR1Y0ZEM0Z0lFZHBkbVZ1SUhSb1lYUWdjMjl0WlNCdFlXbHNJR05zYVdWdWRITWdhR0YyWlZ4dUlDQXZMeUJvYVhOMGIzSnBZMkZzYkhrZ1lXeHNiM2RsWkNCMGFHVWdjMlZ0YVdOdmJHOXVJR0Z6SUdFZ1pHVnNhVzFwZEdWeUlHVnhkV2wyWVd4bGJuUWdkRzhnZEdobFhHNGdJQzh2SUdOdmJXMWhJR2x1SUhSb1pXbHlJRlZKTENCcGRDQnRZV3RsY3lCelpXNXpaU0IwYnlCMGNtVmhkQ0IwYUdWdElIUm9aU0J6WVcxbElHRnpJR0VnWTI5dGJXRmNiaUFnTHk4Z2QyaGxiaUIxYzJWa0lHOTFkSE5wWkdVZ2IyWWdZU0JuY205MWNDNWNiaUFnSnpzbk9pQW5KMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lTQlViMnRsYm1sNlpYSWdiMkpxWldOMElHWnZjaUIwYjJ0bGJtbDZhVzVuSUdGa1pISmxjM01nWm1sbGJHUWdjM1J5YVc1bmMxeHVJQ3BjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvZ1FIQmhjbUZ0SUh0VGRISnBibWQ5SUhOMGNpQkJaR1J5WlhOeklHWnBaV3hrSUhOMGNtbHVaMXh1SUNvdlhHNWpiR0Z6Y3lCVWIydGxibWw2WlhJZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2lBb2MzUnlLU0I3WEc0Z0lDQWdkR2hwY3k1emRISWdQU0FvYzNSeUlIeDhJQ2NuS1M1MGIxTjBjbWx1WnlncFhHNGdJQ0FnZEdocGN5NXZjR1Z5WVhSdmNrTjFjbkpsYm5RZ1BTQW5KMXh1SUNBZ0lIUm9hWE11YjNCbGNtRjBiM0pGZUhCbFkzUnBibWNnUFNBbkoxeHVJQ0FnSUhSb2FYTXVibTlrWlNBOUlHNTFiR3hjYmlBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCbVlXeHpaVnh1SUNBZ0lIUm9hWE11YkdsemRDQTlJRnRkWEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1ZHOXJaVzVwZW1WeklIUm9aU0J2Y21sbmFXNWhiQ0JwYm5CMWRDQnpkSEpwYm1kY2JpQWdJQ3BjYmlBZ0lDb2dRSEpsZEhWeWJpQjdRWEp5WVhsOUlFRnVJR0Z5Y21GNUlHOW1JRzl3WlhKaGRHOXlmSFJsZUhRZ2RHOXJaVzV6WEc0Z0lDQXFMMXh1SUNCMGIydGxibWw2WlNBb0tTQjdYRzRnSUNBZ2JHVjBJR05vY2x4dUlDQWdJR3hsZENCc2FYTjBJRDBnVzExY2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Dd2diR1Z1SUQwZ2RHaHBjeTV6ZEhJdWJHVnVaM1JvT3lCcElEd2diR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQWdJR05vY2lBOUlIUm9hWE11YzNSeUxtTm9ZWEpCZENocEtWeHVJQ0FnSUNBZ2RHaHBjeTVqYUdWamEwTm9ZWElvWTJoeUtWeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXViR2x6ZEM1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNodWIyUmxLU0I3WEc0Z0lDQWdJQ0J1YjJSbExuWmhiSFZsSUQwZ0tHNXZaR1V1ZG1Gc2RXVWdmSHdnSnljcExuUnZVM1J5YVc1bktDa3VkSEpwYlNncFhHNGdJQ0FnSUNCcFppQW9ibTlrWlM1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCc2FYTjBMbkIxYzJnb2JtOWtaU2xjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlLVnh1WEc0Z0lDQWdjbVYwZFhKdUlHeHBjM1JjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGFHVmphM01nYVdZZ1lTQmphR0Z5WVdOMFpYSWdhWE1nWVc0Z2IzQmxjbUYwYjNJZ2IzSWdkR1Y0ZENCaGJtUWdZV04wY3lCaFkyTnZjbVJwYm1kc2VWeHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMU4wY21sdVozMGdZMmh5SUVOb1lYSmhZM1JsY2lCbWNtOXRJSFJvWlNCaFpHUnlaWE56SUdacFpXeGtYRzRnSUNBcUwxeHVJQ0JqYUdWamEwTm9ZWElnS0dOb2Npa2dlMXh1SUNBZ0lHbG1JQ2dvWTJoeUlHbHVJRTlRUlZKQlZFOVNVeUI4ZkNCamFISWdQVDA5SUNkY1hGeGNKeWtnSmlZZ2RHaHBjeTVsYzJOaGNHVmtLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQm1ZV3h6WlZ4dUlDQWdJSDBnWld4elpTQnBaaUFvZEdocGN5NXZjR1Z5WVhSdmNrVjRjR1ZqZEdsdVp5QW1KaUJqYUhJZ1BUMDlJSFJvYVhNdWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jcElIdGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pTQTlJSHRjYmlBZ0lDQWdJQ0FnZEhsd1pUb2dKMjl3WlhKaGRHOXlKeXhjYmlBZ0lDQWdJQ0FnZG1Gc2RXVTZJR05vY2x4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NXNhWE4wTG5CMWMyZ29kR2hwY3k1dWIyUmxLVnh1SUNBZ0lDQWdkR2hwY3k1dWIyUmxJRDBnYm5Wc2JGeHVJQ0FnSUNBZ2RHaHBjeTV2Y0dWeVlYUnZja1Y0Y0dWamRHbHVaeUE5SUNjblhHNGdJQ0FnSUNCMGFHbHpMbVZ6WTJGd1pXUWdQU0JtWVd4elpWeHVJQ0FnSUNBZ2NtVjBkWEp1WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2doZEdocGN5NXZjR1Z5WVhSdmNrVjRjR1ZqZEdsdVp5QW1KaUJqYUhJZ2FXNGdUMUJGVWtGVVQxSlRLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtNXZaR1VnUFNCN1hHNGdJQ0FnSUNBZ0lIUjVjR1U2SUNkdmNHVnlZWFJ2Y2ljc1hHNGdJQ0FnSUNBZ0lIWmhiSFZsT2lCamFISmNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIUm9hWE11YkdsemRDNXdkWE5vS0hSb2FYTXVibTlrWlNsY2JpQWdJQ0FnSUhSb2FYTXVibTlrWlNBOUlHNTFiR3hjYmlBZ0lDQWdJSFJvYVhNdWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jZ1BTQlBVRVZTUVZSUFVsTmJZMmh5WFZ4dUlDQWdJQ0FnZEdocGN5NWxjMk5oY0dWa0lEMGdabUZzYzJWY2JpQWdJQ0FnSUhKbGRIVnlibHh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doZEdocGN5NWxjMk5oY0dWa0lDWW1JR05vY2lBOVBUMGdKMXhjWEZ3bktTQjdYRzRnSUNBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCMGNuVmxYRzRnSUNBZ0lDQnlaWFIxY201Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb0lYUm9hWE11Ym05a1pTa2dlMXh1SUNBZ0lDQWdkR2hwY3k1dWIyUmxJRDBnZTF4dUlDQWdJQ0FnSUNCMGVYQmxPaUFuZEdWNGRDY3NYRzRnSUNBZ0lDQWdJSFpoYkhWbE9pQW5KMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkR2hwY3k1c2FYTjBMbkIxYzJnb2RHaHBjeTV1YjJSbEtWeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaDBhR2x6TG1WelkyRndaV1FnSmlZZ1kyaHlJQ0U5UFNBblhGeGNYQ2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVibTlrWlM1MllXeDFaU0FyUFNBblhGeGNYQ2RjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG01dlpHVXVkbUZzZFdVZ0t6MGdZMmh5WEc0Z0lDQWdkR2hwY3k1bGMyTmhjR1ZrSUQwZ1ptRnNjMlZjYmlBZ2ZWeHVmVnh1SWwxOSIsIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwidmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09IE5BVElWRSA/IGZhbHNlXG4gICAgOiB0eXBlb2YgZGV0ZWN0aW9uID09ICdmdW5jdGlvbicgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9IEl0ZXJhdG9yUHJvdG90eXBlID09IHVuZGVmaW5lZCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5pZiAoKCFJU19QVVJFIHx8IE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpICYmICFoYXMoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SKSkge1xuICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBzY2hlZHVsZXIoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGhhbmRsZXIgPT0gJ2Z1bmN0aW9uJyA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGhhbmRsZXIsIHRpbWVvdXQpO1xuICB9O1xufTtcblxuLy8gaWU5LSBzZXRUaW1lb3V0ICYgc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGZvcmNlZDogTVNJRSB9LCB7XG4gIC8vIGBzZXRUaW1lb3V0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgLy8gYHNldEludGVydmFsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0aW50ZXJ2YWxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogdHlwZW9mIGRldGVjdGlvbiA9PSAnZnVuY3Rpb24nID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCJ2YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy44LjInLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsInZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgU3RyaW5nKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArICgrK2lkICsgcG9zdGZpeCkudG9TdHJpbmcoMzYpO1xufTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHJldHVybiAhU3RyaW5nKFN5bWJvbCgpKTtcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuUHJvbWlzZTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi50b1N0cmluZztcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGAzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICh0eXBlb2Ygc3RvcmUuaW5zcGVjdFNvdXJjZSAhPSAnZnVuY3Rpb24nKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29uc3RydWN0b3IgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG52YXIgc2V0ID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgcG9zdCA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsIGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChJU19OT0RFKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIC8vIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjI0XG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwgJiYgIUlTX0lPUykge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoXG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiZcbiAgICB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICFnbG9iYWwuaW1wb3J0U2NyaXB0cyAmJlxuICAgIGxvY2F0aW9uICYmIGxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgIWZhaWxzKHBvc3QpXG4gICkge1xuICAgIGRlZmVyID0gcG9zdDtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwidmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC8oaXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRkFVTFQgPT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmF0aXZlSXRlcmF0b3IuY2FsbCh0aGlzKTsgfTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IpO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSA9PSB1bmRlZmluZWQpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5pZiAoIUlTX1BVUkUgJiYgIWhhcyhJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IpKSB7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3InKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHsgdmFsdWU6IGluZGV4LCBkb25lOiBmYWxzZSB9O1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHsgdmFsdWU6IHRhcmdldFtpbmRleF0sIGRvbmU6IGZhbHNlIH07XG4gIHJldHVybiB7IHZhbHVlOiBbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBkb25lOiBmYWxzZSB9O1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xudmFyIHN0aWNreUhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzJyk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZO1xudmFyIGFycmF5UHVzaCA9IFtdLnB1c2g7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgTUFYX1VJTlQzMiA9IDB4RkZGRkZGRkY7XG5cbi8vIEBAc3BsaXQgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChTUExJVCwgbmF0aXZlU3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJy5zcGxpdCgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tZW1wdHktZ3JvdXAgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICAndGVzdCcuc3BsaXQoLyg/OikvLCAtMSkubGVuZ3RoICE9IDQgfHxcbiAgICAnYWInLnNwbGl0KC8oPzphYikqLykubGVuZ3RoICE9IDIgfHxcbiAgICAnLicuc3BsaXQoLyguPykoLj8pLykubGVuZ3RoICE9IDQgfHxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLWFzc2VydGlvbi1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgICcuJy5zcGxpdCgvKCkoKS8pLmxlbmd0aCA+IDEgfHxcbiAgICAnJy5zcGxpdCgvLj8vKS5sZW5ndGhcbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHJldHVybiBbc3RyaW5nXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbSk7XG4gICAgICB9XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHkubGFzdEluZGV4O1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nLmxlbmd0aCkgYXJyYXlQdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBsaW0pIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHkubGFzdEluZGV4Kys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXQubGVuZ3RoID4gbGltID8gb3V0cHV0LnNsaWNlKDAsIGxpbSkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJy5zcGxpdCh1bmRlZmluZWQsIDApLmxlbmd0aCkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiBuYXRpdmVTcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSBpbnRlcm5hbFNwbGl0ID0gbmF0aXZlU3BsaXQ7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSBuYXRpdmVTcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFVOU1VQUE9SVEVEX1kgPyAnZycgOiAneScpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoVU5TVVBQT1JURURfWSA/ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJyA6IHJ4LCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gVU5TVVBQT1JURURfWSA/IDAgOiBxO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBVTlNVUFBPUlRFRF9ZID8gUy5zbGljZShxKSA6IFMpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9IG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoVU5TVVBQT1JURURfWSA/IHEgOiAwKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59LCBVTlNVUFBPUlRFRF9ZKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUhUTUwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWh0bWwnKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5saW5rYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5saW5rXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCgnbGluaycpIH0sIHtcbiAgbGluazogZnVuY3Rpb24gbGluayh1cmwpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICdocmVmJywgdXJsKTtcbiAgfVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5KdWE7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBfIGZyb20gJ18nO1xuXG4vLyBpbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5jbGFzcyBUZW1wbGF0ZVVzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudGVtcGxhdGVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLnRlbXBsYXRlcy5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblxuXHRcdHRoaXMudGVtcGxhdGVzTmFtZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pLmV4dGVuZCh7IHRocm90dGxlOiAxMDAwIH0pO1xuXHRcdHRoaXMudGVtcGxhdGVzTmFtZXMuc2tpcEZpcnN0ID0gdHJ1ZTtcblxuXHRcdHRoaXMuc3Vic2NyaWJlcnMoKTtcblx0fVxuXG5cdHN1YnNjcmliZXJzKCkge1xuXHRcdHRoaXMudGVtcGxhdGVzLnN1YnNjcmliZSgobGlzdCkgPT4ge1xuXHRcdFx0dGhpcy50ZW1wbGF0ZXNOYW1lcyhfLmNvbXBhY3QoXy5tYXAobGlzdCwgKGl0ZW0pID0+IChpdGVtID8gaXRlbS5uYW1lIDogbnVsbCkpKSk7XG5cdFx0fSk7XG5cblx0XHQvLyB0aGlzLnRlbXBsYXRlc05hbWVzLnN1YnNjcmliZSgoYUxpc3QpID0+IHtcblx0XHQvLyBcdGlmICh0aGlzLnRlbXBsYXRlc05hbWVzLnNraXBGaXJzdClcblx0XHQvLyBcdHtcblx0XHQvLyBcdFx0dGhpcy50ZW1wbGF0ZXNOYW1lcy5za2lwRmlyc3QgPSBmYWxzZTtcblx0XHQvLyBcdH1cblx0XHQvLyBcdGVsc2UgaWYgKGFMaXN0ICYmIDEgPCBhTGlzdC5sZW5ndGgpXG5cdFx0Ly8gXHR7XG5cdFx0Ly8gXHRcdFJlbW90ZS50ZW1wbGF0ZXNTb3J0T3JkZXIobnVsbCwgYUxpc3QpO1xuXHRcdC8vIFx0fVxuXHRcdC8vIH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBUZW1wbGF0ZVVzZXJTdG9yZSgpO1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBGaWxlVHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBiQWxsb3dQZGZQcmV2aWV3LCBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgdHJpbSwgcEludCwgaW5BcnJheSwgaXNOb25FbXB0eUFycmF5LCBnZXRGaWxlRXh0ZW5zaW9uLCBmcmllbmRseVNpemUgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHtcblx0YXR0YWNobWVudERvd25sb2FkLFxuXHRhdHRhY2htZW50UHJldmlldyxcblx0YXR0YWNobWVudEZyYW1lZCxcblx0YXR0YWNobWVudFByZXZpZXdBc1BsYWluLFxuXHRhdHRhY2htZW50VGh1bWJuYWlsUHJldmlld1xufSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmltcG9ydCBBdWRpbyBmcm9tICdDb21tb24vQXVkaW8nO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzRXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc01pbWVUeXBlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3Qgc3RhdGljRmlsZVR5cGUgPSBfLm1lbW9pemUoKGV4dCwgbWltZVR5cGUpID0+IHtcblx0ZXh0ID0gdHJpbShleHQpLnRvTG93ZXJDYXNlKCk7XG5cdG1pbWVUeXBlID0gdHJpbShtaW1lVHlwZSkudG9Mb3dlckNhc2UoKTtcblxuXHRsZXQgcmVzdWx0ID0gRmlsZVR5cGUuVW5rbm93bjtcblx0Y29uc3QgbWltZVR5cGVQYXJ0cyA9IG1pbWVUeXBlLnNwbGl0KCcvJyk7XG5cblx0c3dpdGNoICh0cnVlKSB7XG5cdFx0Y2FzZSAnaW1hZ2UnID09PSBtaW1lVHlwZVBhcnRzWzBdIHx8IC0xIDwgaW5BcnJheShleHQsIFsncG5nJywgJ2pwZycsICdqcGVnJywgJ2dpZicsICdibXAnXSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5JbWFnZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ2F1ZGlvJyA9PT0gbWltZVR5cGVQYXJ0c1swXSB8fCAtMSA8IGluQXJyYXkoZXh0LCBbJ21wMycsICdvZ2cnLCAnb2dhJywgJ3dhdiddKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLkF1ZGlvO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAndmlkZW8nID09PSBtaW1lVHlwZVBhcnRzWzBdIHx8IC0xIDwgaW5BcnJheShleHQsIFsnbWt2JywgJ2F2aSddKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLlZpZGVvO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAtMSA8IGluQXJyYXkoZXh0LCBbJ3BocCcsICdqcycsICdjc3MnXSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5Db2RlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnZW1sJyA9PT0gZXh0IHx8IC0xIDwgaW5BcnJheShtaW1lVHlwZSwgWydtZXNzYWdlL2RlbGl2ZXJ5LXN0YXR1cycsICdtZXNzYWdlL3JmYzgyMiddKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLkVtbDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgKCd0ZXh0JyA9PT0gbWltZVR5cGVQYXJ0c1swXSAmJiAnaHRtbCcgIT09IG1pbWVUeXBlUGFydHNbMV0pIHx8IC0xIDwgaW5BcnJheShleHQsIFsndHh0JywgJ2xvZyddKTpcblx0XHRcdHJlc3VsdCA9IEZpbGVUeXBlLlRleHQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICd0ZXh0L2h0bWwnID09PSBtaW1lVHlwZSB8fCAtMSA8IGluQXJyYXkoZXh0LCBbJ2h0bWwnXSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5IdG1sO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAtMSA8XG5cdFx0XHRpbkFycmF5KG1pbWVUeXBlUGFydHNbMV0sIFtcblx0XHRcdFx0J3ppcCcsXG5cdFx0XHRcdCc3eicsXG5cdFx0XHRcdCd0YXInLFxuXHRcdFx0XHQncmFyJyxcblx0XHRcdFx0J2d6aXAnLFxuXHRcdFx0XHQnYnppcCcsXG5cdFx0XHRcdCdiemlwMicsXG5cdFx0XHRcdCd4LXppcCcsXG5cdFx0XHRcdCd4LTd6Jyxcblx0XHRcdFx0J3gtcmFyJyxcblx0XHRcdFx0J3gtdGFyJyxcblx0XHRcdFx0J3gtZ3ppcCcsXG5cdFx0XHRcdCd4LWJ6aXAnLFxuXHRcdFx0XHQneC1iemlwMicsXG5cdFx0XHRcdCd4LXppcC1jb21wcmVzc2VkJyxcblx0XHRcdFx0J3gtN3otY29tcHJlc3NlZCcsXG5cdFx0XHRcdCd4LXJhci1jb21wcmVzc2VkJ1xuXHRcdFx0XSkgfHwgLTEgPCBpbkFycmF5KGV4dCwgWyd6aXAnLCAnN3onLCAndGFyJywgJ3JhcicsICdnemlwJywgJ2J6aXAnLCAnYnppcDInXSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5BcmNoaXZlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAtMSA8IGluQXJyYXkobWltZVR5cGVQYXJ0c1sxXSwgWydwZGYnLCAneC1wZGYnXSkgfHwgLTEgPCBpbkFycmF5KGV4dCwgWydwZGYnXSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5QZGY7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIC0xIDwgaW5BcnJheShtaW1lVHlwZSwgWydhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlJywgJ2FwcGxpY2F0aW9uL3BncC1rZXlzJ10pIHx8XG5cdFx0XHQtMSA8IGluQXJyYXkoZXh0LCBbJ2FzYycsICdwZW0nLCAncHBrJ10pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuQ2VydGlmaWNhdGU7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIC0xIDwgaW5BcnJheShtaW1lVHlwZSwgWydhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmUnXSkgfHwgLTEgPCBpbkFycmF5KGV4dCwgWydwN3MnXSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5DZXJ0aWZpY2F0ZUJpbjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgLTEgPFxuXHRcdFx0aW5BcnJheShtaW1lVHlwZVBhcnRzWzFdLCBbXG5cdFx0XHRcdCdydGYnLFxuXHRcdFx0XHQnbXN3b3JkJyxcblx0XHRcdFx0J3ZuZC5tc3dvcmQnLFxuXHRcdFx0XHQndm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxuXHRcdFx0XHQndm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGUnLFxuXHRcdFx0XHQndm5kLm1zLXdvcmQuZG9jdW1lbnQubWFjcm9FbmFibGVkLjEyJyxcblx0XHRcdFx0J3ZuZC5tcy13b3JkLnRlbXBsYXRlLm1hY3JvRW5hYmxlZC4xMidcblx0XHRcdF0pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuV29yZFRleHQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIC0xIDxcblx0XHRcdGluQXJyYXkobWltZVR5cGVQYXJ0c1sxXSwgW1xuXHRcdFx0XHQnZXhjZWwnLFxuXHRcdFx0XHQnbXMtZXhjZWwnLFxuXHRcdFx0XHQndm5kLm1zLWV4Y2VsJyxcblx0XHRcdFx0J3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Jyxcblx0XHRcdFx0J3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlJyxcblx0XHRcdFx0J3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQuMTInLFxuXHRcdFx0XHQndm5kLm1zLWV4Y2VsLnRlbXBsYXRlLm1hY3JvRW5hYmxlZC4xMicsXG5cdFx0XHRcdCd2bmQubXMtZXhjZWwuYWRkaW4ubWFjcm9FbmFibGVkLjEyJyxcblx0XHRcdFx0J3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLjEyJ1xuXHRcdFx0XSk6XG5cdFx0XHRyZXN1bHQgPSBGaWxlVHlwZS5TaGVldDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgLTEgPFxuXHRcdFx0aW5BcnJheShtaW1lVHlwZVBhcnRzWzFdLCBbXG5cdFx0XHRcdCdwb3dlcnBvaW50Jyxcblx0XHRcdFx0J21zLXBvd2VycG9pbnQnLFxuXHRcdFx0XHQndm5kLm1zLXBvd2VycG9pbnQnLFxuXHRcdFx0XHQndm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbicsXG5cdFx0XHRcdCd2bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGVtcGxhdGUnLFxuXHRcdFx0XHQndm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlc2hvdycsXG5cdFx0XHRcdCd2bmQubXMtcG93ZXJwb2ludC5hZGRpbi5tYWNyb0VuYWJsZWQuMTInLFxuXHRcdFx0XHQndm5kLm1zLXBvd2VycG9pbnQucHJlc2VudGF0aW9uLm1hY3JvRW5hYmxlZC4xMicsXG5cdFx0XHRcdCd2bmQubXMtcG93ZXJwb2ludC50ZW1wbGF0ZS5tYWNyb0VuYWJsZWQuMTInLFxuXHRcdFx0XHQndm5kLm1zLXBvd2VycG9pbnQuc2xpZGVzaG93Lm1hY3JvRW5hYmxlZC4xMidcblx0XHRcdF0pOlxuXHRcdFx0cmVzdWx0ID0gRmlsZVR5cGUuUHJlc2VudGF0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Ly8gbm8gZGVmYXVsdFxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn0pO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzRmlsZVR5cGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBzdGF0aWNJY29uQ2xhc3MgPSBfLm1lbW9pemUoKGZpbGVUeXBlKSA9PiB7XG5cdGxldCByZXN1bHRUZXh0ID0gJycsXG5cdFx0cmVzdWx0Q2xhc3MgPSAnaWNvbi1maWxlJztcblxuXHRzd2l0Y2ggKGZpbGVUeXBlKSB7XG5cdFx0Y2FzZSBGaWxlVHlwZS5UZXh0OlxuXHRcdGNhc2UgRmlsZVR5cGUuRW1sOlxuXHRcdGNhc2UgRmlsZVR5cGUuV29yZFRleHQ6XG5cdFx0XHRyZXN1bHRDbGFzcyA9ICdpY29uLWZpbGUtdGV4dCc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIEZpbGVUeXBlLkh0bWw6XG5cdFx0Y2FzZSBGaWxlVHlwZS5Db2RlOlxuXHRcdFx0cmVzdWx0Q2xhc3MgPSAnaWNvbi1maWxlLWNvZGUnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGaWxlVHlwZS5JbWFnZTpcblx0XHRcdHJlc3VsdENsYXNzID0gJ2ljb24tZmlsZS1pbWFnZSc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIEZpbGVUeXBlLkF1ZGlvOlxuXHRcdFx0cmVzdWx0Q2xhc3MgPSAnaWNvbi1maWxlLW11c2ljJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRmlsZVR5cGUuVmlkZW86XG5cdFx0XHRyZXN1bHRDbGFzcyA9ICdpY29uLWZpbGUtbW92aWUnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGaWxlVHlwZS5BcmNoaXZlOlxuXHRcdFx0cmVzdWx0Q2xhc3MgPSAnaWNvbi1maWxlLXppcCc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIEZpbGVUeXBlLkNlcnRpZmljYXRlOlxuXHRcdGNhc2UgRmlsZVR5cGUuQ2VydGlmaWNhdGVCaW46XG5cdFx0XHRyZXN1bHRDbGFzcyA9ICdpY29uLWZpbGUtY2VydGlmaWNhdGUnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGaWxlVHlwZS5TaGVldDpcblx0XHRcdHJlc3VsdENsYXNzID0gJ2ljb24tZmlsZS1leGNlbCc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIEZpbGVUeXBlLlByZXNlbnRhdGlvbjpcblx0XHRcdHJlc3VsdENsYXNzID0gJ2ljb24tZmlsZS1jaGFydC1ncmFwaCc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIEZpbGVUeXBlLlBkZjpcblx0XHRcdHJlc3VsdFRleHQgPSAncGRmJztcblx0XHRcdHJlc3VsdENsYXNzID0gJ2ljb24tbm9uZSc7XG5cdFx0XHRicmVhaztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gW3Jlc3VsdENsYXNzLCByZXN1bHRUZXh0XTtcbn0pO1xuXG4vKipcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzRmlsZVR5cGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBzdGF0aWNDb21iaW5lZEljb25DbGFzcyA9IChkYXRhKSA9PiB7XG5cdGxldCByZXN1bHQgPSAnJyxcblx0XHR0eXBlcyA9IFtdO1xuXG5cdGlmIChpc05vbkVtcHR5QXJyYXkoZGF0YSkpIHtcblx0XHRyZXN1bHQgPSAnaWNvbi1hdHRhY2htZW50Jztcblx0XHR0eXBlcyA9IF8udW5pcShfLmNvbXBhY3QoXy5tYXAoZGF0YSwgKGl0ZW0pID0+IChpdGVtID8gc3RhdGljRmlsZVR5cGUoZ2V0RmlsZUV4dGVuc2lvbihpdGVtWzBdKSwgaXRlbVsxXSkgOiAnJykpKSk7XG5cblx0XHRpZiAodHlwZXMgJiYgMSA9PT0gdHlwZXMubGVuZ3RoICYmIHR5cGVzWzBdKSB7XG5cdFx0XHRzd2l0Y2ggKHR5cGVzWzBdKSB7XG5cdFx0XHRcdGNhc2UgRmlsZVR5cGUuVGV4dDpcblx0XHRcdFx0Y2FzZSBGaWxlVHlwZS5Xb3JkVGV4dDpcblx0XHRcdFx0XHRyZXN1bHQgPSAnaWNvbi1maWxlLXRleHQnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbGVUeXBlLkh0bWw6XG5cdFx0XHRcdGNhc2UgRmlsZVR5cGUuQ29kZTpcblx0XHRcdFx0XHRyZXN1bHQgPSAnaWNvbi1maWxlLWNvZGUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbGVUeXBlLkltYWdlOlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdpY29uLWZpbGUtaW1hZ2UnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbGVUeXBlLkF1ZGlvOlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdpY29uLWZpbGUtbXVzaWMnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbGVUeXBlLlZpZGVvOlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdpY29uLWZpbGUtbW92aWUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbGVUeXBlLkFyY2hpdmU6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ2ljb24tZmlsZS16aXAnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbGVUeXBlLkNlcnRpZmljYXRlOlxuXHRcdFx0XHRjYXNlIEZpbGVUeXBlLkNlcnRpZmljYXRlQmluOlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdpY29uLWZpbGUtY2VydGlmaWNhdGUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbGVUeXBlLlNoZWV0OlxuXHRcdFx0XHRcdHJlc3VsdCA9ICdpY29uLWZpbGUtZXhjZWwnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbGVUeXBlLlByZXNlbnRhdGlvbjpcblx0XHRcdFx0XHRyZXN1bHQgPSAnaWNvbi1maWxlLWNoYXJ0LWdyYXBoJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5jbGFzcyBBdHRhY2htZW50TW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ0F0dGFjaG1lbnRNb2RlbCcpO1xuXG5cdFx0dGhpcy5jaGVja2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLm1pbWVUeXBlID0gJyc7XG5cdFx0dGhpcy5maWxlTmFtZSA9ICcnO1xuXHRcdHRoaXMuZmlsZU5hbWVFeHQgPSAnJztcblx0XHR0aGlzLmZpbGVUeXBlID0gRmlsZVR5cGUuVW5rbm93bjtcblx0XHR0aGlzLmVzdGltYXRlZFNpemUgPSAwO1xuXHRcdHRoaXMuZnJpZW5kbHlTaXplID0gJyc7XG5cdFx0dGhpcy5pc0lubGluZSA9IGZhbHNlO1xuXHRcdHRoaXMuaXNMaW5rZWQgPSBmYWxzZTtcblx0XHR0aGlzLmlzVGh1bWJuYWlsID0gZmFsc2U7XG5cdFx0dGhpcy5jaWQgPSAnJztcblx0XHR0aGlzLmNpZFdpdGhPdXRUYWdzID0gJyc7XG5cdFx0dGhpcy5jb250ZW50TG9jYXRpb24gPSAnJztcblx0XHR0aGlzLmRvd25sb2FkID0gJyc7XG5cdFx0dGhpcy5mb2xkZXIgPSAnJztcblx0XHR0aGlzLnVpZCA9ICcnO1xuXHRcdHRoaXMubWltZUluZGV4ID0gJyc7XG5cdFx0dGhpcy5mcmFtZWQgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSB7QWpheEpzb25BdHRhY2htZW50fSBqc29uXG5cdCAqIEByZXR1cm5zIHs/QXR0YWNobWVudE1vZGVsfVxuXHQgKi9cblx0c3RhdGljIG5ld0luc3RhbmNlRnJvbUpzb24oanNvbikge1xuXHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBuZXcgQXR0YWNobWVudE1vZGVsKCk7XG5cdFx0cmV0dXJuIGF0dGFjaG1lbnQuaW5pdEJ5SnNvbihqc29uKSA/IGF0dGFjaG1lbnQgOiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QWpheEpzb25BdHRhY2htZW50fSBqc29uXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aW5pdEJ5SnNvbihqc29uKSB7XG5cdFx0bGV0IGJSZXN1bHQgPSBmYWxzZTtcblx0XHRpZiAoanNvbiAmJiAnT2JqZWN0L0F0dGFjaG1lbnQnID09PSBqc29uWydAT2JqZWN0J10pIHtcblx0XHRcdHRoaXMubWltZVR5cGUgPSB0cmltKChqc29uLk1pbWVUeXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcblx0XHRcdHRoaXMuZmlsZU5hbWUgPSB0cmltKGpzb24uRmlsZU5hbWUpO1xuXHRcdFx0dGhpcy5lc3RpbWF0ZWRTaXplID0gcEludChqc29uLkVzdGltYXRlZFNpemUpO1xuXHRcdFx0dGhpcy5pc0lubGluZSA9ICEhanNvbi5Jc0lubGluZTtcblx0XHRcdHRoaXMuaXNMaW5rZWQgPSAhIWpzb24uSXNMaW5rZWQ7XG5cdFx0XHR0aGlzLmlzVGh1bWJuYWlsID0gISFqc29uLklzVGh1bWJuYWlsO1xuXHRcdFx0dGhpcy5jaWQgPSBqc29uLkNJRDtcblx0XHRcdHRoaXMuY29udGVudExvY2F0aW9uID0ganNvbi5Db250ZW50TG9jYXRpb247XG5cdFx0XHR0aGlzLmRvd25sb2FkID0ganNvbi5Eb3dubG9hZDtcblxuXHRcdFx0dGhpcy5mb2xkZXIgPSBqc29uLkZvbGRlcjtcblx0XHRcdHRoaXMudWlkID0ganNvbi5VaWQ7XG5cdFx0XHR0aGlzLm1pbWVJbmRleCA9IGpzb24uTWltZUluZGV4O1xuXHRcdFx0dGhpcy5mcmFtZWQgPSAhIWpzb24uRnJhbWVkO1xuXG5cdFx0XHR0aGlzLmZyaWVuZGx5U2l6ZSA9IGZyaWVuZGx5U2l6ZSh0aGlzLmVzdGltYXRlZFNpemUpO1xuXHRcdFx0dGhpcy5jaWRXaXRoT3V0VGFncyA9IHRoaXMuY2lkLnJlcGxhY2UoL148Ky8sICcnKS5yZXBsYWNlKC8+KyQvLCAnJyk7XG5cblx0XHRcdHRoaXMuZmlsZU5hbWVFeHQgPSBnZXRGaWxlRXh0ZW5zaW9uKHRoaXMuZmlsZU5hbWUpO1xuXHRcdFx0dGhpcy5maWxlVHlwZSA9IHN0YXRpY0ZpbGVUeXBlKHRoaXMuZmlsZU5hbWVFeHQsIHRoaXMubWltZVR5cGUpO1xuXG5cdFx0XHRiUmVzdWx0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYlJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzSW1hZ2UoKSB7XG5cdFx0cmV0dXJuIEZpbGVUeXBlLkltYWdlID09PSB0aGlzLmZpbGVUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNNcDMoKSB7XG5cdFx0cmV0dXJuIEZpbGVUeXBlLkF1ZGlvID09PSB0aGlzLmZpbGVUeXBlICYmICdtcDMnID09PSB0aGlzLmZpbGVOYW1lRXh0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNPZ2coKSB7XG5cdFx0cmV0dXJuIEZpbGVUeXBlLkF1ZGlvID09PSB0aGlzLmZpbGVUeXBlICYmICgnb2dhJyA9PT0gdGhpcy5maWxlTmFtZUV4dCB8fCAnb2dnJyA9PT0gdGhpcy5maWxlTmFtZUV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc1dhdigpIHtcblx0XHRyZXR1cm4gRmlsZVR5cGUuQXVkaW8gPT09IHRoaXMuZmlsZVR5cGUgJiYgJ3dhdicgPT09IHRoaXMuZmlsZU5hbWVFeHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXNUaHVtYm5haWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXNUaHVtYm5haWw7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc1RleHQoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdEZpbGVUeXBlLlRleHQgPT09IHRoaXMuZmlsZVR5cGUgfHxcblx0XHRcdEZpbGVUeXBlLkVtbCA9PT0gdGhpcy5maWxlVHlwZSB8fFxuXHRcdFx0RmlsZVR5cGUuQ2VydGlmaWNhdGUgPT09IHRoaXMuZmlsZVR5cGUgfHxcblx0XHRcdEZpbGVUeXBlLkh0bWwgPT09IHRoaXMuZmlsZVR5cGUgfHxcblx0XHRcdEZpbGVUeXBlLkNvZGUgPT09IHRoaXMuZmlsZVR5cGVcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNQZGYoKSB7XG5cdFx0cmV0dXJuIEZpbGVUeXBlLlBkZiA9PT0gdGhpcy5maWxlVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRnJhbWVkKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLmZyYW1lZCAmJlxuXHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXyAmJlxuXHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkKCkgJiZcblx0XHRcdCEodGhpcy5pc1BkZigpICYmIGJBbGxvd1BkZlByZXZpZXcpICYmXG5cdFx0XHQhdGhpcy5pc1RleHQoKSAmJlxuXHRcdFx0IXRoaXMuaXNJbWFnZSgpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGhhc1ByZXZpZXcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXNJbWFnZSgpIHx8ICh0aGlzLmlzUGRmKCkgJiYgYkFsbG93UGRmUHJldmlldykgfHwgdGhpcy5pc1RleHQoKSB8fCB0aGlzLmlzRnJhbWVkKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXNQcmVwbGF5KCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQoQXVkaW8uc3VwcG9ydGVkTXAzICYmIHRoaXMuaXNNcDMoKSkgfHxcblx0XHRcdChBdWRpby5zdXBwb3J0ZWRPZ2cgJiYgdGhpcy5pc09nZygpKSB8fFxuXHRcdFx0KEF1ZGlvLnN1cHBvcnRlZFdhdiAmJiB0aGlzLmlzV2F2KCkpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0bGlua0Rvd25sb2FkKCkge1xuXHRcdHJldHVybiBhdHRhY2htZW50RG93bmxvYWQodGhpcy5kb3dubG9hZCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGxpbmtQcmV2aWV3KCkge1xuXHRcdHJldHVybiBhdHRhY2htZW50UHJldmlldyh0aGlzLmRvd25sb2FkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0bGlua1RodW1ibmFpbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5oYXNUaHVtYm5haWwoKSA/IGF0dGFjaG1lbnRUaHVtYm5haWxQcmV2aWV3KHRoaXMuZG93bmxvYWQpIDogJyc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGxpbmtUaHVtYm5haWxQcmV2aWV3U3R5bGUoKSB7XG5cdFx0Y29uc3QgbGluayA9IHRoaXMubGlua1RodW1ibmFpbCgpO1xuXHRcdHJldHVybiAnJyA9PT0gbGluayA/ICcnIDogJ2JhY2tncm91bmQ6dXJsKCcgKyBsaW5rICsgJyknO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRsaW5rRnJhbWVkKCkge1xuXHRcdHJldHVybiBhdHRhY2htZW50RnJhbWVkKHRoaXMuZG93bmxvYWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRsaW5rUHJldmlld0FzUGxhaW4oKSB7XG5cdFx0cmV0dXJuIGF0dGFjaG1lbnRQcmV2aWV3QXNQbGFpbih0aGlzLmRvd25sb2FkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0bGlua1ByZXZpZXdNYWluKCkge1xuXHRcdGxldCByZXN1bHQgPSAnJztcblx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdGNhc2UgdGhpcy5pc0ltYWdlKCk6XG5cdFx0XHRjYXNlIHRoaXMuaXNQZGYoKSAmJiBiQWxsb3dQZGZQcmV2aWV3OlxuXHRcdFx0XHRyZXN1bHQgPSB0aGlzLmxpbmtQcmV2aWV3KCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSB0aGlzLmlzVGV4dCgpOlxuXHRcdFx0XHRyZXN1bHQgPSB0aGlzLmxpbmtQcmV2aWV3QXNQbGFpbigpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgdGhpcy5pc0ZyYW1lZCgpOlxuXHRcdFx0XHRyZXN1bHQgPSB0aGlzLmxpbmtGcmFtZWQoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2VuZXJhdGVUcmFuc2ZlckRvd25sb2FkVXJsKCkge1xuXHRcdGxldCBsaW5rID0gdGhpcy5saW5rRG93bmxvYWQoKTtcblx0XHRpZiAoJ2h0dHAnICE9PSBsaW5rLnN1YnN0cigwLCA0KSkge1xuXHRcdFx0bGluayA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIGxpbms7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMubWltZVR5cGUgKyAnOicgKyB0aGlzLmZpbGVOYW1lICsgJzonICsgbGluaztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0F0dGFjaG1lbnRNb2RlbH0gYXR0YWNobWVudFxuXHQgKiBAcGFyYW0geyp9IGV2ZW50XG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0ZXZlbnREcmFnU3RhcnQoYXR0YWNobWVudCwgZXZlbnQpIHtcblx0XHRjb25zdCBsb2NhbEV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudCB8fCBldmVudDtcblx0XHRpZiAoYXR0YWNobWVudCAmJiBsb2NhbEV2ZW50ICYmIGxvY2FsRXZlbnQuZGF0YVRyYW5zZmVyICYmIGxvY2FsRXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEpIHtcblx0XHRcdGxvY2FsRXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ0Rvd25sb2FkVVJMJywgdGhpcy5nZW5lcmF0ZVRyYW5zZmVyRG93bmxvYWRVcmwoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGljb25DbGFzcygpIHtcblx0XHRyZXR1cm4gc3RhdGljSWNvbkNsYXNzKHRoaXMuZmlsZVR5cGUpWzBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRpY29uVGV4dCgpIHtcblx0XHRyZXR1cm4gc3RhdGljSWNvbkNsYXNzKHRoaXMuZmlsZVR5cGUpWzFdO1xuXHR9XG59XG5cbmV4cG9ydCB7IEF0dGFjaG1lbnRNb2RlbCwgQXR0YWNobWVudE1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nICYmIC9uYXRpdmUgY29kZS8udGVzdChpbnNwZWN0U291cmNlKFdlYWtNYXApKTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhcyh0YXJnZXQsIGtleSkpIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgfVxufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0KTtcbiAgICB9O1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHNldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldDtcbiAgICBzZXR0ZXIuY2FsbCh0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlci5jYWxsKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IGNvZGVQb2ludEF0LCBhdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBTLmNoYXJDb2RlQXQocG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBTLmNoYXJDb2RlQXQocG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkcgPyBTLmNoYXJBdChwb3NpdGlvbikgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HID8gUy5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyAyKSA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIvLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL2ZhaWxzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yLFxuLy8gc28gd2UgdXNlIGFuIGludGVybWVkaWF0ZSBmdW5jdGlvbi5cbmZ1bmN0aW9uIFJFKHMsIGYpIHtcbiAgcmV0dXJuIFJlZ0V4cChzLCBmKTtcbn1cblxuZXhwb3J0cy5VTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxuICB2YXIgcmUgPSBSRSgnYScsICd5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdhYmNkJykgIT0gbnVsbDtcbn0pO1xuXG5leHBvcnRzLkJST0tFTl9DQVJFVCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9IFJFKCdecicsICdneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnc3RyJykgIT0gbnVsbDtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ21hdGNoJywgMSwgZnVuY3Rpb24gKE1BVENILCBuYXRpdmVNYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIG1hdGNoZXIgPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBtYXRjaGVyICE9PSB1bmRlZmluZWQgPyBtYXRjaGVyLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWF0Y2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcblxuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBBW25dID0gbWF0Y2hTdHI7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICAgIG4rKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuID09PSAwID8gbnVsbCA6IEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RDaGVja2JveCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdENoZWNrYm94JztcblxuY2xhc3MgQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihDaGVja2JveENvbXBvbmVudCwgJ0NoZWNrYm94Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IHsgaHRtbEVkaXRvckRlZmF1bHRDb25maWcsIGh0bWxFZGl0b3JMYW5nc01hcCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IEV2ZW50S2V5Q29kZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBIdG1sRWRpdG9yIHtcblx0ZWRpdG9yO1xuXHRibHVyVGltZXIgPSAwO1xuXG5cdF9fcmVzaXphYmxlID0gZmFsc2U7XG5cdF9faW5pdGVkID0gZmFsc2U7XG5cblx0b25CbHVyID0gbnVsbDtcblx0b25SZWFkeSA9IG51bGw7XG5cdG9uTW9kZUNoYW5nZSA9IG51bGw7XG5cblx0ZWxlbWVudDtcblx0JGVsZW1lbnQ7XG5cblx0cmVzaXplO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25CbHVyXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlYWR5XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk1vZGVDaGFuZ2Vcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9uQmx1ciA9IG51bGwsIG9uUmVhZHkgPSBudWxsLCBvbk1vZGVDaGFuZ2UgPSBudWxsKSB7XG5cdFx0dGhpcy5vbkJsdXIgPSBvbkJsdXI7XG5cdFx0dGhpcy5vblJlYWR5ID0gb25SZWFkeTtcblx0XHR0aGlzLm9uTW9kZUNoYW5nZSA9IG9uTW9kZUNoYW5nZTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cdFx0dGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCk7XG5cblx0XHR0aGlzLnJlc2l6ZSA9IF8udGhyb3R0bGUoXy5iaW5kKHRoaXMucmVzaXplRWRpdG9yLCB0aGlzKSwgMTAwKTtcblxuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cblx0cnVuT25CbHVyKCkge1xuXHRcdGlmICh0aGlzLm9uQmx1cikge1xuXHRcdFx0dGhpcy5vbkJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHRibHVyVHJpZ2dlcigpIHtcblx0XHRpZiAodGhpcy5vbkJsdXIpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpO1xuXHRcdFx0dGhpcy5ibHVyVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVuT25CbHVyKCk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTIwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRmb2N1c1RyaWdnZXIoKSB7XG5cdFx0aWYgKHRoaXMub25CbHVyKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0h0bWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdG9yID8gJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhckNhY2hlZFNpZ25hdHVyZSgpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRoaXMuZWRpdG9yLmV4ZWNDb21tYW5kKCdpbnNlcnRTaWduYXR1cmUnLCB7XG5cdFx0XHRcdGNsZWFyQ2FjaGU6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlXG5cdCAqIEBwYXJhbSB7Ym9vbH0gaHRtbFxuXHQgKiBAcGFyYW0ge2Jvb2x9IGluc2VydEJlZm9yZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHNldFNpZ25hdHVyZShzaWduYXR1cmUsIGh0bWwsIGluc2VydEJlZm9yZSA9IGZhbHNlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgnaW5zZXJ0U2lnbmF0dXJlJywge1xuXHRcdFx0XHRpc0h0bWw6IGh0bWwsXG5cdFx0XHRcdGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuXHRcdFx0XHRzaWduYXR1cmU6IHNpZ25hdHVyZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y2hlY2tEaXJ0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0b3IgPyB0aGlzLmVkaXRvci5jaGVja0RpcnR5KCkgOiBmYWxzZTtcblx0fVxuXG5cdHJlc2V0RGlydHkoKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5yZXNldERpcnR5KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBJc0h0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0RGF0YSh3cmFwSXNIdG1sID0gZmFsc2UpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSAmJiB0aGlzLmVkaXRvci5wbHVnaW5zLnBsYWluICYmIHRoaXMuZWRpdG9yLl9fcGxhaW4pIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB0aGlzLmVkaXRvci5fX3BsYWluLmdldFJhd0RhdGEoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB3cmFwSXNIdG1sXG5cdFx0XHRcdFx0XHQ/ICc8ZGl2IGRhdGEtaHRtbC1lZGl0b3ItZm9udC13cmFwcGVyPVwidHJ1ZVwiIHN0eWxlPVwiZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzcHg7XCI+JyArXG5cdFx0XHRcdFx0XHQgIHRoaXMuZWRpdG9yLmdldERhdGEoKSArXG5cdFx0XHRcdFx0XHQgICc8L2Rpdj4nXG5cdFx0XHRcdFx0XHQ6IHRoaXMuZWRpdG9yLmdldERhdGEoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcElzSHRtbCA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXREYXRhV2l0aEh0bWxNYXJrKHdyYXBJc0h0bWwgPSBmYWxzZSkge1xuXHRcdHJldHVybiAodGhpcy5pc0h0bWwoKSA/ICc6SFRNTDonIDogJycpICsgdGhpcy5nZXREYXRhKHdyYXBJc0h0bWwpO1xuXHR9XG5cblx0bW9kZVRvZ2dsZShwbGFpbiwgcmVzaXplKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAocGxhaW4pIHtcblx0XHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0TW9kZSgnd3lzaXd5ZycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICgnd3lzaXd5ZycgPT09IHRoaXMuZWRpdG9yLm1vZGUpIHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXRNb2RlKCdwbGFpbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHRcdGlmIChyZXNpemUpIHtcblx0XHRcdFx0dGhpcy5yZXNpemUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sT3JQbGFpbih0ZXh0LCBmb2N1cykge1xuXHRcdGlmICgnOkhUTUw6JyA9PT0gdGV4dC5zdWJzdHIoMCwgNikpIHtcblx0XHRcdHRoaXMuc2V0SHRtbCh0ZXh0LnN1YnN0cig2KSwgZm9jdXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldFBsYWluKHRleHQsIGZvY3VzKTtcblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sKGh0bWwsIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKHRydWUpO1xuXG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC88cFtePl0qPjxcXC9wPi9naSwgJycpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKGh0bWwpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJlcGxhY2VIdG1sKGZpbmQsIHJlcGxhY2VIdG1sKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQgJiYgJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHRoaXMuZWRpdG9yLmdldERhdGEoKS5yZXBsYWNlKGZpbmQsIHJlcGxhY2VIdG1sKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0c2V0UGxhaW4ocGxhaW4sIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKGZhbHNlKTtcblx0XHRcdGlmICgncGxhaW4nID09PSB0aGlzLmVkaXRvci5tb2RlICYmIHRoaXMuZWRpdG9yLnBsdWdpbnMucGxhaW4gJiYgdGhpcy5lZGl0b3IuX19wbGFpbikge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5fX3BsYWluLnNldFJhd0RhdGEocGxhaW4pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHBsYWluKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGluaXQoKSB7XG5cdFx0aWYgKHRoaXMuZWxlbWVudCAmJiAhdGhpcy5lZGl0b3IpIHtcblx0XHRcdGNvbnN0IGluaXRGdW5jID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjb25maWcgPSBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyxcblx0XHRcdFx0XHRsYW5ndWFnZSA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZScpLFxuXHRcdFx0XHRcdGFsbG93U291cmNlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWxsb3dIdG1sRWRpdG9yU291cmNlQnV0dG9uJyksXG5cdFx0XHRcdFx0Yml0aSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93SHRtbEVkaXRvckJpdGlCdXR0b25zJyk7XG5cblx0XHRcdFx0aWYgKChhbGxvd1NvdXJjZSB8fCAhYml0aSkgJiYgIWNvbmZpZy50b29sYmFyR3JvdXBzLl9fY2ZnSW5pdGVkKSB7XG5cdFx0XHRcdFx0Y29uZmlnLnRvb2xiYXJHcm91cHMuX19jZmdJbml0ZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0aWYgKGFsbG93U291cmNlKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlQnV0dG9ucyA9IGNvbmZpZy5yZW1vdmVCdXR0b25zLnJlcGxhY2UoJyxTb3VyY2UnLCAnJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFiaXRpKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlUGx1Z2lucyArPSAoY29uZmlnLnJlbW92ZVBsdWdpbnMgPyAnLCcgOiAnJykgKyAnYmlkaSc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uZmlnLmVudGVyTW9kZSA9IHdpbmRvdy5DS0VESVRPUi5FTlRFUl9CUjtcblx0XHRcdFx0Y29uZmlnLnNoaWZ0RW50ZXJNb2RlID0gd2luZG93LkNLRURJVE9SLkVOVEVSX1A7XG5cblx0XHRcdFx0Y29uZmlnLmxhbmd1YWdlID0gaHRtbEVkaXRvckxhbmdzTWFwWyhsYW5ndWFnZSB8fCAnZW4nKS50b0xvd2VyQ2FzZSgpXSB8fCAnZW4nO1xuXHRcdFx0XHRpZiAod2luZG93LkNLRURJVE9SLmVudikge1xuXHRcdFx0XHRcdHdpbmRvdy5DS0VESVRPUi5lbnYuaXNDb21wYXRpYmxlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZWRpdG9yID0gd2luZG93LkNLRURJVE9SLmFwcGVuZFRvKHRoaXMuZWxlbWVudCwgY29uZmlnKTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbigna2V5JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmRhdGEgJiYgRXZlbnRLZXlDb2RlLlRhYiA9PT0gZXZlbnQuZGF0YS5rZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuZWRpdG9yLm9uKCdibHVyJywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmx1clRyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ21vZGUnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5ibHVyVHJpZ2dlcigpO1xuXHRcdFx0XHRcdGlmICh0aGlzLm9uTW9kZUNoYW5nZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vbk1vZGVDaGFuZ2UoJ3BsYWluJyAhPT0gdGhpcy5lZGl0b3IubW9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignZm9jdXMnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1c1RyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKHdpbmRvdy5GaWxlUmVhZGVyKSB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2Ryb3AnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGlmICgwIDwgZXZlbnQuZGF0YS5kYXRhVHJhbnNmZXIuZ2V0RmlsZXNDb3VudCgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGZpbGUgPSBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5nZXRGaWxlKDApO1xuXHRcdFx0XHRcdFx0XHRpZiAoZmlsZSAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5pZCAmJiBmaWxlLnR5cGUgJiYgZmlsZS50eXBlLm1hdGNoKC9eaW1hZ2UvaSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpZCA9IGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW1hZ2VJZCA9IGBbaW1nPSR7aWR9XWAsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZWFkZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcblxuXHRcdFx0XHRcdFx0XHRcdHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVhZGVyLnJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlcGxhY2VIdG1sKGltYWdlSWQsIGA8aW1nIHNyYz1cIiR7cmVhZGVyLnJlc3VsdH1cIiAvPmApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvaHRtbCcsIGltYWdlSWQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignaW5zdGFuY2VSZWFkeScsICgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5lZGl0b3IucmVtb3ZlTWVudUl0ZW0pIHtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjdXQnKTtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjb3B5Jyk7XG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRvci5yZW1vdmVNZW51SXRlbSgncGFzdGUnKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLl9fcmVzaXphYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLl9faW5pdGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdHRoaXMucmVzaXplKCk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5vblJlYWR5KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9uUmVhZHkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHdpbmRvdy5DS0VESVRPUikge1xuXHRcdFx0XHRpbml0RnVuYygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93Ll9faW5pdEVkaXRvciA9IGluaXRGdW5jO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvY3VzKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXMoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRoYXNGb2N1cygpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiAhIXRoaXMuZWRpdG9yLmZvY3VzTWFuYWdlci5oYXNGb2N1cztcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRibHVyKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXNNYW5hZ2VyLmJsdXIodHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0cmVzaXplRWRpdG9yKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9fcmVzaXphYmxlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5yZXNpemUodGhpcy4kZWxlbWVudC53aWR0aCgpLCB0aGlzLiRlbGVtZW50LmlubmVySGVpZ2h0KCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblx0fVxuXG5cdHNldFJlYWRPbmx5KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXRSZWFkT25seSghIXZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRjbGVhcihmb2N1cykge1xuXHRcdHRoaXMuc2V0SHRtbCgnJywgZm9jdXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEh0bWxFZGl0b3IsIEh0bWxFZGl0b3IgYXMgZGVmYXVsdCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2VcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuXG5jb25zdCBPcGVudGlwID0gd2luZG93Lk9wZW50aXAgfHwge307XG5cbk9wZW50aXAuc3R5bGVzID0gT3BlbnRpcC5zdHlsZXMgfHwge307XG5cbk9wZW50aXAuc3R5bGVzLnJhaW5sb29wID0ge1xuXHQnZXh0ZW5kcyc6ICdzdGFuZGFyZCcsXG5cblx0J2ZpeGVkJzogdHJ1ZSxcblx0J3RhcmdldCc6IHRydWUsXG5cblx0J2RlbGF5JzogMC4yLFxuXHQnaGlkZURlbGF5JzogMCxcblxuXHQnaGlkZUVmZmVjdCc6ICdmYWRlJyxcblx0J2hpZGVFZmZlY3REdXJhdGlvbic6IDAuMixcblxuXHQnc2hvd0VmZmVjdCc6ICdmYWRlJyxcblx0J3Nob3dFZmZlY3REdXJhdGlvbic6IDAuMixcblxuXHQnc2hvd09uJzogJ21vdXNlb3ZlciBjbGljaycsXG5cdCdyZW1vdmVFbGVtZW50c09uSGlkZSc6IHRydWUsXG5cblx0J2JhY2tncm91bmQnOiAnI2ZmZicsXG5cdCdzaGFkb3cnOiBmYWxzZSxcblxuXHQnYm9yZGVyQ29sb3InOiAnIzk5OScsXG5cdCdib3JkZXJSYWRpdXMnOiAyLFxuXHQnYm9yZGVyV2lkdGgnOiAxXG59O1xuXG5PcGVudGlwLnN0eWxlcy5yYWlubG9vcFRpcCA9IHtcblx0J2V4dGVuZHMnOiAncmFpbmxvb3AnLFxuXHQnZGVsYXknOiAwLjQsXG5cdCdncm91cCc6ICdyYWlubG9vcFRpcHMnXG59O1xuXG5PcGVudGlwLnN0eWxlcy5yYWlubG9vcEVycm9yVGlwID0ge1xuXHQnZXh0ZW5kcyc6ICdyYWlubG9vcCcsXG5cdCdjbGFzc05hbWUnOiAncmFpbmxvb3BFcnJvclRpcCdcbn07XG5cbmV4cG9ydCB7IE9wZW50aXAsIE9wZW50aXAgYXMgZGVmYXVsdCB9O1xuIiwiLyohXG4gKiBQaWthZGF5XG4gKlxuICogQ29weXJpZ2h0IMKpIDIwMTQgRGF2aWQgQnVzaGVsbCB8IEJTRCAmIE1JVCBsaWNlbnNlIHwgaHR0cHM6Ly9naXRodWIuY29tL1Bpa2FkYXkvUGlrYWRheVxuICovXG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSlcbntcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgbW9tZW50O1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gQ29tbW9uSlMgbW9kdWxlXG4gICAgICAgIC8vIExvYWQgbW9tZW50LmpzIGFzIGFuIG9wdGlvbmFsIGRlcGVuZGVuY3lcbiAgICAgICAgdHJ5IHsgbW9tZW50ID0gcmVxdWlyZSgnbW9tZW50Jyk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShtb21lbnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICAgICAgZGVmaW5lKGZ1bmN0aW9uIChyZXEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIExvYWQgbW9tZW50LmpzIGFzIGFuIG9wdGlvbmFsIGRlcGVuZGVuY3lcbiAgICAgICAgICAgIHZhciBpZCA9ICdtb21lbnQnO1xuICAgICAgICAgICAgdHJ5IHsgbW9tZW50ID0gcmVxKGlkKTsgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgIHJldHVybiBmYWN0b3J5KG1vbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuUGlrYWRheSA9IGZhY3Rvcnkocm9vdC5tb21lbnQpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKG1vbWVudClcbntcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBmZWF0dXJlIGRldGVjdGlvbiBhbmQgaGVscGVyIGZ1bmN0aW9uc1xuICAgICAqL1xuICAgIHZhciBoYXNNb21lbnQgPSB0eXBlb2YgbW9tZW50ID09PSAnZnVuY3Rpb24nLFxuXG4gICAgaGFzRXZlbnRMaXN0ZW5lcnMgPSAhIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyLFxuXG4gICAgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQsXG5cbiAgICBzdG8gPSB3aW5kb3cuc2V0VGltZW91dCxcblxuICAgIGFkZEV2ZW50ID0gZnVuY3Rpb24oZWwsIGUsIGNhbGxiYWNrLCBjYXB0dXJlKVxuICAgIHtcbiAgICAgICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKGUsIGNhbGxiYWNrLCAhIWNhcHR1cmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWwuYXR0YWNoRXZlbnQoJ29uJyArIGUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVFdmVudCA9IGZ1bmN0aW9uKGVsLCBlLCBjYWxsYmFjaywgY2FwdHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChoYXNFdmVudExpc3RlbmVycykge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLCBjYWxsYmFjaywgISFjYXB0dXJlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsLmRldGFjaEV2ZW50KCdvbicgKyBlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgdHJpbSA9IGZ1bmN0aW9uKHN0cilcbiAgICB7XG4gICAgICAgIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywnJyk7XG4gICAgfSxcblxuICAgIGhhc0NsYXNzID0gZnVuY3Rpb24oZWwsIGNuKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgnICcgKyBlbC5jbGFzc05hbWUgKyAnICcpLmluZGV4T2YoJyAnICsgY24gKyAnICcpICE9PSAtMTtcbiAgICB9LFxuXG4gICAgYWRkQ2xhc3MgPSBmdW5jdGlvbihlbCwgY24pXG4gICAge1xuICAgICAgICBpZiAoIWhhc0NsYXNzKGVsLCBjbikpIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTmFtZSA9IChlbC5jbGFzc05hbWUgPT09ICcnKSA/IGNuIDogZWwuY2xhc3NOYW1lICsgJyAnICsgY247XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbihlbCwgY24pXG4gICAge1xuICAgICAgICBlbC5jbGFzc05hbWUgPSB0cmltKCgnICcgKyBlbC5jbGFzc05hbWUgKyAnICcpLnJlcGxhY2UoJyAnICsgY24gKyAnICcsICcgJykpO1xuICAgIH0sXG5cbiAgICBpc0FycmF5ID0gZnVuY3Rpb24ob2JqKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgvQXJyYXkvKS50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKTtcbiAgICB9LFxuXG4gICAgaXNEYXRlID0gZnVuY3Rpb24ob2JqKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICgvRGF0ZS8pLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpICYmICFpc05hTihvYmouZ2V0VGltZSgpKTtcbiAgICB9LFxuXG4gICAgaXNXZWVrZW5kID0gZnVuY3Rpb24oZGF0ZSlcbiAgICB7XG4gICAgICAgIHZhciBkYXkgPSBkYXRlLmdldERheSgpO1xuICAgICAgICByZXR1cm4gZGF5ID09PSAwIHx8IGRheSA9PT0gNjtcbiAgICB9LFxuXG4gICAgaXNMZWFwWWVhciA9IGZ1bmN0aW9uKHllYXIpXG4gICAge1xuICAgICAgICAvLyBzb2x1dGlvbiBsaWZ0ZWQgZnJvbSBkYXRlLmpzIChNSVQgbGljZW5zZSk6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlanMvRGF0ZWpzXG4gICAgICAgIHJldHVybiAoKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDApO1xuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIFszMSwgaXNMZWFwWWVhcih5ZWFyKSA/IDI5IDogMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb250aF07XG4gICAgfSxcblxuICAgIHNldFRvU3RhcnRPZkRheSA9IGZ1bmN0aW9uKGRhdGUpXG4gICAge1xuICAgICAgICBpZiAoaXNEYXRlKGRhdGUpKSBkYXRlLnNldEhvdXJzKDAsMCwwLDApO1xuICAgIH0sXG5cbiAgICBjb21wYXJlRGF0ZXMgPSBmdW5jdGlvbihhLGIpXG4gICAge1xuICAgICAgICAvLyB3ZWFrIGRhdGUgY29tcGFyaXNvbiAodXNlIHNldFRvU3RhcnRPZkRheShkYXRlKSB0byBlbnN1cmUgY29ycmVjdCByZXN1bHQpXG4gICAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCk7XG4gICAgfSxcblxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKHRvLCBmcm9tLCBvdmVyd3JpdGUpXG4gICAge1xuICAgICAgICB2YXIgcHJvcCwgaGFzUHJvcDtcbiAgICAgICAgZm9yIChwcm9wIGluIGZyb20pIHtcbiAgICAgICAgICAgIGhhc1Byb3AgPSB0b1twcm9wXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGhhc1Byb3AgJiYgdHlwZW9mIGZyb21bcHJvcF0gPT09ICdvYmplY3QnICYmIGZyb21bcHJvcF0gIT09IG51bGwgJiYgZnJvbVtwcm9wXS5ub2RlTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGF0ZShmcm9tW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3ZlcndyaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IG5ldyBEYXRlKGZyb21bcHJvcF0uZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0FycmF5KGZyb21bcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gZnJvbVtwcm9wXS5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gZXh0ZW5kKHt9LCBmcm9tW3Byb3BdLCBvdmVyd3JpdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3ZlcndyaXRlIHx8ICFoYXNQcm9wKSB7XG4gICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0bztcbiAgICB9LFxuXG4gICAgZmlyZUV2ZW50ID0gZnVuY3Rpb24oZWwsIGV2ZW50TmFtZSwgZGF0YSlcbiAgICB7XG4gICAgICAgIHZhciBldjtcblxuICAgICAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcbiAgICAgICAgICAgIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgICAgICAgICAgIGV2LmluaXRFdmVudChldmVudE5hbWUsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgICAgIGV2ID0gZXh0ZW5kKGV2LCBkYXRhKTtcbiAgICAgICAgICAgIGVsLmRpc3BhdGNoRXZlbnQoZXYpO1xuICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KSB7XG4gICAgICAgICAgICBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7XG4gICAgICAgICAgICBldiA9IGV4dGVuZChldiwgZGF0YSk7XG4gICAgICAgICAgICBlbC5maXJlRXZlbnQoJ29uJyArIGV2ZW50TmFtZSwgZXYpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGFkanVzdENhbGVuZGFyID0gZnVuY3Rpb24oY2FsZW5kYXIpIHtcbiAgICAgICAgaWYgKGNhbGVuZGFyLm1vbnRoIDwgMCkge1xuICAgICAgICAgICAgY2FsZW5kYXIueWVhciAtPSBNYXRoLmNlaWwoTWF0aC5hYnMoY2FsZW5kYXIubW9udGgpLzEyKTtcbiAgICAgICAgICAgIGNhbGVuZGFyLm1vbnRoICs9IDEyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxlbmRhci5tb250aCA+IDExKSB7XG4gICAgICAgICAgICBjYWxlbmRhci55ZWFyICs9IE1hdGguZmxvb3IoTWF0aC5hYnMoY2FsZW5kYXIubW9udGgpLzEyKTtcbiAgICAgICAgICAgIGNhbGVuZGFyLm1vbnRoIC09IDEyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxlbmRhcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZGVmYXVsdHMgYW5kIGxvY2FsaXNhdGlvblxuICAgICAqL1xuICAgIGRlZmF1bHRzID0ge1xuXG4gICAgICAgIC8vIGJpbmQgdGhlIHBpY2tlciB0byBhIGZvcm0gZmllbGRcbiAgICAgICAgZmllbGQ6IG51bGwsXG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBzaG93L2hpZGUgdGhlIHBpY2tlciBvbiBgZmllbGRgIGZvY3VzIChkZWZhdWx0IGB0cnVlYCBpZiBgZmllbGRgIGlzIHNldClcbiAgICAgICAgYm91bmQ6IHVuZGVmaW5lZCxcblxuICAgICAgICAvLyBkYXRhLWF0dHJpYnV0ZSBvbiB0aGUgaW5wdXQgZmllbGQgd2l0aCBhbiBhcmlhIGFzc2lzdGFuY2UgdGV4dCAob25seSBhcHBsaWVkIHdoZW4gYGJvdW5kYCBpcyBzZXQpXG4gICAgICAgIGFyaWFMYWJlbDogJ1VzZSB0aGUgYXJyb3cga2V5cyB0byBwaWNrIGEgZGF0ZScsXG5cbiAgICAgICAgLy8gcG9zaXRpb24gb2YgdGhlIGRhdGVwaWNrZXIsIHJlbGF0aXZlIHRvIHRoZSBmaWVsZCAoZGVmYXVsdCB0byBib3R0b20gJiBsZWZ0KVxuICAgICAgICAvLyAoJ2JvdHRvbScgJiAnbGVmdCcga2V5d29yZHMgYXJlIG5vdCB1c2VkLCAndG9wJyAmICdyaWdodCcgYXJlIG1vZGlmaWVyIG9uIHRoZSBib3R0b20vbGVmdCBwb3NpdGlvbilcbiAgICAgICAgcG9zaXRpb246ICdib3R0b20gbGVmdCcsXG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBmaXQgaW4gdGhlIHZpZXdwb3J0IGV2ZW4gaWYgaXQgbWVhbnMgcmVwb3NpdGlvbmluZyBmcm9tIHRoZSBwb3NpdGlvbiBvcHRpb25cbiAgICAgICAgcmVwb3NpdGlvbjogdHJ1ZSxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0IGZvciBgLnRvU3RyaW5nKClgIGFuZCBgZmllbGRgIHZhbHVlXG4gICAgICAgIGZvcm1hdDogJ1lZWVktTU0tREQnLFxuXG4gICAgICAgIC8vIHRoZSB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZXRzIHBhc3NlZCBhIGN1cnJlbnQgZGF0ZSBvYmplY3QgYW5kIGZvcm1hdFxuICAgICAgICAvLyBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICAgICAgICB0b1N0cmluZzogbnVsbCxcblxuICAgICAgICAvLyB1c2VkIHRvIGNyZWF0ZSBkYXRlIG9iamVjdCBmcm9tIGN1cnJlbnQgaW5wdXQgc3RyaW5nXG4gICAgICAgIHBhcnNlOiBudWxsLFxuXG4gICAgICAgIC8vIHRoZSBpbml0aWFsIGRhdGUgdG8gdmlldyB3aGVuIGZpcnN0IG9wZW5lZFxuICAgICAgICBkZWZhdWx0RGF0ZTogbnVsbCxcblxuICAgICAgICAvLyBtYWtlIHRoZSBgZGVmYXVsdERhdGVgIHRoZSBpbml0aWFsIHNlbGVjdGVkIHZhbHVlXG4gICAgICAgIHNldERlZmF1bHREYXRlOiBmYWxzZSxcblxuICAgICAgICAvLyBmaXJzdCBkYXkgb2Ygd2VlayAoMDogU3VuZGF5LCAxOiBNb25kYXkgZXRjKVxuICAgICAgICBmaXJzdERheTogMCxcblxuICAgICAgICAvLyBtaW5pbXVtIG51bWJlciBvZiBkYXlzIGluIHRoZSB3ZWVrIHRoYXQgZ2V0cyB3ZWVrIG51bWJlciBvbmVcbiAgICAgICAgLy8gZGVmYXVsdCBJU08gODYwMSwgd2VlayAwMSBpcyB0aGUgd2VlayB3aXRoIHRoZSBmaXJzdCBUaHVyc2RheSAoNClcbiAgICAgICAgZmlyc3RXZWVrT2ZZZWFyTWluRGF5czogNCxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBmbGFnIGZvciBtb21lbnQncyBzdHJpY3QgZGF0ZSBwYXJzaW5nXG4gICAgICAgIGZvcm1hdFN0cmljdDogZmFsc2UsXG5cbiAgICAgICAgLy8gdGhlIG1pbmltdW0vZWFybGllc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtaW5EYXRlOiBudWxsLFxuICAgICAgICAvLyB0aGUgbWF4aW11bS9sYXRlc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtYXhEYXRlOiBudWxsLFxuXG4gICAgICAgIC8vIG51bWJlciBvZiB5ZWFycyBlaXRoZXIgc2lkZSwgb3IgYXJyYXkgb2YgdXBwZXIvbG93ZXIgcmFuZ2VcbiAgICAgICAgeWVhclJhbmdlOiAxMCxcblxuICAgICAgICAvLyBzaG93IHdlZWsgbnVtYmVycyBhdCBoZWFkIG9mIHJvd1xuICAgICAgICBzaG93V2Vla051bWJlcjogZmFsc2UsXG5cbiAgICAgICAgLy8gV2VlayBwaWNrZXIgbW9kZVxuICAgICAgICBwaWNrV2hvbGVXZWVrOiBmYWxzZSxcblxuICAgICAgICAvLyB1c2VkIGludGVybmFsbHkgKGRvbid0IGNvbmZpZyBvdXRzaWRlKVxuICAgICAgICBtaW5ZZWFyOiAwLFxuICAgICAgICBtYXhZZWFyOiA5OTk5LFxuICAgICAgICBtaW5Nb250aDogdW5kZWZpbmVkLFxuICAgICAgICBtYXhNb250aDogdW5kZWZpbmVkLFxuXG4gICAgICAgIHN0YXJ0UmFuZ2U6IG51bGwsXG4gICAgICAgIGVuZFJhbmdlOiBudWxsLFxuXG4gICAgICAgIGlzUlRMOiBmYWxzZSxcblxuICAgICAgICAvLyBBZGRpdGlvbmFsIHRleHQgdG8gYXBwZW5kIHRvIHRoZSB5ZWFyIGluIHRoZSBjYWxlbmRhciB0aXRsZVxuICAgICAgICB5ZWFyU3VmZml4OiAnJyxcblxuICAgICAgICAvLyBSZW5kZXIgdGhlIG1vbnRoIGFmdGVyIHllYXIgaW4gdGhlIGNhbGVuZGFyIHRpdGxlXG4gICAgICAgIHNob3dNb250aEFmdGVyWWVhcjogZmFsc2UsXG5cbiAgICAgICAgLy8gUmVuZGVyIGRheXMgb2YgdGhlIGNhbGVuZGFyIGdyaWQgdGhhdCBmYWxsIGluIHRoZSBuZXh0IG9yIHByZXZpb3VzIG1vbnRoXG4gICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIEFsbG93cyB1c2VyIHRvIHNlbGVjdCBkYXlzIHRoYXQgZmFsbCBpbiB0aGUgbmV4dCBvciBwcmV2aW91cyBtb250aFxuICAgICAgICBlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIGhvdyBtYW55IG1vbnRocyBhcmUgdmlzaWJsZVxuICAgICAgICBudW1iZXJPZk1vbnRoczogMSxcblxuICAgICAgICAvLyB3aGVuIG51bWJlck9mTW9udGhzIGlzIHVzZWQsIHRoaXMgd2lsbCBoZWxwIHlvdSB0byBjaG9vc2Ugd2hlcmUgdGhlIG1haW4gY2FsZW5kYXIgd2lsbCBiZSAoZGVmYXVsdCBgbGVmdGAsIGNhbiBiZSBzZXQgdG8gYHJpZ2h0YClcbiAgICAgICAgLy8gb25seSB1c2VkIGZvciB0aGUgZmlyc3QgZGlzcGxheSBvciB3aGVuIGEgc2VsZWN0ZWQgZGF0ZSBpcyBub3QgdmlzaWJsZVxuICAgICAgICBtYWluQ2FsZW5kYXI6ICdsZWZ0JyxcblxuICAgICAgICAvLyBTcGVjaWZ5IGEgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSBjYWxlbmRhciBpblxuICAgICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcblxuICAgICAgICAvLyBCbHVyIGZpZWxkIHdoZW4gZGF0ZSBpcyBzZWxlY3RlZFxuICAgICAgICBibHVyRmllbGRPblNlbGVjdCA6IHRydWUsXG5cbiAgICAgICAgLy8gaW50ZXJuYXRpb25hbGl6YXRpb25cbiAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgcHJldmlvdXNNb250aCA6ICdQcmV2aW91cyBNb250aCcsXG4gICAgICAgICAgICBuZXh0TW9udGggICAgIDogJ05leHQgTW9udGgnLFxuICAgICAgICAgICAgbW9udGhzICAgICAgICA6IFsnSmFudWFyeScsJ0ZlYnJ1YXJ5JywnTWFyY2gnLCdBcHJpbCcsJ01heScsJ0p1bmUnLCdKdWx5JywnQXVndXN0JywnU2VwdGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcbiAgICAgICAgICAgIHdlZWtkYXlzICAgICAgOiBbJ1N1bmRheScsJ01vbmRheScsJ1R1ZXNkYXknLCdXZWRuZXNkYXknLCdUaHVyc2RheScsJ0ZyaWRheScsJ1NhdHVyZGF5J10sXG4gICAgICAgICAgICB3ZWVrZGF5c1Nob3J0IDogWydTdW4nLCdNb24nLCdUdWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFRoZW1lIENsYXNzbmFtZVxuICAgICAgICB0aGVtZTogbnVsbCxcblxuICAgICAgICAvLyBldmVudHMgYXJyYXlcbiAgICAgICAgZXZlbnRzOiBbXSxcblxuICAgICAgICAvLyBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICBvblNlbGVjdDogbnVsbCxcbiAgICAgICAgb25PcGVuOiBudWxsLFxuICAgICAgICBvbkNsb3NlOiBudWxsLFxuICAgICAgICBvbkRyYXc6IG51bGwsXG5cbiAgICAgICAgLy8gRW5hYmxlIGtleWJvYXJkIGlucHV0XG4gICAgICAgIGtleWJvYXJkSW5wdXQ6IHRydWVcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiB0ZW1wbGF0aW5nIGZ1bmN0aW9ucyB0byBhYnN0cmFjdCBIVE1MIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHJlbmRlckRheU5hbWUgPSBmdW5jdGlvbihvcHRzLCBkYXksIGFiYnIpXG4gICAge1xuICAgICAgICBkYXkgKz0gb3B0cy5maXJzdERheTtcbiAgICAgICAgd2hpbGUgKGRheSA+PSA3KSB7XG4gICAgICAgICAgICBkYXkgLT0gNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWJiciA/IG9wdHMuaTE4bi53ZWVrZGF5c1Nob3J0W2RheV0gOiBvcHRzLmkxOG4ud2Vla2RheXNbZGF5XTtcbiAgICB9LFxuXG4gICAgcmVuZGVyRGF5ID0gZnVuY3Rpb24ob3B0cylcbiAgICB7XG4gICAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgICAgdmFyIGFyaWFTZWxlY3RlZCA9ICdmYWxzZSc7XG4gICAgICAgIGlmIChvcHRzLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCgnaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoJyk7XG5cbiAgICAgICAgICAgICAgICBpZighb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXNlbGVjdGlvbi1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz1cImlzLWVtcHR5XCI+PC90ZD4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzVG9kYXkpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy10b2RheScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgYXJpYVNlbGVjdGVkID0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmhhc0V2ZW50KSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaGFzLWV2ZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuaXNJblJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtaW5yYW5nZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU3RhcnRSYW5nZSkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXN0YXJ0cmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc0VuZFJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtZW5kcmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzx0ZCBkYXRhLWRheT1cIicgKyBvcHRzLmRheSArICdcIiBjbGFzcz1cIicgKyBhcnIuam9pbignICcpICsgJ1wiIGFyaWEtc2VsZWN0ZWQ9XCInICsgYXJpYVNlbGVjdGVkICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtYnV0dG9uIHBpa2EtZGF5XCIgdHlwZT1cImJ1dHRvblwiICcgK1xuICAgICAgICAgICAgICAgICAgICAnZGF0YS1waWthLXllYXI9XCInICsgb3B0cy55ZWFyICsgJ1wiIGRhdGEtcGlrYS1tb250aD1cIicgKyBvcHRzLm1vbnRoICsgJ1wiIGRhdGEtcGlrYS1kYXk9XCInICsgb3B0cy5kYXkgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmRheSArXG4gICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICc8L3RkPic7XG4gICAgfSxcblxuICAgIGlzb1dlZWsgPSBmdW5jdGlvbihkYXRlLCBmaXJzdFdlZWtPZlllYXJNaW5EYXlzKSB7XG4gICAgICAgIC8vIEVuc3VyZSB3ZSdyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRheS5cbiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcblxuICAgICAgICAvLyBUaHVyc2RheSBpbiBjdXJyZW50IHdlZWsgZGVjaWRlcyB0aGUgeWVhciBiZWNhdXNlIEphbnVhcnkgNHRoXG4gICAgICAgIC8vIGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayBhY2NvcmRpbmcgdG8gSVNPODYwMS5cbiAgICAgICAgdmFyIHllYXJEYXkgICAgICAgID0gZGF0ZS5nZXREYXRlKCksXG4gICAgICAgICAgICB3ZWVrRGF5ICAgICAgICA9IGRhdGUuZ2V0RGF5KCksXG4gICAgICAgICAgICBkYXlJbkZpcnN0V2VlayA9IGZpcnN0V2Vla09mWWVhck1pbkRheXMsXG4gICAgICAgICAgICBkYXlTaGlmdCAgICAgICA9IGRheUluRmlyc3RXZWVrIC0gMSwgLy8gY291bnRpbmcgc3RhcnRzIGF0IDBcbiAgICAgICAgICAgIGRheXNQZXJXZWVrICAgID0gNyxcbiAgICAgICAgICAgIHByZXZXZWVrRGF5ICAgID0gZnVuY3Rpb24oZGF5KSB7IHJldHVybiAoZGF5ICsgZGF5c1BlcldlZWsgLSAxKSAlIGRheXNQZXJXZWVrOyB9O1xuXG4gICAgICAgIC8vIEFkanVzdCB0byBUaHVyc2RheSBpbiB3ZWVrIDEgYW5kIGNvdW50IG51bWJlciBvZiB3ZWVrcyBmcm9tIGRhdGUgdG8gd2VlayAxLlxuICAgICAgICBkYXRlLnNldERhdGUoeWVhckRheSArIGRheVNoaWZ0IC0gcHJldldlZWtEYXkod2Vla0RheSkpO1xuXG4gICAgICAgIHZhciBqYW40dGggICAgICA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgZGF5SW5GaXJzdFdlZWspLFxuICAgICAgICAgICAgbXNQZXJEYXkgICAgPSAyNCAqIDYwICogNjAgKiAxMDAwLFxuICAgICAgICAgICAgZGF5c0JldHdlZW4gPSAoZGF0ZS5nZXRUaW1lKCkgLSBqYW40dGguZ2V0VGltZSgpKSAvIG1zUGVyRGF5LFxuICAgICAgICAgICAgd2Vla051bSAgICAgPSAxICsgTWF0aC5yb3VuZCgoZGF5c0JldHdlZW4gLSBkYXlTaGlmdCArIHByZXZXZWVrRGF5KGphbjR0aC5nZXREYXkoKSkpIC8gZGF5c1BlcldlZWspO1xuXG4gICAgICAgIHJldHVybiB3ZWVrTnVtO1xuICAgIH0sXG5cbiAgICByZW5kZXJXZWVrID0gZnVuY3Rpb24gKGQsIG0sIHksIGZpcnN0V2Vla09mWWVhck1pbkRheXMpIHtcbiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkKSxcbiAgICAgICAgICAgIHdlZWsgPSBoYXNNb21lbnQgPyBtb21lbnQoZGF0ZSkuaXNvV2VlaygpIDogaXNvV2VlayhkYXRlLCBmaXJzdFdlZWtPZlllYXJNaW5EYXlzKTtcblxuICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz1cInBpa2Etd2Vla1wiPicgKyB3ZWVrICsgJzwvdGQ+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyUm93ID0gZnVuY3Rpb24oZGF5cywgaXNSVEwsIHBpY2tXaG9sZVdlZWssIGlzUm93U2VsZWN0ZWQpXG4gICAge1xuICAgICAgICByZXR1cm4gJzx0ciBjbGFzcz1cInBpa2Etcm93JyArIChwaWNrV2hvbGVXZWVrID8gJyBwaWNrLXdob2xlLXdlZWsnIDogJycpICsgKGlzUm93U2VsZWN0ZWQgPyAnIGlzLXNlbGVjdGVkJyA6ICcnKSArICdcIj4nICsgKGlzUlRMID8gZGF5cy5yZXZlcnNlKCkgOiBkYXlzKS5qb2luKCcnKSArICc8L3RyPic7XG4gICAgfSxcblxuICAgIHJlbmRlckJvZHkgPSBmdW5jdGlvbihyb3dzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICc8dGJvZHk+JyArIHJvd3Muam9pbignJykgKyAnPC90Ym9keT4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJIZWFkID0gZnVuY3Rpb24ob3B0cylcbiAgICB7XG4gICAgICAgIHZhciBpLCBhcnIgPSBbXTtcbiAgICAgICAgaWYgKG9wdHMuc2hvd1dlZWtOdW1iZXIpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8dGg+PC90aD4nKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnPHRoIHNjb3BlPVwiY29sXCI+PGFiYnIgdGl0bGU9XCInICsgcmVuZGVyRGF5TmFtZShvcHRzLCBpKSArICdcIj4nICsgcmVuZGVyRGF5TmFtZShvcHRzLCBpLCB0cnVlKSArICc8L2FiYnI+PC90aD4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzx0aGVhZD48dHI+JyArIChvcHRzLmlzUlRMID8gYXJyLnJldmVyc2UoKSA6IGFycikuam9pbignJykgKyAnPC90cj48L3RoZWFkPic7XG4gICAgfSxcblxuICAgIHJlbmRlclRpdGxlID0gZnVuY3Rpb24oaW5zdGFuY2UsIGMsIHllYXIsIG1vbnRoLCByZWZZZWFyLCByYW5kSWQpXG4gICAge1xuICAgICAgICB2YXIgaSwgaiwgYXJyLFxuICAgICAgICAgICAgb3B0cyA9IGluc3RhbmNlLl9vLFxuICAgICAgICAgICAgaXNNaW5ZZWFyID0geWVhciA9PT0gb3B0cy5taW5ZZWFyLFxuICAgICAgICAgICAgaXNNYXhZZWFyID0geWVhciA9PT0gb3B0cy5tYXhZZWFyLFxuICAgICAgICAgICAgaHRtbCA9ICc8ZGl2IGlkPVwiJyArIHJhbmRJZCArICdcIiBjbGFzcz1cInBpa2EtdGl0bGVcIiByb2xlPVwiaGVhZGluZ1wiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPicsXG4gICAgICAgICAgICBtb250aEh0bWwsXG4gICAgICAgICAgICB5ZWFySHRtbCxcbiAgICAgICAgICAgIHByZXYgPSB0cnVlLFxuICAgICAgICAgICAgbmV4dCA9IHRydWU7XG5cbiAgICAgICAgZm9yIChhcnIgPSBbXSwgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnPG9wdGlvbiB2YWx1ZT1cIicgKyAoeWVhciA9PT0gcmVmWWVhciA/IGkgLSBjIDogMTIgKyBpIC0gYykgKyAnXCInICtcbiAgICAgICAgICAgICAgICAoaSA9PT0gbW9udGggPyAnIHNlbGVjdGVkPVwic2VsZWN0ZWRcIic6ICcnKSArXG4gICAgICAgICAgICAgICAgKChpc01pblllYXIgJiYgaSA8IG9wdHMubWluTW9udGgpIHx8IChpc01heFllYXIgJiYgaSA+IG9wdHMubWF4TW9udGgpID8gJyBkaXNhYmxlZD1cImRpc2FibGVkXCInIDogJycpICsgJz4nICtcbiAgICAgICAgICAgICAgICBvcHRzLmkxOG4ubW9udGhzW2ldICsgJzwvb3B0aW9uPicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbW9udGhIdG1sID0gJzxkaXYgY2xhc3M9XCJwaWthLWxhYmVsXCI+JyArIG9wdHMuaTE4bi5tb250aHNbbW9udGhdICsgJzxzZWxlY3QgY2xhc3M9XCJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC1tb250aFwiIHRhYmluZGV4PVwiLTFcIj4nICsgYXJyLmpvaW4oJycpICsgJzwvc2VsZWN0PjwvZGl2Pic7XG5cbiAgICAgICAgaWYgKGlzQXJyYXkob3B0cy55ZWFyUmFuZ2UpKSB7XG4gICAgICAgICAgICBpID0gb3B0cy55ZWFyUmFuZ2VbMF07XG4gICAgICAgICAgICBqID0gb3B0cy55ZWFyUmFuZ2VbMV0gKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaSA9IHllYXIgLSBvcHRzLnllYXJSYW5nZTtcbiAgICAgICAgICAgIGogPSAxICsgeWVhciArIG9wdHMueWVhclJhbmdlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChhcnIgPSBbXTsgaSA8IGogJiYgaSA8PSBvcHRzLm1heFllYXI7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPj0gb3B0cy5taW5ZZWFyKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIicgKyAoaSA9PT0geWVhciA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJzogJycpICsgJz4nICsgKGkpICsgJzwvb3B0aW9uPicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHllYXJIdG1sID0gJzxkaXYgY2xhc3M9XCJwaWthLWxhYmVsXCI+JyArIHllYXIgKyBvcHRzLnllYXJTdWZmaXggKyAnPHNlbGVjdCBjbGFzcz1cInBpa2Etc2VsZWN0IHBpa2Etc2VsZWN0LXllYXJcIiB0YWJpbmRleD1cIi0xXCI+JyArIGFyci5qb2luKCcnKSArICc8L3NlbGVjdD48L2Rpdj4nO1xuXG4gICAgICAgIGlmIChvcHRzLnNob3dNb250aEFmdGVyWWVhcikge1xuICAgICAgICAgICAgaHRtbCArPSB5ZWFySHRtbCArIG1vbnRoSHRtbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGh0bWwgKz0gbW9udGhIdG1sICsgeWVhckh0bWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNaW5ZZWFyICYmIChtb250aCA9PT0gMCB8fCBvcHRzLm1pbk1vbnRoID49IG1vbnRoKSkge1xuICAgICAgICAgICAgcHJldiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTWF4WWVhciAmJiAobW9udGggPT09IDExIHx8IG9wdHMubWF4TW9udGggPD0gbW9udGgpKSB7XG4gICAgICAgICAgICBuZXh0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA9PT0gMCkge1xuICAgICAgICAgICAgaHRtbCArPSAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtcHJldicgKyAocHJldiA/ICcnIDogJyBpcy1kaXNhYmxlZCcpICsgJ1wiIHR5cGU9XCJidXR0b25cIj4nICsgb3B0cy5pMThuLnByZXZpb3VzTW9udGggKyAnPC9idXR0b24+JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gKGluc3RhbmNlLl9vLm51bWJlck9mTW9udGhzIC0gMSkgKSB7XG4gICAgICAgICAgICBodG1sICs9ICc8YnV0dG9uIGNsYXNzPVwicGlrYS1uZXh0JyArIChuZXh0ID8gJycgOiAnIGlzLWRpc2FibGVkJykgKyAnXCIgdHlwZT1cImJ1dHRvblwiPicgKyBvcHRzLmkxOG4ubmV4dE1vbnRoICsgJzwvYnV0dG9uPic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaHRtbCArPSAnPC9kaXY+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyVGFibGUgPSBmdW5jdGlvbihvcHRzLCBkYXRhLCByYW5kSWQpXG4gICAge1xuICAgICAgICByZXR1cm4gJzx0YWJsZSBjZWxscGFkZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIiBjbGFzcz1cInBpa2EtdGFibGVcIiByb2xlPVwiZ3JpZFwiIGFyaWEtbGFiZWxsZWRieT1cIicgKyByYW5kSWQgKyAnXCI+JyArIHJlbmRlckhlYWQob3B0cykgKyByZW5kZXJCb2R5KGRhdGEpICsgJzwvdGFibGU+JztcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBQaWthZGF5IGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgUGlrYWRheSA9IGZ1bmN0aW9uKG9wdGlvbnMpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgICAgICBvcHRzID0gc2VsZi5jb25maWcob3B0aW9ucyk7XG5cbiAgICAgICAgc2VsZi5fb25Nb3VzZURvd24gPSBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXNlbGYuX3YpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaGFzQ2xhc3ModGFyZ2V0LCAnaXMtZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLWJ1dHRvbicpICYmICFoYXNDbGFzcyh0YXJnZXQsICdpcy1lbXB0eScpICYmICFoYXNDbGFzcyh0YXJnZXQucGFyZW50Tm9kZSwgJ2lzLWRpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKG5ldyBEYXRlKHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGlrYS15ZWFyJyksIHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGlrYS1tb250aCcpLCB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBpa2EtZGF5JykpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0byhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5ibHVyRmllbGRPblNlbGVjdCAmJiBvcHRzLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZmllbGQuYmx1cigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1wcmV2JykpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmV2TW9udGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1uZXh0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXh0TW9udGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIHRvdWNoIGV2ZW50IHByZXZlbnQgbW91c2UgZXZlbnRzIGVtdWxhdGlvblxuICAgICAgICAgICAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuX2MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uQ2hhbmdlID0gZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0LW1vbnRoJykpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdvdG9Nb250aCh0YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1zZWxlY3QteWVhcicpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5nb3RvWWVhcih0YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uS2V5Q2hhbmdlID0gZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuXG4gICAgICAgICAgICBpZiAoc2VsZi5pc1Zpc2libGUoKSkge1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoKGUua2V5Q29kZSl7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuZmllbGQuYmx1cigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkanVzdERhdGUoJ3N1YnRyYWN0JywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnc3VidHJhY3QnLCA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGp1c3REYXRlKCdhZGQnLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGp1c3REYXRlKCdhZGQnLCA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fcGFyc2VGaWVsZFZhbHVlID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAob3B0cy5wYXJzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRzLnBhcnNlKG9wdHMuZmllbGQudmFsdWUsIG9wdHMuZm9ybWF0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzTW9tZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBtb21lbnQob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQsIG9wdHMuZm9ybWF0U3RyaWN0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGRhdGUgJiYgZGF0ZS5pc1ZhbGlkKCkpID8gZGF0ZS50b0RhdGUoKSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLnBhcnNlKG9wdHMuZmllbGQudmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbklucHV0Q2hhbmdlID0gZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRhdGU7XG5cbiAgICAgICAgICAgIGlmIChlLmZpcmVkQnkgPT09IHNlbGYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRlID0gc2VsZi5fcGFyc2VGaWVsZFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5fdikge1xuICAgICAgICAgICAgICAgIHNlbGYuc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgc2VsZi5zaG93KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dENsaWNrID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBzZWxmLnNob3coKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbklucHV0Qmx1ciA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSUUgYWxsb3dzIHBpa2EgZGl2IHRvIGdhaW4gZm9jdXM7IGNhdGNoIGJsdXIgdGhlIGlucHV0IGZpZWxkXG4gICAgICAgICAgICB2YXIgcEVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3MocEVsLCAncGlrYS1zaW5nbGUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKChwRWwgPSBwRWwucGFyZW50Tm9kZSkpO1xuXG4gICAgICAgICAgICBpZiAoIXNlbGYuX2MpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9iID0gc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9jID0gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgcEVsID0gdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc0V2ZW50TGlzdGVuZXJzICYmIGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5vbmNoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsICdyZXR1cm47Jyk7XG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KHRhcmdldCwgJ2NoYW5nZScsIHNlbGYuX29uQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHBFbCwgJ3Bpa2Etc2luZ2xlJykgfHwgcEVsID09PSBvcHRzLnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICgocEVsID0gcEVsLnBhcmVudE5vZGUpKTtcbiAgICAgICAgICAgIGlmIChzZWxmLl92ICYmIHRhcmdldCAhPT0gb3B0cy50cmlnZ2VyICYmIHBFbCAhPT0gb3B0cy50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWxmLmVsLmNsYXNzTmFtZSA9ICdwaWthLXNpbmdsZScgKyAob3B0cy5pc1JUTCA/ICcgaXMtcnRsJyA6ICcnKSArIChvcHRzLnRoZW1lID8gJyAnICsgb3B0cy50aGVtZSA6ICcnKTtcblxuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAnbW91c2Vkb3duJywgc2VsZi5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAndG91Y2hlbmQnLCBzZWxmLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgIGFkZEV2ZW50KHNlbGYuZWwsICdjaGFuZ2UnLCBzZWxmLl9vbkNoYW5nZSk7XG5cbiAgICAgICAgaWYgKG9wdHMua2V5Ym9hcmRJbnB1dCkge1xuICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJywgc2VsZi5fb25LZXlDaGFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIG9wdHMuY29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuZWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzZWxmLmVsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0cy5maWVsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmVsLCBvcHRzLmZpZWxkLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZEV2ZW50KG9wdHMuZmllbGQsICdjaGFuZ2UnLCBzZWxmLl9vbklucHV0Q2hhbmdlKTtcblxuICAgICAgICAgICAgaWYgKCFvcHRzLmRlZmF1bHREYXRlKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5kZWZhdWx0RGF0ZSA9IHNlbGYuX3BhcnNlRmllbGRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIG9wdHMuc2V0RGVmYXVsdERhdGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlZkRhdGUgPSBvcHRzLmRlZmF1bHREYXRlO1xuXG4gICAgICAgIGlmIChpc0RhdGUoZGVmRGF0ZSkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnNldERlZmF1bHREYXRlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKGRlZkRhdGUsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdvdG9EYXRlKGRlZkRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZi5nb3RvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIHNlbGYuZWwuY2xhc3NOYW1lICs9ICcgaXMtYm91bmQnO1xuICAgICAgICAgICAgYWRkRXZlbnQob3B0cy50cmlnZ2VyLCAnY2xpY2snLCBzZWxmLl9vbklucHV0Q2xpY2spO1xuICAgICAgICAgICAgYWRkRXZlbnQob3B0cy50cmlnZ2VyLCAnZm9jdXMnLCBzZWxmLl9vbklucHV0Rm9jdXMpO1xuICAgICAgICAgICAgYWRkRXZlbnQob3B0cy50cmlnZ2VyLCAnYmx1cicsIHNlbGYuX29uSW5wdXRCbHVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgICB9XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogcHVibGljIFBpa2FkYXkgQVBJXG4gICAgICovXG4gICAgUGlrYWRheS5wcm90b3R5cGUgPSB7XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogY29uZmlndXJlIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgICovXG4gICAgICAgIGNvbmZpZzogZnVuY3Rpb24ob3B0aW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9vKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3B0cyA9IGV4dGVuZCh0aGlzLl9vLCBvcHRpb25zLCB0cnVlKTtcblxuICAgICAgICAgICAgb3B0cy5pc1JUTCA9ICEhb3B0cy5pc1JUTDtcblxuICAgICAgICAgICAgb3B0cy5maWVsZCA9IChvcHRzLmZpZWxkICYmIG9wdHMuZmllbGQubm9kZU5hbWUpID8gb3B0cy5maWVsZCA6IG51bGw7XG5cbiAgICAgICAgICAgIG9wdHMudGhlbWUgPSAodHlwZW9mIG9wdHMudGhlbWUpID09PSAnc3RyaW5nJyAmJiBvcHRzLnRoZW1lID8gb3B0cy50aGVtZSA6IG51bGw7XG5cbiAgICAgICAgICAgIG9wdHMuYm91bmQgPSAhIShvcHRzLmJvdW5kICE9PSB1bmRlZmluZWQgPyBvcHRzLmZpZWxkICYmIG9wdHMuYm91bmQgOiBvcHRzLmZpZWxkKTtcblxuICAgICAgICAgICAgb3B0cy50cmlnZ2VyID0gKG9wdHMudHJpZ2dlciAmJiBvcHRzLnRyaWdnZXIubm9kZU5hbWUpID8gb3B0cy50cmlnZ2VyIDogb3B0cy5maWVsZDtcblxuICAgICAgICAgICAgb3B0cy5kaXNhYmxlV2Vla2VuZHMgPSAhIW9wdHMuZGlzYWJsZVdlZWtlbmRzO1xuXG4gICAgICAgICAgICBvcHRzLmRpc2FibGVEYXlGbiA9ICh0eXBlb2Ygb3B0cy5kaXNhYmxlRGF5Rm4pID09PSAnZnVuY3Rpb24nID8gb3B0cy5kaXNhYmxlRGF5Rm4gOiBudWxsO1xuXG4gICAgICAgICAgICB2YXIgbm9tID0gcGFyc2VJbnQob3B0cy5udW1iZXJPZk1vbnRocywgMTApIHx8IDE7XG4gICAgICAgICAgICBvcHRzLm51bWJlck9mTW9udGhzID0gbm9tID4gNCA/IDQgOiBub207XG5cbiAgICAgICAgICAgIGlmICghaXNEYXRlKG9wdHMubWluRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1pbkRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNEYXRlKG9wdHMubWF4RGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1heERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgob3B0cy5taW5EYXRlICYmIG9wdHMubWF4RGF0ZSkgJiYgb3B0cy5tYXhEYXRlIDwgb3B0cy5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5tYXhEYXRlID0gb3B0cy5taW5EYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNaW5EYXRlKG9wdHMubWluRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNYXhEYXRlKG9wdHMubWF4RGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KG9wdHMueWVhclJhbmdlKSkge1xuICAgICAgICAgICAgICAgIHZhciBmYWxsYmFjayA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIDEwO1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlWzBdID0gcGFyc2VJbnQob3B0cy55ZWFyUmFuZ2VbMF0sIDEwKSB8fCBmYWxsYmFjaztcbiAgICAgICAgICAgICAgICBvcHRzLnllYXJSYW5nZVsxXSA9IHBhcnNlSW50KG9wdHMueWVhclJhbmdlWzFdLCAxMCkgfHwgZmFsbGJhY2s7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlID0gTWF0aC5hYnMocGFyc2VJbnQob3B0cy55ZWFyUmFuZ2UsIDEwKSkgfHwgZGVmYXVsdHMueWVhclJhbmdlO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnllYXJSYW5nZSA+IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRzLnllYXJSYW5nZSA9IDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvcHRzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiAodXNpbmcgTW9tZW50LmpzIGlmIGF2YWlsYWJsZSlcbiAgICAgICAgICovXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbihmb3JtYXQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCB0aGlzLl9vLmZvcm1hdDtcbiAgICAgICAgICAgIGlmICghaXNEYXRlKHRoaXMuX2QpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX28udG9TdHJpbmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX28udG9TdHJpbmcodGhpcy5fZCwgZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNNb21lbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1vbWVudCh0aGlzLl9kKS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kLnRvRGF0ZVN0cmluZygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBNb21lbnQuanMgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiAoaWYgYXZhaWxhYmxlKVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0TW9tZW50OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBoYXNNb21lbnQgPyBtb21lbnQodGhpcy5fZCkgOiBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBzZXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGZyb20gYSBNb21lbnQuanMgb2JqZWN0IChpZiBhdmFpbGFibGUpXG4gICAgICAgICAqL1xuICAgICAgICBzZXRNb21lbnQ6IGZ1bmN0aW9uKGRhdGUsIHByZXZlbnRPblNlbGVjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKGhhc01vbWVudCAmJiBtb21lbnQuaXNNb21lbnQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGUoZGF0ZS50b0RhdGUoKSwgcHJldmVudE9uU2VsZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogcmV0dXJuIGEgRGF0ZSBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBnZXREYXRlOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBpc0RhdGUodGhpcy5fZCkgPyBuZXcgRGF0ZSh0aGlzLl9kLmdldFRpbWUoKSkgOiBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBzZXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBzZXREYXRlOiBmdW5jdGlvbihkYXRlLCBwcmV2ZW50T25TZWxlY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2QgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5maWVsZC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBmaXJlRXZlbnQodGhpcy5fby5maWVsZCwgJ2NoYW5nZScsIHsgZmlyZWRCeTogdGhpcyB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcmF3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UoZGF0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0RhdGUoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLl9vLm1pbkRhdGUsXG4gICAgICAgICAgICAgICAgbWF4ID0gdGhpcy5fby5tYXhEYXRlO1xuXG4gICAgICAgICAgICBpZiAoaXNEYXRlKG1pbikgJiYgZGF0ZSA8IG1pbikge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtaW47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShtYXgpICYmIGRhdGUgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbWF4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KHRoaXMuX2QpO1xuICAgICAgICAgICAgdGhpcy5nb3RvRGF0ZSh0aGlzLl9kKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX28uZmllbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLmZpZWxkLnZhbHVlID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGZpcmVFdmVudCh0aGlzLl9vLmZpZWxkLCAnY2hhbmdlJywgeyBmaXJlZEJ5OiB0aGlzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcmV2ZW50T25TZWxlY3QgJiYgdHlwZW9mIHRoaXMuX28ub25TZWxlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm9uU2VsZWN0LmNhbGwodGhpcywgdGhpcy5nZXREYXRlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjbGVhciBhbmQgcmVzZXQgdGhlIGRhdGVcbiAgICAgICAgICovXG4gICAgICAgIGNsZWFyOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZShudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHZpZXcgdG8gYSBzcGVjaWZpYyBkYXRlXG4gICAgICAgICAqL1xuICAgICAgICBnb3RvRGF0ZTogZnVuY3Rpb24oZGF0ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5ld0NhbGVuZGFyID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKCFpc0RhdGUoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGVuZGFycykge1xuICAgICAgICAgICAgICAgIHZhciBmaXJzdFZpc2libGVEYXRlID0gbmV3IERhdGUodGhpcy5jYWxlbmRhcnNbMF0ueWVhciwgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgsIDEpLFxuICAgICAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZURhdGUgPSBuZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0ueWVhciwgdGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLm1vbnRoLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZURhdGUgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGVuZCBvZiB0aGUgbW9udGhcbiAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZURhdGUuc2V0TW9udGgobGFzdFZpc2libGVEYXRlLmdldE1vbnRoKCkrMSk7XG4gICAgICAgICAgICAgICAgbGFzdFZpc2libGVEYXRlLnNldERhdGUobGFzdFZpc2libGVEYXRlLmdldERhdGUoKS0xKTtcbiAgICAgICAgICAgICAgICBuZXdDYWxlbmRhciA9ICh2aXNpYmxlRGF0ZSA8IGZpcnN0VmlzaWJsZURhdGUuZ2V0VGltZSgpIHx8IGxhc3RWaXNpYmxlRGF0ZS5nZXRUaW1lKCkgPCB2aXNpYmxlRGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdDYWxlbmRhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzID0gW3tcbiAgICAgICAgICAgICAgICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28ubWFpbkNhbGVuZGFyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoICs9IDEgLSB0aGlzLl9vLm51bWJlck9mTW9udGhzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBhZGp1c3REYXRlOiBmdW5jdGlvbihzaWduLCBkYXlzKSB7XG5cbiAgICAgICAgICAgIHZhciBkYXkgPSB0aGlzLmdldERhdGUoKSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSBwYXJzZUludChkYXlzKSoyNCo2MCo2MCoxMDAwO1xuXG4gICAgICAgICAgICB2YXIgbmV3RGF5O1xuXG4gICAgICAgICAgICBpZiAoc2lnbiA9PT0gJ2FkZCcpIHtcbiAgICAgICAgICAgICAgICBuZXdEYXkgPSBuZXcgRGF0ZShkYXkudmFsdWVPZigpICsgZGlmZmVyZW5jZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNpZ24gPT09ICdzdWJ0cmFjdCcpIHtcbiAgICAgICAgICAgICAgICBuZXdEYXkgPSBuZXcgRGF0ZShkYXkudmFsdWVPZigpIC0gZGlmZmVyZW5jZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZShuZXdEYXkpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFkanVzdENhbGVuZGFyczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXSA9IGFkanVzdENhbGVuZGFyKHRoaXMuY2FsZW5kYXJzWzBdKTtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAxOyBjIDwgdGhpcy5fby5udW1iZXJPZk1vbnRoczsgYysrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbY10gPSBhZGp1c3RDYWxlbmRhcih7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoOiB0aGlzLmNhbGVuZGFyc1swXS5tb250aCArIGMsXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IHRoaXMuY2FsZW5kYXJzWzBdLnllYXJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZHJhdygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdvdG9Ub2RheTogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmdvdG9EYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdmlldyB0byBhIHNwZWNpZmljIG1vbnRoICh6ZXJvLWluZGV4LCBlLmcuIDA6IEphbnVhcnkpXG4gICAgICAgICAqL1xuICAgICAgICBnb3RvTW9udGg6IGZ1bmN0aW9uKG1vbnRoKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKG1vbnRoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoID0gcGFyc2VJbnQobW9udGgsIDEwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG5leHRNb250aDogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aCsrO1xuICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwcmV2TW9udGg6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgtLTtcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB2aWV3IHRvIGEgc3BlY2lmaWMgZnVsbCB5ZWFyIChlLmcuIFwiMjAxMlwiKVxuICAgICAgICAgKi9cbiAgICAgICAgZ290b1llYXI6IGZ1bmN0aW9uKHllYXIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaXNOYU4oeWVhcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS55ZWFyID0gcGFyc2VJbnQoeWVhciwgMTApO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB0aGUgbWluRGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgc2V0TWluRGF0ZTogZnVuY3Rpb24odmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldFRvU3RhcnRPZkRheSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5taW5EYXRlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5taW5ZZWFyICA9IHZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5taW5Nb250aCA9IHZhbHVlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluRGF0ZSA9IGRlZmF1bHRzLm1pbkRhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5taW5ZZWFyICA9IGRlZmF1bHRzLm1pblllYXI7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5taW5Nb250aCA9IGRlZmF1bHRzLm1pbk1vbnRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX28uc3RhcnRSYW5nZSA9IGRlZmF1bHRzLnN0YXJ0UmFuZ2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZHJhdygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdGhlIG1heERhdGVcbiAgICAgICAgICovXG4gICAgICAgIHNldE1heERhdGU6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkodmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4RGF0ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4WWVhciA9IHZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhNb250aCA9IHZhbHVlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4RGF0ZSA9IGRlZmF1bHRzLm1heERhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhZZWFyID0gZGVmYXVsdHMubWF4WWVhcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heE1vbnRoID0gZGVmYXVsdHMubWF4TW9udGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5lbmRSYW5nZSA9IGRlZmF1bHRzLmVuZFJhbmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBzZXRTdGFydFJhbmdlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fby5zdGFydFJhbmdlID0gdmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0RW5kUmFuZ2U6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9vLmVuZFJhbmdlID0gdmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJlZnJlc2ggdGhlIEhUTUxcbiAgICAgICAgICovXG4gICAgICAgIGRyYXc6IGZ1bmN0aW9uKGZvcmNlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3YgJiYgIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG9wdHMgPSB0aGlzLl9vLFxuICAgICAgICAgICAgICAgIG1pblllYXIgPSBvcHRzLm1pblllYXIsXG4gICAgICAgICAgICAgICAgbWF4WWVhciA9IG9wdHMubWF4WWVhcixcbiAgICAgICAgICAgICAgICBtaW5Nb250aCA9IG9wdHMubWluTW9udGgsXG4gICAgICAgICAgICAgICAgbWF4TW9udGggPSBvcHRzLm1heE1vbnRoLFxuICAgICAgICAgICAgICAgIGh0bWwgPSAnJyxcbiAgICAgICAgICAgICAgICByYW5kSWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl95IDw9IG1pblllYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl95ID0gbWluWWVhcjtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKG1pbk1vbnRoKSAmJiB0aGlzLl9tIDwgbWluTW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbSA9IG1pbk1vbnRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl95ID49IG1heFllYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl95ID0gbWF4WWVhcjtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKG1heE1vbnRoKSAmJiB0aGlzLl9tID4gbWF4TW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbSA9IG1heE1vbnRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBvcHRzLm51bWJlck9mTW9udGhzOyBjKyspIHtcbiAgICAgICAgICAgICAgICByYW5kSWQgPSAncGlrYS10aXRsZS0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZSgvW15hLXpdKy9nLCAnJykuc3Vic3RyKDAsIDIpO1xuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJwaWthLWxlbmRhclwiPicgKyByZW5kZXJUaXRsZSh0aGlzLCBjLCB0aGlzLmNhbGVuZGFyc1tjXS55ZWFyLCB0aGlzLmNhbGVuZGFyc1tjXS5tb250aCwgdGhpcy5jYWxlbmRhcnNbMF0ueWVhciwgcmFuZElkKSArIHRoaXMucmVuZGVyKHRoaXMuY2FsZW5kYXJzW2NdLnllYXIsIHRoaXMuY2FsZW5kYXJzW2NdLm1vbnRoLCByYW5kSWQpICsgJzwvZGl2Pic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWwuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgICAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgICAgICBpZihvcHRzLmZpZWxkLnR5cGUgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0byhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMudHJpZ2dlci5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fby5vbkRyYXcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm9uRHJhdyh0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGhlIHNjcmVlbiByZWFkZXIgdXNlciBrbm93IHRvIHVzZSBhcnJvdyBrZXlzXG4gICAgICAgICAgICAgICAgb3B0cy5maWVsZC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBvcHRzLmFyaWFMYWJlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWRqdXN0UG9zaXRpb246IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZpZWxkLCBwRWwsIHdpZHRoLCBoZWlnaHQsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCBzY3JvbGxUb3AsIGxlZnQsIHRvcCwgY2xpZW50UmVjdCwgbGVmdEFsaWduZWQsIGJvdHRvbUFsaWduZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9vLmNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLmVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuICAgICAgICAgICAgZmllbGQgPSB0aGlzLl9vLnRyaWdnZXI7XG4gICAgICAgICAgICBwRWwgPSBmaWVsZDtcbiAgICAgICAgICAgIHdpZHRoID0gdGhpcy5lbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuZWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgIGxlZnRBbGlnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJvdHRvbUFsaWduZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNsaWVudFJlY3QgPSBmaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgd2luZG93LnBhZ2VYT2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRvcCA9IGNsaWVudFJlY3QuYm90dG9tICsgd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gcEVsLm9mZnNldExlZnQ7XG4gICAgICAgICAgICAgICAgdG9wICA9IHBFbC5vZmZzZXRUb3AgKyBwRWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgICAgIHdoaWxlKChwRWwgPSBwRWwub2Zmc2V0UGFyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IHBFbC5vZmZzZXRMZWZ0O1xuICAgICAgICAgICAgICAgICAgICB0b3AgICs9IHBFbC5vZmZzZXRUb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZWZhdWx0IHBvc2l0aW9uIGlzIGJvdHRvbSAmIGxlZnRcbiAgICAgICAgICAgIGlmICgodGhpcy5fby5yZXBvc2l0aW9uICYmIGxlZnQgKyB3aWR0aCA+IHZpZXdwb3J0V2lkdGgpIHx8XG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoJ3JpZ2h0JykgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICBsZWZ0IC0gd2lkdGggKyBmaWVsZC5vZmZzZXRXaWR0aCA+IDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCAtIHdpZHRoICsgZmllbGQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgbGVmdEFsaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodGhpcy5fby5yZXBvc2l0aW9uICYmIHRvcCArIGhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0ICsgc2Nyb2xsVG9wKSB8fFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKCd0b3AnKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIHRvcCAtIGhlaWdodCAtIGZpZWxkLm9mZnNldEhlaWdodCA+IDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0b3AgPSB0b3AgLSBoZWlnaHQgLSBmaWVsZC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgYm90dG9tQWxpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVsLnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUudG9wID0gdG9wICsgJ3B4JztcblxuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5lbCwgbGVmdEFsaWduZWQgPyAnbGVmdC1hbGlnbmVkJyA6ICdyaWdodC1hbGlnbmVkJyk7XG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmVsLCBib3R0b21BbGlnbmVkID8gJ2JvdHRvbS1hbGlnbmVkJyA6ICd0b3AtYWxpZ25lZCcpO1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgIWxlZnRBbGlnbmVkID8gJ2xlZnQtYWxpZ25lZCcgOiAncmlnaHQtYWxpZ25lZCcpO1xuICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgIWJvdHRvbUFsaWduZWQgPyAnYm90dG9tLWFsaWduZWQnIDogJ3RvcC1hbGlnbmVkJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJlbmRlciBIVE1MIGZvciBhIHBhcnRpY3VsYXIgbW9udGhcbiAgICAgICAgICovXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIHJhbmRJZClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG9wdHMgICA9IHRoaXMuX28sXG4gICAgICAgICAgICAgICAgbm93ICAgID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBkYXlzICAgPSBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgICAgICAgYmVmb3JlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpLmdldERheSgpLFxuICAgICAgICAgICAgICAgIGRhdGEgICA9IFtdLFxuICAgICAgICAgICAgICAgIHJvdyAgICA9IFtdO1xuICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KG5vdyk7XG4gICAgICAgICAgICBpZiAob3B0cy5maXJzdERheSA+IDApIHtcbiAgICAgICAgICAgICAgICBiZWZvcmUgLT0gb3B0cy5maXJzdERheTtcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmUgKz0gNztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcHJldmlvdXNNb250aCA9IG1vbnRoID09PSAwID8gMTEgOiBtb250aCAtIDEsXG4gICAgICAgICAgICAgICAgbmV4dE1vbnRoID0gbW9udGggPT09IDExID8gMCA6IG1vbnRoICsgMSxcbiAgICAgICAgICAgICAgICB5ZWFyT2ZQcmV2aW91c01vbnRoID0gbW9udGggPT09IDAgPyB5ZWFyIC0gMSA6IHllYXIsXG4gICAgICAgICAgICAgICAgeWVhck9mTmV4dE1vbnRoID0gbW9udGggPT09IDExID8geWVhciArIDEgOiB5ZWFyLFxuICAgICAgICAgICAgICAgIGRheXNJblByZXZpb3VzTW9udGggPSBnZXREYXlzSW5Nb250aCh5ZWFyT2ZQcmV2aW91c01vbnRoLCBwcmV2aW91c01vbnRoKTtcbiAgICAgICAgICAgIHZhciBjZWxscyA9IGRheXMgKyBiZWZvcmUsXG4gICAgICAgICAgICAgICAgYWZ0ZXIgPSBjZWxscztcbiAgICAgICAgICAgIHdoaWxlKGFmdGVyID4gNykge1xuICAgICAgICAgICAgICAgIGFmdGVyIC09IDc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjZWxscyArPSA3IC0gYWZ0ZXI7XG4gICAgICAgICAgICB2YXIgaXNXZWVrU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCByID0gMDsgaSA8IGNlbGxzOyBpKyspXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGRheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxICsgKGkgLSBiZWZvcmUpKSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA9IGlzRGF0ZSh0aGlzLl9kKSA/IGNvbXBhcmVEYXRlcyhkYXksIHRoaXMuX2QpIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGlzVG9kYXkgPSBjb21wYXJlRGF0ZXMoZGF5LCBub3cpLFxuICAgICAgICAgICAgICAgICAgICBoYXNFdmVudCA9IG9wdHMuZXZlbnRzLmluZGV4T2YoZGF5LnRvRGF0ZVN0cmluZygpKSAhPT0gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGlzRW1wdHkgPSBpIDwgYmVmb3JlIHx8IGkgPj0gKGRheXMgKyBiZWZvcmUpLFxuICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSAxICsgKGkgLSBiZWZvcmUpLFxuICAgICAgICAgICAgICAgICAgICBtb250aE51bWJlciA9IG1vbnRoLFxuICAgICAgICAgICAgICAgICAgICB5ZWFyTnVtYmVyID0geWVhcixcbiAgICAgICAgICAgICAgICAgICAgaXNTdGFydFJhbmdlID0gb3B0cy5zdGFydFJhbmdlICYmIGNvbXBhcmVEYXRlcyhvcHRzLnN0YXJ0UmFuZ2UsIGRheSksXG4gICAgICAgICAgICAgICAgICAgIGlzRW5kUmFuZ2UgPSBvcHRzLmVuZFJhbmdlICYmIGNvbXBhcmVEYXRlcyhvcHRzLmVuZFJhbmdlLCBkYXkpLFxuICAgICAgICAgICAgICAgICAgICBpc0luUmFuZ2UgPSBvcHRzLnN0YXJ0UmFuZ2UgJiYgb3B0cy5lbmRSYW5nZSAmJiBvcHRzLnN0YXJ0UmFuZ2UgPCBkYXkgJiYgZGF5IDwgb3B0cy5lbmRSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZCA9IChvcHRzLm1pbkRhdGUgJiYgZGF5IDwgb3B0cy5taW5EYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdHMubWF4RGF0ZSAmJiBkYXkgPiBvcHRzLm1heERhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5kaXNhYmxlV2Vla2VuZHMgJiYgaXNXZWVrZW5kKGRheSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5kaXNhYmxlRGF5Rm4gJiYgb3B0cy5kaXNhYmxlRGF5Rm4oZGF5KSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5TnVtYmVyID0gZGF5c0luUHJldmlvdXNNb250aCArIGRheU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gcHJldmlvdXNNb250aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyT2ZQcmV2aW91c01vbnRoO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5TnVtYmVyID0gZGF5TnVtYmVyIC0gZGF5cztcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gbmV4dE1vbnRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJPZk5leHRNb250aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBkYXlDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXk6IGRheU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoOiBtb250aE51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXI6IHllYXJOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFdmVudDogaGFzRXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb2RheTogaXNUb2RheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0VtcHR5OiBpc0VtcHR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTdGFydFJhbmdlOiBpc1N0YXJ0UmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0VuZFJhbmdlOiBpc0VuZFJhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNJblJhbmdlOiBpc0luUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiBvcHRzLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IG9wdHMuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0cy5waWNrV2hvbGVXZWVrICYmIGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJvdy5wdXNoKHJlbmRlckRheShkYXlDb25maWcpKTtcblxuICAgICAgICAgICAgICAgIGlmICgrK3IgPT09IDcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuc2hvd1dlZWtOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy51bnNoaWZ0KHJlbmRlcldlZWsoaSAtIGJlZm9yZSwgbW9udGgsIHllYXIsIG9wdHMuZmlyc3RXZWVrT2ZZZWFyTWluRGF5cykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZW5kZXJSb3cocm93LCBvcHRzLmlzUlRMLCBvcHRzLnBpY2tXaG9sZVdlZWssIGlzV2Vla1NlbGVjdGVkKSk7XG4gICAgICAgICAgICAgICAgICAgIHJvdyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyVGFibGUob3B0cywgZGF0YSwgcmFuZElkKTtcbiAgICAgICAgfSxcblxuICAgICAgICBpc1Zpc2libGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Y7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2hvdzogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAnaXMtaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fby5vbk9wZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGlkZTogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuX3Y7XG4gICAgICAgICAgICBpZiAodiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5fb25DbGljayk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9vLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsLnN0eWxlLnBvc2l0aW9uID0gJ3N0YXRpYyc7IC8vIHJlc2V0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUubGVmdCA9ICdhdXRvJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuZWwsICdpcy1oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdGhpcy5fby5vbkNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX28ub25DbG9zZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR0FNRSBPVkVSXG4gICAgICAgICAqL1xuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBvcHRzID0gdGhpcy5fbztcblxuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAnbW91c2Vkb3duJywgdGhpcy5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnQodGhpcy5lbCwgJ3RvdWNoZW5kJywgdGhpcy5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnQodGhpcy5lbCwgJ2NoYW5nZScsIHRoaXMuX29uQ2hhbmdlKTtcbiAgICAgICAgICAgIGlmIChvcHRzLmtleWJvYXJkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVFdmVudChkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9vbktleUNoYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5maWVsZCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMuZmllbGQsICdjaGFuZ2UnLCB0aGlzLl9vbklucHV0Q2hhbmdlKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChvcHRzLnRyaWdnZXIsICdjbGljaycsIHRoaXMuX29uSW5wdXRDbGljayk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMudHJpZ2dlciwgJ2ZvY3VzJywgdGhpcy5fb25JbnB1dEZvY3VzKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy50cmlnZ2VyLCAnYmx1cicsIHRoaXMuX29uSW5wdXRCbHVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgcmV0dXJuIFBpa2FkYXk7XG59KSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5BdXRvbGlua2VyOyIsIi8qIGVzbGludCBrZXktc3BhY2luZzogMCAqL1xuLyogZXNsaW50IHF1b3RlLXByb3BzOiAwICovXG5cbmNvbnN0IE1pbWUgPSB7XG5cdCdlbWwnOiAnbWVzc2FnZS9yZmM4MjInLFxuXHQnbWltZSc6ICdtZXNzYWdlL3JmYzgyMicsXG5cdCd0eHQnOiAndGV4dC9wbGFpbicsXG5cdCd0ZXh0JzogJ3RleHQvcGxhaW4nLFxuXHQnZGVmJzogJ3RleHQvcGxhaW4nLFxuXHQnbGlzdCc6ICd0ZXh0L3BsYWluJyxcblx0J2luJzogJ3RleHQvcGxhaW4nLFxuXHQnaW5pJzogJ3RleHQvcGxhaW4nLFxuXHQnbG9nJzogJ3RleHQvcGxhaW4nLFxuXHQnc3FsJzogJ3RleHQvcGxhaW4nLFxuXHQnY2ZnJzogJ3RleHQvcGxhaW4nLFxuXHQnY29uZic6ICd0ZXh0L3BsYWluJyxcblx0J2FzYyc6ICd0ZXh0L3BsYWluJyxcblx0J3J0eCc6ICd0ZXh0L3JpY2h0ZXh0Jyxcblx0J3ZjYXJkJzogJ3RleHQvdmNhcmQnLFxuXHQndmNmJzogJ3RleHQvdmNhcmQnLFxuXHQnaHRtJzogJ3RleHQvaHRtbCcsXG5cdCdodG1sJzogJ3RleHQvaHRtbCcsXG5cdCdjc3YnOiAndGV4dC9jc3YnLFxuXHQnaWNzJzogJ3RleHQvY2FsZW5kYXInLFxuXHQnaWZiJzogJ3RleHQvY2FsZW5kYXInLFxuXHQneG1sJzogJ3RleHQveG1sJyxcblx0J2pzb24nOiAnYXBwbGljYXRpb24vanNvbicsXG5cdCdzd2YnOiAnYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gnLFxuXHQnaGxwJzogJ2FwcGxpY2F0aW9uL3dpbmhscCcsXG5cdCd3Z3QnOiAnYXBwbGljYXRpb24vd2lkZ2V0Jyxcblx0J2NobSc6ICdhcHBsaWNhdGlvbi92bmQubXMtaHRtbGhlbHAnLFxuXHQncDEwJzogJ2FwcGxpY2F0aW9uL3BrY3MxMCcsXG5cdCdwN2MnOiAnYXBwbGljYXRpb24vcGtjczctbWltZScsXG5cdCdwN20nOiAnYXBwbGljYXRpb24vcGtjczctbWltZScsXG5cdCdwN3MnOiAnYXBwbGljYXRpb24vcGtjczctc2lnbmF0dXJlJyxcblx0J3RvcnJlbnQnOiAnYXBwbGljYXRpb24veC1iaXR0b3JyZW50JyxcblxuXHQvLyBzY3JpcHRzXG5cdCdqcyc6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Jyxcblx0J3BsJzogJ3RleHQvcGVybCcsXG5cdCdjc3MnOiAndGV4dC9jc3MnLFxuXHQnYXNwJzogJ3RleHQvYXNwJyxcblx0J3BocCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHAzJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BocDQnOiAnYXBwbGljYXRpb24veC1odHRwZC1waHAnLFxuXHQncGhwNSc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHRtbCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cblx0Ly8gaW1hZ2VzXG5cdCdwbmcnOiAnaW1hZ2UvcG5nJyxcblx0J2pwZyc6ICdpbWFnZS9qcGVnJyxcblx0J2pwZWcnOiAnaW1hZ2UvanBlZycsXG5cdCdqcGUnOiAnaW1hZ2UvanBlZycsXG5cdCdqZmlmJzogJ2ltYWdlL2pwZWcnLFxuXHQnZ2lmJzogJ2ltYWdlL2dpZicsXG5cdCdibXAnOiAnaW1hZ2UvYm1wJyxcblx0J2NnbSc6ICdpbWFnZS9jZ20nLFxuXHQnaWVmJzogJ2ltYWdlL2llZicsXG5cdCdpY28nOiAnaW1hZ2UveC1pY29uJyxcblx0J3RpZic6ICdpbWFnZS90aWZmJyxcblx0J3RpZmYnOiAnaW1hZ2UvdGlmZicsXG5cdCdzdmcnOiAnaW1hZ2Uvc3ZnK3htbCcsXG5cdCdzdmd6JzogJ2ltYWdlL3N2Zyt4bWwnLFxuXHQnZGp2JzogJ2ltYWdlL3ZuZC5kanZ1Jyxcblx0J2RqdnUnOiAnaW1hZ2Uvdm5kLmRqdnUnLFxuXHQnd2VicCc6ICdpbWFnZS93ZWJwJyxcblxuXHQvLyBhcmNoaXZlc1xuXHQnemlwJzogJ2FwcGxpY2F0aW9uL3ppcCcsXG5cdCc3eic6ICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnLFxuXHQncmFyJzogJ2FwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWQnLFxuXHQnZXhlJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdkbGwnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J3Njcic6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnY29tJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdiYXQnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J21zaSc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnY2FiJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCcsXG5cdCdneic6ICdhcHBsaWNhdGlvbi94LWd6aXAnLFxuXHQndGd6JzogJ2FwcGxpY2F0aW9uL3gtZ3ppcCcsXG5cdCdieic6ICdhcHBsaWNhdGlvbi94LWJ6aXAnLFxuXHQnYnoyJzogJ2FwcGxpY2F0aW9uL3gtYnppcDInLFxuXHQnZGViJzogJ2FwcGxpY2F0aW9uL3gtZGViaWFuLXBhY2thZ2UnLFxuXG5cdC8vIGZvbnRzXG5cdCdwc2YnOiAnYXBwbGljYXRpb24veC1mb250LWxpbnV4LXBzZicsXG5cdCdvdGYnOiAnYXBwbGljYXRpb24veC1mb250LW90ZicsXG5cdCdwY2YnOiAnYXBwbGljYXRpb24veC1mb250LXBjZicsXG5cdCdzbmYnOiAnYXBwbGljYXRpb24veC1mb250LXNuZicsXG5cdCd0dGYnOiAnYXBwbGljYXRpb24veC1mb250LXR0ZicsXG5cdCd0dGMnOiAnYXBwbGljYXRpb24veC1mb250LXR0ZicsXG5cblx0Ly8gYXVkaW9cblx0J21wMyc6ICdhdWRpby9tcGVnJyxcblx0J2Ftcic6ICdhdWRpby9hbXInLFxuXHQnYWFjJzogJ2F1ZGlvL3gtYWFjJyxcblx0J2FpZic6ICdhdWRpby94LWFpZmYnLFxuXHQnYWlmYyc6ICdhdWRpby94LWFpZmYnLFxuXHQnYWlmZic6ICdhdWRpby94LWFpZmYnLFxuXHQnd2F2JzogJ2F1ZGlvL3gtd2F2Jyxcblx0J3dtYSc6ICdhdWRpby94LW1zLXdtYScsXG5cdCd3YXgnOiAnYXVkaW8veC1tcy13YXgnLFxuXHQnbWlkaSc6ICdhdWRpby9taWRpJyxcblx0J21wNGEnOiAnYXVkaW8vbXA0Jyxcblx0J29nZyc6ICdhdWRpby9vZ2cnLFxuXHQnd2ViYSc6ICdhdWRpby93ZWJtJyxcblx0J3JhJzogJ2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJyxcblx0J3JhbSc6ICdhdWRpby94LXBuLXJlYWxhdWRpbycsXG5cdCdybXAnOiAnYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luJyxcblx0J20zdSc6ICdhdWRpby94LW1wZWd1cmwnLFxuXG5cdC8vIHZpZGVvXG5cdCdmbHYnOiAndmlkZW8veC1mbHYnLFxuXHQncXQnOiAndmlkZW8vcXVpY2t0aW1lJyxcblx0J21vdic6ICd2aWRlby9xdWlja3RpbWUnLFxuXHQnd212JzogJ3ZpZGVvL3dpbmRvd3MtbWVkaWEnLFxuXHQnYXZpJzogJ3ZpZGVvL3gtbXN2aWRlbycsXG5cdCdtcGcnOiAndmlkZW8vbXBlZycsXG5cdCdtcGVnJzogJ3ZpZGVvL21wZWcnLFxuXHQnbXBlJzogJ3ZpZGVvL21wZWcnLFxuXHQnbTF2JzogJ3ZpZGVvL21wZWcnLFxuXHQnbTJ2JzogJ3ZpZGVvL21wZWcnLFxuXHQnM2dwJzogJ3ZpZGVvLzNncHAnLFxuXHQnM2cyJzogJ3ZpZGVvLzNncHAyJyxcblx0J2gyNjEnOiAndmlkZW8vaDI2MScsXG5cdCdoMjYzJzogJ3ZpZGVvL2gyNjMnLFxuXHQnaDI2NCc6ICd2aWRlby9oMjY0Jyxcblx0J2pwZ3YnOiAndmlkZW8vanBndicsXG5cdCdtcDQnOiAndmlkZW8vbXA0Jyxcblx0J21wNHYnOiAndmlkZW8vbXA0Jyxcblx0J21wZzQnOiAndmlkZW8vbXA0Jyxcblx0J29ndic6ICd2aWRlby9vZ2cnLFxuXHQnd2VibSc6ICd2aWRlby93ZWJtJyxcblx0J200dic6ICd2aWRlby94LW00dicsXG5cdCdhc2YnOiAndmlkZW8veC1tcy1hc2YnLFxuXHQnYXN4JzogJ3ZpZGVvL3gtbXMtYXNmJyxcblx0J3dtJzogJ3ZpZGVvL3gtbXMtd20nLFxuXHQnd214JzogJ3ZpZGVvL3gtbXMtd214Jyxcblx0J3d2eCc6ICd2aWRlby94LW1zLXd2eCcsXG5cdCdtb3ZpZSc6ICd2aWRlby94LXNnaS1tb3ZpZScsXG5cblx0Ly8gYWRvYmVcblx0J3BkZic6ICdhcHBsaWNhdGlvbi9wZGYnLFxuXHQncHNkJzogJ2ltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AnLFxuXHQnYWknOiAnYXBwbGljYXRpb24vcG9zdHNjcmlwdCcsXG5cdCdlcHMnOiAnYXBwbGljYXRpb24vcG9zdHNjcmlwdCcsXG5cdCdwcyc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JyxcblxuXHQvLyBtcyBvZmZpY2Vcblx0J2RvYyc6ICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuXHQnZG90JzogJ2FwcGxpY2F0aW9uL21zd29yZCcsXG5cdCdydGYnOiAnYXBwbGljYXRpb24vcnRmJyxcblx0J3hscyc6ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLFxuXHQncHB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50Jyxcblx0J2RvY3gnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxuXHQneGxzeCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG5cdCdkb3R4JzogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnRlbXBsYXRlJyxcblx0J3BwdHgnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbicsXG5cblx0Ly8gb3BlbiBvZmZpY2Vcblx0J29kdCc6ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQnLFxuXHQnb2RzJzogJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQnXG59O1xuXG5leHBvcnQgeyBNaW1lLCBNaW1lIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5jbGFzcyBGaWx0ZXJVc2VyU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNhcGEgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm1vZHVsZXMgPSBrby5vYnNlcnZhYmxlKHt9KTtcblxuXHRcdHRoaXMuZmlsdGVycyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmZpbHRlcnMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTIwMG1zIH0pO1xuXHRcdHRoaXMuZmlsdGVycy5zYXZpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWUyMDBtcyB9KTtcblxuXHRcdHRoaXMucmF3ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEZpbHRlclVzZXJTdG9yZSgpO1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5pZiAoQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKEFycmF5UHJvdG90eXBlLCBVTlNDT1BBQkxFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogY3JlYXRlKG51bGwpXG4gIH0pO1xufVxuXG4vLyBhZGQgYSBrZXkgdG8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29uc3RydWN0b3IgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGQVVMVCA9PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuYXRpdmVJdGVyYXRvci5jYWxsKHRoaXMpOyB9O1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvcik7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICByZWRlZmluZShJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCB7IEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGlzRnVuYyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgeyBwb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvQXNrJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0Fzaydcbn0pXG5jbGFzcyBBc2tQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuYXNrRGVzYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMueWVzQnV0dG9uID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5ub0J1dHRvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy55ZXNGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubm9Gb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mWWVzQWN0aW9uID0gbnVsbDtcblx0XHR0aGlzLmZOb0FjdGlvbiA9IG51bGw7XG5cblx0XHR0aGlzLmJGb2N1c1llc09uU2hvdyA9IHRydWU7XG5cdFx0dGhpcy5iRGlzYWJlQ2xvc2VPbkVzYyA9IHRydWU7XG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuUG9wdXBBc2s7XG5cdH1cblxuXHRjbGVhclBvcHVwKCkge1xuXHRcdHRoaXMuYXNrRGVzYygnJyk7XG5cdFx0dGhpcy55ZXNCdXR0b24oaTE4bignUE9QVVBTX0FTSy9CVVRUT05fWUVTJykpO1xuXHRcdHRoaXMubm9CdXR0b24oaTE4bignUE9QVVBTX0FTSy9CVVRUT05fTk8nKSk7XG5cblx0XHR0aGlzLnllc0ZvY3VzKGZhbHNlKTtcblx0XHR0aGlzLm5vRm9jdXMoZmFsc2UpO1xuXG5cdFx0dGhpcy5mWWVzQWN0aW9uID0gbnVsbDtcblx0XHR0aGlzLmZOb0FjdGlvbiA9IG51bGw7XG5cdH1cblxuXHR5ZXNDbGljaygpIHtcblx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblxuXHRcdGlmIChpc0Z1bmModGhpcy5mWWVzQWN0aW9uKSkge1xuXHRcdFx0dGhpcy5mWWVzQWN0aW9uLmNhbGwobnVsbCk7XG5cdFx0fVxuXHR9XG5cblx0bm9DbGljaygpIHtcblx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblxuXHRcdGlmIChpc0Z1bmModGhpcy5mTm9BY3Rpb24pKSB7XG5cdFx0XHR0aGlzLmZOb0FjdGlvbi5jYWxsKG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Fza0Rlc2Ncblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGZZZXNGdW5jXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmTm9GdW5jXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc1llc0J1dHRvblxuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNOb0J1dHRvblxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiRm9jdXNZZXNPblNob3cgPSB0cnVlXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0b25TaG93KGFza0Rlc2MsIGZZZXNGdW5jID0gbnVsbCwgZk5vRnVuYyA9IG51bGwsIHllc0J1dHRvbiA9ICcnLCBub0J1dHRvbiA9ICcnLCBpc0ZvY3VzWWVzT25TaG93ID0gdHJ1ZSkge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXG5cdFx0dGhpcy5mWWVzQWN0aW9uID0gZlllc0Z1bmMgfHwgbnVsbDtcblx0XHR0aGlzLmZOb0FjdGlvbiA9IGZOb0Z1bmMgfHwgbnVsbDtcblxuXHRcdHRoaXMuYXNrRGVzYyhhc2tEZXNjIHx8ICcnKTtcblxuXHRcdGlmICh5ZXNCdXR0b24pIHtcblx0XHRcdHRoaXMueWVzQnV0dG9uKHllc0J1dHRvbik7XG5cdFx0fVxuXG5cdFx0aWYgKG5vQnV0dG9uKSB7XG5cdFx0XHR0aGlzLm5vQnV0dG9uKG5vQnV0dG9uKTtcblx0XHR9XG5cblx0XHR0aGlzLmJGb2N1c1llc09uU2hvdyA9ICEhaXNGb2N1c1llc09uU2hvdztcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHRpZiAodGhpcy5iRm9jdXNZZXNPblNob3cpIHtcblx0XHRcdHRoaXMueWVzRm9jdXModHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRrZXkoJ3RhYiwgc2hpZnQrdGFiLCByaWdodCwgbGVmdCcsIEtleVN0YXRlLlBvcHVwQXNrLCAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy55ZXNGb2N1cygpKSB7XG5cdFx0XHRcdHRoaXMubm9Gb2N1cyh0cnVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMueWVzRm9jdXModHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRrZXkoJ2VzYycsIEtleVN0YXRlLlBvcHVwQXNrLCAoKSA9PiB7XG5cdFx0XHR0aGlzLm5vQ2xpY2soKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBBc2tQb3B1cFZpZXcsIEFza1BvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5jbGFzcyBRdW90YVVzZXJTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMucXVvdGEgPSBrby5vYnNlcnZhYmxlKDApO1xuXHRcdHRoaXMudXNhZ2UgPSBrby5vYnNlcnZhYmxlKDApO1xuXG5cdFx0dGhpcy5wZXJjZW50YWdlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgcXVvdGEgPSB0aGlzLnF1b3RhKCksXG5cdFx0XHRcdHVzYWdlID0gdGhpcy51c2FnZSgpO1xuXG5cdFx0XHRyZXR1cm4gMCA8IHF1b3RhID8gd2luZG93Lk1hdGguY2VpbCgodXNhZ2UgLyBxdW90YSkgKiAxMDApIDogMDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gcXVvdGFcblx0ICogQHBhcmFtIHtudW1iZXJ9IHVzYWdlXG5cdCAqL1xuXHRwb3B1bGF0ZURhdGEocXVvdGEsIHVzYWdlKSB7XG5cdFx0dGhpcy5xdW90YShxdW90YSAqIE1hZ2ljcy5CaXRMZW5ndGgxMDI0KTtcblx0XHR0aGlzLnVzYWdlKHVzYWdlICogTWFnaWNzLkJpdExlbmd0aDEwMjQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBRdW90YVVzZXJTdG9yZSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuaWZ2aXNpYmxlOyIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIFByb3BlcnRpZXNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSAmJiBpdCAhPT0gbnVsbCkge1xuICAgIHRocm93IFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArIFN0cmluZyhpdCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBBcnJheUl0ZXJhdG9yTWV0aG9kcyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvck1ldGhvZHMudmFsdWVzO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUpIHtcbiAgICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl0gIT09IEFycmF5VmFsdWVzKSB0cnkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdID0gQXJyYXlWYWx1ZXM7XG4gICAgfVxuICAgIGlmICghQ29sbGVjdGlvblByb3RvdHlwZVtUT19TVFJJTkdfVEFHXSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gICAgfVxuICAgIGlmIChET01JdGVyYWJsZXNbQ09MTEVDVElPTl9OQU1FXSkgZm9yICh2YXIgTUVUSE9EX05BTUUgaW4gQXJyYXlJdGVyYXRvck1ldGhvZHMpIHtcbiAgICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdICE9PSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pIHRyeSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBNRVRIT0RfTkFNRSwgQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdID0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwicmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRUaW1lb3V0O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgIW5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFsbC1zZXR0bGVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYW55Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUHJvbWlzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxudmFyICRBZ2dyZWdhdGVFcnJvciA9IGZ1bmN0aW9uIEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgbWVzc2FnZSkge1xuICB2YXIgdGhhdCA9IHRoaXM7XG4gIGlmICghKHRoYXQgaW5zdGFuY2VvZiAkQWdncmVnYXRlRXJyb3IpKSByZXR1cm4gbmV3ICRBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIG1lc3NhZ2UpO1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9lcnJvci1tZXNzYWdlXG4gICAgdGhhdCA9IHNldFByb3RvdHlwZU9mKG5ldyBFcnJvcih1bmRlZmluZWQpLCBnZXRQcm90b3R5cGVPZih0aGF0KSk7XG4gIH1cbiAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdtZXNzYWdlJywgU3RyaW5nKG1lc3NhZ2UpKTtcbiAgdmFyIGVycm9yc0FycmF5ID0gW107XG4gIGl0ZXJhdGUoZXJyb3JzLCBlcnJvcnNBcnJheS5wdXNoLCB7IHRoYXQ6IGVycm9yc0FycmF5IH0pO1xuICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgJ2Vycm9ycycsIGVycm9yc0FycmF5KTtcbiAgcmV0dXJuIHRoYXQ7XG59O1xuXG4kQWdncmVnYXRlRXJyb3IucHJvdG90eXBlID0gY3JlYXRlKEVycm9yLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3RvcjogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDUsICRBZ2dyZWdhdGVFcnJvciksXG4gIG1lc3NhZ2U6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcig1LCAnJyksXG4gIG5hbWU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcig1LCAnQWdncmVnYXRlRXJyb3InKVxufSk7XG5cbi8vIGBBZ2dyZWdhdGVFcnJvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWdncmVnYXRlLWVycm9yLWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlIH0sIHtcbiAgQWdncmVnYXRlRXJyb3I6ICRBZ2dyZWdhdGVFcnJvclxufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShnbG9iYWwsIGtleSwgdmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSAmJiBpdCAhPT0gbnVsbCkge1xuICAgIHRocm93IFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArIFN0cmluZyhpdCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgUHJvcGVydGllc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXMoaGlkZGVuS2V5cywga2V5KSAmJiBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwidmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICYmICFTeW1ib2wuc2hhbVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IpIHtcbiAgdmFyIHJldHVybk1ldGhvZCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgaWYgKHJldHVybk1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFuT2JqZWN0KHJldHVybk1ldGhvZC5jYWxsKGl0ZXJhdG9yKSkudmFsdWU7XG4gIH1cbn07XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgTmF0aXZlUHJvbWlzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3RvcicpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciAkZmV0Y2ggPSBnZXRCdWlsdEluKCdmZXRjaCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBOQVRJVkVfUkVKRUNUSU9OX0VWRU5UID0gdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nO1xudmFyIFVOSEFORExFRF9SRUpFQ1RJT04gPSAndW5oYW5kbGVkcmVqZWN0aW9uJztcbnZhciBSRUpFQ1RJT05fSEFORExFRCA9ICdyZWplY3Rpb25oYW5kbGVkJztcbnZhciBQRU5ESU5HID0gMDtcbnZhciBGVUxGSUxMRUQgPSAxO1xudmFyIFJFSkVDVEVEID0gMjtcbnZhciBIQU5ETEVEID0gMTtcbnZhciBVTkhBTkRMRUQgPSAyO1xudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbnZhciBGT1JDRUQgPSBpc0ZvcmNlZChQUk9NSVNFLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBHTE9CQUxfQ09SRV9KU19QUk9NSVNFID0gaW5zcGVjdFNvdXJjZShQcm9taXNlQ29uc3RydWN0b3IpICE9PSBTdHJpbmcoUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgaWYgKCFHTE9CQUxfQ09SRV9KU19QUk9NSVNFKSB7XG4gICAgLy8gVjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgaWYgKFY4X1ZFUlNJT04gPT09IDY2KSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBVbmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgaWYgKCFJU19OT0RFICYmICFOQVRJVkVfUkVKRUNUSU9OX0VWRU5UKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBXZSBuZWVkIFByb21pc2UjZmluYWxseSBpbiB0aGUgcHVyZSB2ZXJzaW9uIGZvciBwcmV2ZW50aW5nIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgaWYgKElTX1BVUkUgJiYgIVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGVbJ2ZpbmFsbHknXSkgcmV0dXJuIHRydWU7XG4gIC8vIFdlIGNhbid0IHVzZSBAQHNwZWNpZXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG4gIGlmIChWOF9WRVJTSU9OID49IDUxICYmIC9uYXRpdmUgY29kZS8udGVzdChQcm9taXNlQ29uc3RydWN0b3IpKSByZXR1cm4gZmFsc2U7XG4gIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUoMSk7XG4gIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIH07XG4gIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgcmV0dXJuICEocHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZSk7XG59KTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSBGT1JDRUQgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSlbJ2NhdGNoJ10oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gc3RhdGUucmVhY3Rpb25zO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBvayA9IHN0YXRlLnN0YXRlID09IEZVTEZJTExFRDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBjaGFpbltpbmRleCsrXTtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChzdGF0ZSk7XG4gICAgICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRlLnJlYWN0aW9ucyA9IFtdO1xuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9SRUpFQ1RJT05fRVZFTlQgJiYgKGhhbmRsZXIgPSBnbG9iYWxbJ29uJyArIG5hbWVdKSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4oc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChzdGF0ZS5mYWNhZGUgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICB2YXIgdGhlbiA9IGlzVGhlbmFibGUodmFsdWUpO1xuICAgIGlmICh0aGVuKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRUQpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgUHJvbWlzZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKSwgYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaW50ZXJuYWxSZWplY3Qoc3RhdGUsIGVycm9yKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IFtdLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZWRlZmluZUFsbChQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlLCB7XG4gICAgLy8gYFByb21pc2UucHJvdG90eXBlLnRoZW5gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVhY3Rpb25zLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHN0YXRlLnN0YXRlICE9IFBFTkRJTkcpIG5vdGlmeShzdGF0ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiB0eXBlb2YgTmF0aXZlUHJvbWlzZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2UucHJvdG90eXBlLnRoZW47XG5cbiAgICAvLyB3cmFwIG5hdGl2ZSBQcm9taXNlI3RoZW4gZm9yIG5hdGl2ZSBhc3luYyBmdW5jdGlvbnNcbiAgICByZWRlZmluZShOYXRpdmVQcm9taXNlLnByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIG5hdGl2ZVRoZW4uY2FsbCh0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuXG4gICAgLy8gd3JhcCBmZXRjaCByZXN1bHRcbiAgICBpZiAodHlwZW9mICRmZXRjaCA9PSAnZnVuY3Rpb24nKSAkKHsgZ2xvYmFsOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICBmZXRjaDogZnVuY3Rpb24gZmV0Y2goaW5wdXQgLyogLCBpbml0ICovKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShQcm9taXNlQ29uc3RydWN0b3IsICRmZXRjaC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuXG5Qcm9taXNlV3JhcHBlciA9IGdldEJ1aWx0SW4oUFJPTUlTRSk7XG5cbi8vIHN0YXRpY3NcbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlamVjdFxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICBjYXBhYmlsaXR5LnJlamVjdC5jYWxsKHVuZGVmaW5lZCwgcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG5cbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB8fCBGT1JDRUQgfSwge1xuICAvLyBgUHJvbWlzZS5yZXNvbHZlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKElTX1BVUkUgJiYgdGhpcyA9PT0gUHJvbWlzZVdyYXBwZXIgPyBQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG5cbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIC8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmFjZVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhRnVuY3Rpb24oQy5yZXNvbHZlKTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgICRwcm9taXNlUmVzb2x2ZS5jYWxsKEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5zYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgfSByZXR1cm4gdGFyZ2V0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgJyArIChuYW1lID8gbmFtZSArICcgJyA6ICcnKSArICdpbnZvY2F0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcbnZhciBJU19XRUJPU19XRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdCcpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuLy8gTm9kZS5qcyAxMSBzaG93cyBFeHBlcmltZW50YWxXYXJuaW5nIG9uIGdldHRpbmcgYHF1ZXVlTWljcm90YXNrYFxudmFyIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdxdWV1ZU1pY3JvdGFzaycpO1xudmFyIHF1ZXVlTWljcm90YXNrID0gcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yICYmIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvci52YWx1ZTtcblxudmFyIGZsdXNoLCBoZWFkLCBsYXN0LCBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghcXVldWVNaWNyb3Rhc2spIHtcbiAgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKElTX05PREUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB0aGVuID0gcHJvbWlzZS50aGVuO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4uY2FsbChwcm9taXNlLCBmbHVzaCk7XG4gICAgfTtcbiAgLy8gTm9kZS5qcyB3aXRob3V0IHByb21pc2VzXG4gIH0gZWxzZSBpZiAoSVNfTk9ERSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVldWVNaWNyb3Rhc2sgfHwgZnVuY3Rpb24gKGZuKSB7XG4gIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgaWYgKCFoZWFkKSB7XG4gICAgaGVhZCA9IHRhc2s7XG4gICAgbm90aWZ5KCk7XG4gIH0gbGFzdCA9IHRhc2s7XG59O1xuIiwidmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC93ZWIwcyg/IS4qY2hyb21lKS9pLnRlc3QodXNlckFnZW50KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdmFyIGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZTtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfVxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nICYmIC9uYXRpdmUgY29kZS8udGVzdChpbnNwZWN0U291cmNlKFdlYWtNYXApKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgUHJvbWlzZS5hbGxTZXR0bGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxzZXR0bGVkXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUgfSwge1xuICBhbGxTZXR0bGVkOiBmdW5jdGlvbiBhbGxTZXR0bGVkKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUZ1bmN0aW9uKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ2Z1bGZpbGxlZCcsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZXJyb3IgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhRnVuY3Rpb24oQy5yZXNvbHZlKTtcbiAgICAgIHZhciBlcnJvcnMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgdmFyIGFscmVhZHlSZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeVJlamVjdGVkID0gZmFsc2U7XG4gICAgICAgIGVycm9ycy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBwcm9taXNlUmVzb2x2ZS5jYWxsKEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgKGdldEJ1aWx0SW4oJ0FnZ3JlZ2F0ZUVycm9yJykpKGVycm9ycywgUFJPTUlTRV9BTllfRVJST1IpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgKGdldEJ1aWx0SW4oJ0FnZ3JlZ2F0ZUVycm9yJykpKGVycm9ycywgUFJPTUlTRV9BTllfRVJST1IpKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXByb21pc2UtY29uc3RydWN0b3InKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xuXG4vLyBTYWZhcmkgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4MjlcbnZhciBOT05fR0VORVJJQyA9ICEhTmF0aXZlUHJvbWlzZSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIE5hdGl2ZVByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10uY2FsbCh7IHRoZW46IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBwYXRjaCBuYXRpdmUgUHJvbWlzZS5wcm90b3R5cGUgZm9yIG5hdGl2ZSBhc3luYyBmdW5jdGlvbnNcbmlmICghSVNfUFVSRSAmJiB0eXBlb2YgTmF0aXZlUHJvbWlzZSA9PSAnZnVuY3Rpb24nICYmICFOYXRpdmVQcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddKSB7XG4gIHJlZGVmaW5lKE5hdGl2ZVByb21pc2UucHJvdG90eXBlLCAnZmluYWxseScsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IFN0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgY29kZVBvaW50QXQsIGF0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSBTdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IFMuY2hhckNvZGVBdChwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IFMuY2hhckNvZGVBdChwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklORyA/IFMuY2hhckF0KHBvc2l0aW9uKSA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkcgPyBTLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsIi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwidmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIHJlcGxhY2UgPSAnJy5yZXBsYWNlO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCYnYF18XFxkezEsMn18PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9KS9nO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICB9XG4gIHJldHVybiByZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICB2YXIgY2FwdHVyZTtcbiAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICB9KTtcbn07XG4iLCJyZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi50aW1lcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLnNldEludGVydmFsO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsIi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxubW9kdWxlLmV4cG9ydHMgPSAnXFx1MDAwOVxcdTAwMEFcXHUwMDBCXFx1MDAwQ1xcdTAwMERcXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gbmV3IChDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEMpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCJ2YXIgcmVkdWNlID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZWR1Y2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmVkdWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IHJlZHVjZSA6IG93bjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCxuby10aHJvdy1saXRlcmFsXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyB0aHJvdyAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwidmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyT3V0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9PVVQgPSBUWVBFID09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfT1VUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJPdXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlck91dGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJPdXQ6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgY29udmVydExhbmdOYW1lIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuLy8gaW1wb3J0IHt2aWV3LCBWaWV3VHlwZX0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0xhbmd1YWdlcycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNMYW5ndWFnZXMnXG59KVxuY2xhc3MgTGFuZ3VhZ2VzUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmZMYW5nID0gbnVsbDtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5sYW5ncyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHVzZXJMYW5ndWFnZSA9IHRoaXMudXNlckxhbmd1YWdlKCk7XG5cdFx0XHRyZXR1cm4gXy5tYXAodGhpcy5sYW5ncygpLCAobGFuZ3VhZ2UpID0+ICh7XG5cdFx0XHRcdGtleTogbGFuZ3VhZ2UsXG5cdFx0XHRcdHVzZXI6IGxhbmd1YWdlID09PSB1c2VyTGFuZ3VhZ2UsXG5cdFx0XHRcdHNlbGVjdGVkOiBrby5vYnNlcnZhYmxlKGZhbHNlKSxcblx0XHRcdFx0ZnVsbE5hbWU6IGNvbnZlcnRMYW5nTmFtZShsYW5ndWFnZSlcblx0XHRcdH0pKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubGFuZ3Muc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuc2V0TGFuZ3VhZ2VTZWxlY3Rpb24oKTtcblx0XHR9KTtcblx0fVxuXG5cdGxhbmd1YWdlVG9vbHRpcE5hbWUobGFuZ3VhZ2UpIHtcblx0XHRyZXR1cm4gY29udmVydExhbmdOYW1lKGxhbmd1YWdlLCB0cnVlKTtcblx0fVxuXG5cdHNldExhbmd1YWdlU2VsZWN0aW9uKCkge1xuXHRcdGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy5mTGFuZyA/IGtvLnVud3JhcCh0aGlzLmZMYW5nKSA6ICcnO1xuXHRcdF8uZWFjaCh0aGlzLmxhbmd1YWdlcygpLCAoaXRlbSkgPT4ge1xuXHRcdFx0aXRlbS5zZWxlY3RlZChpdGVtLmtleSA9PT0gY3VycmVudExhbmcpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25CZWZvcmVTaG93KCkge1xuXHRcdHRoaXMuZkxhbmcgPSBudWxsO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlKCcnKTtcblxuXHRcdHRoaXMubGFuZ3MoW10pO1xuXHR9XG5cblx0b25TaG93KGZMYW5ndWFnZSwgbGFuZ3MsIHVzZXJMYW5ndWFnZSkge1xuXHRcdHRoaXMuZkxhbmcgPSBmTGFuZ3VhZ2U7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UodXNlckxhbmd1YWdlIHx8ICcnKTtcblxuXHRcdHRoaXMubGFuZ3MobGFuZ3MpO1xuXHR9XG5cblx0Y2hhbmdlTGFuZ3VhZ2UobGFuZykge1xuXHRcdGlmICh0aGlzLmZMYW5nKSB7XG5cdFx0XHR0aGlzLmZMYW5nKGxhbmcpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExhbmd1YWdlc1BvcHVwVmlldywgTGFuZ3VhZ2VzUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCB7IGtpbGxDdHJsQUN0cmxTLCBkZXRlY3REcm9wZG93blZpc2liaWxpdHksIGNyZWF0ZUNvbW1hbmRMZWdhY3ksIGRvbVJlYWR5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7ICR3aW4sICRodG1sLCBkYXRhIGFzIEdsb2JhbHNEYXRhLCBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgRW51bXMgZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCAqIGFzIFBsdWdpbnMgZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IEVtYWlsTW9kZWwgfSBmcm9tICdNb2RlbC9FbWFpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IChBcHApID0+IHtcblx0R2xvYmFsc0RhdGEuX19BUFBfXyA9IEFwcDtcblxuXHQkd2luLm9uKCdrZXlkb3duJywga2lsbEN0cmxBQ3RybFMpLm9uKCd1bmxvYWQnLCAoKSA9PiB7XG5cdFx0R2xvYmFsc0RhdGEuYlVubG9hZCA9IHRydWU7XG5cdH0pO1xuXG5cdCRodG1sLmFkZENsYXNzKGJNb2JpbGVEZXZpY2UgPyAnbW9iaWxlJyA6ICduby1tb2JpbGUnKS5vbignY2xpY2suZHJvcGRvd24uZGF0YS1hcGknLCBkZXRlY3REcm9wZG93blZpc2liaWxpdHkpO1xuXG5cdGNvbnN0IHJsID0gd2luZG93LnJsIHx8IHt9O1xuXG5cdHJsLmkxOG4gPSBpMThuO1xuXHRybC5jcmVhdGVDb21tYW5kID0gY3JlYXRlQ29tbWFuZExlZ2FjeTtcblxuXHRybC5hZGRTZXR0aW5nc1ZpZXdNb2RlbCA9IFBsdWdpbnMuYWRkU2V0dGluZ3NWaWV3TW9kZWw7XG5cdHJsLmFkZFNldHRpbmdzVmlld01vZGVsRm9yQWRtaW4gPSBQbHVnaW5zLmFkZFNldHRpbmdzVmlld01vZGVsRm9yQWRtaW47XG5cblx0cmwuYWRkSG9vayA9IFBsdWdpbnMuYWRkSG9vaztcblx0cmwuc2V0dGluZ3NHZXQgPSBQbHVnaW5zLm1haW5TZXR0aW5nc0dldDtcblx0cmwucGx1Z2luU2V0dGluZ3NHZXQgPSBQbHVnaW5zLnNldHRpbmdzR2V0O1xuXHRybC5wbHVnaW5SZW1vdGVSZXF1ZXN0ID0gUGx1Z2lucy5yZW1vdGVSZXF1ZXN0O1xuXG5cdHJsLkVtYWlsTW9kZWwgPSBFbWFpbE1vZGVsO1xuXHRybC5FbnVtcyA9IEVudW1zO1xuXG5cdHdpbmRvdy5ybCA9IHJsO1xuXG5cdGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuXHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCduby1qcyBybC1ib290ZWQtdHJpZ2dlcicpLmFkZENsYXNzKCdybC1ib290ZWQnKTtcblxuXHRcdFx0QXBwLmJvb3RzdGFydCgpO1xuXHRcdH0sIEVudW1zLk1hZ2ljcy5UaW1lMTBtcyk7XG5cdH07XG5cblx0d2luZG93Ll9fQVBQX0JPT1QgPSAoZkVycm9yQ2FsbGJhY2spID0+IHtcblx0XHRkb21SZWFkeSgoKSA9PiB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhaW5sb29wLXRlbXBsYXRlcy1pZCcpKSB7XG5cdFx0XHRcdFx0c3RhcnQoKTtcblx0XHRcdFx0fSBlbHNlIGlmICh3aW5kb3cucmFpbmxvb3BURU1QTEFURVMgJiYgd2luZG93LnJhaW5sb29wVEVNUExBVEVTWzBdKSB7XG5cdFx0XHRcdFx0d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdybC10ZW1wbGF0ZXMnKS5pbm5lckhUTUwgPSB3aW5kb3cucmFpbmxvb3BURU1QTEFURVNbMF07XG5cdFx0XHRcdFx0c3RhcnQoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmRXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0d2luZG93Ll9fQVBQX0JPT1QgPSBudWxsO1xuXHRcdFx0fSwgRW51bXMuTWFnaWNzLlRpbWUxMG1zKTtcblx0XHR9KTtcblx0fTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZVwiKTsiLCJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCIpOyIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyAkaHRtbCwgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBBYnN0cmFjdEFwcFN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLm5ld01vdmVUb0ZvbGRlciA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRjb25zdCBhbmltID0gYk1vYmlsZURldmljZSB8fCAhdmFsdWU7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtYW5pbScsICFhbmltKS50b2dnbGVDbGFzcygnbm8tcmwtYW5pbScsIGFuaW0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5pbnRlcmZhY2VBbmltYXRpb24udmFsdWVIYXNNdXRhdGVkKCk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25Mb2dpbighIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0xhbmd1YWdlc09uTG9naW4nKSk7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dMYW5ndWFnZXNPblNldHRpbmdzJykpO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ05ld01vdmVUb0ZvbGRlcicpKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0ludGVyZmFjZUFuaW1hdGlvbicpKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFwcFN0b3JlLCBBYnN0cmFjdEFwcFN0b3JlIGFzIGRlZmF1bHQgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2tleXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JlZHVjZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcblxuaW1wb3J0IHsgVE9LRU5fRVJST1JfTElNSVQsIEFKQVhfRVJST1JfTElNSVQsIERFRkFVTFRfQUpBWF9USU1FT1VUIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGluQXJyYXksIHBJbnQsIHBTdHJpbmcsIGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGRhdGEgYXMgR2xvYmFsc0RhdGEgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBhamF4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IHJ1bkhvb2sgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBBYnN0cmFjdEFqYXhSZW1vdGUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLm9SZXF1ZXN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXF1ZXN0QWN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVHlwZVxuXHQgKiBAcGFyYW0gez9BamF4SnNvbkRlZmF1bHRSZXNwb25zZX0gb0RhdGFcblx0ICogQHBhcmFtIHtib29sZWFufSBiQ2FjaGVkXG5cdCAqIEBwYXJhbSB7Kj19IG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHQgKi9cblx0ZGVmYXVsdFJlc3BvbnNlKGZDYWxsYmFjaywgc1JlcXVlc3RBY3Rpb24sIHNUeXBlLCBvRGF0YSwgYkNhY2hlZCwgb1JlcXVlc3RQYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgZkNhbGwgPSAoKSA9PiB7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyAhPT0gc1R5cGUgJiYgR2xvYmFsc0RhdGEuYlVubG9hZCkge1xuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLlVubG9hZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlICYmIG9EYXRhICYmICFvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9EYXRhICYmXG5cdFx0XHRcdFx0LTEgPFxuXHRcdFx0XHRcdFx0aW5BcnJheShvRGF0YS5FcnJvckNvZGUsIFtcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkF1dGhFcnJvcixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY2Vzc0Vycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCxcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY291bnROb3RBbGxvd2VkLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uTWFpbFNlcnZlckVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLlVua25vd25FcnJvclxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuaUFqYXhFcnJvckNvdW50ICs9IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0RhdGEgJiYgTm90aWZpY2F0aW9uLkludmFsaWRUb2tlbiA9PT0gb0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCArPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFRPS0VOX0VSUk9SX0xJTUlUIDwgR2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCkge1xuXHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvRGF0YS5DbGVhckF1dGggfHwgb0RhdGEuTG9nb3V0IHx8IEFKQVhfRVJST1JfTElNSVQgPCBHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQpIHtcblx0XHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKSB7XG5cdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKCk7XG5cblx0XHRcdFx0XHRcdGlmICghb0RhdGEuQ2xlYXJBdXRoICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQgPSAwO1xuXHRcdFx0XHRHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0cnVuSG9vaygnYWpheC1kZWZhdWx0LXJlc3BvbnNlJywgW1xuXHRcdFx0XHRzUmVxdWVzdEFjdGlvbixcblx0XHRcdFx0U3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgPyBvRGF0YSA6IG51bGwsXG5cdFx0XHRcdHNUeXBlLFxuXHRcdFx0XHRiQ2FjaGVkLFxuXHRcdFx0XHRvUmVxdWVzdFBhcmFtZXRlcnNcblx0XHRcdF0pO1xuXG5cdFx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRcdGZDYWxsYmFjayhcblx0XHRcdFx0XHRzVHlwZSxcblx0XHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzVHlwZSA/IG9EYXRhIDogbnVsbCxcblx0XHRcdFx0XHRiQ2FjaGVkLFxuXHRcdFx0XHRcdHNSZXF1ZXN0QWN0aW9uLFxuXHRcdFx0XHRcdG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRzd2l0Y2ggKHNUeXBlKSB7XG5cdFx0XHRjYXNlICdzdWNjZXNzJzpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2Fib3J0Jzpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLkVycm9yO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuRXJyb3IgPT09IHNUeXBlKSB7XG5cdFx0XHRfLmRlbGF5KGZDYWxsLCAzMDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmQ2FsbCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZlJlc3VsdENhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gez9udW1iZXI9fSBpVGltZU91dCA9IDIwMDAwXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0dldEFkZCA9ICcnXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQWJvcnRBY3Rpb25zID0gW11cblx0ICogQHJldHVybnMge2pRdWVyeS5qcVhIUn1cblx0ICovXG5cdGFqYXhSZXF1ZXN0KGZSZXN1bHRDYWxsYmFjaywgcGFyYW1zLCBpVGltZU91dCA9IDIwMDAwLCBzR2V0QWRkID0gJycsIGFib3J0QWN0aW9ucyA9IFtdKSB7XG5cdFx0Y29uc3QgaXNQb3N0ID0gJycgPT09IHNHZXRBZGQsXG5cdFx0XHRoZWFkZXJzID0ge30sXG5cdFx0XHRzdGFydCA9IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcblxuXHRcdGxldCBhY3Rpb24gPSAnJztcblxuXHRcdHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblx0XHRhY3Rpb24gPSBwYXJhbXMuQWN0aW9uIHx8ICcnO1xuXG5cdFx0aWYgKGFjdGlvbiAmJiAwIDwgYWJvcnRBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0Xy5lYWNoKGFib3J0QWN0aW9ucywgKGFjdGlvblRvQWJvcnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdKSB7XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uX19hYm9ydGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uYWJvcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdLmFib3J0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzUG9zdCkge1xuXHRcdFx0cGFyYW1zLlhUb2tlbiA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd0b2tlbicpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9EZWZBamF4ID0gJC5hamF4KHtcblx0XHRcdHR5cGU6IGlzUG9zdCA/ICdQT1NUJyA6ICdHRVQnLFxuXHRcdFx0dXJsOiBhamF4KHNHZXRBZGQpLFxuXHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxuXHRcdFx0ZGF0YTogaXNQb3N0ID8gcGFyYW1zIDoge30sXG5cdFx0XHRoZWFkZXJzOiBoZWFkZXJzLFxuXHRcdFx0dGltZW91dDogaVRpbWVPdXQsXG5cdFx0XHRnbG9iYWw6IHRydWVcblx0XHR9KTtcblxuXHRcdG9EZWZBamF4LmFsd2F5cygob0RhdGEsIHNUeXBlKSA9PiB7XG5cdFx0XHRsZXQgY2FjaGVkID0gZmFsc2U7XG5cdFx0XHRpZiAob0RhdGEgJiYgb0RhdGEuVGltZSkge1xuXHRcdFx0XHRjYWNoZWQgPSBwSW50KG9EYXRhLlRpbWUpID4gbmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRGF0YSAmJiBvRGF0YS5VcGRhdGVUb2tlbikge1xuXHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLnNldENsaWVudFNpZGVUb2tlbikge1xuXHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18uc2V0Q2xpZW50U2lkZVRva2VuKG9EYXRhLlVwZGF0ZVRva2VuKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWN0aW9uICYmIHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uX19hYm9ydGVkKSB7XG5cdFx0XHRcdFx0c1R5cGUgPSAnYWJvcnQnO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZGVmYXVsdFJlc3BvbnNlKGZSZXN1bHRDYWxsYmFjaywgYWN0aW9uLCBzVHlwZSwgb0RhdGEsIGNhY2hlZCwgcGFyYW1zKTtcblx0XHR9KTtcblxuXHRcdGlmIChhY3Rpb24gJiYgMCA8IGFib3J0QWN0aW9ucy5sZW5ndGggJiYgLTEgPCBpbkFycmF5KGFjdGlvbiwgYWJvcnRBY3Rpb25zKSkge1xuXHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5fX2Fib3J0ZWQgPSB0cnVlO1xuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5hYm9ydCkge1xuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uYWJvcnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG9EZWZBamF4O1xuXHRcdH1cblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cdFx0b0RlZkFqYXguY2F0Y2goY29uc29sZS5sb2cpO1xuXHRcdHJldHVybiBvRGVmQWpheDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQWN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0PX0gb1BhcmFtZXRlcnNcblx0ICogQHBhcmFtIHs/bnVtYmVyPX0gaVRpbWVvdXRcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzR2V0QWRkID0gJydcblx0ICogQHBhcmFtIHtBcnJheT19IGFBYm9ydEFjdGlvbnMgPSBbXVxuXHQgKi9cblx0ZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCBzQWN0aW9uLCBvUGFyYW1ldGVycywgaVRpbWVvdXQsIHNHZXRBZGQsIGFBYm9ydEFjdGlvbnMpIHtcblx0XHRvUGFyYW1ldGVycyA9IG9QYXJhbWV0ZXJzIHx8IHt9O1xuXHRcdG9QYXJhbWV0ZXJzLkFjdGlvbiA9IHNBY3Rpb247XG5cblx0XHRzR2V0QWRkID0gcFN0cmluZyhzR2V0QWRkKTtcblxuXHRcdHJ1bkhvb2soJ2FqYXgtZGVmYXVsdC1yZXF1ZXN0JywgW3NBY3Rpb24sIG9QYXJhbWV0ZXJzLCBzR2V0QWRkXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5hamF4UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdG9QYXJhbWV0ZXJzLFxuXHRcdFx0aXNVbmQoaVRpbWVvdXQpID8gREVGQVVMVF9BSkFYX1RJTUVPVVQgOiBwSW50KGlUaW1lb3V0KSxcblx0XHRcdHNHZXRBZGQsXG5cdFx0XHRhQWJvcnRBY3Rpb25zXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRub29wKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnTm9vcCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGdldFB1YmxpY0tleShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0dldFB1YmxpY0tleScpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNWZXJzaW9uXG5cdCAqL1xuXHRqc1ZlcnNpb24oZkNhbGxiYWNrLCBzVmVyc2lvbikge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnVmVyc2lvbicsIHtcblx0XHRcdCdWZXJzaW9uJzogc1ZlcnNpb25cblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUsIEFic3RyYWN0QWpheFJlbW90ZSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgVklFV19NT0RFTFMgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBkZWxlZ2F0ZVJ1biwgd2luZG93UmVzaXplLCBsb2csIGlzVW5kLCBwU3RyaW5nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0U2NyZWVuIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RTY3JlZW4nO1xuXG5jbGFzcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGV4dGVuZHMgQWJzdHJhY3RTY3JlZW4ge1xuXHQvKipcblx0ICogQHBhcmFtIHtBcnJheX0gdmlld01vZGVsc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iodmlld01vZGVscykge1xuXHRcdHN1cGVyKCdzZXR0aW5ncycsIHZpZXdNb2RlbHMpO1xuXG5cdFx0dGhpcy5tZW51ID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBudWxsO1xuXHRcdHRoaXMub1ZpZXdNb2RlbFBsYWNlID0gbnVsbDtcblxuXHRcdHRoaXMuc2V0dXBTZXR0aW5ncygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmQ2FsbGJhY2tcblx0ICovXG5cdHNldHVwU2V0dGluZ3MoZkNhbGxiYWNrID0gbnVsbCkge1xuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjaygpO1xuXHRcdH1cblx0fVxuXG5cdG9uUm91dGUoc3ViTmFtZSkge1xuXHRcdGxldCBzZXR0aW5nc1NjcmVlbiA9IG51bGwsXG5cdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxQbGFjZSA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwgPSBfLmZpbmQoXG5cdFx0XHRWSUVXX01PREVMUy5zZXR0aW5ncyxcblx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0U2V0dGluZ3NWaWV3TW9kZWwgJiYgU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YSAmJiBzdWJOYW1lID09PSBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhLlJvdXRlXG5cdFx0KTtcblxuXHRcdGlmIChSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLXJlbW92ZWQnXSxcblx0XHRcdFx0XHQoRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRcdERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gUm91dGVkU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCAmJlxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLWRpc2FibGVkJ10sXG5cdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+XG5cdFx0XHRcdFx0XHREaXNhYmxlZFNldHRpbmdzVmlld01vZGVsICYmIERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgPT09IFJvdXRlZFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFJvdXRlZFNldHRpbmdzVmlld01vZGVsKSB7XG5cdFx0XHRpZiAoUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19idWlsZGVkICYmIFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0pIHtcblx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gPSBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX3ZtO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmlld01vZGVsUGxhY2UgPSB0aGlzLm9WaWV3TW9kZWxQbGFjZTtcblx0XHRcdFx0aWYgKHZpZXdNb2RlbFBsYWNlICYmIDEgPT09IHZpZXdNb2RlbFBsYWNlLmxlbmd0aCkge1xuXHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuID0gbmV3IFJvdXRlZFNldHRpbmdzVmlld01vZGVsKCk7XG5cblx0XHRcdFx0XHR2aWV3TW9kZWxEb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3JsLXNldHRpbmdzLXZpZXctbW9kZWwnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKTtcblx0XHRcdFx0XHR2aWV3TW9kZWxEb20uYXBwZW5kVG8odmlld01vZGVsUGxhY2UpO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4udmlld01vZGVsRG9tID0gdmlld01vZGVsRG9tO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4uX19ybFNldHRpbmdzRGF0YSA9IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGE7XG5cblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2RvbSA9IHZpZXdNb2RlbERvbTtcblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2J1aWxkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdGNvbnN0IHRtcGwgPSB7IG5hbWU6IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuVGVtcGxhdGUgfTtcblx0XHRcdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdFx0XHR2aWV3TW9kZWxEb21bMF0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRyYW5zbGF0b3JJbml0OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZTogKCkgPT4gdG1wbFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHNldHRpbmdzU2NyZWVuLCAnb25CdWlsZCcsIFt2aWV3TW9kZWxEb21dKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsb2coJ0Nhbm5vdCBmaW5kIHN1YiBzZXR0aW5ncyB2aWV3IG1vZGVsIHBvc2l0aW9uOiBTZXR0aW5nc1N1YlNjcmVlbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5nc1NjcmVlbikge1xuXHRcdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0XHQvLyBoaWRlXG5cdFx0XHRcdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4pIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdC8vIHNob3dcblx0XHRcdFx0XHRpZiAodGhpcy5vQ3VycmVudFN1YlNjcmVlbikge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uQmVmb3JlU2hvdycpO1xuXHRcdFx0XHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20uc2hvdygpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXG5cdFx0XHRcdFx0XHRfLmVhY2godGhpcy5tZW51KCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uc2VsZWN0ZWQoXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gJiZcblx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0ucm91dGUgPT09IHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEuUm91dGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHQkKCcjcmwtY29udGVudCAuYi1zZXR0aW5ncyAuYi1jb250ZW50IC5jb250ZW50Jykuc2Nyb2xsVG9wKDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdFx0d2luZG93UmVzaXplKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRIYXNoKHNldHRpbmdzKCksIGZhbHNlLCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gJiYgdGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20pIHtcblx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZWFjaChWSUVXX01PREVMUy5zZXR0aW5ncywgKFNldHRpbmdzVmlld01vZGVsKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsICYmXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0IV8uZmluZChcblx0XHRcdFx0XHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLFxuXHRcdFx0XHRcdChSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCkgPT4gUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgJiYgUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgPT09IFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLm1lbnUucHVzaCh7XG5cdFx0XHRcdFx0cm91dGU6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUsXG5cdFx0XHRcdFx0bGFiZWw6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuTGFiZWwsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGtvLm9ic2VydmFibGUoZmFsc2UpLFxuXHRcdFx0XHRcdGRpc2FibGVkOiAhIV8uZmluZChcblx0XHRcdFx0XHRcdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1kaXNhYmxlZCddLFxuXHRcdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+IERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5vVmlld01vZGVsUGxhY2UgPSAkKCcjcmwtY29udGVudCAjcmwtc2V0dGluZ3Mtc3Vic2NyZWVuJyk7XG5cdH1cblxuXHRyb3V0ZXMoKSB7XG5cdFx0Y29uc3QgRGVmYXVsdFZpZXdNb2RlbCA9IF8uZmluZChcblx0XHRcdFx0VklFV19NT0RFTFMuc2V0dGluZ3MsXG5cdFx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhICYmIFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuSXNEZWZhdWx0XG5cdFx0XHQpLFxuXHRcdFx0ZGVmYXVsdFJvdXRlID1cblx0XHRcdFx0RGVmYXVsdFZpZXdNb2RlbCAmJiBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgPyBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUgOiAnZ2VuZXJhbCcsXG5cdFx0XHRydWxlcyA9IHtcblx0XHRcdFx0c3VibmFtZTogL14oLiopJC8sXG5cdFx0XHRcdG5vcm1hbGl6ZV86IChycXVlc3QsIHZhbHMpID0+IHtcblx0XHRcdFx0XHR2YWxzLnN1Ym5hbWUgPSBpc1VuZCh2YWxzLnN1Ym5hbWUpID8gZGVmYXVsdFJvdXRlIDogcFN0cmluZyh2YWxzLnN1Ym5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBbdmFscy5zdWJuYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHRbJ3tzdWJuYW1lfS8nLCBydWxlc10sXG5cdFx0XHRbJ3tzdWJuYW1lfScsIHJ1bGVzXSxcblx0XHRcdFsnJywgcnVsZXNdXG5cdFx0XTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuLCBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IHNzbSBmcm9tICdzc20nO1xuXG5pbXBvcnQge1xuXHQkd2luLFxuXHQkaHRtbCxcblx0JGRvYyxcblx0bGVmdFBhbmVsRGlzYWJsZWQsXG5cdGxlZnRQYW5lbFR5cGUsXG5cdHNVc2VyQWdlbnQsXG5cdGJNb2JpbGVEZXZpY2UsXG5cdGJBbmltYXRpb25TdXBwb3J0ZWRcbn0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgeyBpc05vcm1hbCwgcFN0cmluZywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5LCB3aW5kb3dSZXNpemVDYWxsYmFjayB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IEtleVN0YXRlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcm9vdCwgcm9vdEFkbWluLCByb290VXNlciwgcG9wdWxhdGVBdXRoU3VmZml4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlLCBpbml0Tm90aWZpY2F0aW9uTGFuZ3VhZ2UgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IExhbmd1YWdlU3RvcmUgZnJvbSAnU3RvcmVzL0xhbmd1YWdlJztcbmltcG9ydCBUaGVtZVN0b3JlIGZyb20gJ1N0b3Jlcy9UaGVtZSc7XG5pbXBvcnQgU29jaWFsU3RvcmUgZnJvbSAnU3RvcmVzL1NvY2lhbCc7XG5cbmltcG9ydCB7IHJvdXRlT2ZmLCBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RCb290IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RCb290JztcblxuY2xhc3MgQWJzdHJhY3RBcHAgZXh0ZW5kcyBBYnN0cmFjdEJvb3Qge1xuXHQvKipcblx0ICogQHBhcmFtIHtSZW1vdGVTdG9yYWdlfEFkbWluUmVtb3RlU3RvcmFnZX0gUmVtb3RlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUgPSBudWxsO1xuXHRcdHRoaXMuaXNMb2NhbEF1dG9jb21wbGV0ZSA9IHRydWU7XG5cdFx0dGhpcy5pZnJhbWUgPSBudWxsO1xuXHRcdHRoaXMubGFzdEVycm9yVGltZSA9IDA7XG5cblx0XHR0aGlzLmlmcmFtZSA9ICQoJzxpZnJhbWUgY2xhc3M9XCJpbnRlcm5hbC1oaWRkZGVuXCIgLz4nKS5hcHBlbmRUbygnYm9keScpO1xuXG5cdFx0JHdpbi5vbigncmVzaXplJywgKCkgPT4ge1xuXHRcdFx0RXZlbnRzLnB1Yignd2luZG93LnJlc2l6ZScpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yihcblx0XHRcdCd3aW5kb3cucmVzaXplJyxcblx0XHRcdF8udGhyb3R0bGUoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpSCA9ICR3aW4uaGVpZ2h0KCksXG5cdFx0XHRcdFx0aVcgPSAkd2luLmhlaWdodCgpO1xuXG5cdFx0XHRcdGlmICgkd2luLl9fc2l6ZXNbMF0gIT09IGlIIHx8ICR3aW4uX19zaXplc1sxXSAhPT0gaVcpIHtcblx0XHRcdFx0XHQkd2luLl9fc2l6ZXNbMF0gPSBpSDtcblx0XHRcdFx0XHQkd2luLl9fc2l6ZXNbMV0gPSBpVztcblxuXHRcdFx0XHRcdEV2ZW50cy5wdWIoJ3dpbmRvdy5yZXNpemUucmVhbCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwbXMpXG5cdFx0KTtcblxuXHRcdC8vIERFQlVHXG5cdFx0Ly9cdFx0RXZlbnRzLnN1Yih7XG5cdFx0Ly9cdFx0XHQnd2luZG93LnJlc2l6ZSc6IGZ1bmN0aW9uKCkge1xuXHRcdC8vXHRcdFx0XHR3aW5kb3cuY29uc29sZS5sb2coJ3dpbmRvdy5yZXNpemUnKTtcblx0XHQvL1x0XHRcdH0sXG5cdFx0Ly9cdFx0XHQnd2luZG93LnJlc2l6ZS5yZWFsJzogZnVuY3Rpb24oKSB7XG5cdFx0Ly9cdFx0XHRcdHdpbmRvdy5jb25zb2xlLmxvZygnd2luZG93LnJlc2l6ZS5yZWFsJyk7XG5cdFx0Ly9cdFx0XHR9XG5cdFx0Ly9cdFx0fSk7XG5cblx0XHQkZG9jXG5cdFx0XHQub24oJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdrZXl1cCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQgJiYgIWV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdCRkb2Mub24oXG5cdFx0XHQnbW91c2Vtb3ZlIGtleXByZXNzIGNsaWNrJyxcblx0XHRcdF8uZGVib3VuY2UoKCkgPT4ge1xuXHRcdFx0XHRFdmVudHMucHViKCdybC5hdXRvLWxvZ291dC1yZWZyZXNoJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTVzKVxuXHRcdCk7XG5cblx0XHRrZXkoJ2VzYywgZW50ZXInLCBLZXlTdGF0ZS5BbGwsICgpID0+IHtcblx0XHRcdGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cmVtb3RlKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZGF0YSgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbihuYW1lLCBkZWZhdWx0Xykge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbltuYW1lXSB8fCBkZWZhdWx0Xztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGlua1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGRvd25sb2FkKGxpbmspIHtcblx0XHRpZiAoc1VzZXJBZ2VudCAmJiAoLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ2Nocm9tZScpIHx8IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKSkpIHtcblx0XHRcdGNvbnN0IG9MaW5rID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdG9MaW5rLmhyZWYgPSBsaW5rO1xuXG5cdFx0XHRpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudCkge1xuXHRcdFx0XHRjb25zdCBvRSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudC5Nb3VzZUV2ZW50cztcblx0XHRcdFx0aWYgKG9FICYmIG9FLmluaXRFdmVudCAmJiBvTGluay5kaXNwYXRjaEV2ZW50KSB7XG5cdFx0XHRcdFx0b0UuaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdG9MaW5rLmRpc3BhdGNoRXZlbnQob0UpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdHdpbmRvdy5vcGVuKGxpbmssICdfc2VsZicpO1xuXHRcdFx0d2luZG93LmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaWZyYW1lLmF0dHIoJ3NyYycsIGxpbmspO1xuXHRcdFx0Ly8gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBsaW5rO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Z29vZ2xlUHJldmlld1N1cHBvcnRlZCgpIHtcblx0XHRpZiAobnVsbCA9PT0gdGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUpIHtcblx0XHRcdHRoaXMuZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlID1cblx0XHRcdFx0ISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWwnKSAmJiAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbFByZXZpZXcnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGU7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlXG5cdCAqL1xuXHRzZXRXaW5kb3dUaXRsZSh0aXRsZSkge1xuXHRcdHRpdGxlID0gaXNOb3JtYWwodGl0bGUpICYmIDAgPCB0aXRsZS5sZW5ndGggPyAnJyArIHRpdGxlIDogJyc7XG5cdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpKSB7XG5cdFx0XHR0aXRsZSArPSAodGl0bGUgPyAnIC0gJyA6ICcnKSArIFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpO1xuXHRcdH1cblxuXHRcdHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlICsgJyAuLi4nO1xuXHRcdHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlO1xuXHR9XG5cblx0cmVkaXJlY3RUb0FkbWluUGFuZWwoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJvb3RBZG1pbigpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHR9XG5cblx0Y2xlYXJDbGllbnRTaWRlVG9rZW4oKSB7XG5cdFx0aWYgKHdpbmRvdy5fX3JsYWhfY2xlYXIpIHtcblx0XHRcdHdpbmRvdy5fX3JsYWhfY2xlYXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG5cdCAqL1xuXHRzZXRDbGllbnRTaWRlVG9rZW4odG9rZW4pIHtcblx0XHRpZiAod2luZG93Ll9fcmxhaF9zZXQpIHtcblx0XHRcdHdpbmRvdy5fX3JsYWhfc2V0KHRva2VuKTtcblxuXHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ0F1dGhBY2NvdW50SGFzaCcsIHRva2VuKTtcblx0XHRcdHBvcHVsYXRlQXV0aFN1ZmZpeCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBhZG1pbiA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGxvZ291dCA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGNsb3NlID0gZmFsc2Vcblx0ICovXG5cdGxvZ2luQW5kTG9nb3V0UmVsb2FkKGFkbWluID0gZmFsc2UsIGxvZ291dCA9IGZhbHNlLCBjbG9zZSA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5JZnJhbWUgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdpbklmcmFtZScpO1xuXHRcdGxldCBjdXN0b21Mb2dvdXRMaW5rID0gcFN0cmluZyhTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnY3VzdG9tTG9nb3V0TGluaycpKTtcblxuXHRcdGlmIChsb2dvdXQpIHtcblx0XHRcdHRoaXMuY2xlYXJDbGllbnRTaWRlVG9rZW4oKTtcblx0XHR9XG5cblx0XHRpZiAobG9nb3V0ICYmIGNsb3NlICYmIHdpbmRvdy5jbG9zZSkge1xuXHRcdFx0d2luZG93LmNsb3NlKCk7XG5cdFx0fVxuXG5cdFx0Y3VzdG9tTG9nb3V0TGluayA9IGN1c3RvbUxvZ291dExpbmsgfHwgKGFkbWluID8gcm9vdEFkbWluKCkgOiByb290VXNlcigpKTtcblxuXHRcdGlmIChsb2dvdXQgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgIT09IGN1c3RvbUxvZ291dExpbmspIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5JZnJhbWUgJiYgd2luZG93LnBhcmVudCkge1xuXHRcdFx0XHRcdHdpbmRvdy5wYXJlbnQubG9jYXRpb24uaHJlZiA9IGN1c3RvbUxvZ291dExpbms7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSBjdXN0b21Mb2dvdXRMaW5rO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5JZnJhbWUgJiYgd2luZG93LnBhcmVudCkge1xuXHRcdFx0XHRcdHdpbmRvdy5wYXJlbnQubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRoaXN0b3J5QmFjaygpIHtcblx0XHR3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG5cdH1cblxuXHRib290c3RhcnQoKSB7XG5cdFx0Ly8gbG9nKCdQcycgKyAnc3MsIGhhYycgKyAna2VycyEgVGhlJyArICdyZVxcJ3Mgbm90JyArICdoaW5nIGludGUnICsgJ3Jlc3RpbmcgOicgKyAnKScpO1xuXG5cdFx0RXZlbnRzLnB1YigncmwuYm9vdHN0YXJ0Jyk7XG5cblx0XHRjb25zdCBtb2JpbGUgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdTYXZlVHJpZ2dlcicsIHJlcXVpcmUoJ0NvbXBvbmVudC9TYXZlVHJpZ2dlcicpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0lucHV0JywgcmVxdWlyZSgnQ29tcG9uZW50L0lucHV0JykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignU2VsZWN0JywgcmVxdWlyZSgnQ29tcG9uZW50L1NlbGVjdCcpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ1JhZGlvJywgcmVxdWlyZSgnQ29tcG9uZW50L1JhZGlvJykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignVGV4dEFyZWEnLCByZXF1aXJlKCdDb21wb25lbnQvVGV4dEFyZWEnKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdEYXRlJywgcmVxdWlyZSgnQ29tcG9uZW50L0RhdGUnKS5kZWZhdWx0KTtcblxuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3gtc2NyaXB0JywgcmVxdWlyZSgnQ29tcG9uZW50L1NjcmlwdCcpLmRlZmF1bHQpO1xuXHRcdC8vIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3N2Zy1pY29uJywgcmVxdWlyZSgnQ29tcG9uZW50L1N2Z0ljb24nKS5kZWZhdWx0KTtcblxuXHRcdGlmIChTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbWF0ZXJpYWxEZXNpZ24nKSAmJiBiQW5pbWF0aW9uU3VwcG9ydGVkKSB7XG5cdFx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9NYXRlcmlhbERlc2lnbi9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvQ2xhc3NpYy9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2xhc3NpYy9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94U2ltcGxlJywgcmVxdWlyZSgnQ29tcG9uZW50L0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0fVxuXG5cdFx0aW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UoaW5pdE5vdGlmaWNhdGlvbkxhbmd1YWdlKTtcblxuXHRcdF8uZGVsYXkod2luZG93UmVzaXplQ2FsbGJhY2ssIE1hZ2ljcy5UaW1lMXMpO1xuXG5cdFx0RXZlbnRzLnN1Yignc3NtLm1vYmlsZS1lbnRlcicsICgpID0+IHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yignc3NtLm1vYmlsZS1sZWF2ZScsICgpID0+IHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdGlmICghbW9iaWxlKSB7XG5cdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtZGVza3RvcCcpO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ21vYmlsZScsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1heC13aWR0aDogNzY3cHgpJyxcblx0XHRcdFx0b25FbnRlcjogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtbW9iaWxlJyk7XG5cdFx0XHRcdFx0RXZlbnRzLnB1Yignc3NtLm1vYmlsZS1lbnRlcicpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkxlYXZlOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKTtcblx0XHRcdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWxlYXZlJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ3RhYmxldCcsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTlweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS10YWJsZXQnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtdGFibGV0Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ2Rlc2t0b3AnLFxuXHRcdFx0XHRxdWVyeTogJyhtaW4td2lkdGg6IDEwMDBweCkgYW5kIChtYXgtd2lkdGg6IDE0MDBweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1kZXNrdG9wJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTGVhdmU6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNzbS5hZGRTdGF0ZSh7XG5cdFx0XHRcdGlkOiAnZGVza3RvcC1sYXJnZScsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogMTQwMXB4KScsXG5cdFx0XHRcdG9uRW50ZXI6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AtbGFyZ2UnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtZGVza3RvcC1sYXJnZScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKS5hZGRDbGFzcygncmwtbW9iaWxlJyk7XG5cdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWVudGVyJyk7XG5cdFx0fVxuXG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQuc3Vic2NyaWJlKChiVmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLWRpc2FibGVkJywgYlZhbHVlKTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLWVuYWJsZWQnLCAhYlZhbHVlKTtcblx0XHR9KTtcblxuXHRcdGxlZnRQYW5lbFR5cGUuc3Vic2NyaWJlKChzVmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLW5vbmUnLCAnbm9uZScgPT09IHNWYWx1ZSk7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbGVmdC1wYW5lbC1zaG9ydCcsICdzaG9ydCcgPT09IHNWYWx1ZSk7XG5cdFx0fSk7XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZC52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdExhbmd1YWdlU3RvcmUucG9wdWxhdGUoKTtcblx0XHRUaGVtZVN0b3JlLnBvcHVsYXRlKCk7XG5cdFx0U29jaWFsU3RvcmUucG9wdWxhdGUoKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFwcCwgQWJzdHJhY3RBcHAgYXMgZGVmYXVsdCB9O1xuIiwiZXhwb3J0IGNsYXNzIEFic3RyYWN0Qm9vdCB7XG5cdGJvb3RzdGFydCgpIHtcblx0XHQvKiBuby1lbXB0eSAqL1xuXHR9XG59XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0UmFkaW8gZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy52YWx1ZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZTtcblx0XHRpZiAoaXNVbmQodGhpcy52YWx1ZSkgfHwgIXRoaXMudmFsdWUuc3Vic2NyaWJlKSB7XG5cdFx0XHR0aGlzLnZhbHVlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5pbmxpbmUgPSBpc1VuZChwYXJhbXMuaW5saW5lKSA/IGZhbHNlIDogcGFyYW1zLmlubGluZTtcblx0XHR0aGlzLnJlYWRPbmx5ID0gaXNVbmQocGFyYW1zLnJlYWRPbmx5KSA/IGZhbHNlIDogISFwYXJhbXMucmVhZE9ubHk7XG5cblx0XHRpZiAocGFyYW1zLnZhbHVlcykge1xuXHRcdFx0dGhpcy52YWx1ZXMoXy5tYXAocGFyYW1zLnZhbHVlcywgKGxhYmVsLCB2YWx1ZSkgPT4gKHsgbGFiZWw6IGxhYmVsLCB2YWx1ZTogdmFsdWUgfSkpKTtcblx0XHR9XG5cblx0XHR0aGlzLmNsaWNrID0gXy5iaW5kKHRoaXMuY2xpY2ssIHRoaXMpO1xuXHR9XG5cblx0Y2xpY2sodmFsdWUpIHtcblx0XHRpZiAoIXRoaXMucmVhZE9ubHkgJiYgdmFsdWUpIHtcblx0XHRcdHRoaXMudmFsdWUodmFsdWUudmFsdWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFJhZGlvLCBBYnN0cmFjdFJhZGlvIGFzIGRlZmF1bHQgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uva2V5c1wiKTsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNVbmQsIHBJbnQsIGZyaWVuZGx5U2l6ZSwgbWltZUNvbnRlbnRUeXBlLCBnZXRGaWxlRXh0ZW5zaW9uIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgc3RhdGljSWNvbkNsYXNzLCBzdGF0aWNGaWxlVHlwZSB9IGZyb20gJ01vZGVsL0F0dGFjaG1lbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3RNb2RlbCB9IGZyb20gJ0tub2luL0Fic3RyYWN0TW9kZWwnO1xuXG5jbGFzcyBDb21wb3NlQXR0YWNobWVudE1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG5cdCAqIEBwYXJhbSB7P251bWJlcj19IHNpemUgPSBudWxsXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzSW5saW5lID0gZmFsc2Vcblx0ICogQHBhcmFtIHtib29sZWFuPX0gaXNMaW5rZWQgPSBmYWxzZVxuXHQgKiBAcGFyYW0ge3N0cmluZz19IENJRCA9ICcnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gY29udGVudExvY2F0aW9uID0gJydcblx0ICovXG5cdGNvbnN0cnVjdG9yKGlkLCBmaWxlTmFtZSwgc2l6ZSA9IG51bGwsIGlzSW5saW5lID0gZmFsc2UsIGlzTGlua2VkID0gZmFsc2UsIENJRCA9ICcnLCBjb250ZW50TG9jYXRpb24gPSAnJykge1xuXHRcdHN1cGVyKCdDb21wb3NlQXR0YWNobWVudE1vZGVsJyk7XG5cblx0XHR0aGlzLmlkID0gaWQ7XG5cdFx0dGhpcy5pc0lubGluZSA9ICEhaXNJbmxpbmU7XG5cdFx0dGhpcy5pc0xpbmtlZCA9ICEhaXNMaW5rZWQ7XG5cdFx0dGhpcy5DSUQgPSBDSUQ7XG5cdFx0dGhpcy5jb250ZW50TG9jYXRpb24gPSBjb250ZW50TG9jYXRpb247XG5cdFx0dGhpcy5mcm9tTWVzc2FnZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy5maWxlTmFtZSA9IGtvLm9ic2VydmFibGUoZmlsZU5hbWUpO1xuXHRcdHRoaXMuc2l6ZSA9IGtvLm9ic2VydmFibGUoc2l6ZSk7XG5cdFx0dGhpcy50ZW1wTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5wcm9ncmVzcyA9IGtvLm9ic2VydmFibGUoMCk7XG5cdFx0dGhpcy5lcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMud2FpdGluZyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy51cGxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuY29tcGxldGUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMucHJvZ3Jlc3NUZXh0ID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgcCA9IHRoaXMucHJvZ3Jlc3MoKTtcblx0XHRcdHJldHVybiAwID09PSBwID8gJycgOiAnJyArICg5OCA8IHAgPyAxMDAgOiBwKSArICclJztcblx0XHR9KTtcblxuXHRcdHRoaXMucHJvZ3Jlc3NTdHlsZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHAgPSB0aGlzLnByb2dyZXNzKCk7XG5cdFx0XHRyZXR1cm4gMCA9PT0gcCA/ICcnIDogJ3dpZHRoOicgKyAoOTggPCBwID8gMTAwIDogcCkgKyAnJSc7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnRpdGxlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZXJyb3IgPSB0aGlzLmVycm9yKCk7XG5cdFx0XHRyZXR1cm4gJycgIT09IGVycm9yID8gZXJyb3IgOiB0aGlzLmZpbGVOYW1lKCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmZyaWVuZGx5U2l6ZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGxvY2FsU2l6ZSA9IHRoaXMuc2l6ZSgpO1xuXHRcdFx0cmV0dXJuIG51bGwgPT09IGxvY2FsU2l6ZSA/ICcnIDogZnJpZW5kbHlTaXplKGxvY2FsU2l6ZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1pbWVUeXBlID0ga28uY29tcHV0ZWQoKCkgPT4gbWltZUNvbnRlbnRUeXBlKHRoaXMuZmlsZU5hbWUoKSkpO1xuXHRcdHRoaXMuZmlsZUV4dCA9IGtvLmNvbXB1dGVkKCgpID0+IGdldEZpbGVFeHRlbnNpb24odGhpcy5maWxlTmFtZSgpKSk7XG5cblx0XHR0aGlzLnJlZ0Rpc3Bvc2FibGVzKFtcblx0XHRcdHRoaXMucHJvZ3Jlc3NUZXh0LFxuXHRcdFx0dGhpcy5wcm9ncmVzc1N0eWxlLFxuXHRcdFx0dGhpcy50aXRsZSxcblx0XHRcdHRoaXMuZnJpZW5kbHlTaXplLFxuXHRcdFx0dGhpcy5taW1lVHlwZSxcblx0XHRcdHRoaXMuZmlsZUV4dFxuXHRcdF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QWpheEpzb25Db21wb3NlQXR0YWNobWVudH0ganNvblxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGluaXRCeVVwbG9hZEpzb24oanNvbikge1xuXHRcdGxldCBiUmVzdWx0ID0gZmFsc2U7XG5cdFx0aWYgKGpzb24pIHtcblx0XHRcdHRoaXMuZmlsZU5hbWUoanNvbi5OYW1lKTtcblx0XHRcdHRoaXMuc2l6ZShpc1VuZChqc29uLlNpemUpID8gMCA6IHBJbnQoanNvbi5TaXplKSk7XG5cdFx0XHR0aGlzLnRlbXBOYW1lKGlzVW5kKGpzb24uVGVtcE5hbWUpID8gJycgOiBqc29uLlRlbXBOYW1lKTtcblx0XHRcdHRoaXMuaXNJbmxpbmUgPSBmYWxzZTtcblxuXHRcdFx0YlJlc3VsdCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGJSZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGljb25DbGFzcygpIHtcblx0XHRyZXR1cm4gc3RhdGljSWNvbkNsYXNzKHN0YXRpY0ZpbGVUeXBlKHRoaXMuZmlsZUV4dCgpLCB0aGlzLm1pbWVUeXBlKCkpKVswXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0aWNvblRleHQoKSB7XG5cdFx0cmV0dXJuIHN0YXRpY0ljb25DbGFzcyhzdGF0aWNGaWxlVHlwZSh0aGlzLmZpbGVFeHQoKSwgdGhpcy5taW1lVHlwZSgpKSlbMV07XG5cdH1cbn1cblxuZXhwb3J0IHsgQ29tcG9zZUF0dGFjaG1lbnRNb2RlbCwgQ29tcG9zZUF0dGFjaG1lbnRNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBDb250YWN0UHJvcGVydHlUeXBlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBJbnQsIHBTdHJpbmcgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgQWJzdHJhY3RNb2RlbCB9IGZyb20gJ0tub2luL0Fic3RyYWN0TW9kZWwnO1xuXG5jbGFzcyBDb250YWN0UHJvcGVydHlNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwge1xuXHQvKipcblx0ICogQHBhcmFtIHtudW1iZXI9fSB0eXBlID0gRW51bXMuQ29udGFjdFByb3BlcnR5VHlwZS5Vbmtub3duXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gdHlwZVN0ciA9ICcnXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gdmFsdWUgPSAnJ1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBmb2N1c2VkID0gZmFsc2Vcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBwbGFjZWhvbGRlciA9ICcnXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih0eXBlID0gQ29udGFjdFByb3BlcnR5VHlwZS5Vbmtub3duLCB0eXBlU3RyID0gJycsIHZhbHVlID0gJycsIGZvY3VzZWQgPSBmYWxzZSwgcGxhY2Vob2xkZXIgPSAnJykge1xuXHRcdHN1cGVyKCdDb250YWN0UHJvcGVydHlNb2RlbCcpO1xuXG5cdFx0dGhpcy50eXBlID0ga28ub2JzZXJ2YWJsZShwSW50KHR5cGUpKTtcblx0XHR0aGlzLnR5cGVTdHIgPSBrby5vYnNlcnZhYmxlKHBTdHJpbmcodHlwZVN0cikpO1xuXHRcdHRoaXMuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoISFmb2N1c2VkKTtcblx0XHR0aGlzLnZhbHVlID0ga28ub2JzZXJ2YWJsZShwU3RyaW5nKHZhbHVlKSk7XG5cblx0XHR0aGlzLnBsYWNlaG9sZGVyID0ga28ub2JzZXJ2YWJsZShwbGFjZWhvbGRlcik7XG5cblx0XHR0aGlzLnBsYWNlaG9sZGVyVmFsdWUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCB2ID0gdGhpcy5wbGFjZWhvbGRlcigpO1xuXHRcdFx0cmV0dXJuIHYgPyBpMThuKHYpIDogJyc7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmxhcmdlVmFsdWUgPSBrby5jb21wdXRlZCgoKSA9PiBDb250YWN0UHJvcGVydHlUeXBlLk5vdGUgPT09IHRoaXMudHlwZSgpKTtcblxuXHRcdHRoaXMucmVnRGlzcG9zYWJsZXMoW3RoaXMucGxhY2Vob2xkZXJWYWx1ZSwgdGhpcy5sYXJnZVZhbHVlXSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQ29udGFjdFByb3BlcnR5TW9kZWwsIENvbnRhY3RQcm9wZXJ0eU1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc2VhcmNoJywgMSwgZnVuY3Rpb24gKFNFQVJDSCwgbmF0aXZlU2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgc2VhcmNoZXIgPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gc2VhcmNoZXIgIT09IHVuZGVmaW5lZCA/IHNlYXJjaGVyLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlU2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG5cbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IFVOVVNFRF9PUFRJT05fVkFMVUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IGZvbGRlckxpc3RPcHRpb25zQnVpbGRlciwgbm9vcCwgZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlLCBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBwb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvRm9sZGVyU3lzdGVtJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0ZvbGRlclN5c3RlbSdcbn0pXG5jbGFzcyBGb2xkZXJTeXN0ZW1Qb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuc0Nob29zZU9uVGV4dCA9ICcnO1xuXHRcdHRoaXMuc1VudXNlVGV4dCA9ICcnO1xuXG5cdFx0aW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UoKCkgPT4ge1xuXHRcdFx0dGhpcy5zQ2hvb3NlT25UZXh0ID0gaTE4bignUE9QVVBTX1NZU1RFTV9GT0xERVJTL1NFTEVDVF9DSE9PU0VfT05FJyk7XG5cdFx0XHR0aGlzLnNVbnVzZVRleHQgPSBpMThuKCdQT1BVUFNfU1lTVEVNX0ZPTERFUlMvU0VMRUNUX1VOVVNFX05BTUUnKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubm90aWZpY2F0aW9uID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmZvbGRlclNlbGVjdExpc3QgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Zm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFxuXHRcdFx0XHRbXSxcblx0XHRcdFx0Rm9sZGVyU3RvcmUuZm9sZGVyTGlzdCgpLFxuXHRcdFx0XHRGb2xkZXJTdG9yZS5mb2xkZXJMaXN0U3lzdGVtTmFtZXMoKSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdFsnJywgdGhpcy5zQ2hvb3NlT25UZXh0XSxcblx0XHRcdFx0XHRbVU5VU0VEX09QVElPTl9WQUxVRSwgdGhpcy5zVW51c2VUZXh0XVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdHRoaXMuc2VudEZvbGRlciA9IEZvbGRlclN0b3JlLnNlbnRGb2xkZXI7XG5cdFx0dGhpcy5kcmFmdEZvbGRlciA9IEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyO1xuXHRcdHRoaXMuc3BhbUZvbGRlciA9IEZvbGRlclN0b3JlLnNwYW1Gb2xkZXI7XG5cdFx0dGhpcy50cmFzaEZvbGRlciA9IEZvbGRlclN0b3JlLnRyYXNoRm9sZGVyO1xuXHRcdHRoaXMuYXJjaGl2ZUZvbGRlciA9IEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXI7XG5cblx0XHRjb25zdCBmU2V0U3lzdGVtRm9sZGVycyA9ICgpID0+IHtcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ1NlbnRGb2xkZXInLCBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyKCkpO1xuXHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc1NldCgnRHJhZnRGb2xkZXInLCBGb2xkZXJTdG9yZS5kcmFmdEZvbGRlcigpKTtcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ1NwYW1Gb2xkZXInLCBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCkpO1xuXHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc1NldCgnVHJhc2hGb2xkZXInLCBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcigpKTtcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ0FyY2hpdmVGb2xkZXInLCBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKCkpO1xuXHRcdFx0fSxcblx0XHRcdGZTYXZlU3lzdGVtRm9sZGVycyA9IF8uZGVib3VuY2UoKCkgPT4ge1xuXHRcdFx0XHRmU2V0U3lzdGVtRm9sZGVycygpO1xuXHRcdFx0XHRSZW1vdGUuc2F2ZVN5c3RlbUZvbGRlcnMobm9vcCwge1xuXHRcdFx0XHRcdFNlbnRGb2xkZXI6IEZvbGRlclN0b3JlLnNlbnRGb2xkZXIoKSxcblx0XHRcdFx0XHREcmFmdEZvbGRlcjogRm9sZGVyU3RvcmUuZHJhZnRGb2xkZXIoKSxcblx0XHRcdFx0XHRTcGFtRm9sZGVyOiBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCksXG5cdFx0XHRcdFx0VHJhc2hGb2xkZXI6IEZvbGRlclN0b3JlLnRyYXNoRm9sZGVyKCksXG5cdFx0XHRcdFx0QXJjaGl2ZUZvbGRlcjogRm9sZGVyU3RvcmUuYXJjaGl2ZUZvbGRlcigpLFxuXHRcdFx0XHRcdE51bGxGb2xkZXI6ICdOdWxsRm9sZGVyJ1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMXMpLFxuXHRcdFx0ZkNhbGxiYWNrID0gKCkgPT4ge1xuXHRcdFx0XHRmU2V0U3lzdGVtRm9sZGVycygpO1xuXHRcdFx0XHRmU2F2ZVN5c3RlbUZvbGRlcnMoKTtcblx0XHRcdH07XG5cblx0XHRGb2xkZXJTdG9yZS5zZW50Rm9sZGVyLnN1YnNjcmliZShmQ2FsbGJhY2spO1xuXHRcdEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyLnN1YnNjcmliZShmQ2FsbGJhY2spO1xuXHRcdEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIuc3Vic2NyaWJlKGZDYWxsYmFjayk7XG5cdFx0Rm9sZGVyU3RvcmUudHJhc2hGb2xkZXIuc3Vic2NyaWJlKGZDYWxsYmFjayk7XG5cdFx0Rm9sZGVyU3RvcmUuYXJjaGl2ZUZvbGRlci5zdWJzY3JpYmUoZkNhbGxiYWNrKTtcblxuXHRcdHRoaXMuZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyID0gZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7bnVtYmVyPX0gbm90aWZpY2F0aW9uVHlwZSA9IFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24uTm9uZVxuXHQgKi9cblx0b25TaG93KG5vdGlmaWNhdGlvblR5cGUgPSBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLk5vbmUpIHtcblx0XHRsZXQgbm90aWZpY2F0aW9uID0gJyc7XG5cdFx0c3dpdGNoIChub3RpZmljYXRpb25UeXBlKSB7XG5cdFx0XHRjYXNlIFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24uU2VudDpcblx0XHRcdFx0bm90aWZpY2F0aW9uID0gaTE4bignUE9QVVBTX1NZU1RFTV9GT0xERVJTL05PVElGSUNBVElPTl9TRU5UJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLkRyYWZ0OlxuXHRcdFx0XHRub3RpZmljYXRpb24gPSBpMThuKCdQT1BVUFNfU1lTVEVNX0ZPTERFUlMvTk9USUZJQ0FUSU9OX0RSQUZUUycpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbi5TcGFtOlxuXHRcdFx0XHRub3RpZmljYXRpb24gPSBpMThuKCdQT1BVUFNfU1lTVEVNX0ZPTERFUlMvTk9USUZJQ0FUSU9OX1NQQU0nKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24uVHJhc2g6XG5cdFx0XHRcdG5vdGlmaWNhdGlvbiA9IGkxOG4oJ1BPUFVQU19TWVNURU1fRk9MREVSUy9OT1RJRklDQVRJT05fVFJBU0gnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24uQXJjaGl2ZTpcblx0XHRcdFx0bm90aWZpY2F0aW9uID0gaTE4bignUE9QVVBTX1NZU1RFTV9GT0xERVJTL05PVElGSUNBVElPTl9BUkNISVZFJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblxuXHRcdHRoaXMubm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbik7XG5cdH1cbn1cblxuZXhwb3J0IHsgRm9sZGVyU3lzdGVtUG9wdXBWaWV3LCBGb2xkZXJTeXN0ZW1Qb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdEJhc2ljUHJvbWlzZXMge1xuXHRvUHJvbWlzZXNTdGFjayA9IHt9O1xuXG5cdGZ1bmMoZkZ1bmMpIHtcblx0XHRmRnVuYygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZmFzdFJlc29sdmUobURhdGEpIHtcblx0XHRyZXR1cm4gd2luZG93LlByb21pc2UucmVzb2x2ZShtRGF0YSk7XG5cdH1cblxuXHRmYXN0UmVqZWN0KG1EYXRhKSB7XG5cdFx0cmV0dXJuIHdpbmRvdy5Qcm9taXNlLnJlamVjdChtRGF0YSk7XG5cdH1cblxuXHRzZXRUcmlnZ2VyKHRyaWdnZXIsIHZhbHVlKSB7XG5cdFx0aWYgKHRyaWdnZXIpIHtcblx0XHRcdHZhbHVlID0gISF2YWx1ZTtcblx0XHRcdChpc0FycmF5KHRyaWdnZXIpID8gdHJpZ2dlciA6IFt0cmlnZ2VyXSkuZm9yRWFjaCgoZlRyaWdnZXIpID0+IHtcblx0XHRcdFx0aWYgKGZUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0ZlRyaWdnZXIodmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FwcCc7XG5pbXBvcnQgQWNjb3VudFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FjY291bnQnO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0IHsgQ2FwYSwgTWFnaWNzLCBLZXlTdGF0ZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyB0cmltLCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwLCBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5jbGFzcyBBYnN0cmFjdFN5c3RlbURyb3BEb3duVXNlclZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubG9nb0ltZyA9IHRyaW0oU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJMb2dvJykpO1xuXHRcdHRoaXMubG9nb1RpdGxlID0gdHJpbShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckxvZ29UaXRsZScpKTtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cdFx0dGhpcy5tb2JpbGVEZXZpY2UgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGVEZXZpY2UnKTtcblxuXHRcdHRoaXMuYWxsb3dTZXR0aW5ncyA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLlNldHRpbmdzKTtcblx0XHR0aGlzLmFsbG93SGVscCA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLkhlbHApO1xuXG5cdFx0dGhpcy5jdXJyZW50QXVkaW8gPSBBcHBTdG9yZS5jdXJyZW50QXVkaW87XG5cblx0XHR0aGlzLmFjY291bnRFbWFpbCA9IEFjY291bnRTdG9yZS5lbWFpbDtcblxuXHRcdHRoaXMuYWNjb3VudHMgPSBBY2NvdW50U3RvcmUuYWNjb3VudHM7XG5cdFx0dGhpcy5hY2NvdW50c1VucmVhZENvdW50ID0gQWNjb3VudFN0b3JlLmFjY291bnRzVW5yZWFkQ291bnQ7XG5cblx0XHR0aGlzLmFjY291bnRNZW51RHJvcGRvd25UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jYXBhQWRkaXRpb25hbEFjY291bnRzID0ga28ub2JzZXJ2YWJsZShTZXR0aW5ncy5jYXBhKENhcGEuQWRkaXRpb25hbEFjY291bnRzKSk7XG5cblx0XHR0aGlzLmFkZEFjY291bnRDbGljayA9IF8uYmluZCh0aGlzLmFkZEFjY291bnRDbGljaywgdGhpcyk7XG5cblx0XHRFdmVudHMuc3ViKCdhdWRpby5zdG9wJywgKCkgPT4gQXBwU3RvcmUuY3VycmVudEF1ZGlvKCcnKSk7XG5cdFx0RXZlbnRzLnN1YignYXVkaW8uc3RhcnQnLCAobmFtZSkgPT4gQXBwU3RvcmUuY3VycmVudEF1ZGlvKG5hbWUpKTtcblx0fVxuXG5cdHN0b3BQbGF5KCkge1xuXHRcdEV2ZW50cy5wdWIoJ2F1ZGlvLmFwaS5zdG9wJyk7XG5cdH1cblxuXHRhY2NvdW50Q2xpY2soYWNjb3VudCwgZXZlbnQpIHtcblx0XHRpZiAoYWNjb3VudCAmJiBldmVudCAmJiAhaXNVbmQoZXZlbnQud2hpY2gpICYmIDEgPT09IGV2ZW50LndoaWNoKSB7XG5cdFx0XHRBY2NvdW50U3RvcmUuYWNjb3VudHMubG9hZGluZyh0cnVlKTtcblx0XHRcdF8uZGVsYXkoKCkgPT4gQWNjb3VudFN0b3JlLmFjY291bnRzLmxvYWRpbmcoZmFsc2UpLCBNYWdpY3MuVGltZTFzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGVtYWlsVGl0bGUoKSB7XG5cdFx0cmV0dXJuIEFjY291bnRTdG9yZS5lbWFpbCgpO1xuXHR9XG5cblx0c2V0dGluZ3NDbGljaygpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLlNldHRpbmdzKSkge1xuXHRcdFx0c2V0SGFzaChzZXR0aW5ncygpKTtcblx0XHR9XG5cdH1cblxuXHRzZXR0aW5nc0hlbHAoKSB7XG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5IZWxwKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvS2V5Ym9hcmRTaG9ydGN1dHNIZWxwJykpO1xuXHRcdH1cblx0fVxuXG5cdGFkZEFjY291bnRDbGljaygpIHtcblx0XHRpZiAodGhpcy5jYXBhQWRkaXRpb25hbEFjY291bnRzKCkpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0FjY291bnQnKSk7XG5cdFx0fVxuXHR9XG5cblx0bG9nb3V0Q2xpY2soKSB7XG5cdFx0Z2V0QXBwKCkubG9nb3V0KCk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGtleSgnYCcsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXcsIEtleVN0YXRlLlNldHRpbmdzXSwgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMudmlld01vZGVsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlRnVsbFNjcmVlbk1vZGUoZmFsc2UpO1xuXHRcdFx0XHR0aGlzLmFjY291bnRNZW51RHJvcGRvd25UcmlnZ2VyKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gc2hvcnRjdXRzIGhlbHBcblx0XHRrZXkoJ3NoaWZ0Ky8nLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3LCBLZXlTdGF0ZS5TZXR0aW5nc10sICgpID0+IHtcblx0XHRcdGlmICh0aGlzLnZpZXdNb2RlbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9LZXlib2FyZFNob3J0Y3V0c0hlbHAnKSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0U3lzdGVtRHJvcERvd25Vc2VyVmlldywgQWJzdHJhY3RTeXN0ZW1Ecm9wRG93blVzZXJWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgRXZlbnRLZXlDb2RlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGlzQXJyYXksIGluQXJyYXksIG5vb3AsIG5vb3BUcnVlIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuY2xhc3MgU2VsZWN0b3Ige1xuXHRsaXN0O1xuXHRsaXN0Q2hlY2tlZDtcblx0aXNMaXN0Q2hlY2tlZDtcblxuXHRmb2N1c2VkSXRlbTtcblx0c2VsZWN0ZWRJdGVtO1xuXG5cdGl0ZW1TZWxlY3RlZFRocm90dGxlO1xuXG5cdHNlbGVjdGVkSXRlbVVzZUNhbGxiYWNrID0gdHJ1ZTtcblxuXHRpU2VsZWN0TmV4dEhlbHBlciA9IDA7XG5cdGlGb2N1c2VkTmV4dEhlbHBlciA9IDA7XG5cdG9Db250ZW50VmlzaWJsZTtcblx0b0NvbnRlbnRTY3JvbGxhYmxlO1xuXG5cdHNJdGVtU2VsZWN0b3I7XG5cdHNJdGVtU2VsZWN0ZWRTZWxlY3Rvcjtcblx0c0l0ZW1DaGVja2VkU2VsZWN0b3I7XG5cdHNJdGVtRm9jdXNlZFNlbGVjdG9yO1xuXG5cdHNMYXN0VWlkID0gJyc7XG5cdG9DYWxsYmFja3MgPSB7fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtrb1Byb3BlcnR5fSBrb0xpc3Rcblx0ICogQHBhcmFtIHtrb1Byb3BlcnR5fSBrb1NlbGVjdGVkSXRlbVxuXHQgKiBAcGFyYW0ge2tvUHJvcGVydHl9IGtvRm9jdXNlZEl0ZW1cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJdGVtU2VsZWN0b3Jcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJdGVtU2VsZWN0ZWRTZWxlY3RvclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0l0ZW1DaGVja2VkU2VsZWN0b3Jcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNJdGVtRm9jdXNlZFNlbGVjdG9yXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRrb0xpc3QsXG5cdFx0a29TZWxlY3RlZEl0ZW0sXG5cdFx0a29Gb2N1c2VkSXRlbSxcblx0XHRzSXRlbVNlbGVjdG9yLFxuXHRcdHNJdGVtU2VsZWN0ZWRTZWxlY3Rvcixcblx0XHRzSXRlbUNoZWNrZWRTZWxlY3Rvcixcblx0XHRzSXRlbUZvY3VzZWRTZWxlY3RvclxuXHQpIHtcblx0XHR0aGlzLmxpc3QgPSBrb0xpc3Q7XG5cblx0XHR0aGlzLmxpc3RDaGVja2VkID0ga28uY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy5saXN0KCksIChpdGVtKSA9PiBpdGVtLmNoZWNrZWQoKSkpLmV4dGVuZCh7IHJhdGVMaW1pdDogMCB9KTtcblx0XHR0aGlzLmlzTGlzdENoZWNrZWQgPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5saXN0Q2hlY2tlZCgpLmxlbmd0aCk7XG5cblx0XHR0aGlzLmZvY3VzZWRJdGVtID0ga29Gb2N1c2VkSXRlbSB8fCBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtID0ga29TZWxlY3RlZEl0ZW0gfHwga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdHRoaXMuaXRlbVNlbGVjdGVkVGhyb3R0bGUgPSBfLmRlYm91bmNlKF8uYmluZCh0aGlzLml0ZW1TZWxlY3RlZCwgdGhpcyksIDMwMCk7XG5cblx0XHR0aGlzLmxpc3RDaGVja2VkLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcblx0XHRcdGlmICgwIDwgaXRlbXMubGVuZ3RoKSB7XG5cdFx0XHRcdGlmIChudWxsID09PSB0aGlzLnNlbGVjdGVkSXRlbSgpKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlSGFzTXV0YXRlZCkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0udmFsdWVIYXNNdXRhdGVkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtKG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuYXV0b1NlbGVjdCgpICYmIHRoaXMuZm9jdXNlZEl0ZW0oKSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSh0aGlzLmZvY3VzZWRJdGVtKCkpO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW0uc3Vic2NyaWJlKChpdGVtKSA9PiB7XG5cdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xpc3RDaGVja2VkKCkpIHtcblx0XHRcdFx0XHRfLmVhY2godGhpcy5saXN0Q2hlY2tlZCgpLCAoc3ViSXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0c3ViSXRlbS5jaGVja2VkKGZhbHNlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkSXRlbVVzZUNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0dGhpcy5pdGVtU2VsZWN0ZWRUaHJvdHRsZShpdGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkSXRlbVVzZUNhbGxiYWNrKSB7XG5cdFx0XHRcdHRoaXMuaXRlbVNlbGVjdGVkKG51bGwpO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkSXRlbS5leHRlbmQoeyB0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eTogW3RoaXMsICdzZWxlY3RlZCddIH0pO1xuXHRcdHRoaXMuZm9jdXNlZEl0ZW0gPSB0aGlzLmZvY3VzZWRJdGVtLmV4dGVuZCh7IHRvZ2dsZVN1YnNjcmliZVByb3BlcnR5OiBbbnVsbCwgJ2ZvY3VzZWQnXSB9KTtcblxuXHRcdHRoaXMuc0l0ZW1TZWxlY3RvciA9IHNJdGVtU2VsZWN0b3I7XG5cdFx0dGhpcy5zSXRlbVNlbGVjdGVkU2VsZWN0b3IgPSBzSXRlbVNlbGVjdGVkU2VsZWN0b3I7XG5cdFx0dGhpcy5zSXRlbUNoZWNrZWRTZWxlY3RvciA9IHNJdGVtQ2hlY2tlZFNlbGVjdG9yO1xuXHRcdHRoaXMuc0l0ZW1Gb2N1c2VkU2VsZWN0b3IgPSBzSXRlbUZvY3VzZWRTZWxlY3RvcjtcblxuXHRcdHRoaXMuZm9jdXNlZEl0ZW0uc3Vic2NyaWJlKChpdGVtKSA9PiB7XG5cdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHR0aGlzLnNMYXN0VWlkID0gdGhpcy5nZXRJdGVtVWlkKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMpO1xuXG5cdFx0bGV0IGFDYWNoZSA9IFtdLFxuXHRcdFx0YUNoZWNrZWRDYWNoZSA9IFtdLFxuXHRcdFx0bUZvY3VzZWQgPSBudWxsLFxuXHRcdFx0bVNlbGVjdGVkID0gbnVsbDtcblxuXHRcdHRoaXMubGlzdC5zdWJzY3JpYmUoXG5cdFx0XHQoaXRlbXMpID0+IHtcblx0XHRcdFx0aWYgKGlzQXJyYXkoaXRlbXMpKSB7XG5cdFx0XHRcdFx0Xy5lYWNoKGl0ZW1zLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdWlkID0gdGhpcy5nZXRJdGVtVWlkKGl0ZW0pO1xuXG5cdFx0XHRcdFx0XHRcdGFDYWNoZS5wdXNoKHVpZCk7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtLmNoZWNrZWQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdGFDaGVja2VkQ2FjaGUucHVzaCh1aWQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChudWxsID09PSBtRm9jdXNlZCAmJiBpdGVtLmZvY3VzZWQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdG1Gb2N1c2VkID0gdWlkO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChudWxsID09PSBtU2VsZWN0ZWQgJiYgaXRlbS5zZWxlY3RlZCgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0bVNlbGVjdGVkID0gdWlkO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLFxuXHRcdFx0J2JlZm9yZUNoYW5nZSdcblx0XHQpO1xuXG5cdFx0dGhpcy5saXN0LnN1YnNjcmliZSgoYUl0ZW1zKSA9PiB7XG5cdFx0XHRsZXQgdGVtcCA9IG51bGwsXG5cdFx0XHRcdGdldE5leHQgPSBmYWxzZSxcblx0XHRcdFx0aXNOZXh0Rm9jdXNlZCA9IG1Gb2N1c2VkLFxuXHRcdFx0XHRpc0NoZWNrZWQgPSBmYWxzZSxcblx0XHRcdFx0aXNTZWxlY3RlZCA9IGZhbHNlLFxuXHRcdFx0XHRsZW4gPSAwO1xuXG5cdFx0XHRjb25zdCB1aWRzID0gW107XG5cblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtVXNlQ2FsbGJhY2sgPSBmYWxzZTtcblxuXHRcdFx0dGhpcy5mb2N1c2VkSXRlbShudWxsKTtcblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtKG51bGwpO1xuXG5cdFx0XHRpZiAoaXNBcnJheShhSXRlbXMpKSB7XG5cdFx0XHRcdGxlbiA9IGFDaGVja2VkQ2FjaGUubGVuZ3RoO1xuXG5cdFx0XHRcdF8uZWFjaChhSXRlbXMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdWlkID0gdGhpcy5nZXRJdGVtVWlkKGl0ZW0pO1xuXHRcdFx0XHRcdHVpZHMucHVzaCh1aWQpO1xuXG5cdFx0XHRcdFx0aWYgKG51bGwgIT09IG1Gb2N1c2VkICYmIG1Gb2N1c2VkID09PSB1aWQpIHtcblx0XHRcdFx0XHRcdHRoaXMuZm9jdXNlZEl0ZW0oaXRlbSk7XG5cdFx0XHRcdFx0XHRtRm9jdXNlZCA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKDAgPCBsZW4gJiYgLTEgPCBpbkFycmF5KHVpZCwgYUNoZWNrZWRDYWNoZSkpIHtcblx0XHRcdFx0XHRcdGlzQ2hlY2tlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRpdGVtLmNoZWNrZWQodHJ1ZSk7XG5cdFx0XHRcdFx0XHRsZW4gLT0gMTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIWlzQ2hlY2tlZCAmJiBudWxsICE9PSBtU2VsZWN0ZWQgJiYgbVNlbGVjdGVkID09PSB1aWQpIHtcblx0XHRcdFx0XHRcdGlzU2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0oaXRlbSk7XG5cdFx0XHRcdFx0XHRtU2VsZWN0ZWQgPSBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1Vc2VDYWxsYmFjayA9IHRydWU7XG5cblx0XHRcdFx0aWYgKCFpc0NoZWNrZWQgJiYgIWlzU2VsZWN0ZWQgJiYgdGhpcy5hdXRvU2VsZWN0KCkpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5mb2N1c2VkSXRlbSgpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSh0aGlzLmZvY3VzZWRJdGVtKCkpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoMCA8IGFJdGVtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGlmIChudWxsICE9PSBpc05leHRGb2N1c2VkKSB7XG5cdFx0XHRcdFx0XHRcdGdldE5leHQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0aXNOZXh0Rm9jdXNlZCA9IF8uZmluZChhQ2FjaGUsIChzVWlkKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGdldE5leHQgJiYgLTEgPCBpbkFycmF5KHNVaWQsIHVpZHMpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc1VpZDtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzTmV4dEZvY3VzZWQgPT09IHNVaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGdldE5leHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChpc05leHRGb2N1c2VkKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGVtcCA9IF8uZmluZChhSXRlbXMsIChvSXRlbSkgPT4gaXNOZXh0Rm9jdXNlZCA9PT0gdGhpcy5nZXRJdGVtVWlkKG9JdGVtKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0odGVtcCB8fCBudWxsKTtcblx0XHRcdFx0XHRcdHRoaXMuZm9jdXNlZEl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0oKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCgwICE9PSB0aGlzLmlTZWxlY3ROZXh0SGVscGVyIHx8IDAgIT09IHRoaXMuaUZvY3VzZWROZXh0SGVscGVyKSAmJlxuXHRcdFx0XHRcdDAgPCBhSXRlbXMubGVuZ3RoICYmXG5cdFx0XHRcdFx0IXRoaXMuZm9jdXNlZEl0ZW0oKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0ZW1wID0gbnVsbDtcblx0XHRcdFx0XHRpZiAoMCAhPT0gdGhpcy5pRm9jdXNlZE5leHRIZWxwZXIpIHtcblx0XHRcdFx0XHRcdHRlbXAgPSBhSXRlbXNbLTEgPT09IHRoaXMuaUZvY3VzZWROZXh0SGVscGVyID8gYUl0ZW1zLmxlbmd0aCAtIDEgOiAwXSB8fCBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghdGVtcCAmJiAwICE9PSB0aGlzLmlTZWxlY3ROZXh0SGVscGVyKSB7XG5cdFx0XHRcdFx0XHR0ZW1wID0gYUl0ZW1zWy0xID09PSB0aGlzLmlTZWxlY3ROZXh0SGVscGVyID8gYUl0ZW1zLmxlbmd0aCAtIDEgOiAwXSB8fCBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICh0ZW1wKSB7XG5cdFx0XHRcdFx0XHRpZiAoMCAhPT0gdGhpcy5pU2VsZWN0TmV4dEhlbHBlcikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSh0ZW1wIHx8IG51bGwpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzLmZvY3VzZWRJdGVtKHRlbXAgfHwgbnVsbCk7XG5cblx0XHRcdFx0XHRcdHRoaXMuc2Nyb2xsVG9Gb2N1c2VkKCk7XG5cblx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5zY3JvbGxUb0ZvY3VzZWQoKSwgMTAwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLmlTZWxlY3ROZXh0SGVscGVyID0gMDtcblx0XHRcdFx0XHR0aGlzLmlGb2N1c2VkTmV4dEhlbHBlciA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YUNhY2hlID0gW107XG5cdFx0XHRhQ2hlY2tlZENhY2hlID0gW107XG5cdFx0XHRtRm9jdXNlZCA9IG51bGw7XG5cdFx0XHRtU2VsZWN0ZWQgPSBudWxsO1xuXHRcdH0pO1xuXHR9XG5cblx0aXRlbVNlbGVjdGVkKGl0ZW0pIHtcblx0XHRpZiAodGhpcy5pc0xpc3RDaGVja2VkKCkpIHtcblx0XHRcdGlmICghaXRlbSkge1xuXHRcdFx0XHQodGhpcy5vQ2FsbGJhY2tzLm9uSXRlbVNlbGVjdCB8fCBub29wKShpdGVtIHx8IG51bGwpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXRlbSkge1xuXHRcdFx0KHRoaXMub0NhbGxiYWNrcy5vbkl0ZW1TZWxlY3QgfHwgbm9vcCkoaXRlbSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VTZWxlY3Rcblx0ICovXG5cdGdvRG93bihmb3JjZVNlbGVjdCkge1xuXHRcdHRoaXMubmV3U2VsZWN0UG9zaXRpb24oRXZlbnRLZXlDb2RlLkRvd24sIGZhbHNlLCBmb3JjZVNlbGVjdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBmb3JjZVNlbGVjdFxuXHQgKi9cblx0Z29VcChmb3JjZVNlbGVjdCkge1xuXHRcdHRoaXMubmV3U2VsZWN0UG9zaXRpb24oRXZlbnRLZXlDb2RlLlVwLCBmYWxzZSwgZm9yY2VTZWxlY3QpO1xuXHR9XG5cblx0dW5zZWxlY3QoKSB7XG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW0obnVsbCk7XG5cdFx0dGhpcy5mb2N1c2VkSXRlbShudWxsKTtcblx0fVxuXG5cdGluaXQoY29udGVudFZpc2libGUsIGNvbnRlbnRTY3JvbGxhYmxlLCBrZXlTY29wZSA9ICdhbGwnKSB7XG5cdFx0dGhpcy5vQ29udGVudFZpc2libGUgPSBjb250ZW50VmlzaWJsZTtcblx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSA9IGNvbnRlbnRTY3JvbGxhYmxlO1xuXG5cdFx0aWYgKHRoaXMub0NvbnRlbnRWaXNpYmxlICYmIHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlKSB7XG5cdFx0XHQkKHRoaXMub0NvbnRlbnRWaXNpYmxlKVxuXHRcdFx0XHQub24oJ3NlbGVjdHN0YXJ0JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0Lm9uKCdjbGljaycsIHRoaXMuc0l0ZW1TZWxlY3RvciwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb25DbGljayhrby5kYXRhRm9yKGV2ZW50LmN1cnJlbnRUYXJnZXQpLCBldmVudCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbignY2xpY2snLCB0aGlzLnNJdGVtQ2hlY2tlZFNlbGVjdG9yLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBpdGVtID0ga28uZGF0YUZvcihldmVudC5jdXJyZW50VGFyZ2V0KTtcblx0XHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuYWN0aW9uQ2xpY2soaXRlbSwgZXZlbnQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5mb2N1c2VkSXRlbShpdGVtKTtcblx0XHRcdFx0XHRcdFx0aXRlbS5jaGVja2VkKCFpdGVtLmNoZWNrZWQoKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0a2V5KCdlbnRlcicsIGtleVNjb3BlLCAoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmZvY3VzZWRJdGVtKCkgJiYgIXRoaXMuZm9jdXNlZEl0ZW0oKS5zZWxlY3RlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb25DbGljayh0aGlzLmZvY3VzZWRJdGVtKCkpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSk7XG5cblx0XHRcdGtleSgnY3RybCt1cCwgY29tbWFuZCt1cCwgY3RybCtkb3duLCBjb21tYW5kK2Rvd24nLCBrZXlTY29wZSwgKCkgPT4gZmFsc2UpO1xuXG5cdFx0XHRrZXkoJ3VwLCBzaGlmdCt1cCwgZG93biwgc2hpZnQrZG93biwgaG9tZSwgZW5kLCBwYWdldXAsIHBhZ2Vkb3duLCBpbnNlcnQsIHNwYWNlJywga2V5U2NvcGUsIChldmVudCwgaGFuZGxlcikgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQgJiYgaGFuZGxlciAmJiBoYW5kbGVyLnNob3J0Y3V0KSB7XG5cdFx0XHRcdFx0bGV0IGV2ZW50S2V5ID0gMDtcblx0XHRcdFx0XHRzd2l0Y2ggKGhhbmRsZXIuc2hvcnRjdXQpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ3VwJzpcblx0XHRcdFx0XHRcdGNhc2UgJ3NoaWZ0K3VwJzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuVXA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnZG93bic6XG5cdFx0XHRcdFx0XHRjYXNlICdzaGlmdCtkb3duJzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuRG93bjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdpbnNlcnQnOlxuXHRcdFx0XHRcdFx0XHRldmVudEtleSA9IEV2ZW50S2V5Q29kZS5JbnNlcnQ7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnc3BhY2UnOlxuXHRcdFx0XHRcdFx0XHRldmVudEtleSA9IEV2ZW50S2V5Q29kZS5TcGFjZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdob21lJzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuSG9tZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdlbmQnOlxuXHRcdFx0XHRcdFx0XHRldmVudEtleSA9IEV2ZW50S2V5Q29kZS5FbmQ7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAncGFnZXVwJzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuUGFnZVVwO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ3BhZ2Vkb3duJzpcblx0XHRcdFx0XHRcdFx0ZXZlbnRLZXkgPSBFdmVudEtleUNvZGUuUGFnZURvd247XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICgwIDwgZXZlbnRLZXkpIHtcblx0XHRcdFx0XHRcdHRoaXMubmV3U2VsZWN0UG9zaXRpb24oZXZlbnRLZXksIGtleS5zaGlmdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRhdXRvU2VsZWN0KCkge1xuXHRcdHJldHVybiAhISh0aGlzLm9DYWxsYmFja3Mub25BdXRvU2VsZWN0IHx8IG5vb3BUcnVlKSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gdXBcblx0ICovXG5cdGRvVXBVcE9yRG93bkRvd24odXApIHtcblx0XHQodGhpcy5vQ2FsbGJhY2tzLm9uVXBVcE9yRG93bkRvd24gfHwgbm9vcFRydWUpKCEhdXApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvSXRlbVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0SXRlbVVpZChpdGVtKSB7XG5cdFx0bGV0IHVpZCA9ICcnO1xuXG5cdFx0Y29uc3QgZ2V0SXRlbVVpZENhbGxiYWNrID0gdGhpcy5vQ2FsbGJhY2tzLm9uSXRlbUdldFVpZCB8fCBudWxsO1xuXHRcdGlmIChnZXRJdGVtVWlkQ2FsbGJhY2sgJiYgaXRlbSkge1xuXHRcdFx0dWlkID0gZ2V0SXRlbVVpZENhbGxiYWNrKGl0ZW0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB1aWQudG9TdHJpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gaUV2ZW50S2V5Q29kZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJTaGlmdEtleVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiRm9yY2VTZWxlY3QgPSBmYWxzZVxuXHQgKi9cblx0bmV3U2VsZWN0UG9zaXRpb24oaUV2ZW50S2V5Q29kZSwgYlNoaWZ0S2V5LCBiRm9yY2VTZWxlY3QpIHtcblx0XHRsZXQgaW5kZXggPSAwLFxuXHRcdFx0aXNOZXh0ID0gZmFsc2UsXG5cdFx0XHRpc1N0b3AgPSBmYWxzZSxcblx0XHRcdHJlc3VsdCA9IG51bGw7XG5cblx0XHRjb25zdCBwYWdlU3RlcCA9IDEwLFxuXHRcdFx0bGlzdCA9IHRoaXMubGlzdCgpLFxuXHRcdFx0bGlzdExlbiA9IGxpc3QgPyBsaXN0Lmxlbmd0aCA6IDAsXG5cdFx0XHRmb2N1c2VkID0gdGhpcy5mb2N1c2VkSXRlbSgpO1xuXG5cdFx0aWYgKDAgPCBsaXN0TGVuKSB7XG5cdFx0XHRpZiAoIWZvY3VzZWQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5Eb3duID09PSBpRXZlbnRLZXlDb2RlIHx8XG5cdFx0XHRcdFx0RXZlbnRLZXlDb2RlLkluc2VydCA9PT0gaUV2ZW50S2V5Q29kZSB8fFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5TcGFjZSA9PT0gaUV2ZW50S2V5Q29kZSB8fFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5Ib21lID09PSBpRXZlbnRLZXlDb2RlIHx8XG5cdFx0XHRcdFx0RXZlbnRLZXlDb2RlLlBhZ2VVcCA9PT0gaUV2ZW50S2V5Q29kZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBsaXN0WzBdO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5VcCA9PT0gaUV2ZW50S2V5Q29kZSB8fFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5FbmQgPT09IGlFdmVudEtleUNvZGUgfHxcblx0XHRcdFx0XHRFdmVudEtleUNvZGUuUGFnZURvd24gPT09IGlFdmVudEtleUNvZGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmVzdWx0ID0gbGlzdFtsaXN0Lmxlbmd0aCAtIDFdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGZvY3VzZWQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5Eb3duID09PSBpRXZlbnRLZXlDb2RlIHx8XG5cdFx0XHRcdFx0RXZlbnRLZXlDb2RlLlVwID09PSBpRXZlbnRLZXlDb2RlIHx8XG5cdFx0XHRcdFx0RXZlbnRLZXlDb2RlLkluc2VydCA9PT0gaUV2ZW50S2V5Q29kZSB8fFxuXHRcdFx0XHRcdEV2ZW50S2V5Q29kZS5TcGFjZSA9PT0gaUV2ZW50S2V5Q29kZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRfLmVhY2gobGlzdCwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdGlmICghaXNTdG9wKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaUV2ZW50S2V5Q29kZSkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgRXZlbnRLZXlDb2RlLlVwOlxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZvY3VzZWQgPT09IGl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNTdG9wID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGl0ZW07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIEV2ZW50S2V5Q29kZS5Eb3duOlxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgRXZlbnRLZXlDb2RlLkluc2VydDpcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChpc05leHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gaXRlbTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNTdG9wID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZm9jdXNlZCA9PT0gaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpc05leHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRpZiAoIXJlc3VsdCAmJiAoRXZlbnRLZXlDb2RlLkRvd24gPT09IGlFdmVudEtleUNvZGUgfHwgRXZlbnRLZXlDb2RlLlVwID09PSBpRXZlbnRLZXlDb2RlKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5kb1VwVXBPckRvd25Eb3duKEV2ZW50S2V5Q29kZS5VcCA9PT0gaUV2ZW50S2V5Q29kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5Ib21lID09PSBpRXZlbnRLZXlDb2RlIHx8IEV2ZW50S2V5Q29kZS5FbmQgPT09IGlFdmVudEtleUNvZGUpIHtcblx0XHRcdFx0XHRpZiAoRXZlbnRLZXlDb2RlLkhvbWUgPT09IGlFdmVudEtleUNvZGUpIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IGxpc3RbMF07XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChFdmVudEtleUNvZGUuRW5kID09PSBpRXZlbnRLZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBsaXN0W2xpc3QubGVuZ3RoIC0gMV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5QYWdlRG93biA9PT0gaUV2ZW50S2V5Q29kZSkge1xuXHRcdFx0XHRcdGZvciAoOyBpbmRleCA8IGxpc3RMZW47IGluZGV4KyspIHtcblx0XHRcdFx0XHRcdGlmIChmb2N1c2VkID09PSBsaXN0W2luZGV4XSkge1xuXHRcdFx0XHRcdFx0XHRpbmRleCArPSBwYWdlU3RlcDtcblx0XHRcdFx0XHRcdFx0aW5kZXggPSBsaXN0TGVuIC0gMSA8IGluZGV4ID8gbGlzdExlbiAtIDEgOiBpbmRleDtcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gbGlzdFtpbmRleF07XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChFdmVudEtleUNvZGUuUGFnZVVwID09PSBpRXZlbnRLZXlDb2RlKSB7XG5cdFx0XHRcdFx0Zm9yIChpbmRleCA9IGxpc3RMZW47IDAgPD0gaW5kZXg7IGluZGV4LS0pIHtcblx0XHRcdFx0XHRcdGlmIChmb2N1c2VkID09PSBsaXN0W2luZGV4XSkge1xuXHRcdFx0XHRcdFx0XHRpbmRleCAtPSBwYWdlU3RlcDtcblx0XHRcdFx0XHRcdFx0aW5kZXggPSAwID4gaW5kZXggPyAwIDogaW5kZXg7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGxpc3RbaW5kZXhdO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtKHJlc3VsdCk7XG5cblx0XHRcdGlmIChmb2N1c2VkKSB7XG5cdFx0XHRcdGlmIChiU2hpZnRLZXkpIHtcblx0XHRcdFx0XHRpZiAoRXZlbnRLZXlDb2RlLlVwID09PSBpRXZlbnRLZXlDb2RlIHx8IEV2ZW50S2V5Q29kZS5Eb3duID09PSBpRXZlbnRLZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRmb2N1c2VkLmNoZWNrZWQoIWZvY3VzZWQuY2hlY2tlZCgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoRXZlbnRLZXlDb2RlLkluc2VydCA9PT0gaUV2ZW50S2V5Q29kZSB8fCBFdmVudEtleUNvZGUuU3BhY2UgPT09IGlFdmVudEtleUNvZGUpIHtcblx0XHRcdFx0XHRmb2N1c2VkLmNoZWNrZWQoIWZvY3VzZWQuY2hlY2tlZCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoKHRoaXMuYXV0b1NlbGVjdCgpIHx8ICEhYkZvcmNlU2VsZWN0KSAmJiAhdGhpcy5pc0xpc3RDaGVja2VkKCkgJiYgRXZlbnRLZXlDb2RlLlNwYWNlICE9PSBpRXZlbnRLZXlDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtKHJlc3VsdCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2Nyb2xsVG9Gb2N1c2VkKCk7XG5cdFx0fSBlbHNlIGlmIChmb2N1c2VkKSB7XG5cdFx0XHRpZiAoYlNoaWZ0S2V5ICYmIChFdmVudEtleUNvZGUuVXAgPT09IGlFdmVudEtleUNvZGUgfHwgRXZlbnRLZXlDb2RlLkRvd24gPT09IGlFdmVudEtleUNvZGUpKSB7XG5cdFx0XHRcdGZvY3VzZWQuY2hlY2tlZCghZm9jdXNlZC5jaGVja2VkKCkpO1xuXHRcdFx0fSBlbHNlIGlmIChFdmVudEtleUNvZGUuSW5zZXJ0ID09PSBpRXZlbnRLZXlDb2RlIHx8IEV2ZW50S2V5Q29kZS5TcGFjZSA9PT0gaUV2ZW50S2V5Q29kZSkge1xuXHRcdFx0XHRmb2N1c2VkLmNoZWNrZWQoIWZvY3VzZWQuY2hlY2tlZCgpKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5mb2N1c2VkSXRlbShmb2N1c2VkKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRzY3JvbGxUb0ZvY3VzZWQoKSB7XG5cdFx0aWYgKCF0aGlzLm9Db250ZW50VmlzaWJsZSB8fCAhdGhpcy5vQ29udGVudFNjcm9sbGFibGUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCBvZmZzZXQgPSAyMCxcblx0XHRcdGxpc3QgPSB0aGlzLmxpc3QoKSxcblx0XHRcdCRmb2N1c2VkID0gJCh0aGlzLnNJdGVtRm9jdXNlZFNlbGVjdG9yLCB0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSksXG5cdFx0XHRwb3MgPSAkZm9jdXNlZC5wb3NpdGlvbigpLFxuXHRcdFx0dmlzaWJsZUhlaWdodCA9IHRoaXMub0NvbnRlbnRWaXNpYmxlLmhlaWdodCgpLFxuXHRcdFx0Zm9jdXNlZEhlaWdodCA9ICRmb2N1c2VkLm91dGVySGVpZ2h0KCk7XG5cblx0XHRpZiAobGlzdCAmJiBsaXN0WzBdICYmIGxpc3RbMF0uZm9jdXNlZCgpKSB7XG5cdFx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZS5zY3JvbGxUb3AoMCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKHBvcyAmJiAoMCA+IHBvcy50b3AgfHwgcG9zLnRvcCArIGZvY3VzZWRIZWlnaHQgPiB2aXNpYmxlSGVpZ2h0KSkge1xuXHRcdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKFxuXHRcdFx0XHQwID4gcG9zLnRvcFxuXHRcdFx0XHRcdD8gdGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKCkgKyBwb3MudG9wIC0gb2Zmc2V0XG5cdFx0XHRcdFx0OiB0aGlzLm9Db250ZW50U2Nyb2xsYWJsZS5zY3JvbGxUb3AoKSArIHBvcy50b3AgLSB2aXNpYmxlSGVpZ2h0ICsgZm9jdXNlZEhlaWdodCArIG9mZnNldFxuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGZhc3QgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHNjcm9sbFRvVG9wKGZhc3QgPSBmYWxzZSkge1xuXHRcdGlmICghdGhpcy5vQ29udGVudFZpc2libGUgfHwgIXRoaXMub0NvbnRlbnRTY3JvbGxhYmxlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKGZhc3QgfHwgNTAgPiB0aGlzLm9Db250ZW50U2Nyb2xsYWJsZS5zY3JvbGxUb3AoKSkge1xuXHRcdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZS5zdG9wKCkuYW5pbWF0ZSh7IHNjcm9sbFRvcDogMCB9LCAyMDApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0ZXZlbnRDbGlja0Z1bmN0aW9uKGl0ZW0sIGV2ZW50KSB7XG5cdFx0bGV0IGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IDAsXG5cdFx0XHRjaGFuZ2VSYW5nZSA9IGZhbHNlLFxuXHRcdFx0aXNJblJhbmdlID0gZmFsc2UsXG5cdFx0XHRsaXN0ID0gW10sXG5cdFx0XHRjaGVja2VkID0gZmFsc2UsXG5cdFx0XHRsaXN0SXRlbSA9IG51bGwsXG5cdFx0XHRsaW5lVWlkID0gJyc7XG5cblx0XHRjb25zdCB1aWQgPSB0aGlzLmdldEl0ZW1VaWQoaXRlbSk7XG5cdFx0aWYgKGV2ZW50ICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHRpZiAoJycgIT09IHVpZCAmJiAnJyAhPT0gdGhpcy5zTGFzdFVpZCAmJiB1aWQgIT09IHRoaXMuc0xhc3RVaWQpIHtcblx0XHRcdFx0bGlzdCA9IHRoaXMubGlzdCgpO1xuXHRcdFx0XHRjaGVja2VkID0gaXRlbS5jaGVja2VkKCk7XG5cblx0XHRcdFx0Zm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuXHRcdFx0XHRcdGxpc3RJdGVtID0gbGlzdFtpbmRleF07XG5cdFx0XHRcdFx0bGluZVVpZCA9IHRoaXMuZ2V0SXRlbVVpZChsaXN0SXRlbSk7XG5cblx0XHRcdFx0XHRjaGFuZ2VSYW5nZSA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChsaW5lVWlkID09PSB0aGlzLnNMYXN0VWlkIHx8IGxpbmVVaWQgPT09IHVpZCkge1xuXHRcdFx0XHRcdFx0Y2hhbmdlUmFuZ2UgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChjaGFuZ2VSYW5nZSkge1xuXHRcdFx0XHRcdFx0aXNJblJhbmdlID0gIWlzSW5SYW5nZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaXNJblJhbmdlIHx8IGNoYW5nZVJhbmdlKSB7XG5cdFx0XHRcdFx0XHRsaXN0SXRlbS5jaGVja2VkKGNoZWNrZWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuc0xhc3RVaWQgPSAnJyA9PT0gdWlkID8gJycgOiB1aWQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGl0ZW1cblx0ICogQHBhcmFtIHtPYmplY3Q9fSBldmVudFxuXHQgKi9cblx0YWN0aW9uQ2xpY2soaXRlbSwgZXZlbnQgPSBudWxsKSB7XG5cdFx0aWYgKGl0ZW0pIHtcblx0XHRcdGxldCBjbGljayA9IHRydWU7XG5cdFx0XHRpZiAoZXZlbnQpIHtcblx0XHRcdFx0aWYgKGV2ZW50LnNoaWZ0S2V5ICYmICEoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiAhZXZlbnQuYWx0S2V5KSB7XG5cdFx0XHRcdFx0Y2xpY2sgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAoJycgPT09IHRoaXMuc0xhc3RVaWQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc0xhc3RVaWQgPSB0aGlzLmdldEl0ZW1VaWQoaXRlbSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aXRlbS5jaGVja2VkKCFpdGVtLmNoZWNrZWQoKSk7XG5cdFx0XHRcdFx0dGhpcy5ldmVudENsaWNrRnVuY3Rpb24oaXRlbSwgZXZlbnQpO1xuXG5cdFx0XHRcdFx0dGhpcy5mb2N1c2VkSXRlbShpdGVtKTtcblx0XHRcdFx0fSBlbHNlIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmFsdEtleSkge1xuXHRcdFx0XHRcdGNsaWNrID0gZmFsc2U7XG5cdFx0XHRcdFx0dGhpcy5mb2N1c2VkSXRlbShpdGVtKTtcblxuXHRcdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkSXRlbSgpICYmIGl0ZW0gIT09IHRoaXMuc2VsZWN0ZWRJdGVtKCkpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtKCkuY2hlY2tlZCh0cnVlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpdGVtLmNoZWNrZWQoIWl0ZW0uY2hlY2tlZCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2xpY2spIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RNZXNzYWdlSXRlbShpdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5vQ2FsbGJhY2tzW2V2ZW50TmFtZV0gPSBjYWxsYmFjaztcblx0fVxuXG5cdHNlbGVjdE1lc3NhZ2VJdGVtKG1lc3NhZ2VJdGVtKSB7XG5cdFx0dGhpcy5mb2N1c2VkSXRlbShtZXNzYWdlSXRlbSk7XG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW0obWVzc2FnZUl0ZW0pO1xuXHRcdHRoaXMuc2Nyb2xsVG9Gb2N1c2VkKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgU2VsZWN0b3IsIFNlbGVjdG9yIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgbG96YWQgZnJvbSAnbG96YWQnO1xuXG5pbXBvcnQgeyBNZXNzYWdlUHJpb3JpdHksIFNpZ25lZFZlcmlmeVN0YXR1cyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgREFUQV9JTUFHRV9MQVpZX1BMQUNFSE9MREVSX1BJQyB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuXG5pbXBvcnQge1xuXHRwSW50LFxuXHRpbkFycmF5LFxuXHRpc0FycmF5LFxuXHRpc1VuZCxcblx0dHJpbSxcblx0cHJldmlld01lc3NhZ2UsXG5cdHdpbmRvd1Jlc2l6ZSxcblx0ZnJpZW5kbHlTaXplLFxuXHRpc05vbkVtcHR5QXJyYXlcbn0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgJHdpbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IG1lc3NhZ2VWaWV3TGluaywgbWVzc2FnZURvd25sb2FkTGluayB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IFBncFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1BncCc7XG5cbmltcG9ydCB7IGVtYWlsQXJyYXlGcm9tSnNvbiwgZW1haWxBcnJheVRvU3RyaW5nQ2xlYXIsIGVtYWlsQXJyYXlUb1N0cmluZywgcmVwbHlIZWxwZXIgfSBmcm9tICdIZWxwZXIvTWVzc2FnZSc7XG5cbmltcG9ydCB7IEF0dGFjaG1lbnRNb2RlbCwgc3RhdGljQ29tYmluZWRJY29uQ2xhc3MgfSBmcm9tICdNb2RlbC9BdHRhY2htZW50JztcbmltcG9ydCB7IEFic3RyYWN0TW9kZWwgfSBmcm9tICdLbm9pbi9BYnN0cmFjdE1vZGVsJztcblxuY2xhc3MgTWVzc2FnZU1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCdNZXNzYWdlTW9kZWwnKTtcblxuXHRcdHRoaXMuZm9sZGVyRnVsbE5hbWVSYXcgPSAnJztcblx0XHR0aGlzLnVpZCA9ICcnO1xuXHRcdHRoaXMuaGFzaCA9ICcnO1xuXHRcdHRoaXMucmVxdWVzdEhhc2ggPSAnJztcblx0XHR0aGlzLnN1YmplY3QgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnN1YmplY3RQcmVmaXggPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnN1YmplY3RTdWZmaXggPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnNpemUgPSBrby5vYnNlcnZhYmxlKDApO1xuXHRcdHRoaXMuZGF0ZVRpbWVTdGFtcEluVVRDID0ga28ub2JzZXJ2YWJsZSgwKTtcblx0XHR0aGlzLnByaW9yaXR5ID0ga28ub2JzZXJ2YWJsZShNZXNzYWdlUHJpb3JpdHkuTm9ybWFsKTtcblxuXHRcdHRoaXMucHJveHkgPSBmYWxzZTtcblxuXHRcdHRoaXMuZnJvbUVtYWlsU3RyaW5nID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mcm9tQ2xlYXJFbWFpbFN0cmluZyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudG9FbWFpbHNTdHJpbmcgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRvQ2xlYXJFbWFpbHNTdHJpbmcgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuc2VuZGVyRW1haWxzU3RyaW5nID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zZW5kZXJDbGVhckVtYWlsc1N0cmluZyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5lbWFpbHMgPSBbXTtcblxuXHRcdHRoaXMuZnJvbSA9IFtdO1xuXHRcdHRoaXMudG8gPSBbXTtcblx0XHR0aGlzLmNjID0gW107XG5cdFx0dGhpcy5iY2MgPSBbXTtcblx0XHR0aGlzLnJlcGx5VG8gPSBbXTtcblx0XHR0aGlzLmRlbGl2ZXJlZFRvID0gW107XG5cdFx0dGhpcy51bnN1YnNyaWJlTGlua3MgPSBbXTtcblxuXHRcdHRoaXMubmV3Rm9yQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmRlbGV0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmRlbGV0ZWRNYXJrID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy51bnNlZW4gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZsYWdnZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFuc3dlcmVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5mb3J3YXJkZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmlzUmVhZFJlY2VpcHQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2VsZWN0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmNoZWNrZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmhhc0F0dGFjaG1lbnRzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hdHRhY2htZW50c1NwZWNEYXRhID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudEljb25DbGFzcyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRzdGF0aWNDb21iaW5lZEljb25DbGFzcyh0aGlzLmhhc0F0dGFjaG1lbnRzKCkgPyB0aGlzLmF0dGFjaG1lbnRzU3BlY0RhdGEoKSA6IFtdKVxuXHRcdCk7XG5cblx0XHR0aGlzLmJvZHkgPSBudWxsO1xuXG5cdFx0dGhpcy5pc0h0bWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmhhc0ltYWdlcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYXR0YWNobWVudHMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5pc1BncFNpZ25lZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuaXNQZ3BFbmNyeXB0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBncFNpZ25lZFZlcmlmeVN0YXR1cyA9IGtvLm9ic2VydmFibGUoU2lnbmVkVmVyaWZ5U3RhdHVzLk5vbmUpO1xuXHRcdHRoaXMucGdwU2lnbmVkVmVyaWZ5VXNlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5wcmlvcml0eSA9IGtvLm9ic2VydmFibGUoTWVzc2FnZVByaW9yaXR5Lk5vcm1hbCk7XG5cdFx0dGhpcy5yZWFkUmVjZWlwdCA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5hRHJhZnRJbmZvID0gW107XG5cdFx0dGhpcy5zTWVzc2FnZUlkID0gJyc7XG5cdFx0dGhpcy5zSW5SZXBseVRvID0gJyc7XG5cdFx0dGhpcy5zUmVmZXJlbmNlcyA9ICcnO1xuXG5cdFx0dGhpcy5oYXNVbnNlZW5TdWJNZXNzYWdlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5oYXNGbGFnZ2VkU3ViTWVzc2FnZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy50aHJlYWRzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMudGhyZWFkc0xlbiA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMudGhyZWFkcygpLmxlbmd0aCk7XG5cdFx0dGhpcy5pc0ltcG9ydGFudCA9IGtvLmNvbXB1dGVkKCgpID0+IE1lc3NhZ2VQcmlvcml0eS5IaWdoID09PSB0aGlzLnByaW9yaXR5KCkpO1xuXG5cdFx0dGhpcy5yZWdEaXNwb3NhYmxlcyhbdGhpcy5hdHRhY2htZW50SWNvbkNsYXNzLCB0aGlzLnRocmVhZHNMZW4sIHRoaXMuaXNJbXBvcnRhbnRdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSB7QWpheEpzb25NZXNzYWdlfSBvSnNvbk1lc3NhZ2Vcblx0ICogQHJldHVybnMgez9NZXNzYWdlTW9kZWx9XG5cdCAqL1xuXHRzdGF0aWMgbmV3SW5zdGFuY2VGcm9tSnNvbihqc29uKSB7XG5cdFx0Y29uc3Qgb01lc3NhZ2VNb2RlbCA9IG5ldyBNZXNzYWdlTW9kZWwoKTtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5pbml0QnlKc29uKGpzb24pID8gb01lc3NhZ2VNb2RlbCA6IG51bGw7XG5cdH1cblxuXHRjbGVhcigpIHtcblx0XHR0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ID0gJyc7XG5cdFx0dGhpcy51aWQgPSAnJztcblx0XHR0aGlzLmhhc2ggPSAnJztcblx0XHR0aGlzLnJlcXVlc3RIYXNoID0gJyc7XG5cdFx0dGhpcy5zdWJqZWN0KCcnKTtcblx0XHR0aGlzLnN1YmplY3RQcmVmaXgoJycpO1xuXHRcdHRoaXMuc3ViamVjdFN1ZmZpeCgnJyk7XG5cdFx0dGhpcy5zaXplKDApO1xuXHRcdHRoaXMuZGF0ZVRpbWVTdGFtcEluVVRDKDApO1xuXHRcdHRoaXMucHJpb3JpdHkoTWVzc2FnZVByaW9yaXR5Lk5vcm1hbCk7XG5cblx0XHR0aGlzLnByb3h5ID0gZmFsc2U7XG5cblx0XHR0aGlzLmZyb21FbWFpbFN0cmluZygnJyk7XG5cdFx0dGhpcy5mcm9tQ2xlYXJFbWFpbFN0cmluZygnJyk7XG5cdFx0dGhpcy50b0VtYWlsc1N0cmluZygnJyk7XG5cdFx0dGhpcy50b0NsZWFyRW1haWxzU3RyaW5nKCcnKTtcblx0XHR0aGlzLnNlbmRlckVtYWlsc1N0cmluZygnJyk7XG5cdFx0dGhpcy5zZW5kZXJDbGVhckVtYWlsc1N0cmluZygnJyk7XG5cblx0XHR0aGlzLmVtYWlscyA9IFtdO1xuXG5cdFx0dGhpcy5mcm9tID0gW107XG5cdFx0dGhpcy50byA9IFtdO1xuXHRcdHRoaXMuY2MgPSBbXTtcblx0XHR0aGlzLmJjYyA9IFtdO1xuXHRcdHRoaXMucmVwbHlUbyA9IFtdO1xuXHRcdHRoaXMuZGVsaXZlcmVkVG8gPSBbXTtcblx0XHR0aGlzLnVuc3Vic3JpYmVMaW5rcyA9IFtdO1xuXG5cdFx0dGhpcy5uZXdGb3JBbmltYXRpb24oZmFsc2UpO1xuXG5cdFx0dGhpcy5kZWxldGVkKGZhbHNlKTtcblx0XHR0aGlzLmRlbGV0ZWRNYXJrKGZhbHNlKTtcblx0XHR0aGlzLnVuc2VlbihmYWxzZSk7XG5cdFx0dGhpcy5mbGFnZ2VkKGZhbHNlKTtcblx0XHR0aGlzLmFuc3dlcmVkKGZhbHNlKTtcblx0XHR0aGlzLmZvcndhcmRlZChmYWxzZSk7XG5cdFx0dGhpcy5pc1JlYWRSZWNlaXB0KGZhbHNlKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWQoZmFsc2UpO1xuXHRcdHRoaXMuY2hlY2tlZChmYWxzZSk7XG5cdFx0dGhpcy5oYXNBdHRhY2htZW50cyhmYWxzZSk7XG5cdFx0dGhpcy5hdHRhY2htZW50c1NwZWNEYXRhKFtdKTtcblxuXHRcdHRoaXMuYm9keSA9IG51bGw7XG5cdFx0dGhpcy5pc0h0bWwoZmFsc2UpO1xuXHRcdHRoaXMuaGFzSW1hZ2VzKGZhbHNlKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzKFtdKTtcblxuXHRcdHRoaXMuaXNQZ3BTaWduZWQoZmFsc2UpO1xuXHRcdHRoaXMuaXNQZ3BFbmNyeXB0ZWQoZmFsc2UpO1xuXHRcdHRoaXMucGdwU2lnbmVkVmVyaWZ5U3RhdHVzKFNpZ25lZFZlcmlmeVN0YXR1cy5Ob25lKTtcblx0XHR0aGlzLnBncFNpZ25lZFZlcmlmeVVzZXIoJycpO1xuXG5cdFx0dGhpcy5wcmlvcml0eShNZXNzYWdlUHJpb3JpdHkuTm9ybWFsKTtcblx0XHR0aGlzLnJlYWRSZWNlaXB0KCcnKTtcblx0XHR0aGlzLmFEcmFmdEluZm8gPSBbXTtcblx0XHR0aGlzLnNNZXNzYWdlSWQgPSAnJztcblx0XHR0aGlzLnNJblJlcGx5VG8gPSAnJztcblx0XHR0aGlzLnNSZWZlcmVuY2VzID0gJyc7XG5cblx0XHR0aGlzLnRocmVhZHMoW10pO1xuXG5cdFx0dGhpcy5oYXNVbnNlZW5TdWJNZXNzYWdlKGZhbHNlKTtcblx0XHR0aGlzLmhhc0ZsYWdnZWRTdWJNZXNzYWdlKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FycmF5fSBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIHtBcnJheX1cblx0ICovXG5cdGdldEVtYWlscyhwcm9wZXJ0aWVzKSB7XG5cdFx0cmV0dXJuIF8uY29tcGFjdChcblx0XHRcdF8udW5pcShcblx0XHRcdFx0Xy5tYXAoXG5cdFx0XHRcdFx0Xy5yZWR1Y2UocHJvcGVydGllcywgKGNhcnJ5LCBwcm9wZXJ0eSkgPT4gY2FycnkuY29uY2F0KHRoaXNbcHJvcGVydHldKSwgW10pLFxuXHRcdFx0XHRcdChvSXRlbSkgPT4gKG9JdGVtID8gb0l0ZW0uZW1haWwgOiAnJylcblx0XHRcdFx0KVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cblx0Z2V0UmVjaXBpZW50c0VtYWlscygpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRFbWFpbHMoWyd0bycsICdjYyddKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnJpZW5kbHlTaXplKCkge1xuXHRcdHJldHVybiBmcmllbmRseVNpemUodGhpcy5zaXplKCkpO1xuXHR9XG5cblx0Y29tcHV0ZVNlbmRlckVtYWlsKCkge1xuXHRcdGNvbnN0IHNlbnRGb2xkZXIgPSBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyKCksXG5cdFx0XHRkcmFmdEZvbGRlciA9IEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKCk7XG5cblx0XHR0aGlzLnNlbmRlckVtYWlsc1N0cmluZyhcblx0XHRcdHRoaXMuZm9sZGVyRnVsbE5hbWVSYXcgPT09IHNlbnRGb2xkZXIgfHwgdGhpcy5mb2xkZXJGdWxsTmFtZVJhdyA9PT0gZHJhZnRGb2xkZXJcblx0XHRcdFx0PyB0aGlzLnRvRW1haWxzU3RyaW5nKClcblx0XHRcdFx0OiB0aGlzLmZyb21FbWFpbFN0cmluZygpXG5cdFx0KTtcblxuXHRcdHRoaXMuc2VuZGVyQ2xlYXJFbWFpbHNTdHJpbmcoXG5cdFx0XHR0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ID09PSBzZW50Rm9sZGVyIHx8IHRoaXMuZm9sZGVyRnVsbE5hbWVSYXcgPT09IGRyYWZ0Rm9sZGVyXG5cdFx0XHRcdD8gdGhpcy50b0NsZWFyRW1haWxzU3RyaW5nKClcblx0XHRcdFx0OiB0aGlzLmZyb21DbGVhckVtYWlsU3RyaW5nKClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QWpheEpzb25NZXNzYWdlfSBqc29uXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aW5pdEJ5SnNvbihqc29uKSB7XG5cdFx0bGV0IHJlc3VsdCA9IGZhbHNlLFxuXHRcdFx0cHJpb3JpdHkgPSBNZXNzYWdlUHJpb3JpdHkuTm9ybWFsO1xuXG5cdFx0aWYgKGpzb24gJiYgJ09iamVjdC9NZXNzYWdlJyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHRwcmlvcml0eSA9IHBJbnQoanNvbi5Qcmlvcml0eSk7XG5cdFx0XHR0aGlzLnByaW9yaXR5KFxuXHRcdFx0XHQtMSA8IGluQXJyYXkocHJpb3JpdHksIFtNZXNzYWdlUHJpb3JpdHkuSGlnaCwgTWVzc2FnZVByaW9yaXR5Lkxvd10pID8gcHJpb3JpdHkgOiBNZXNzYWdlUHJpb3JpdHkuTm9ybWFsXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ID0ganNvbi5Gb2xkZXI7XG5cdFx0XHR0aGlzLnVpZCA9IGpzb24uVWlkO1xuXHRcdFx0dGhpcy5oYXNoID0ganNvbi5IYXNoO1xuXHRcdFx0dGhpcy5yZXF1ZXN0SGFzaCA9IGpzb24uUmVxdWVzdEhhc2g7XG5cblx0XHRcdHRoaXMucHJveHkgPSAhIWpzb24uRXh0ZXJuYWxQcm94eTtcblxuXHRcdFx0dGhpcy5zaXplKHBJbnQoanNvbi5TaXplKSk7XG5cblx0XHRcdHRoaXMuZnJvbSA9IGVtYWlsQXJyYXlGcm9tSnNvbihqc29uLkZyb20pO1xuXHRcdFx0dGhpcy50byA9IGVtYWlsQXJyYXlGcm9tSnNvbihqc29uLlRvKTtcblx0XHRcdHRoaXMuY2MgPSBlbWFpbEFycmF5RnJvbUpzb24oanNvbi5DYyk7XG5cdFx0XHR0aGlzLmJjYyA9IGVtYWlsQXJyYXlGcm9tSnNvbihqc29uLkJjYyk7XG5cdFx0XHR0aGlzLnJlcGx5VG8gPSBlbWFpbEFycmF5RnJvbUpzb24oanNvbi5SZXBseVRvKTtcblx0XHRcdHRoaXMuZGVsaXZlcmVkVG8gPSBlbWFpbEFycmF5RnJvbUpzb24oanNvbi5EZWxpdmVyZWRUbyk7XG5cdFx0XHR0aGlzLnVuc3Vic3JpYmVMaW5rcyA9IGlzTm9uRW1wdHlBcnJheShqc29uLlVuc3Vic3JpYmVMaW5rcykgPyBqc29uLlVuc3Vic3JpYmVMaW5rcyA6IFtdO1xuXG5cdFx0XHR0aGlzLnN1YmplY3QoanNvbi5TdWJqZWN0KTtcblx0XHRcdGlmIChpc0FycmF5KGpzb24uU3ViamVjdFBhcnRzKSkge1xuXHRcdFx0XHR0aGlzLnN1YmplY3RQcmVmaXgoanNvbi5TdWJqZWN0UGFydHNbMF0pO1xuXHRcdFx0XHR0aGlzLnN1YmplY3RTdWZmaXgoanNvbi5TdWJqZWN0UGFydHNbMV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zdWJqZWN0UHJlZml4KCcnKTtcblx0XHRcdFx0dGhpcy5zdWJqZWN0U3VmZml4KHRoaXMuc3ViamVjdCgpKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5kYXRlVGltZVN0YW1wSW5VVEMocEludChqc29uLkRhdGVUaW1lU3RhbXBJblVUQykpO1xuXHRcdFx0dGhpcy5oYXNBdHRhY2htZW50cyghIWpzb24uSGFzQXR0YWNobWVudHMpO1xuXHRcdFx0dGhpcy5hdHRhY2htZW50c1NwZWNEYXRhKGlzQXJyYXkoanNvbi5BdHRhY2htZW50c1NwZWNEYXRhKSA/IGpzb24uQXR0YWNobWVudHNTcGVjRGF0YSA6IFtdKTtcblxuXHRcdFx0dGhpcy5mcm9tRW1haWxTdHJpbmcoZW1haWxBcnJheVRvU3RyaW5nKHRoaXMuZnJvbSwgdHJ1ZSkpO1xuXHRcdFx0dGhpcy5mcm9tQ2xlYXJFbWFpbFN0cmluZyhlbWFpbEFycmF5VG9TdHJpbmdDbGVhcih0aGlzLmZyb20pKTtcblx0XHRcdHRoaXMudG9FbWFpbHNTdHJpbmcoZW1haWxBcnJheVRvU3RyaW5nKHRoaXMudG8sIHRydWUpKTtcblx0XHRcdHRoaXMudG9DbGVhckVtYWlsc1N0cmluZyhlbWFpbEFycmF5VG9TdHJpbmdDbGVhcih0aGlzLnRvKSk7XG5cblx0XHRcdHRoaXMudGhyZWFkcyhpc0FycmF5KGpzb24uVGhyZWFkcykgPyBqc29uLlRocmVhZHMgOiBbXSk7XG5cblx0XHRcdHRoaXMuaW5pdEZsYWdzQnlKc29uKGpzb24pO1xuXHRcdFx0dGhpcy5jb21wdXRlU2VuZGVyRW1haWwoKTtcblxuXHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QWpheEpzb25NZXNzYWdlfSBqc29uXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aW5pdFVwZGF0ZUJ5TWVzc2FnZUpzb24oanNvbikge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZSxcblx0XHRcdHByaW9yaXR5ID0gTWVzc2FnZVByaW9yaXR5Lk5vcm1hbDtcblxuXHRcdGlmIChqc29uICYmICdPYmplY3QvTWVzc2FnZScgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0cHJpb3JpdHkgPSBwSW50KGpzb24uUHJpb3JpdHkpO1xuXHRcdFx0dGhpcy5wcmlvcml0eShcblx0XHRcdFx0LTEgPCBpbkFycmF5KHByaW9yaXR5LCBbTWVzc2FnZVByaW9yaXR5LkhpZ2gsIE1lc3NhZ2VQcmlvcml0eS5Mb3ddKSA/IHByaW9yaXR5IDogTWVzc2FnZVByaW9yaXR5Lk5vcm1hbFxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5hRHJhZnRJbmZvID0ganNvbi5EcmFmdEluZm87XG5cblx0XHRcdHRoaXMuc01lc3NhZ2VJZCA9IGpzb24uTWVzc2FnZUlkO1xuXHRcdFx0dGhpcy5zSW5SZXBseVRvID0ganNvbi5JblJlcGx5VG87XG5cdFx0XHR0aGlzLnNSZWZlcmVuY2VzID0ganNvbi5SZWZlcmVuY2VzO1xuXG5cdFx0XHR0aGlzLnByb3h5ID0gISFqc29uLkV4dGVybmFsUHJveHk7XG5cblx0XHRcdGlmIChQZ3BTdG9yZS5jYXBhT3BlblBHUCgpKSB7XG5cdFx0XHRcdHRoaXMuaXNQZ3BTaWduZWQoISFqc29uLlBncFNpZ25lZCk7XG5cdFx0XHRcdHRoaXMuaXNQZ3BFbmNyeXB0ZWQoISFqc29uLlBncEVuY3J5cHRlZCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuaGFzQXR0YWNobWVudHMoISFqc29uLkhhc0F0dGFjaG1lbnRzKTtcblx0XHRcdHRoaXMuYXR0YWNobWVudHNTcGVjRGF0YShpc0FycmF5KGpzb24uQXR0YWNobWVudHNTcGVjRGF0YSkgPyBqc29uLkF0dGFjaG1lbnRzU3BlY0RhdGEgOiBbXSk7XG5cblx0XHRcdHRoaXMuZm91bmRlZENJRHMgPSBpc0FycmF5KGpzb24uRm91bmRlZENJRHMpID8ganNvbi5Gb3VuZGVkQ0lEcyA6IFtdO1xuXHRcdFx0dGhpcy5hdHRhY2htZW50cyh0aGlzLmluaXRBdHRhY2htZW50c0Zyb21Kc29uKGpzb24uQXR0YWNobWVudHMpKTtcblxuXHRcdFx0dGhpcy5yZWFkUmVjZWlwdChqc29uLlJlYWRSZWNlaXB0IHx8ICcnKTtcblxuXHRcdFx0dGhpcy5jb21wdXRlU2VuZGVyRW1haWwoKTtcblxuXHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7KEFqYXhKc29uQXR0YWNobWVudHxudWxsKX0gb0pzb25BdHRhY2htZW50c1xuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHRpbml0QXR0YWNobWVudHNGcm9tSnNvbihqc29uKSB7XG5cdFx0bGV0IGluZGV4ID0gMCxcblx0XHRcdGxlbiA9IDAsXG5cdFx0XHRhdHRhY2htZW50ID0gbnVsbDtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGlmIChqc29uICYmICdDb2xsZWN0aW9uL0F0dGFjaG1lbnRDb2xsZWN0aW9uJyA9PT0ganNvblsnQE9iamVjdCddICYmIGlzTm9uRW1wdHlBcnJheShqc29uWydAQ29sbGVjdGlvbiddKSkge1xuXHRcdFx0Zm9yIChpbmRleCA9IDAsIGxlbiA9IGpzb25bJ0BDb2xsZWN0aW9uJ10ubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuXHRcdFx0XHRhdHRhY2htZW50ID0gQXR0YWNobWVudE1vZGVsLm5ld0luc3RhbmNlRnJvbUpzb24oanNvblsnQENvbGxlY3Rpb24nXVtpbmRleF0pO1xuXHRcdFx0XHRpZiAoYXR0YWNobWVudCkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCcnICE9PSBhdHRhY2htZW50LmNpZFdpdGhPdXRUYWdzICYmXG5cdFx0XHRcdFx0XHQwIDwgdGhpcy5mb3VuZGVkQ0lEcy5sZW5ndGggJiZcblx0XHRcdFx0XHRcdDAgPD0gaW5BcnJheShhdHRhY2htZW50LmNpZFdpdGhPdXRUYWdzLCB0aGlzLmZvdW5kZWRDSURzKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudC5pc0xpbmtlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goYXR0YWNobWVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aGFzVW5zdWJzcmliZUxpbmtzKCkge1xuXHRcdHJldHVybiB0aGlzLnVuc3Vic3JpYmVMaW5rcyAmJiAwIDwgdGhpcy51bnN1YnNyaWJlTGlua3MubGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXRGaXJzdFVuc3Vic3JpYmVMaW5rKCkge1xuXHRcdHJldHVybiB0aGlzLnVuc3Vic3JpYmVMaW5rcyAmJiAwIDwgdGhpcy51bnN1YnNyaWJlTGlua3MubGVuZ3RoID8gdGhpcy51bnN1YnNyaWJlTGlua3NbMF0gfHwgJycgOiAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FqYXhKc29uTWVzc2FnZX0ganNvblxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGluaXRGbGFnc0J5SnNvbihqc29uKSB7XG5cdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRcdGlmIChqc29uICYmICdPYmplY3QvTWVzc2FnZScgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0dGhpcy51bnNlZW4oIWpzb24uSXNTZWVuKTtcblx0XHRcdHRoaXMuZmxhZ2dlZCghIWpzb24uSXNGbGFnZ2VkKTtcblx0XHRcdHRoaXMuYW5zd2VyZWQoISFqc29uLklzQW5zd2VyZWQpO1xuXHRcdFx0dGhpcy5mb3J3YXJkZWQoISFqc29uLklzRm9yd2FyZGVkKTtcblx0XHRcdHRoaXMuaXNSZWFkUmVjZWlwdCghIWpzb24uSXNSZWFkUmVjZWlwdCk7XG5cdFx0XHR0aGlzLmRlbGV0ZWRNYXJrKCEhanNvbi5Jc0RlbGV0ZWQpO1xuXG5cdFx0XHRyZXN1bHQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBmcmllbmRseVZpZXdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcFdpdGhMaW5rID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZyb21Ub0xpbmUoZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmsgPSBmYWxzZSkge1xuXHRcdHJldHVybiBlbWFpbEFycmF5VG9TdHJpbmcodGhpcy5mcm9tLCBmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZyb21Ea2ltRGF0YSgpIHtcblx0XHRsZXQgcmVzdWx0ID0gWydub25lJywgJyddO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkodGhpcy5mcm9tKSAmJiAxID09PSB0aGlzLmZyb20ubGVuZ3RoICYmIHRoaXMuZnJvbVswXSAmJiB0aGlzLmZyb21bMF0uZGtpbVN0YXR1cykge1xuXHRcdFx0cmVzdWx0ID0gW3RoaXMuZnJvbVswXS5ka2ltU3RhdHVzLCB0aGlzLmZyb21bMF0uZGtpbVZhbHVlIHx8ICcnXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZnJpZW5kbHlWaWV3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBXaXRoTGluayA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1RvTGluZShmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayA9IGZhbHNlKSB7XG5cdFx0cmV0dXJuIGVtYWlsQXJyYXlUb1N0cmluZyh0aGlzLnRvLCBmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBmcmllbmRseVZpZXdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcFdpdGhMaW5rID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGNjVG9MaW5lKGZyaWVuZGx5Vmlldywgd3JhcFdpdGhMaW5rID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gZW1haWxBcnJheVRvU3RyaW5nKHRoaXMuY2MsIGZyaWVuZGx5Vmlldywgd3JhcFdpdGhMaW5rKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGZyaWVuZGx5Vmlld1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSB3cmFwV2l0aExpbmsgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0YmNjVG9MaW5lKGZyaWVuZGx5Vmlldywgd3JhcFdpdGhMaW5rID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gZW1haWxBcnJheVRvU3RyaW5nKHRoaXMuYmNjLCBmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBmcmllbmRseVZpZXdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcFdpdGhMaW5rID0gZmFsc2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHJlcGx5VG9Ub0xpbmUoZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmsgPSBmYWxzZSkge1xuXHRcdHJldHVybiBlbWFpbEFycmF5VG9TdHJpbmcodGhpcy5yZXBseVRvLCBmcmllbmRseVZpZXcsIHdyYXBXaXRoTGluayk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiBzdHJpbmdcblx0ICovXG5cdGxpbmVBc0NzcygpIHtcblx0XHRyZXR1cm4gY2xhc3NuYW1lcyh7XG5cdFx0XHQnZGVsZXRlZCc6IHRoaXMuZGVsZXRlZCgpLFxuXHRcdFx0J2RlbGV0ZWQtbWFyayc6IHRoaXMuZGVsZXRlZE1hcmsoKSxcblx0XHRcdCdzZWxlY3RlZCc6IHRoaXMuc2VsZWN0ZWQoKSxcblx0XHRcdCdjaGVja2VkJzogdGhpcy5jaGVja2VkKCksXG5cdFx0XHQnZmxhZ2dlZCc6IHRoaXMuZmxhZ2dlZCgpLFxuXHRcdFx0J3Vuc2Vlbic6IHRoaXMudW5zZWVuKCksXG5cdFx0XHQnYW5zd2VyZWQnOiB0aGlzLmFuc3dlcmVkKCksXG5cdFx0XHQnZm9yd2FyZGVkJzogdGhpcy5mb3J3YXJkZWQoKSxcblx0XHRcdCdmb2N1c2VkJzogdGhpcy5mb2N1c2VkKCksXG5cdFx0XHQnaW1wb3J0YW50JzogdGhpcy5pc0ltcG9ydGFudCgpLFxuXHRcdFx0J3dpdGhBdHRhY2htZW50cyc6IHRoaXMuaGFzQXR0YWNobWVudHMoKSxcblx0XHRcdCduZXcnOiB0aGlzLm5ld0ZvckFuaW1hdGlvbigpLFxuXHRcdFx0J2VtcHR5U3ViamVjdCc6ICcnID09PSB0aGlzLnN1YmplY3QoKSxcblx0XHRcdC8vICdoYXNDaGlsZHJlbk1lc3NhZ2UnOiAxIDwgdGhpcy50aHJlYWRzTGVuKCksXG5cdFx0XHQnaGFzVW5zZWVuU3ViTWVzc2FnZSc6IHRoaXMuaGFzVW5zZWVuU3ViTWVzc2FnZSgpLFxuXHRcdFx0J2hhc0ZsYWdnZWRTdWJNZXNzYWdlJzogdGhpcy5oYXNGbGFnZ2VkU3ViTWVzc2FnZSgpXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXNWaXNpYmxlQXR0YWNobWVudHMoKSB7XG5cdFx0cmV0dXJuICEhXy5maW5kKHRoaXMuYXR0YWNobWVudHMoKSwgKGl0ZW0pID0+ICFpdGVtLmlzTGlua2VkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY2lkXG5cdCAqIEByZXR1cm5zIHsqfVxuXHQgKi9cblx0ZmluZEF0dGFjaG1lbnRCeUNpZChjaWQpIHtcblx0XHRsZXQgcmVzdWx0ID0gbnVsbDtcblx0XHRjb25zdCBhdHRhY2htZW50cyA9IHRoaXMuYXR0YWNobWVudHMoKTtcblxuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkoYXR0YWNobWVudHMpKSB7XG5cdFx0XHRjaWQgPSBjaWQucmVwbGFjZSgvXjwrLywgJycpLnJlcGxhY2UoLz4rJC8sICcnKTtcblx0XHRcdHJlc3VsdCA9IF8uZmluZChhdHRhY2htZW50cywgKGl0ZW0pID0+IGNpZCA9PT0gaXRlbS5jaWRXaXRoT3V0VGFncyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdCB8fCBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50TG9jYXRpb25cblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRmaW5kQXR0YWNobWVudEJ5Q29udGVudExvY2F0aW9uKGNvbnRlbnRMb2NhdGlvbikge1xuXHRcdGxldCByZXN1bHQgPSBudWxsO1xuXHRcdGNvbnN0IGF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50cygpO1xuXG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShhdHRhY2htZW50cykpIHtcblx0XHRcdHJlc3VsdCA9IF8uZmluZChhdHRhY2htZW50cywgKGl0ZW0pID0+IGNvbnRlbnRMb2NhdGlvbiA9PT0gaXRlbS5jb250ZW50TG9jYXRpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQgfHwgbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0bWVzc2FnZUlkKCkge1xuXHRcdHJldHVybiB0aGlzLnNNZXNzYWdlSWQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGluUmVwbHlUbygpIHtcblx0XHRyZXR1cm4gdGhpcy5zSW5SZXBseVRvO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRyZWZlcmVuY2VzKCkge1xuXHRcdHJldHVybiB0aGlzLnNSZWZlcmVuY2VzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmcm9tQXNTaW5nbGVFbWFpbCgpIHtcblx0XHRyZXR1cm4gaXNBcnJheSh0aGlzLmZyb20pICYmIHRoaXMuZnJvbVswXSA/IHRoaXMuZnJvbVswXS5lbWFpbCA6ICcnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR2aWV3TGluaygpIHtcblx0XHRyZXR1cm4gbWVzc2FnZVZpZXdMaW5rKHRoaXMucmVxdWVzdEhhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRkb3dubG9hZExpbmsoKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VEb3dubG9hZExpbmsodGhpcy5yZXF1ZXN0SGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGV4Y2x1ZGVFbWFpbHNcblx0ICogQHBhcmFtIHtib29sZWFuPX0gbGFzdCA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtBcnJheX1cblx0ICovXG5cdHJlcGx5RW1haWxzKGV4Y2x1ZGVFbWFpbHMsIGxhc3QgPSBmYWxzZSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdLFxuXHRcdFx0dW5pYyA9IGlzVW5kKGV4Y2x1ZGVFbWFpbHMpID8ge30gOiBleGNsdWRlRW1haWxzO1xuXG5cdFx0cmVwbHlIZWxwZXIodGhpcy5yZXBseVRvLCB1bmljLCByZXN1bHQpO1xuXHRcdGlmICgwID09PSByZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRyZXBseUhlbHBlcih0aGlzLmZyb20sIHVuaWMsIHJlc3VsdCk7XG5cdFx0fVxuXG5cdFx0aWYgKDAgPT09IHJlc3VsdC5sZW5ndGggJiYgIWxhc3QpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlcGx5RW1haWxzKHt9LCB0cnVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBleGNsdWRlRW1haWxzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGxhc3QgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5Pn1cblx0ICovXG5cdHJlcGx5QWxsRW1haWxzKGV4Y2x1ZGVFbWFpbHMsIGxhc3QgPSBmYWxzZSkge1xuXHRcdGxldCBkYXRhID0gW107XG5cdFx0Y29uc3QgdG9SZXN1bHQgPSBbXSxcblx0XHRcdGNjUmVzdWx0ID0gW10sXG5cdFx0XHR1bmljID0gaXNVbmQoZXhjbHVkZUVtYWlscykgPyB7fSA6IGV4Y2x1ZGVFbWFpbHM7XG5cblx0XHRyZXBseUhlbHBlcih0aGlzLnJlcGx5VG8sIHVuaWMsIHRvUmVzdWx0KTtcblx0XHRpZiAoMCA9PT0gdG9SZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRyZXBseUhlbHBlcih0aGlzLmZyb20sIHVuaWMsIHRvUmVzdWx0KTtcblx0XHR9XG5cblx0XHRyZXBseUhlbHBlcih0aGlzLnRvLCB1bmljLCB0b1Jlc3VsdCk7XG5cdFx0cmVwbHlIZWxwZXIodGhpcy5jYywgdW5pYywgY2NSZXN1bHQpO1xuXG5cdFx0aWYgKDAgPT09IHRvUmVzdWx0Lmxlbmd0aCAmJiAhbGFzdCkge1xuXHRcdFx0ZGF0YSA9IHRoaXMucmVwbHlBbGxFbWFpbHMoe30sIHRydWUpO1xuXHRcdFx0cmV0dXJuIFtkYXRhWzBdLCBjY1Jlc3VsdF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFt0b1Jlc3VsdCwgY2NSZXN1bHRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR0ZXh0Qm9keVRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLmJvZHkgPyB0aGlzLmJvZHkuaHRtbCgpIDogJyc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGF0dGFjaG1lbnRzVG9TdHJpbmdMaW5lKCkge1xuXHRcdGNvbnN0IGF0dGFjaExpbmVzID0gXy5tYXAodGhpcy5hdHRhY2htZW50cygpLCAoaXRlbSkgPT4gaXRlbS5maWxlTmFtZSArICcgKCcgKyBpdGVtLmZyaWVuZGx5U2l6ZSArICcpJyk7XG5cdFx0cmV0dXJuIGF0dGFjaExpbmVzICYmIDAgPCBhdHRhY2hMaW5lcy5sZW5ndGggPyBhdHRhY2hMaW5lcy5qb2luKCcsICcpIDogJyc7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gcHJpbnQgPSBmYWxzZVxuXHQgKi9cblx0dmlld1BvcHVwTWVzc2FnZShwcmludCA9IGZhbHNlKSB7XG5cdFx0dGhpcy5zaG93TGF6eUV4dGVybmFsSW1hZ2VzSW5Cb2R5KCk7XG5cblx0XHRjb25zdCB0aW1lU3RhbXBJblVUQyA9IHRoaXMuZGF0ZVRpbWVTdGFtcEluVVRDKCkgfHwgMCxcblx0XHRcdGNjTGluZSA9IHRoaXMuY2NUb0xpbmUoZmFsc2UpLFxuXHRcdFx0bSA9IDAgPCB0aW1lU3RhbXBJblVUQyA/IG1vbWVudC51bml4KHRpbWVTdGFtcEluVVRDKSA6IG51bGw7XG5cblx0XHRwcmV2aWV3TWVzc2FnZShcblx0XHRcdHtcblx0XHRcdFx0dGl0bGU6IHRoaXMuc3ViamVjdCgpLFxuXHRcdFx0XHRzdWJqZWN0OiB0aGlzLnN1YmplY3QoKSxcblx0XHRcdFx0ZGF0ZTogbSA/IG0uZm9ybWF0KCdMTEwnKSA6ICcnLFxuXHRcdFx0XHRmcm9tQ3JlZHM6IHRoaXMuZnJvbVRvTGluZShmYWxzZSksXG5cdFx0XHRcdHRvTGFiZWw6IGkxOG4oJ01FU1NBR0UvTEFCRUxfVE8nKSxcblx0XHRcdFx0dG9DcmVkczogdGhpcy50b1RvTGluZShmYWxzZSksXG5cdFx0XHRcdGNjQ2xhc3M6IGNjTGluZSA/ICcnIDogJ3JsLXByZXZpZXctaGlkZScsXG5cdFx0XHRcdGNjTGFiZWw6IGkxOG4oJ01FU1NBR0UvTEFCRUxfQ0MnKSxcblx0XHRcdFx0Y2NDcmVkczogY2NMaW5lXG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5ib2R5LFxuXHRcdFx0dGhpcy5pc0h0bWwoKSxcblx0XHRcdHByaW50XG5cdFx0KTtcblx0fVxuXG5cdHByaW50TWVzc2FnZSgpIHtcblx0XHR0aGlzLnZpZXdQb3B1cE1lc3NhZ2UodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGdlbmVyYXRlVWlkKCkge1xuXHRcdHJldHVybiB0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ICsgJy8nICsgdGhpcy51aWQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtNZXNzYWdlTW9kZWx9IG1lc3NhZ2Vcblx0ICogQHJldHVybnMge01lc3NhZ2VNb2RlbH1cblx0ICovXG5cdHBvcHVsYXRlQnlNZXNzYWdlTGlzdEl0ZW0obWVzc2FnZSkge1xuXHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHR0aGlzLmZvbGRlckZ1bGxOYW1lUmF3ID0gbWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdztcblx0XHRcdHRoaXMudWlkID0gbWVzc2FnZS51aWQ7XG5cdFx0XHR0aGlzLmhhc2ggPSBtZXNzYWdlLmhhc2g7XG5cdFx0XHR0aGlzLnJlcXVlc3RIYXNoID0gbWVzc2FnZS5yZXF1ZXN0SGFzaDtcblx0XHRcdHRoaXMuc3ViamVjdChtZXNzYWdlLnN1YmplY3QoKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdWJqZWN0UHJlZml4KHRoaXMuc3ViamVjdFByZWZpeCgpKTtcblx0XHR0aGlzLnN1YmplY3RTdWZmaXgodGhpcy5zdWJqZWN0U3VmZml4KCkpO1xuXG5cdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdHRoaXMuc2l6ZShtZXNzYWdlLnNpemUoKSk7XG5cdFx0XHR0aGlzLmRhdGVUaW1lU3RhbXBJblVUQyhtZXNzYWdlLmRhdGVUaW1lU3RhbXBJblVUQygpKTtcblx0XHRcdHRoaXMucHJpb3JpdHkobWVzc2FnZS5wcmlvcml0eSgpKTtcblxuXHRcdFx0dGhpcy5wcm94eSA9IG1lc3NhZ2UucHJveHk7XG5cblx0XHRcdHRoaXMuZnJvbUVtYWlsU3RyaW5nKG1lc3NhZ2UuZnJvbUVtYWlsU3RyaW5nKCkpO1xuXHRcdFx0dGhpcy5mcm9tQ2xlYXJFbWFpbFN0cmluZyhtZXNzYWdlLmZyb21DbGVhckVtYWlsU3RyaW5nKCkpO1xuXHRcdFx0dGhpcy50b0VtYWlsc1N0cmluZyhtZXNzYWdlLnRvRW1haWxzU3RyaW5nKCkpO1xuXHRcdFx0dGhpcy50b0NsZWFyRW1haWxzU3RyaW5nKG1lc3NhZ2UudG9DbGVhckVtYWlsc1N0cmluZygpKTtcblxuXHRcdFx0dGhpcy5lbWFpbHMgPSBtZXNzYWdlLmVtYWlscztcblxuXHRcdFx0dGhpcy5mcm9tID0gbWVzc2FnZS5mcm9tO1xuXHRcdFx0dGhpcy50byA9IG1lc3NhZ2UudG87XG5cdFx0XHR0aGlzLmNjID0gbWVzc2FnZS5jYztcblx0XHRcdHRoaXMuYmNjID0gbWVzc2FnZS5iY2M7XG5cdFx0XHR0aGlzLnJlcGx5VG8gPSBtZXNzYWdlLnJlcGx5VG87XG5cdFx0XHR0aGlzLmRlbGl2ZXJlZFRvID0gbWVzc2FnZS5kZWxpdmVyZWRUbztcblx0XHRcdHRoaXMudW5zdWJzcmliZUxpbmtzID0gbWVzc2FnZS51bnN1YnNyaWJlTGlua3M7XG5cblx0XHRcdHRoaXMudW5zZWVuKG1lc3NhZ2UudW5zZWVuKCkpO1xuXHRcdFx0dGhpcy5mbGFnZ2VkKG1lc3NhZ2UuZmxhZ2dlZCgpKTtcblx0XHRcdHRoaXMuYW5zd2VyZWQobWVzc2FnZS5hbnN3ZXJlZCgpKTtcblx0XHRcdHRoaXMuZm9yd2FyZGVkKG1lc3NhZ2UuZm9yd2FyZGVkKCkpO1xuXHRcdFx0dGhpcy5pc1JlYWRSZWNlaXB0KG1lc3NhZ2UuaXNSZWFkUmVjZWlwdCgpKTtcblx0XHRcdHRoaXMuZGVsZXRlZE1hcmsobWVzc2FnZS5kZWxldGVkTWFyaygpKTtcblxuXHRcdFx0dGhpcy5wcmlvcml0eShtZXNzYWdlLnByaW9yaXR5KCkpO1xuXG5cdFx0XHR0aGlzLnNlbGVjdGVkKG1lc3NhZ2Uuc2VsZWN0ZWQoKSk7XG5cdFx0XHR0aGlzLmNoZWNrZWQobWVzc2FnZS5jaGVja2VkKCkpO1xuXHRcdFx0dGhpcy5oYXNBdHRhY2htZW50cyhtZXNzYWdlLmhhc0F0dGFjaG1lbnRzKCkpO1xuXHRcdFx0dGhpcy5hdHRhY2htZW50c1NwZWNEYXRhKG1lc3NhZ2UuYXR0YWNobWVudHNTcGVjRGF0YSgpKTtcblx0XHR9XG5cblx0XHR0aGlzLmJvZHkgPSBudWxsO1xuXG5cdFx0dGhpcy5hRHJhZnRJbmZvID0gW107XG5cdFx0dGhpcy5zTWVzc2FnZUlkID0gJyc7XG5cdFx0dGhpcy5zSW5SZXBseVRvID0gJyc7XG5cdFx0dGhpcy5zUmVmZXJlbmNlcyA9ICcnO1xuXG5cdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdHRoaXMudGhyZWFkcyhtZXNzYWdlLnRocmVhZHMoKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jb21wdXRlU2VuZGVyRW1haWwoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2hvd0xhenlFeHRlcm5hbEltYWdlc0luQm9keSgpIHtcblx0XHRpZiAodGhpcy5ib2R5KSB7XG5cdFx0XHQkKCcubGF6eVtkYXRhLW9yaWdpbmFsXScsIHRoaXMuYm9keSkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0JCh0aGlzKVxuXHRcdFx0XHRcdC5hdHRyKCdzcmMnLCAkKHRoaXMpLmF0dHIoJ2RhdGEtb3JpZ2luYWwnKSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0XHQucmVtb3ZlQXR0cignZGF0YS1vcmlnaW5hbCcpXG5cdFx0XHRcdFx0LnJlbW92ZUF0dHIoJ2RhdGEtbG9hZGVkJyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRsb3phZCgpIHtcblx0XHRsb3phZCgnaW1nLmxhenk6bm90KC5sYXp5LWluaXRlZCknLCB7XG5cdFx0XHR0aHJlc2hvbGQ6IDAuNCxcblx0XHRcdGxvYWQ6IChlbGVtZW50KSA9PiB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdsYXp5JywgZWxlbWVudC5kYXRhc2V0Lm9yaWdpbmFsKTtcblx0XHRcdFx0ZWxlbWVudC5zcmMgPSBEQVRBX0lNQUdFX0xBWllfUExBQ0VIT0xERVJfUElDO1xuXHRcdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCdsYXp5LWluaXRlZCcpXG5cdFx0XHRcdFx0LmF0dHIoJ3NyYycsIGVsZW1lbnQuZGF0YXNldC5vcmlnaW5hbClcblx0XHRcdFx0XHQucmVtb3ZlQXR0cignZGF0YS1sb2FkZWQnKVxuXHRcdFx0XHRcdC5yZW1vdmVBdHRyKCdkYXRhLW9yaWdpbmFsJylcblx0XHRcdFx0XHQuY3NzKHsgb3BhY2l0eTogMC4zIH0pXG5cdFx0XHRcdFx0LmFuaW1hdGUoeyBvcGFjaXR5OiAxIH0sIDUwMCk7XG5cdFx0XHR9XG5cdFx0fSkub2JzZXJ2ZSgpO1xuXHR9XG5cblx0c2hvd0V4dGVybmFsSW1hZ2VzKGxhenkgPSBmYWxzZSkge1xuXHRcdGlmICh0aGlzLmJvZHkgJiYgdGhpcy5ib2R5LmRhdGEoJ3JsLWhhcy1pbWFnZXMnKSkge1xuXHRcdFx0dGhpcy5oYXNJbWFnZXMoZmFsc2UpO1xuXHRcdFx0dGhpcy5ib2R5LmRhdGEoJ3JsLWhhcy1pbWFnZXMnLCBmYWxzZSk7XG5cblx0XHRcdGxldCBhdHRyID0gdGhpcy5wcm94eSA/ICdkYXRhLXgtYWRkaXRpb25hbC1zcmMnIDogJ2RhdGEteC1zcmMnO1xuXHRcdFx0JCgnWycgKyBhdHRyICsgJ10nLCB0aGlzLmJvZHkpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0aWYgKGxhenkgJiYgJHRoaXMuaXMoJ2ltZycpKSB7XG5cdFx0XHRcdFx0JHRoaXNcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygnbGF6eScpXG5cdFx0XHRcdFx0XHQuYXR0cignZGF0YS1vcmlnaW5hbCcsICR0aGlzLmF0dHIoYXR0cikpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQXR0cignZGF0YS1sb2FkZWQnKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkdGhpcy5hdHRyKCdzcmMnLCAkdGhpcy5hdHRyKGF0dHIpKS5yZW1vdmVBdHRyKCdkYXRhLWxvYWRlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0YXR0ciA9IHRoaXMucHJveHkgPyAnZGF0YS14LWFkZGl0aW9uYWwtc3R5bGUtdXJsJyA6ICdkYXRhLXgtc3R5bGUtdXJsJztcblx0XHRcdCQoJ1snICsgYXR0ciArICddJywgdGhpcy5ib2R5KS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGxldCBzdHlsZSA9IHRyaW0oJHRoaXMuYXR0cignc3R5bGUnKSk7XG5cdFx0XHRcdHN0eWxlID0gJycgPT09IHN0eWxlID8gJycgOiAnOycgPT09IHN0eWxlLnN1YnN0cigtMSkgPyBzdHlsZSArICcgJyA6IHN0eWxlICsgJzsgJztcblx0XHRcdFx0JHRoaXMuYXR0cignc3R5bGUnLCBzdHlsZSArICR0aGlzLmF0dHIoYXR0cikpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChsYXp5KSB7XG5cdFx0XHRcdHRoaXMubG96YWQoKTtcblx0XHRcdFx0JHdpbi5yZXNpemUoKTtcblx0XHRcdH1cblxuXHRcdFx0d2luZG93UmVzaXplKDUwMCk7XG5cdFx0fVxuXHR9XG5cblx0c2hvd0ludGVybmFsSW1hZ2VzKGxhenkgPSBmYWxzZSkge1xuXHRcdGlmICh0aGlzLmJvZHkgJiYgIXRoaXMuYm9keS5kYXRhKCdybC1pbml0LWludGVybmFsLWltYWdlcycpKSB7XG5cdFx0XHR0aGlzLmJvZHkuZGF0YSgncmwtaW5pdC1pbnRlcm5hbC1pbWFnZXMnLCB0cnVlKTtcblxuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHRcdCQoJ1tkYXRhLXgtc3JjLWNpZF0nLCB0aGlzLmJvZHkpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0XHRhdHRhY2htZW50ID0gc2VsZi5maW5kQXR0YWNobWVudEJ5Q2lkKCR0aGlzLmF0dHIoJ2RhdGEteC1zcmMtY2lkJykpO1xuXG5cdFx0XHRcdGlmIChhdHRhY2htZW50ICYmIGF0dGFjaG1lbnQuZG93bmxvYWQpIHtcblx0XHRcdFx0XHRpZiAobGF6eSAmJiAkdGhpcy5pcygnaW1nJykpIHtcblx0XHRcdFx0XHRcdCR0aGlzLmFkZENsYXNzKCdsYXp5JykuYXR0cignZGF0YS1vcmlnaW5hbCcsIGF0dGFjaG1lbnQubGlua1ByZXZpZXcoKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCR0aGlzLmF0dHIoJ3NyYycsIGF0dGFjaG1lbnQubGlua1ByZXZpZXcoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0JCgnW2RhdGEteC1zcmMtbG9jYXRpb25dJywgdGhpcy5ib2R5KS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGxldCBhdHRhY2htZW50ID0gc2VsZi5maW5kQXR0YWNobWVudEJ5Q29udGVudExvY2F0aW9uKCR0aGlzLmF0dHIoJ2RhdGEteC1zcmMtbG9jYXRpb24nKSk7XG5cdFx0XHRcdGlmICghYXR0YWNobWVudCkge1xuXHRcdFx0XHRcdGF0dGFjaG1lbnQgPSBzZWxmLmZpbmRBdHRhY2htZW50QnlDaWQoJHRoaXMuYXR0cignZGF0YS14LXNyYy1sb2NhdGlvbicpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChhdHRhY2htZW50ICYmIGF0dGFjaG1lbnQuZG93bmxvYWQpIHtcblx0XHRcdFx0XHRpZiAobGF6eSAmJiAkdGhpcy5pcygnaW1nJykpIHtcblx0XHRcdFx0XHRcdCR0aGlzLmFkZENsYXNzKCdsYXp5JykuYXR0cignZGF0YS1vcmlnaW5hbCcsIGF0dGFjaG1lbnQubGlua1ByZXZpZXcoKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCR0aGlzLmF0dHIoJ3NyYycsIGF0dGFjaG1lbnQubGlua1ByZXZpZXcoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0JCgnW2RhdGEteC1zdHlsZS1jaWRdJywgdGhpcy5ib2R5KS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsZXQgc3R5bGUgPSAnJyxcblx0XHRcdFx0XHRuYW1lID0gJyc7XG5cblx0XHRcdFx0Y29uc3QgJHRoaXMgPSAkKHRoaXMpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRcdGF0dGFjaG1lbnQgPSBzZWxmLmZpbmRBdHRhY2htZW50QnlDaWQoJHRoaXMuYXR0cignZGF0YS14LXN0eWxlLWNpZCcpKTtcblxuXHRcdFx0XHRpZiAoYXR0YWNobWVudCAmJiBhdHRhY2htZW50LmxpbmtQcmV2aWV3KSB7XG5cdFx0XHRcdFx0bmFtZSA9ICR0aGlzLmF0dHIoJ2RhdGEteC1zdHlsZS1jaWQtbmFtZScpO1xuXHRcdFx0XHRcdGlmICgnJyAhPT0gbmFtZSkge1xuXHRcdFx0XHRcdFx0c3R5bGUgPSB0cmltKCR0aGlzLmF0dHIoJ3N0eWxlJykpO1xuXHRcdFx0XHRcdFx0c3R5bGUgPSAnJyA9PT0gc3R5bGUgPyAnJyA6ICc7JyA9PT0gc3R5bGUuc3Vic3RyKC0xKSA/IHN0eWxlICsgJyAnIDogc3R5bGUgKyAnOyAnO1xuXHRcdFx0XHRcdFx0JHRoaXMuYXR0cignc3R5bGUnLCBzdHlsZSArIG5hbWUgKyBcIjogdXJsKCdcIiArIGF0dGFjaG1lbnQubGlua1ByZXZpZXcoKSArIFwiJylcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGxhenkpIHtcblx0XHRcdFx0Ly8gJCgnLlJMLU1haWxNZXNzYWdlVmlldyAubWVzc2FnZVZpZXcgLm1lc3NhZ2VJdGVtIC5jb250ZW50JylbMF1cblx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmxvemFkKCksIDMwMCk7XG5cdFx0XHR9XG5cblx0XHRcdHdpbmRvd1Jlc2l6ZSg1MDApO1xuXHRcdH1cblx0fVxuXG5cdHN0b3JlRGF0YUluRG9tKCkge1xuXHRcdGlmICh0aGlzLmJvZHkpIHtcblx0XHRcdHRoaXMuYm9keS5kYXRhKCdybC1pcy1odG1sJywgISF0aGlzLmlzSHRtbCgpKTtcblx0XHRcdHRoaXMuYm9keS5kYXRhKCdybC1oYXMtaW1hZ2VzJywgISF0aGlzLmhhc0ltYWdlcygpKTtcblx0XHR9XG5cdH1cblxuXHRmZXRjaERhdGFGcm9tRG9tKCkge1xuXHRcdGlmICh0aGlzLmJvZHkpIHtcblx0XHRcdHRoaXMuaXNIdG1sKCEhdGhpcy5ib2R5LmRhdGEoJ3JsLWlzLWh0bWwnKSk7XG5cdFx0XHR0aGlzLmhhc0ltYWdlcyghIXRoaXMuYm9keS5kYXRhKCdybC1oYXMtaW1hZ2VzJykpO1xuXHRcdH1cblx0fVxuXG5cdHJlcGxhY2VQbGFuZVRleHRCb2R5KHBsYWluKSB7XG5cdFx0aWYgKHRoaXMuYm9keSkge1xuXHRcdFx0dGhpcy5ib2R5Lmh0bWwocGxhaW4pLmFkZENsYXNzKCdiLXRleHQtcGFydCBwbGFpbicpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZmxhZ0hhc2goKSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHRoaXMuZGVsZXRlZCgpLFxuXHRcdFx0dGhpcy5kZWxldGVkTWFyaygpLFxuXHRcdFx0dGhpcy51bnNlZW4oKSxcblx0XHRcdHRoaXMuZmxhZ2dlZCgpLFxuXHRcdFx0dGhpcy5hbnN3ZXJlZCgpLFxuXHRcdFx0dGhpcy5mb3J3YXJkZWQoKSxcblx0XHRcdHRoaXMuaXNSZWFkUmVjZWlwdCgpXG5cdFx0XS5qb2luKCcsJyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgTWVzc2FnZU1vZGVsLCBNZXNzYWdlTW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiLyohXG4gKiBKYXZhU2NyaXB0IENvb2tpZSB2Mi4yLjFcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qcy1jb29raWUvanMtY29va2llXG4gKlxuICogQ29weXJpZ2h0IDIwMDYsIDIwMTUgS2xhdXMgSGFydGwgJiBGYWduZXIgQnJhY2tcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG47KGZ1bmN0aW9uIChmYWN0b3J5KSB7XG5cdHZhciByZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXI7XG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoZmFjdG9yeSk7XG5cdFx0cmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyID0gdHJ1ZTtcblx0fVxuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdFx0cmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyID0gdHJ1ZTtcblx0fVxuXHRpZiAoIXJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlcikge1xuXHRcdHZhciBPbGRDb29raWVzID0gd2luZG93LkNvb2tpZXM7XG5cdFx0dmFyIGFwaSA9IHdpbmRvdy5Db29raWVzID0gZmFjdG9yeSgpO1xuXHRcdGFwaS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0d2luZG93LkNvb2tpZXMgPSBPbGRDb29raWVzO1xuXHRcdFx0cmV0dXJuIGFwaTtcblx0XHR9O1xuXHR9XG59KGZ1bmN0aW9uICgpIHtcblx0ZnVuY3Rpb24gZXh0ZW5kICgpIHtcblx0XHR2YXIgaSA9IDA7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXR0cmlidXRlcyA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0cmVzdWx0W2tleV0gPSBhdHRyaWJ1dGVzW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmdW5jdGlvbiBkZWNvZGUgKHMpIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC8oJVswLTlBLVpdezJ9KSsvZywgZGVjb2RlVVJJQ29tcG9uZW50KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGluaXQgKGNvbnZlcnRlcikge1xuXHRcdGZ1bmN0aW9uIGFwaSgpIHt9XG5cblx0XHRmdW5jdGlvbiBzZXQgKGtleSwgdmFsdWUsIGF0dHJpYnV0ZXMpIHtcblx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0YXR0cmlidXRlcyA9IGV4dGVuZCh7XG5cdFx0XHRcdHBhdGg6ICcvJ1xuXHRcdFx0fSwgYXBpLmRlZmF1bHRzLCBhdHRyaWJ1dGVzKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmV4cGlyZXMgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGF0dHJpYnV0ZXMuZXhwaXJlcyA9IG5ldyBEYXRlKG5ldyBEYXRlKCkgKiAxICsgYXR0cmlidXRlcy5leHBpcmVzICogODY0ZSs1KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2UncmUgdXNpbmcgXCJleHBpcmVzXCIgYmVjYXVzZSBcIm1heC1hZ2VcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFXG5cdFx0XHRhdHRyaWJ1dGVzLmV4cGlyZXMgPSBhdHRyaWJ1dGVzLmV4cGlyZXMgPyBhdHRyaWJ1dGVzLmV4cGlyZXMudG9VVENTdHJpbmcoKSA6ICcnO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXHRcdFx0XHRpZiAoL15bXFx7XFxbXS8udGVzdChyZXN1bHQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSByZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRcdHZhbHVlID0gY29udmVydGVyLndyaXRlID9cblx0XHRcdFx0Y29udmVydGVyLndyaXRlKHZhbHVlLCBrZXkpIDpcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh2YWx1ZSkpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8M0F8M0N8M0V8M0R8MkZ8M0Z8NDB8NUJ8NUR8NUV8NjB8N0J8N0R8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudCk7XG5cblx0XHRcdGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoa2V5KSlcblx0XHRcdFx0LnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8NUV8NjB8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudClcblx0XHRcdFx0LnJlcGxhY2UoL1tcXChcXCldL2csIGVzY2FwZSk7XG5cblx0XHRcdHZhciBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgPSAnJztcblx0XHRcdGZvciAodmFyIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlcykge1xuXHRcdFx0XHRpZiAoIWF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzdHJpbmdpZmllZEF0dHJpYnV0ZXMgKz0gJzsgJyArIGF0dHJpYnV0ZU5hbWU7XG5cdFx0XHRcdGlmIChhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb25zaWRlcnMgUkZDIDYyNjUgc2VjdGlvbiA1LjI6XG5cdFx0XHRcdC8vIC4uLlxuXHRcdFx0XHQvLyAzLiAgSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG5cdFx0XHRcdC8vICAgICBjaGFyYWN0ZXI6XG5cdFx0XHRcdC8vIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sXG5cdFx0XHRcdC8vIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuXHRcdFx0XHQvLyAuLi5cblx0XHRcdFx0c3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc9JyArIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0uc3BsaXQoJzsnKVswXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChkb2N1bWVudC5jb29raWUgPSBrZXkgKyAnPScgKyB2YWx1ZSArIHN0cmluZ2lmaWVkQXR0cmlidXRlcyk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0IChrZXksIGpzb24pIHtcblx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGphciA9IHt9O1xuXHRcdFx0Ly8gVG8gcHJldmVudCB0aGUgZm9yIGxvb3AgaW4gdGhlIGZpcnN0IHBsYWNlIGFzc2lnbiBhbiBlbXB0eSBhcnJheVxuXHRcdFx0Ly8gaW4gY2FzZSB0aGVyZSBhcmUgbm8gY29va2llcyBhdCBhbGwuXG5cdFx0XHR2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZSA/IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKSA6IFtdO1xuXHRcdFx0dmFyIGkgPSAwO1xuXG5cdFx0XHRmb3IgKDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIHBhcnRzID0gY29va2llc1tpXS5zcGxpdCgnPScpO1xuXHRcdFx0XHR2YXIgY29va2llID0gcGFydHMuc2xpY2UoMSkuam9pbignPScpO1xuXG5cdFx0XHRcdGlmICghanNvbiAmJiBjb29raWUuY2hhckF0KDApID09PSAnXCInKSB7XG5cdFx0XHRcdFx0Y29va2llID0gY29va2llLnNsaWNlKDEsIC0xKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dmFyIG5hbWUgPSBkZWNvZGUocGFydHNbMF0pO1xuXHRcdFx0XHRcdGNvb2tpZSA9IChjb252ZXJ0ZXIucmVhZCB8fCBjb252ZXJ0ZXIpKGNvb2tpZSwgbmFtZSkgfHxcblx0XHRcdFx0XHRcdGRlY29kZShjb29raWUpO1xuXG5cdFx0XHRcdFx0aWYgKGpzb24pIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvb2tpZSA9IEpTT04ucGFyc2UoY29va2llKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0amFyW25hbWVdID0gY29va2llO1xuXG5cdFx0XHRcdFx0aWYgKGtleSA9PT0gbmFtZSkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ga2V5ID8gamFyW2tleV0gOiBqYXI7XG5cdFx0fVxuXG5cdFx0YXBpLnNldCA9IHNldDtcblx0XHRhcGkuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGdldChrZXksIGZhbHNlIC8qIHJlYWQgYXMgcmF3ICovKTtcblx0XHR9O1xuXHRcdGFwaS5nZXRKU09OID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGdldChrZXksIHRydWUgLyogcmVhZCBhcyBqc29uICovKTtcblx0XHR9O1xuXHRcdGFwaS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5LCBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRzZXQoa2V5LCAnJywgZXh0ZW5kKGF0dHJpYnV0ZXMsIHtcblx0XHRcdFx0ZXhwaXJlczogLTFcblx0XHRcdH0pKTtcblx0XHR9O1xuXG5cdFx0YXBpLmRlZmF1bHRzID0ge307XG5cblx0XHRhcGkud2l0aENvbnZlcnRlciA9IGluaXQ7XG5cblx0XHRyZXR1cm4gYXBpO1xuXHR9XG5cblx0cmV0dXJuIGluaXQoZnVuY3Rpb24gKCkge30pO1xufSkpO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBxdW90ID0gL1wiL2c7XG5cbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVodG1sXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSkge1xuICB2YXIgUyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHN0cmluZykpO1xuICB2YXIgcDEgPSAnPCcgKyB0YWc7XG4gIGlmIChhdHRyaWJ1dGUgIT09ICcnKSBwMSArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPVwiJyArIFN0cmluZyh2YWx1ZSkucmVwbGFjZShxdW90LCAnJnF1b3Q7JykgKyAnXCInO1xuICByZXR1cm4gcDEgKyAnPicgKyBTICsgJzwvJyArIHRhZyArICc+Jztcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiBhIG1ldGhvZCwgbG93ZXJjYXNlXG4vLyBvZiBhIHRhZyBhbmQgZXNjYXBpbmcgcXVvdGVzIGluIGFyZ3VtZW50c1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgcmV0dXJuIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGVzdCA9ICcnW01FVEhPRF9OQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSk7XG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3RyaW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgdHJpbSA9IHJlcXVpcmUoJy4uL3N0cmluZy92aXJ0dWFsL3RyaW0nKTtcblxudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC50cmltO1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnc3RyaW5nJyB8fCBpdCA9PT0gU3RyaW5nUHJvdG90eXBlXG4gICAgfHwgKGl0IGluc3RhbmNlb2YgU3RyaW5nICYmIG93biA9PT0gU3RyaW5nUHJvdG90eXBlLnRyaW0pID8gdHJpbSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy50cmltJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ1N0cmluZycpLnRyaW07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ1RyaW1NZXRob2QoJ3RyaW0nKSB9LCB7XG4gIHRyaW06IGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMpO1xuICB9XG59KTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciB3aGl0ZXNwYWNlID0gJ1snICsgd2hpdGVzcGFjZXMgKyAnXSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgd2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHdoaXRlc3BhY2UgKyB3aGl0ZXNwYWNlICsgJyokJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbSwgdHJpbVN0YXJ0LCB0cmltRW5kLCB0cmltTGVmdCwgdHJpbVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzKSB7XG4gICAgdmFyIHN0cmluZyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICAgIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbUxlZnQsIHRyaW1TdGFydCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4gIHRyaW06IGNyZWF0ZU1ldGhvZCgzKVxufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBub24gPSAnXFx1MjAwQlxcdTAwODVcXHUxODBFJztcblxuLy8gY2hlY2sgdGhhdCBhIG1ldGhvZCB3b3JrcyB3aXRoIHRoZSBjb3JyZWN0IGxpc3Rcbi8vIG9mIHdoaXRlc3BhY2VzIGFuZCBoYXMgYSBjb3JyZWN0IG5hbWVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdKCkgfHwgbm9uW01FVEhPRF9OQU1FXSgpICE9IG5vbiB8fCB3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0ubmFtZSAhPT0gTUVUSE9EX05BTUU7XG4gIH0pO1xufTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIGZpbmQgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbmQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmluZDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbmQpID8gZmluZCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbmQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5maW5kO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmluZDtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgRklORCA9ICdmaW5kJztcbnZhciBTS0lQU19IT0xFUyA9IHRydWU7XG5cbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKEZJTkQpO1xuXG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEZJTkQgaW4gW10pIEFycmF5KDEpW0ZJTkRdKGZ1bmN0aW9uICgpIHsgU0tJUFNfSE9MRVMgPSBmYWxzZTsgfSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTS0lQU19IT0xFUyB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoRklORCk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvY29uY2F0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIGNvbmNhdCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvY29uY2F0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmNvbmNhdDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmNvbmNhdCkgPyBjb25jYXQgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5jb25jYXQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGO1xudmFyIE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCA9ICdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBTUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxudmFyIGlzQ29uY2F0U3ByZWFkYWJsZSA9IGZ1bmN0aW9uIChPKSB7XG4gIGlmICghaXNPYmplY3QoTykpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNwcmVhZGFibGUgPSBPW0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgcmV0dXJuIHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoTyk7XG59O1xuXG52YXIgRk9SQ0VEID0gIUlTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgfHwgIVNQRUNJRVNfU1VQUE9SVDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGNvbmNhdDogZnVuY3Rpb24gY29uY2F0KGFyZykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IHRvTGVuZ3RoKEUubGVuZ3RoKTtcbiAgICAgICAgaWYgKG4gKyBsZW4gPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG4gPj0gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgVHlwZUVycm9yKE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciB2YWx1ZXMgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUudmFsdWVzKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICB8fCBET01JdGVyYWJsZXMuaGFzT3duUHJvcGVydHkoY2xhc3NvZihpdCkpID8gdmFsdWVzIDogb3duO1xufTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS52YWx1ZXM7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZWR1Y2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG52YXIgQ0hST01FX1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgncmVkdWNlJyk7XG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgncmVkdWNlJywgeyAxOiAwIH0pO1xuLy8gQ2hyb21lIDgwLTgyIGhhcyBhIGNyaXRpY2FsIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA0OTk4MlxudmFyIENIUk9NRV9CVUcgPSAhSVNfTk9ERSAmJiBDSFJPTUVfVkVSU0lPTiA+IDc5ICYmIENIUk9NRV9WRVJTSU9OIDwgODM7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfHwgIVVTRVNfVE9fTEVOR1RIIHx8IENIUk9NRV9CVUcgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IHJlZHVjZSwgcmVkdWNlUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19SSUdIVCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c0xlbmd0aCwgbWVtbykge1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IElTX1JJR0hUID8gbGVuZ3RoIC0gMSA6IDA7XG4gICAgdmFyIGkgPSBJU19SSUdIVCA/IC0xIDogMTtcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDwgMikgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgICAgaW5kZXggKz0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgaWYgKElTX1JJR0hUID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDtJU19SSUdIVCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuICByaWdodDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL21hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBtYXAgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL21hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5tYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5tYXApID8gbWFwIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubWFwJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykubWFwO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuLy8gRkY0OS0gaXNzdWVcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIG5ldyAoQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY2xhc3NvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwiLy8gYFNhbWVWYWx1ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNhbWV2YWx1ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pcyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsImV4cG9ydCBkZWZhdWx0IFwiPGh0bWw+XFxuPGhlYWQ+XFxuXFx0PG1ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiIC8+XFxuXFx0PG1ldGEgbmFtZT1cXFwidmlld3BvcnRcXFwiIGNvbnRlbnQ9XFxcInVzZXItc2NhbGFibGU9bm9cXFwiIC8+XFxuXFx0PG1ldGEgbmFtZT1cXFwiYXBwbGUtbW9iaWxlLXdlYi1hcHAtY2FwYWJsZVxcXCIgY29udGVudD1cXFwieWVzXFxcIiAvPlxcblxcdDxtZXRhIG5hbWU9XFxcInJvYm90c1xcXCIgY29udGVudD1cXFwibm9pbmRleCwgbm9mb2xsb3csIG5vb2RwXFxcIiAvPlxcblxcdDx0aXRsZT57e3RpdGxlfX08L3RpdGxlPlxcblxcdDxzdHlsZT5cXG5odG1sLCBib2R5IHtcXG5cXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcblxcdGZvbnQtc2l6ZTogMTNweDtcXG5cXHRmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7XFxuXFx0bWFyZ2luOiAwO1xcblxcdHBhZGRpbmc6IDA7XFxufVxcblxcbmEge2NvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZX1cXG5hOnZpc2l0ZWQge2NvbG9yOiAjNjA5fVxcbmE6YWN0aXZlIHtjb2xvcjogcmVkfVxcbmJsb2NrcXVvdGUge2JvcmRlci1sZWZ0OiAycHggc29saWQgYmxhY2s7IG1hcmdpbjogMDsgcGFkZGluZzogMHB4IDEwcHh9XFxuXFxucHJlIHtcXG5cXHRtYXJnaW46IDBweDtcXG5cXHRwYWRkaW5nOiAwcHg7XFxuXFx0Zm9udC1mYW1pbHk6IE1vbmFjbywgTWVubG8sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXG5cXHRib3JkZXI6IG5vbmU7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG5cXHR3b3JkLWJyZWFrOiBicmVhay1hbGw7XFxufVxcblxcbi5ib2R5LXdycCB7XFxuXFx0cGFkZGluZzogMTBweDtcXG59XFxuXFxuLmJvZHktd3JwLmh0bWwgcHJlIHtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG5cXHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuXFx0d29yZC13cmFwOiBicmVhay13b3JkO1xcblxcdHdvcmQtYnJlYWs6IG5vcm1hbDtcXG59XFxuXFxuLmJvZHktd3JwLnBsYWluIHtcXG5cXHRwYWRkaW5nOiAxNXB4O1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG59XFxuXFxuLmJvZHktd3JwLnBsYWluIHByZSB7XFxuXFx0bWFyZ2luOiAwcHg7XFxuXFx0cGFkZGluZzogMHB4O1xcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxuXFx0Ym9yZGVyOiBub25lO1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHR3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxuXFx0d29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gYmxvY2txdW90ZSB7XFxuXFx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibHVlO1xcblxcdGNvbG9yOiBibHVlO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gYmxvY2txdW90ZSBibG9ja3F1b3RlIHtcXG5cXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIGdyZWVuO1xcblxcdGNvbG9yOiBncmVlbjtcXG59XFxuXFxuLmJvZHktd3JwLnBsYWluIGJsb2NrcXVvdGUgYmxvY2txdW90ZSBibG9ja3F1b3RlIHtcXG5cXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIHJlZDtcXG5cXHRjb2xvcjogcmVkO1xcbn1cXG4ucmwtcHJldmlldy1zdWJqZWN0IHtcXG5cXHRmb250LXNpemU6IDE2cHg7XFxuXFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XFxuXFx0cGFkZGluZzogMTVweDtcXG59XFxuLnJsLXByZXZpZXctY3JlZHMtZnJvbSwgLnJsLXByZXZpZXctY3JlZHMtdG8sIC5ybC1wcmV2aWV3LWNyZWRzLWNjIHtcXG5cXHRmb250LXNpemU6IDEycHg7XFxuXFx0cGFkZGluZzogNXB4IDE1cHg7XFxufVxcbi5ybC1wcmV2aWV3LWRhdGUge1xcblxcdGZsb2F0OiByaWdodDtcXG5cXHRmb250LXNpemU6IDEycHg7XFxuXFx0cGFkZGluZzogMTBweCAxNXB4O1xcbn1cXG4ucmwtcHJldmlldy1zZWN0aW9uIHtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdG1hcmdpbjogMDtcXG5cXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcXG59XFxuLnJsLXByZXZpZXctaGlkZSB7XFxuXFx0ZGlzcGxheTogbm9uZTtcXG59XFxuXFx0PC9zdHlsZT5cXG48L2hlYWQ+XFxuPGJvZHk+XFxuXFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1zZWN0aW9uXFxcIj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXN1YmplY3RcXFwiPnt7c3ViamVjdH19PC9kaXY+XFxuXFx0PC9kaXY+XFxuXFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1zZWN0aW9uXFxcIj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWRhdGVcXFwiPnt7ZGF0ZX19PC9kaXY+XFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1jcmVkcy1mcm9tXFxcIj57e2Zyb21DcmVkc319PC9kaXY+XFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1jcmVkcy10b1xcXCI+e3t0b0xhYmVsfX06IHt7dG9DcmVkc319PC9kaXY+XFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1jcmVkcy1jYyB7e2NjQ2xhc3N9fVxcXCI+e3tjY0xhYmVsfX06IHt7Y2NDcmVkc319PC9kaXY+XFxuXFx0PC9kaXY+XFxuXFx0PGRpdiBjbGFzcz1cXFwiYm9keS13cnAge3tib2R5Q2xhc3N9fVxcXCI+e3todG1sfX08L2Rpdj5cXG48L2JvZHk+XFxuPC9odG1sPlwiOyIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgZmlsdGVyID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maWx0ZXInKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsdGVyO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmlsdGVyKSA/IGZpbHRlciA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbHRlcicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmZpbHRlcjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcbi8vIEVkZ2UgMTQtIGlzc3VlXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIHx8ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGNyZWF0ZTogY3JlYXRlXG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2ZcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgc2V0UHJvdG90eXBlT2Y6IHNldFByb3RvdHlwZU9mXG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyBmb3JFYWNoIDogb3duO1xufTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmZvckVhY2g7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICghU1RSSUNUX01FVEhPRCB8fCAhVVNFU19UT19MRU5HVEgpID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSA6IFtdLmZvckVhY2g7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIHJldmVyc2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gcmV2ZXJzZSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZXZlcnNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IFtdLnJldmVyc2U7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgIGlmIChpc0FycmF5KHRoaXMpKSB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHJldHVybiBuYXRpdmVSZXZlcnNlLmNhbGwodGhpcyk7XG4gIH1cbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIHNsaWNlID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNsaWNlKSA/IHNsaWNlIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zbGljZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdzbGljZScsIHsgQUNDRVNTT1JTOiB0cnVlLCAwOiAwLCAxOiAyIH0pO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIG5hdGl2ZVNsaWNlID0gW10uc2xpY2U7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIHx8ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKHR5cGVvZiBDb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlLmNhbGwoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5LnNoYW0pIGRlZmluZVByb3BlcnR5LnNoYW0gPSB0cnVlO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFERVNDUklQVE9SUywgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IG9iamVjdERlZmluZVByb3BlcnR5TW9kaWxlLmZcbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbn07XG5cbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0pIGdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtID0gdHJ1ZTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xudmFyIEZPUkNFRCA9ICFERVNDUklQVE9SUyB8fCBGQUlMU19PTl9QUklNSVRJVkVTO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHRyaW0gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0FjY291bnQnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzQWNjb3VudCdcbn0pXG5jbGFzcyBBY2NvdW50UG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmlzTmV3ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuZW1haWwgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmVtYWlsRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZW1haWwuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuZW1haWxFcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnBhc3N3b3JkRXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zdWJtaXRFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3JBZGRpdGlvbmFsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmVtYWlsRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdGFkZEFjY291bnRDb21tYW5kKCkge1xuXHRcdHRoaXMuZW1haWxFcnJvcignJyA9PT0gdHJpbSh0aGlzLmVtYWlsKCkpKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IoJycgPT09IHRyaW0odGhpcy5wYXNzd29yZCgpKSk7XG5cblx0XHRpZiAodGhpcy5lbWFpbEVycm9yKCkgfHwgdGhpcy5wYXNzd29yZEVycm9yKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QodHJ1ZSk7XG5cblx0XHRSZW1vdGUuYWNjb3VudFNldHVwKFxuXHRcdFx0KHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEpIHtcblx0XHRcdFx0XHRpZiAoZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdGdldEFwcCgpLmFjY291bnRzQW5kSWRlbnRpdGllcygpO1xuXHRcdFx0XHRcdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoXG5cdFx0XHRcdFx0XHRcdGRhdGEuRXJyb3JDb2RlID8gZ2V0Tm90aWZpY2F0aW9uKGRhdGEuRXJyb3JDb2RlKSA6IGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uVW5rbm93bkVycm9yKVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKGRhdGEuRXJyb3JNZXNzYWdlQWRkaXRpb25hbCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdEVycm9yQWRkaXRpb25hbChkYXRhLkVycm9yTWVzc2FnZUFkZGl0aW9uYWwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnN1Ym1pdEVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uVW5rbm93bkVycm9yKSk7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvckFkZGl0aW9uYWwoJycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lbWFpbCgpLFxuXHRcdFx0dGhpcy5wYXNzd29yZCgpLFxuXHRcdFx0dGhpcy5pc05ldygpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmlzTmV3KHRydWUpO1xuXG5cdFx0dGhpcy5lbWFpbCgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZCgnJyk7XG5cblx0XHR0aGlzLmVtYWlsRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvcihmYWxzZSk7XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IoJycpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3JBZGRpdGlvbmFsKCcnKTtcblx0fVxuXG5cdG9uU2hvdyhhY2NvdW50KSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cdFx0aWYgKGFjY291bnQgJiYgYWNjb3VudC5jYW5CZUVkaXQoKSkge1xuXHRcdFx0dGhpcy5pc05ldyhmYWxzZSk7XG5cdFx0XHR0aGlzLmVtYWlsKGFjY291bnQuZW1haWwpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLmVtYWlsRm9jdXModHJ1ZSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQWNjb3VudFBvcHVwVmlldywgQWNjb3VudFBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyB0cmltLCBmYWtlTWQ1IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9JZGVudGl0eScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNJZGVudGl0eSdcbn0pXG5jbGFzcyBJZGVudGl0eVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5pZCA9ICcnO1xuXHRcdHRoaXMuZWRpdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMub3duZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZW1haWwgPSBrby5vYnNlcnZhYmxlKCcnKS52YWxpZGF0ZUVtYWlsKCk7XG5cdFx0dGhpcy5lbWFpbC5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5uYW1lLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnJlcGx5VG8gPSBrby5vYnNlcnZhYmxlKCcnKS52YWxpZGF0ZVNpbXBsZUVtYWlsKCk7XG5cdFx0dGhpcy5yZXBseVRvLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmJjYyA9IGtvLm9ic2VydmFibGUoJycpLnZhbGlkYXRlU2ltcGxlRW1haWwoKTtcblx0XHR0aGlzLmJjYy5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNpZ25hdHVyZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc2lnbmF0dXJlSW5zZXJ0QmVmb3JlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNob3dCY2MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNob3dSZXBseVRvID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnN1Ym1pdEVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmJjYy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoZmFsc2UgPT09IHRoaXMuc2hvd0JjYygpICYmIDAgPCB2YWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5zaG93QmNjKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5yZXBseVRvLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmIChmYWxzZSA9PT0gdGhpcy5zaG93UmVwbHlUbygpICYmIDAgPCB2YWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5zaG93UmVwbHlUbyh0cnVlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdGFkZE9yRWRpdElkZW50aXR5Q29tbWFuZCgpIHtcblx0XHRpZiAodGhpcy5zaWduYXR1cmUgJiYgdGhpcy5zaWduYXR1cmUuX19mZXRjaEVkaXRvclZhbHVlKSB7XG5cdFx0XHR0aGlzLnNpZ25hdHVyZS5fX2ZldGNoRWRpdG9yVmFsdWUoKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuZW1haWwuaGFzRXJyb3IoKSkge1xuXHRcdFx0dGhpcy5lbWFpbC5oYXNFcnJvcignJyA9PT0gdHJpbSh0aGlzLmVtYWlsKCkpKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5lbWFpbC5oYXNFcnJvcigpKSB7XG5cdFx0XHRpZiAoIXRoaXMub3duZXIoKSkge1xuXHRcdFx0XHR0aGlzLmVtYWlsLmZvY3VzZWQodHJ1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5yZXBseVRvLmhhc0Vycm9yKCkpIHtcblx0XHRcdHRoaXMucmVwbHlUby5mb2N1c2VkKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmJjYy5oYXNFcnJvcigpKSB7XG5cdFx0XHR0aGlzLmJjYy5mb2N1c2VkKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCh0cnVlKTtcblxuXHRcdFJlbW90ZS5pZGVudGl0eVVwZGF0ZShcblx0XHRcdChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhKSB7XG5cdFx0XHRcdFx0aWYgKGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS5hY2NvdW50c0FuZElkZW50aXRpZXMoKTtcblx0XHRcdFx0XHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKGRhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuaWQsXG5cdFx0XHR0aGlzLmVtYWlsKCksXG5cdFx0XHR0aGlzLm5hbWUoKSxcblx0XHRcdHRoaXMucmVwbHlUbygpLFxuXHRcdFx0dGhpcy5iY2MoKSxcblx0XHRcdHRoaXMuc2lnbmF0dXJlKCksXG5cdFx0XHR0aGlzLnNpZ25hdHVyZUluc2VydEJlZm9yZSgpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmlkID0gJyc7XG5cdFx0dGhpcy5lZGl0KGZhbHNlKTtcblx0XHR0aGlzLm93bmVyKGZhbHNlKTtcblxuXHRcdHRoaXMubmFtZSgnJyk7XG5cdFx0dGhpcy5lbWFpbCgnJyk7XG5cdFx0dGhpcy5yZXBseVRvKCcnKTtcblx0XHR0aGlzLmJjYygnJyk7XG5cdFx0dGhpcy5zaWduYXR1cmUoJycpO1xuXHRcdHRoaXMuc2lnbmF0dXJlSW5zZXJ0QmVmb3JlKGZhbHNlKTtcblxuXHRcdHRoaXMuZW1haWwuaGFzRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMucmVwbHlUby5oYXNFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5iY2MuaGFzRXJyb3IoZmFsc2UpO1xuXG5cdFx0dGhpcy5zaG93QmNjKGZhbHNlKTtcblx0XHR0aGlzLnNob3dSZXBseVRvKGZhbHNlKTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0dGhpcy5zdWJtaXRFcnJvcignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/SWRlbnRpdHlNb2RlbH0gb0lkZW50aXR5XG5cdCAqL1xuXHRvblNob3coaWRlbnRpdHkpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdGlmIChpZGVudGl0eSkge1xuXHRcdFx0dGhpcy5lZGl0KHRydWUpO1xuXG5cdFx0XHR0aGlzLmlkID0gaWRlbnRpdHkuaWQoKSB8fCAnJztcblx0XHRcdHRoaXMubmFtZShpZGVudGl0eS5uYW1lKCkpO1xuXHRcdFx0dGhpcy5lbWFpbChpZGVudGl0eS5lbWFpbCgpKTtcblx0XHRcdHRoaXMucmVwbHlUbyhpZGVudGl0eS5yZXBseVRvKCkpO1xuXHRcdFx0dGhpcy5iY2MoaWRlbnRpdHkuYmNjKCkpO1xuXHRcdFx0dGhpcy5zaWduYXR1cmUoaWRlbnRpdHkuc2lnbmF0dXJlKCkpO1xuXHRcdFx0dGhpcy5zaWduYXR1cmVJbnNlcnRCZWZvcmUoaWRlbnRpdHkuc2lnbmF0dXJlSW5zZXJ0QmVmb3JlKCkpO1xuXG5cdFx0XHR0aGlzLm93bmVyKCcnID09PSB0aGlzLmlkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5pZCA9IGZha2VNZDUoKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKCF0aGlzLm93bmVyKCkgJiYgIWJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdHRoaXMuZW1haWwuZm9jdXNlZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkhpZGVXaXRoRGVsYXkoKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgSWRlbnRpdHlQb3B1cFZpZXcsIElkZW50aXR5UG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IHBJbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgU2F2ZVRyaWdnZXJDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5lbGVtZW50ID0gcGFyYW1zLmVsZW1lbnQgfHwgbnVsbDtcblx0XHR0aGlzLnZhbHVlID0gcGFyYW1zLnZhbHVlICYmIHBhcmFtcy52YWx1ZS5zdWJzY3JpYmUgPyBwYXJhbXMudmFsdWUgOiBudWxsO1xuXG5cdFx0aWYgKHRoaXMuZWxlbWVudCkge1xuXHRcdFx0aWYgKHRoaXMudmFsdWUpIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50LmNzcygnZGlzcGxheScsICdpbmxpbmUtYmxvY2snKTtcblxuXHRcdFx0XHRpZiAocGFyYW1zLnZlcnRpY2FsQWxpZ24pIHtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuY3NzKCd2ZXJ0aWNhbC1hbGlnbicsIHBhcmFtcy52ZXJ0aWNhbEFsaWduKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUodGhpcy52YWx1ZSgpKTtcblxuXHRcdFx0XHR0aGlzLmRpc3Bvc2FibGUucHVzaCh0aGlzLnZhbHVlLnN1YnNjcmliZSh0aGlzLnNldFN0YXRlLCB0aGlzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHNldFN0YXRlKHZhbHVlKSB7XG5cdFx0c3dpdGNoIChwSW50KHZhbHVlKSkge1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQ6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQsLmVycm9yJylcblx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuRmFsc2VSZXN1bHQ6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdC5maW5kKCcuZXJyb3InKVxuXHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuQW5pbWF0ZTpcblx0XHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdFx0LmZpbmQoJy5lcnJvciwuc3VjY2VzcycpXG5cdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCcpXG5cdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5JZGxlOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCcpXG5cdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNhdmVUcmlnZ2VyQ29tcG9uZW50LCAnU2F2ZVRyaWdnZXJDb21wb25lbnQnKTtcbiIsImltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdElucHV0IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQnO1xuXG5jbGFzcyBJbnB1dENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SW5wdXQge31cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKElucHV0Q29tcG9uZW50LCAnSW5wdXRDb21wb25lbnQnKTtcbiIsImltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNsYXNzIFNlbGVjdENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SW5wdXQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIocGFyYW1zKTtcblxuXHRcdHRoaXMub3B0aW9ucyA9IHBhcmFtcy5vcHRpb25zIHx8ICcnO1xuXG5cdFx0dGhpcy5vcHRpb25zVGV4dCA9IHBhcmFtcy5vcHRpb25zVGV4dCB8fCBudWxsO1xuXHRcdHRoaXMub3B0aW9uc1ZhbHVlID0gcGFyYW1zLm9wdGlvbnNWYWx1ZSB8fCBudWxsO1xuXHRcdHRoaXMub3B0aW9uc0NhcHRpb24gPSBwYXJhbXMub3B0aW9uc0NhcHRpb24gfHwgbnVsbDtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnNDYXB0aW9uKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnNDYXB0aW9uID0gaTE4bih0aGlzLm9wdGlvbnNDYXB0aW9uKTtcblx0XHR9XG5cblx0XHR0aGlzLmRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciA9IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcjtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoU2VsZWN0Q29tcG9uZW50LCAnU2VsZWN0Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RSYWRpbyB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdFJhZGlvJztcblxuY2xhc3MgUmFkaW9Db21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFJhZGlvIHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihSYWRpb0NvbXBvbmVudCwgJ1JhZGlvQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnB1dCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdElucHV0JztcblxuY29uc3QgREVGQVVMVF9ST1dTID0gNTtcblxuY2xhc3MgVGV4dEFyZWFDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLnJvd3MgPSBwYXJhbXMucm93cyB8fCBERUZBVUxUX1JPV1M7XG5cdFx0dGhpcy5zcGVsbGNoZWNrID0gaXNVbmQocGFyYW1zLnNwZWxsY2hlY2spID8gZmFsc2UgOiAhIXBhcmFtcy5zcGVsbGNoZWNrO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihUZXh0QXJlYUNvbXBvbmVudCwgJ1RleHRBcmVhQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnB1dCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdElucHV0JztcblxuY2xhc3MgRGF0ZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SW5wdXQge31cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKERhdGVDb21wb25lbnQsICdEYXRlQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50LCBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuXG5jbGFzcyBTY3JpcHRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKFxuXHRcdFx0cGFyYW1zLmNvbXBvbmVudCAmJlxuXHRcdFx0cGFyYW1zLmNvbXBvbmVudC50ZW1wbGF0ZU5vZGVzICYmXG5cdFx0XHRwYXJhbXMuZWxlbWVudCAmJlxuXHRcdFx0cGFyYW1zLmVsZW1lbnRbMF0gJiZcblx0XHRcdHBhcmFtcy5lbGVtZW50WzBdLm91dGVySFRNTFxuXHRcdCkge1xuXHRcdFx0bGV0IHNjcmlwdCA9IHBhcmFtcy5lbGVtZW50WzBdLm91dGVySFRNTDtcblx0XHRcdHNjcmlwdCA9ICFzY3JpcHQgPyAnJyA6IHNjcmlwdC5yZXBsYWNlKC88eC1zY3JpcHQvaSwgJzxzY3JpcHQnKS5yZXBsYWNlKC88Yj48XFwvYj48XFwveC1zY3JpcHQ+L2ksICc8L3NjcmlwdD4nKTtcblxuXHRcdFx0aWYgKHNjcmlwdCkge1xuXHRcdFx0XHRwYXJhbXMuZWxlbWVudC50ZXh0KCcnKTtcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQucmVwbGFjZVdpdGgoXG5cdFx0XHRcdFx0JChzY3JpcHQpLnRleHQoXG5cdFx0XHRcdFx0XHRwYXJhbXMuY29tcG9uZW50LnRlbXBsYXRlTm9kZXNbMF0gJiYgcGFyYW1zLmNvbXBvbmVudC50ZW1wbGF0ZU5vZGVzWzBdLm5vZGVWYWx1ZVxuXHRcdFx0XHRcdFx0XHQ/IHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2Rlc1swXS5ub2RlVmFsdWVcblx0XHRcdFx0XHRcdFx0OiAnJ1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50LnJlbW92ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoU2NyaXB0Q29tcG9uZW50LCAnU2NyaXB0Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RDaGVja2JveCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdENoZWNrYm94JztcblxuY2xhc3MgQ2hlY2tib3hNYXRlcmlhbERlc2lnbkNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Q2hlY2tib3gge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIocGFyYW1zKTtcblxuXHRcdHRoaXMuYW5pbWF0aW9uQm94ID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAgfSk7XG5cdFx0dGhpcy5hbmltYXRpb25DaGVja21hcmsgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDIwMCB9KTtcblxuXHRcdHRoaXMuYW5pbWF0aW9uQm94U2V0VHJ1ZSA9IF8uYmluZCh0aGlzLmFuaW1hdGlvbkJveFNldFRydWUsIHRoaXMpO1xuXHRcdHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSA9IF8uYmluZCh0aGlzLmFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUsIHRoaXMpO1xuXG5cdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2goXG5cdFx0XHR0aGlzLnZhbHVlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy50cmlnZ2VyQW5pbWF0aW9uKHZhbHVlKTtcblx0XHRcdH0sIHRoaXMpXG5cdFx0KTtcblx0fVxuXG5cdGFuaW1hdGlvbkJveFNldFRydWUoKSB7XG5cdFx0dGhpcy5hbmltYXRpb25Cb3godHJ1ZSk7XG5cdH1cblxuXHRhbmltYXRpb25DaGVja21hcmtTZXRUcnVlKCkge1xuXHRcdHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrKHRydWUpO1xuXHR9XG5cblx0dHJpZ2dlckFuaW1hdGlvbihib3gpIHtcblx0XHRpZiAoYm94KSB7XG5cdFx0XHR0aGlzLmFuaW1hdGlvbkJveFNldFRydWUoKTtcblx0XHRcdF8uZGVsYXkodGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlLCAyMDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUoKTtcblx0XHRcdF8uZGVsYXkodGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlLCAyMDApO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoQ2hlY2tib3hNYXRlcmlhbERlc2lnbkNvbXBvbmVudCwgJ0NoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQnKTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgcHJvZ3Jlc3NKcyBmcm9tICdwcm9ncmVzc0pzJztcblxuaW1wb3J0IHtcblx0bm9vcCxcblx0dHJpbSxcblx0bG9nLFxuXHRoYXMsXG5cdGlzQXJyYXksXG5cdGluQXJyYXksXG5cdGlzVW5kLFxuXHRpc05vcm1hbCxcblx0aXNQb3NOdW1lcmljLFxuXHRpc05vbkVtcHR5QXJyYXksXG5cdHBJbnQsXG5cdHBTdHJpbmcsXG5cdGRlbGVnYXRlUnVuT25EZXN0cm95LFxuXHRtYWlsVG9IZWxwZXIsXG5cdHdpbmRvd1Jlc2l6ZSxcblx0amFzc2xcbn0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHtcblx0TGF5b3V0LFxuXHRDYXBhLFxuXHRTdG9yYWdlUmVzdWx0VHlwZSxcblx0Tm90aWZpY2F0aW9uLFxuXHRGb2xkZXJUeXBlLFxuXHRTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLFxuXHRNZXNzYWdlU2V0QWN0aW9uLFxuXHRDbGllbnRTaWRlS2V5TmFtZSxcblx0TWFnaWNzXG59IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7ICRodG1sLCBsZWZ0UGFuZWxXaWR0aCwgbGVmdFBhbmVsRGlzYWJsZWQsIGJBbmltYXRpb25TdXBwb3J0ZWQsIGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCB7IFVOVVNFRF9PUFRJT05fVkFMVUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IHJ1bkhvb2sgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5pbXBvcnQgeyBtb21lbnROb3dVbml4LCByZWxvYWQgYXMgbW9tZW50UmVsb2FkIH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcblxuaW1wb3J0IHtcblx0aW5pdE1lc3NhZ2VGbGFnc0Zyb21DYWNoZSxcblx0c2V0Rm9sZGVySGFzaCxcblx0Z2V0Rm9sZGVySGFzaCxcblx0Z2V0Rm9sZGVySW5ib3hOYW1lLFxuXHRnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0LFxuXHRjbGVhck1lc3NhZ2VGbGFnc0Zyb21DYWNoZUJ5Rm9sZGVyLFxuXHRzdG9yZU1lc3NhZ2VGbGFnc1RvQ2FjaGVCeVNldEFjdGlvbixcblx0c3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlGb2xkZXJBbmRVaWRcbn0gZnJvbSAnQ29tbW9uL0NhY2hlJztcblxuaW1wb3J0IHtcblx0dXNlckJhY2tncm91bmQsXG5cdG1haWxCb3gsXG5cdHJvb3QsXG5cdG9wZW5QZ3BXb3JrZXJKcyxcblx0b3BlblBncEpzLFxuXHRzb2NpYWxHb29nbGUsXG5cdHNvY2lhbFR3aXR0ZXIsXG5cdHNvY2lhbEZhY2Vib29rXG59IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcblxuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uLCBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgU29jaWFsU3RvcmUgZnJvbSAnU3RvcmVzL1NvY2lhbCc7XG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBOb3RpZmljYXRpb25TdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Ob3RpZmljYXRpb24nO1xuaW1wb3J0IEFjY291bnRTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BY2NvdW50JztcbmltcG9ydCBDb250YWN0U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQ29udGFjdCc7XG5pbXBvcnQgSWRlbnRpdHlTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9JZGVudGl0eSc7XG5pbXBvcnQgVGVtcGxhdGVTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9UZW1wbGF0ZSc7XG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcbmltcG9ydCBQZ3BTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9QZ3AnO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcbmltcG9ydCBRdW90YVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1F1b3RhJztcblxuaW1wb3J0ICogYXMgTG9jYWwgZnJvbSAnU3RvcmFnZS9DbGllbnQnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgeyBjaGVja1RpbWVzdGFtcCB9IGZyb20gJ1N0b3JhZ2UvUmFpbkxvb3AnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuaW1wb3J0IFByb21pc2VzIGZyb20gJ1Byb21pc2VzL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IEVtYWlsTW9kZWwgfSBmcm9tICdNb2RlbC9FbWFpbCc7XG5pbXBvcnQgeyBBY2NvdW50TW9kZWwgfSBmcm9tICdNb2RlbC9BY2NvdW50JztcbmltcG9ydCB7IElkZW50aXR5TW9kZWwgfSBmcm9tICdNb2RlbC9JZGVudGl0eSc7XG5pbXBvcnQgeyBUZW1wbGF0ZU1vZGVsIH0gZnJvbSAnTW9kZWwvVGVtcGxhdGUnO1xuaW1wb3J0IHsgT3BlblBncEtleU1vZGVsIH0gZnJvbSAnTW9kZWwvT3BlblBncEtleSc7XG5cbi8vIGltcG9ydCB7QWJvdXRVc2VyU2NyZWVufSBmcm9tICdTY3JlZW4vVXNlci9BYm91dCc7XG5pbXBvcnQgeyBMb2dpblVzZXJTY3JlZW4gfSBmcm9tICdTY3JlZW4vVXNlci9Mb2dpbic7XG5pbXBvcnQgeyBNYWlsQm94VXNlclNjcmVlbiB9IGZyb20gJ1NjcmVlbi9Vc2VyL01haWxCb3gnO1xuaW1wb3J0IHsgU2V0dGluZ3NVc2VyU2NyZWVuIH0gZnJvbSAnU2NyZWVuL1VzZXIvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBoaWRlTG9hZGluZywgcm91dGVPZmYsIHJvdXRlT24sIHNldEhhc2gsIHN0YXJ0U2NyZWVucywgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEFwcCB9IGZyb20gJ0FwcC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFwcFVzZXIgZXh0ZW5kcyBBYnN0cmFjdEFwcCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKFJlbW90ZSk7XG5cblx0XHR0aGlzLm1vdmVDYWNoZSA9IHt9O1xuXG5cdFx0dGhpcy5xdW90YURlYm91bmNlID0gXy5kZWJvdW5jZSh0aGlzLnF1b3RhLCBNYWdpY3MuVGltZTMwcyk7XG5cdFx0dGhpcy5tb3ZlT3JEZWxldGVSZXNwb25zZUhlbHBlciA9IF8uYmluZCh0aGlzLm1vdmVPckRlbGV0ZVJlc3BvbnNlSGVscGVyLCB0aGlzKTtcblxuXHRcdHRoaXMubWVzc2FnZXNNb3ZlVHJpZ2dlciA9IF8uZGVib3VuY2UodGhpcy5tZXNzYWdlc01vdmVUcmlnZ2VyLCA1MDApO1xuXG5cdFx0d2luZG93LnNldEludGVydmFsKCgpID0+IEV2ZW50cy5wdWIoJ2ludGVydmFsLjMwcycpLCBNYWdpY3MuVGltZTMwcyk7XG5cdFx0d2luZG93LnNldEludGVydmFsKCgpID0+IEV2ZW50cy5wdWIoJ2ludGVydmFsLjFtJyksIE1hZ2ljcy5UaW1lMW0pO1xuXHRcdHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4ybScpLCBNYWdpY3MuVGltZTJtKTtcblx0XHR3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gRXZlbnRzLnB1YignaW50ZXJ2YWwuM20nKSwgTWFnaWNzLlRpbWUzbSk7XG5cdFx0d2luZG93LnNldEludGVydmFsKCgpID0+IEV2ZW50cy5wdWIoJ2ludGVydmFsLjVtJyksIE1hZ2ljcy5UaW1lNW0pO1xuXHRcdHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4xMG0nKSwgTWFnaWNzLlRpbWUxMG0pO1xuXHRcdHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4xNW0nKSwgTWFnaWNzLlRpbWUxNW0pO1xuXHRcdHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4yMG0nKSwgTWFnaWNzLlRpbWUyMG0pO1xuXG5cdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4gd2luZG93LnNldEludGVydmFsKCgpID0+IEV2ZW50cy5wdWIoJ2ludGVydmFsLjJtLWFmdGVyNW0nKSwgTWFnaWNzLlRpbWUybSksIE1hZ2ljcy5UaW1lNW0pO1xuXHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC41bS1hZnRlcjVtJyksIE1hZ2ljcy5UaW1lNW0pLCBNYWdpY3MuVGltZTVtKTtcblx0XHR3aW5kb3cuc2V0VGltZW91dChcblx0XHRcdCgpID0+IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBFdmVudHMucHViKCdpbnRlcnZhbC4xMG0tYWZ0ZXI1bScpLCBNYWdpY3MuVGltZTEwbSksXG5cdFx0XHRNYWdpY3MuVGltZTVtXG5cdFx0KTtcblxuXHRcdCQud2FrZVVwKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAoY2hlY2tUaW1lc3RhbXAoKSkge1xuXHRcdFx0XHRcdHRoaXMucmVsb2FkKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRSZW1vdGUuanNWZXJzaW9uKChzUmVzdWx0LCBvRGF0YSkgPT4ge1xuXHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmICFvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdHRoaXMucmVsb2FkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndmVyc2lvbicpKTtcblx0XHRcdH0sXG5cdFx0XHR7fSxcblx0XHRcdE1hZ2ljcy5UaW1lNjBtXG5cdFx0KTtcblxuXHRcdGlmIChjaGVja1RpbWVzdGFtcCgpKSB7XG5cdFx0XHR0aGlzLnJlbG9hZCgpO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmRIYXNoJykpIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHQkKCcjcmwtYmcnKVxuXHRcdFx0XHRcdC5hdHRyKCdzdHlsZScsICdiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7Jylcblx0XHRcdFx0XHQuYmFja3N0cmV0Y2godXNlckJhY2tncm91bmQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJCYWNrZ3JvdW5kSGFzaCcpKSwge1xuXHRcdFx0XHRcdFx0ZmFkZTogYkFuaW1hdGlvblN1cHBvcnRlZCA/IE1hZ2ljcy5UaW1lMXMgOiAwLFxuXHRcdFx0XHRcdFx0Y2VudGVyZWRYOiB0cnVlLFxuXHRcdFx0XHRcdFx0Y2VudGVyZWRZOiB0cnVlXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQucmVtb3ZlQXR0cignc3R5bGUnKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMXMpO1xuXHRcdH1cblxuXHRcdHRoaXMuc29jaWFsVXNlcnMgPSBfLmJpbmQodGhpcy5zb2NpYWxVc2VycywgdGhpcyk7XG5cdH1cblxuXHRyZW1vdGUoKSB7XG5cdFx0cmV0dXJuIFJlbW90ZTtcblx0fVxuXG5cdHJlbG9hZCgpIHtcblx0XHRpZiAod2luZG93LnBhcmVudCAmJiAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdpbklmcmFtZScpKSB7XG5cdFx0XHR3aW5kb3cucGFyZW50LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0fVxuXHR9XG5cblx0cmVsb2FkRmxhZ3NDdXJyZW50TWVzc2FnZUxpc3RBbmRNZXNzYWdlRnJvbUNhY2hlKCkge1xuXHRcdF8uZWFjaChNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3QoKSwgKG1lc3NhZ2UpID0+IHtcblx0XHRcdGluaXRNZXNzYWdlRmxhZ3NGcm9tQ2FjaGUobWVzc2FnZSk7XG5cdFx0fSk7XG5cdFx0aW5pdE1lc3NhZ2VGbGFnc0Zyb21DYWNoZShNZXNzYWdlU3RvcmUubWVzc2FnZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiRHJvcFBhZ2VQb3NpdGlvbiA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJEcm9wQ3VycmVuRm9sZGVyQ2FjaGUgPSBmYWxzZVxuXHQgKi9cblx0cmVsb2FkTWVzc2FnZUxpc3QoYkRyb3BQYWdlUG9zaXRpb24gPSBmYWxzZSwgYkRyb3BDdXJyZW5Gb2xkZXJDYWNoZSA9IGZhbHNlKSB7XG5cdFx0bGV0IGlPZmZzZXQgPSAoTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0UGFnZSgpIC0gMSkgKiBTZXR0aW5nc1N0b3JlLm1lc3NhZ2VzUGVyUGFnZSgpO1xuXG5cdFx0aWYgKGJEcm9wQ3VycmVuRm9sZGVyQ2FjaGUpIHtcblx0XHRcdHNldEZvbGRlckhhc2goRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksICcnKTtcblx0XHR9XG5cblx0XHRpZiAoYkRyb3BQYWdlUG9zaXRpb24pIHtcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFBhZ2UoMSk7XG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RQYWdlQmVmb3JlVGhyZWFkKDEpO1xuXHRcdFx0aU9mZnNldCA9IDA7XG5cblx0XHRcdHNldEhhc2goXG5cdFx0XHRcdG1haWxCb3goXG5cdFx0XHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lSGFzaCgpLFxuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFBhZ2UoKSxcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RTZWFyY2goKSxcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RUaHJlYWRVaWQoKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdExvYWRpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLm1lc3NhZ2VMaXN0KFxuXHRcdFx0KHNSZXN1bHQsIG9EYXRhLCBiQ2FjaGVkKSA9PiB7XG5cdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdEVycm9yKCcnKTtcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RMb2FkaW5nKGZhbHNlKTtcblxuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5zZXRNZXNzYWdlTGlzdChvRGF0YSwgYkNhY2hlZCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoU3RvcmFnZVJlc3VsdFR5cGUuVW5sb2FkID09PSBzUmVzdWx0KSB7XG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0RXJyb3IoJycpO1xuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdExvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLkFib3J0ICE9PSBzUmVzdWx0KSB7XG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KFtdKTtcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RMb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RFcnJvcihcblx0XHRcdFx0XHRcdG9EYXRhICYmIG9EYXRhLkVycm9yQ29kZSA/IGdldE5vdGlmaWNhdGlvbihvRGF0YS5FcnJvckNvZGUpIDogaTE4bignTk9USUZJQ0FUSU9OUy9DQU5UX0dFVF9NRVNTQUdFX0xJU1QnKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdGlPZmZzZXQsXG5cdFx0XHRTZXR0aW5nc1N0b3JlLm1lc3NhZ2VzUGVyUGFnZSgpLFxuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0U2VhcmNoKCksXG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RUaHJlYWRVaWQoKVxuXHRcdCk7XG5cdH1cblxuXHRyZWNhY2hlSW5ib3hNZXNzYWdlTGlzdCgpIHtcblx0XHRSZW1vdGUubWVzc2FnZUxpc3Qobm9vcCwgZ2V0Rm9sZGVySW5ib3hOYW1lKCksIDAsIFNldHRpbmdzU3RvcmUubWVzc2FnZXNQZXJQYWdlKCksICcnLCAnJywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZlJlc3VsdEZ1bmNcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWN0c1N5bmMoZlJlc3VsdEZ1bmMpIHtcblx0XHRjb25zdCBvQ29udGFjdHMgPSBDb250YWN0U3RvcmUuY29udGFjdHM7XG5cdFx0aWYgKFxuXHRcdFx0b0NvbnRhY3RzLmltcG9ydGluZygpIHx8XG5cdFx0XHRvQ29udGFjdHMuc3luY2luZygpIHx8XG5cdFx0XHQhQ29udGFjdFN0b3JlLmVuYWJsZUNvbnRhY3RzU3luYygpIHx8XG5cdFx0XHQhQ29udGFjdFN0b3JlLmFsbG93Q29udGFjdHNTeW5jKClcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRvQ29udGFjdHMuc3luY2luZyh0cnVlKTtcblxuXHRcdFJlbW90ZS5jb250YWN0c1N5bmMoKHNSZXN1bHQsIG9EYXRhKSA9PiB7XG5cdFx0XHRvQ29udGFjdHMuc3luY2luZyhmYWxzZSk7XG5cblx0XHRcdGlmIChmUmVzdWx0RnVuYykge1xuXHRcdFx0XHRmUmVzdWx0RnVuYyhzUmVzdWx0LCBvRGF0YSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdG1lc3NhZ2VzTW92ZVRyaWdnZXIoKSB7XG5cdFx0Y29uc3Qgc1RyYXNoRm9sZGVyID0gRm9sZGVyU3RvcmUudHJhc2hGb2xkZXIoKSxcblx0XHRcdHNTcGFtRm9sZGVyID0gRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpO1xuXG5cdFx0Xy5lYWNoKHRoaXMubW92ZUNhY2hlLCAoaXRlbSkgPT4ge1xuXHRcdFx0Y29uc3QgaXNTcGFtID0gc1NwYW1Gb2xkZXIgPT09IGl0ZW0uVG8sXG5cdFx0XHRcdGlzVHJhc2ggPSBzVHJhc2hGb2xkZXIgPT09IGl0ZW0uVG8sXG5cdFx0XHRcdGlzSGFtID0gIWlzU3BhbSAmJiBzU3BhbUZvbGRlciA9PT0gaXRlbS5Gcm9tICYmIGdldEZvbGRlckluYm94TmFtZSgpID09PSBpdGVtLlRvO1xuXG5cdFx0XHRSZW1vdGUubWVzc2FnZXNNb3ZlKFxuXHRcdFx0XHR0aGlzLm1vdmVPckRlbGV0ZVJlc3BvbnNlSGVscGVyLFxuXHRcdFx0XHRpdGVtLkZyb20sXG5cdFx0XHRcdGl0ZW0uVG8sXG5cdFx0XHRcdGl0ZW0uVWlkLFxuXHRcdFx0XHRpc1NwYW0gPyAnU1BBTScgOiBpc0hhbSA/ICdIQU0nIDogJycsXG5cdFx0XHRcdGlzU3BhbSB8fCBpc1RyYXNoXG5cdFx0XHQpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tb3ZlQ2FjaGUgPSB7fTtcblx0fVxuXG5cdG1lc3NhZ2VzTW92ZUhlbHBlcihmcm9tRm9sZGVyRnVsbE5hbWVSYXcsIHRvRm9sZGVyRnVsbE5hbWVSYXcsIHVpZHNGb3JNb3ZlKSB7XG5cdFx0Y29uc3QgaGFzaCA9ICckJCcgKyBmcm9tRm9sZGVyRnVsbE5hbWVSYXcgKyAnJCQnICsgdG9Gb2xkZXJGdWxsTmFtZVJhdyArICckJCc7XG5cdFx0aWYgKCF0aGlzLm1vdmVDYWNoZVtoYXNoXSkge1xuXHRcdFx0dGhpcy5tb3ZlQ2FjaGVbaGFzaF0gPSB7XG5cdFx0XHRcdEZyb206IGZyb21Gb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0VG86IHRvRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFVpZDogW11cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dGhpcy5tb3ZlQ2FjaGVbaGFzaF0uVWlkID0gXy51bmlvbih0aGlzLm1vdmVDYWNoZVtoYXNoXS5VaWQsIHVpZHNGb3JNb3ZlKTtcblx0XHR0aGlzLm1lc3NhZ2VzTW92ZVRyaWdnZXIoKTtcblx0fVxuXG5cdG1lc3NhZ2VzQ29weUhlbHBlcihzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBzVG9Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvckNvcHkpIHtcblx0XHRSZW1vdGUubWVzc2FnZXNDb3B5KHRoaXMubW92ZU9yRGVsZXRlUmVzcG9uc2VIZWxwZXIsIHNGcm9tRm9sZGVyRnVsbE5hbWVSYXcsIHNUb0ZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yQ29weSk7XG5cdH1cblxuXHRtZXNzYWdlc0RlbGV0ZUhlbHBlcihzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKSB7XG5cdFx0UmVtb3RlLm1lc3NhZ2VzRGVsZXRlKHRoaXMubW92ZU9yRGVsZXRlUmVzcG9uc2VIZWxwZXIsIHNGcm9tRm9sZGVyRnVsbE5hbWVSYXcsIGFVaWRGb3JSZW1vdmUpO1xuXHR9XG5cblx0bW92ZU9yRGVsZXRlUmVzcG9uc2VIZWxwZXIoc1Jlc3VsdCwgb0RhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyKCkpIHtcblx0XHRcdGlmIChvRGF0YSAmJiBpc0FycmF5KG9EYXRhLlJlc3VsdCkgJiYgMiA9PT0gb0RhdGEuUmVzdWx0Lmxlbmd0aCkge1xuXHRcdFx0XHRzZXRGb2xkZXJIYXNoKG9EYXRhLlJlc3VsdFswXSwgb0RhdGEuUmVzdWx0WzFdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNldEZvbGRlckhhc2goRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksICcnKTtcblxuXHRcdFx0XHRpZiAob0RhdGEgJiYgLTEgPCBpbkFycmF5KG9EYXRhLkVycm9yQ29kZSwgW05vdGlmaWNhdGlvbi5DYW50TW92ZU1lc3NhZ2UsIE5vdGlmaWNhdGlvbi5DYW50Q29weU1lc3NhZ2VdKSkge1xuXHRcdFx0XHRcdHdpbmRvdy5hbGVydChnZXROb3RpZmljYXRpb24ob0RhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yZWxvYWRNZXNzYWdlTGlzdCgwID09PSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3QoKS5sZW5ndGgpO1xuXHRcdFx0dGhpcy5xdW90YURlYm91bmNlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRnJvbUZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFVaWRGb3JSZW1vdmVcblx0ICovXG5cdGRlbGV0ZU1lc3NhZ2VzRnJvbUZvbGRlcldpdGhvdXRDaGVjayhzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKSB7XG5cdFx0dGhpcy5tZXNzYWdlc0RlbGV0ZUhlbHBlcihzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKTtcblx0XHRNZXNzYWdlU3RvcmUucmVtb3ZlTWVzc2FnZXNGcm9tTGlzdChzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gaURlbGV0ZVR5cGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGcm9tRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtBcnJheX0gYVVpZEZvclJlbW92ZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiVXNlRm9sZGVyID0gdHJ1ZVxuXHQgKi9cblx0ZGVsZXRlTWVzc2FnZXNGcm9tRm9sZGVyKGlEZWxldGVUeXBlLCBzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlLCBiVXNlRm9sZGVyKSB7XG5cdFx0bGV0IG9Nb3ZlRm9sZGVyID0gbnVsbCxcblx0XHRcdG5TZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uID0gbnVsbDtcblxuXHRcdHN3aXRjaCAoaURlbGV0ZVR5cGUpIHtcblx0XHRcdGNhc2UgRm9sZGVyVHlwZS5TcGFtOlxuXHRcdFx0XHRvTW92ZUZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpKTtcblx0XHRcdFx0blNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24gPSBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uLlNwYW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBGb2xkZXJUeXBlLk5vdFNwYW06XG5cdFx0XHRcdG9Nb3ZlRm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChnZXRGb2xkZXJJbmJveE5hbWUoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBGb2xkZXJUeXBlLlRyYXNoOlxuXHRcdFx0XHRvTW92ZUZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoRm9sZGVyU3RvcmUudHJhc2hGb2xkZXIoKSk7XG5cdFx0XHRcdG5TZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uID0gU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbi5UcmFzaDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIEZvbGRlclR5cGUuQXJjaGl2ZTpcblx0XHRcdFx0b01vdmVGb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIoKSk7XG5cdFx0XHRcdG5TZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uID0gU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbi5BcmNoaXZlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cblx0XHRiVXNlRm9sZGVyID0gaXNVbmQoYlVzZUZvbGRlcikgPyB0cnVlIDogISFiVXNlRm9sZGVyO1xuXHRcdGlmIChiVXNlRm9sZGVyKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChGb2xkZXJUeXBlLlNwYW0gPT09IGlEZWxldGVUeXBlICYmIFVOVVNFRF9PUFRJT05fVkFMVUUgPT09IEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKSkgfHxcblx0XHRcdFx0KEZvbGRlclR5cGUuVHJhc2ggPT09IGlEZWxldGVUeXBlICYmIFVOVVNFRF9PUFRJT05fVkFMVUUgPT09IEZvbGRlclN0b3JlLnRyYXNoRm9sZGVyKCkpIHx8XG5cdFx0XHRcdChGb2xkZXJUeXBlLkFyY2hpdmUgPT09IGlEZWxldGVUeXBlICYmIFVOVVNFRF9PUFRJT05fVkFMVUUgPT09IEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIoKSlcblx0XHRcdCkge1xuXHRcdFx0XHRiVXNlRm9sZGVyID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFvTW92ZUZvbGRlciAmJiBiVXNlRm9sZGVyKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Gb2xkZXJTeXN0ZW0nKSwgW25TZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uXSk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdCFiVXNlRm9sZGVyIHx8XG5cdFx0XHQoRm9sZGVyVHlwZS5UcmFzaCA9PT0gaURlbGV0ZVR5cGUgJiZcblx0XHRcdFx0KHNGcm9tRm9sZGVyRnVsbE5hbWVSYXcgPT09IEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKSB8fCBzRnJvbUZvbGRlckZ1bGxOYW1lUmF3ID09PSBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcigpKSlcblx0XHQpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0FzaycpLCBbXG5cdFx0XHRcdGkxOG4oJ1BPUFVQU19BU0svREVTQ19XQU5UX0RFTEVURV9NRVNTQUdFUycpLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlc0RlbGV0ZUhlbHBlcihzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKTtcblx0XHRcdFx0XHRNZXNzYWdlU3RvcmUucmVtb3ZlTWVzc2FnZXNGcm9tTGlzdChzRnJvbUZvbGRlckZ1bGxOYW1lUmF3LCBhVWlkRm9yUmVtb3ZlKTtcblx0XHRcdFx0fVxuXHRcdFx0XSk7XG5cdFx0fSBlbHNlIGlmIChvTW92ZUZvbGRlcikge1xuXHRcdFx0dGhpcy5tZXNzYWdlc01vdmVIZWxwZXIoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgb01vdmVGb2xkZXIuZnVsbE5hbWVSYXcsIGFVaWRGb3JSZW1vdmUpO1xuXHRcdFx0TWVzc2FnZVN0b3JlLnJlbW92ZU1lc3NhZ2VzRnJvbUxpc3Qoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvclJlbW92ZSwgb01vdmVGb2xkZXIuZnVsbE5hbWVSYXcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Zyb21Gb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge0FycmF5fSBhVWlkRm9yTW92ZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RvRm9sZGVyRnVsbE5hbWVSYXdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gYkNvcHkgPSBmYWxzZVxuXHQgKi9cblx0bW92ZU1lc3NhZ2VzVG9Gb2xkZXIoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdywgYVVpZEZvck1vdmUsIHNUb0ZvbGRlckZ1bGxOYW1lUmF3LCBiQ29weSkge1xuXHRcdGlmIChzRnJvbUZvbGRlckZ1bGxOYW1lUmF3ICE9PSBzVG9Gb2xkZXJGdWxsTmFtZVJhdyAmJiBpc0FycmF5KGFVaWRGb3JNb3ZlKSAmJiAwIDwgYVVpZEZvck1vdmUubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBvRnJvbUZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3Qoc0Zyb21Gb2xkZXJGdWxsTmFtZVJhdyksXG5cdFx0XHRcdG9Ub0ZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3Qoc1RvRm9sZGVyRnVsbE5hbWVSYXcpO1xuXG5cdFx0XHRpZiAob0Zyb21Gb2xkZXIgJiYgb1RvRm9sZGVyKSB7XG5cdFx0XHRcdGlmIChpc1VuZChiQ29weSkgPyBmYWxzZSA6ICEhYkNvcHkpIHtcblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VzQ29weUhlbHBlcihvRnJvbUZvbGRlci5mdWxsTmFtZVJhdywgb1RvRm9sZGVyLmZ1bGxOYW1lUmF3LCBhVWlkRm9yTW92ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlc01vdmVIZWxwZXIob0Zyb21Gb2xkZXIuZnVsbE5hbWVSYXcsIG9Ub0ZvbGRlci5mdWxsTmFtZVJhdywgYVVpZEZvck1vdmUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0TWVzc2FnZVN0b3JlLnJlbW92ZU1lc3NhZ2VzRnJvbUxpc3Qob0Zyb21Gb2xkZXIuZnVsbE5hbWVSYXcsIGFVaWRGb3JNb3ZlLCBvVG9Gb2xkZXIuZnVsbE5hbWVSYXcsIGJDb3B5KTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayA9IG51bGxcblx0ICovXG5cdGZvbGRlcnNSZWxvYWQoY2FsbGJhY2sgPSBudWxsKSB7XG5cdFx0Y29uc3QgcHJvbSA9IFByb21pc2VzLmZvbGRlcnNSZWxvYWQoRm9sZGVyU3RvcmUuZm9sZGVyc0xvYWRpbmcpO1xuXHRcdGlmIChjYWxsYmFjaykge1xuXHRcdFx0cHJvbVxuXHRcdFx0XHQudGhlbigodmFsdWUpID0+ICEhdmFsdWUpXG5cdFx0XHRcdC50aGVuKGNhbGxiYWNrKVxuXHRcdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrKGZhbHNlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYWxsYmFjay1yZXR1cm5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCAxKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9sZGVyc1Byb21pc2VzQWN0aW9uSGVscGVyKHByb21pc2UsIGVycm9yRGVmQ29kZSkge1xuXHRcdFByb21pc2VzLmFib3J0KCdGb2xkZXJzJylcblx0XHRcdC5mYXN0UmVzb2x2ZSh0cnVlKVxuXHRcdFx0LnRoZW4oKCkgPT4gcHJvbWlzZSlcblx0XHRcdC50aGVuKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0UHJvbWlzZXMuZm9sZGVyc1JlbG9hZFdpdGhUaW1lb3V0KEZvbGRlclN0b3JlLmZvbGRlcnNMb2FkaW5nKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0KGVycm9yQ29kZSkgPT4ge1xuXHRcdFx0XHRcdEZvbGRlclN0b3JlLmZvbGRlckxpc3QuZXJyb3IoZ2V0Tm90aWZpY2F0aW9uKGVycm9yQ29kZSwgJycsIGVycm9yRGVmQ29kZSkpO1xuXHRcdFx0XHRcdFByb21pc2VzLmZvbGRlcnNSZWxvYWRXaXRoVGltZW91dChGb2xkZXJTdG9yZS5mb2xkZXJzTG9hZGluZyk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdH1cblxuXHRyZWxvYWRPcGVuUGdwS2V5cygpIHtcblx0XHRpZiAoUGdwU3RvcmUuY2FwYU9wZW5QR1AoKSkge1xuXHRcdFx0Y29uc3Qga2V5cyA9IFtdLFxuXHRcdFx0XHRlbWFpbCA9IG5ldyBFbWFpbE1vZGVsKCksXG5cdFx0XHRcdG9wZW5wZ3BLZXlyaW5nID0gUGdwU3RvcmUub3BlbnBncEtleXJpbmcsXG5cdFx0XHRcdG9wZW5wZ3BLZXlzID0gb3BlbnBncEtleXJpbmcgPyBvcGVucGdwS2V5cmluZy5nZXRBbGxLZXlzKCkgOiBbXTtcblxuXHRcdFx0Xy5lYWNoKG9wZW5wZ3BLZXlzLCAob0l0ZW0sIGlJbmRleCkgPT4ge1xuXHRcdFx0XHRpZiAob0l0ZW0gJiYgb0l0ZW0ucHJpbWFyeUtleSkge1xuXHRcdFx0XHRcdGNvbnN0IGFFbWFpbHMgPSBbXSxcblx0XHRcdFx0XHRcdGFVc2VycyA9IFtdLFxuXHRcdFx0XHRcdFx0cHJpbWFyeVVzZXIgPSBvSXRlbS5nZXRQcmltYXJ5VXNlcigpLFxuXHRcdFx0XHRcdFx0dXNlciA9XG5cdFx0XHRcdFx0XHRcdHByaW1hcnlVc2VyICYmIHByaW1hcnlVc2VyLnVzZXJcblx0XHRcdFx0XHRcdFx0XHQ/IHByaW1hcnlVc2VyLnVzZXIudXNlcklkLnVzZXJpZFxuXHRcdFx0XHRcdFx0XHRcdDogb0l0ZW0udXNlcnMgJiYgb0l0ZW0udXNlcnNbMF1cblx0XHRcdFx0XHRcdFx0XHQ/IG9JdGVtLnVzZXJzWzBdLnVzZXJJZC51c2VyaWRcblx0XHRcdFx0XHRcdFx0XHQ6ICcnO1xuXG5cdFx0XHRcdFx0aWYgKG9JdGVtLnVzZXJzKSB7XG5cdFx0XHRcdFx0XHRfLmVhY2gob0l0ZW0udXNlcnMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtLnVzZXJJZCkge1xuXHRcdFx0XHRcdFx0XHRcdGVtYWlsLmNsZWFyKCk7XG5cdFx0XHRcdFx0XHRcdFx0ZW1haWwucGFyc2UoaXRlbS51c2VySWQudXNlcmlkKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZW1haWwudmFsaWRhdGUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0YUVtYWlscy5wdXNoKGVtYWlsLmVtYWlsKTtcblx0XHRcdFx0XHRcdFx0XHRcdGFVc2Vycy5wdXNoKGl0ZW0udXNlcklkLnVzZXJpZCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoYUVtYWlscy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGtleXMucHVzaChcblx0XHRcdFx0XHRcdFx0bmV3IE9wZW5QZ3BLZXlNb2RlbChcblx0XHRcdFx0XHRcdFx0XHRpSW5kZXgsXG5cdFx0XHRcdFx0XHRcdFx0b0l0ZW0ucHJpbWFyeUtleS5nZXRGaW5nZXJwcmludCgpLFxuXHRcdFx0XHRcdFx0XHRcdG9JdGVtLnByaW1hcnlLZXlcblx0XHRcdFx0XHRcdFx0XHRcdC5nZXRLZXlJZCgpXG5cdFx0XHRcdFx0XHRcdFx0XHQudG9IZXgoKVxuXHRcdFx0XHRcdFx0XHRcdFx0LnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHRcdFx0Xy51bmlxKF8uY29tcGFjdChfLm1hcChvSXRlbS5nZXRLZXlJZHMoKSwgKGl0ZW0pID0+IChpdGVtICYmIGl0ZW0udG9IZXggPyBpdGVtLnRvSGV4KCkgOiBudWxsKSkpKSxcblx0XHRcdFx0XHRcdFx0XHRhVXNlcnMsXG5cdFx0XHRcdFx0XHRcdFx0YUVtYWlscyxcblx0XHRcdFx0XHRcdFx0XHRvSXRlbS5pc1ByaXZhdGUoKSxcblx0XHRcdFx0XHRcdFx0XHRvSXRlbS5hcm1vcigpLFxuXHRcdFx0XHRcdFx0XHRcdHVzZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShQZ3BTdG9yZS5vcGVucGdwa2V5cygpKTtcblx0XHRcdFBncFN0b3JlLm9wZW5wZ3BrZXlzKGtleXMpO1xuXHRcdH1cblx0fVxuXG5cdGFjY291bnRzQ291bnRzKCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0XHQvLyBBY2NvdW50U3RvcmUuYWNjb3VudHMubG9hZGluZyh0cnVlKTtcblx0XHQvL1xuXHRcdC8vIFJlbW90ZS5hY2NvdW50c0NvdW50cygoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHQvL1xuXHRcdC8vIFx0QWNjb3VudFN0b3JlLmFjY291bnRzLmxvYWRpbmcoZmFsc2UpO1xuXHRcdC8vXG5cdFx0Ly8gXHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YS5SZXN1bHQgJiYgb0RhdGEuUmVzdWx0WydDb3VudHMnXSlcblx0XHQvLyBcdHtcblx0XHQvLyBcdFx0dmFyXG5cdFx0Ly8gXHRcdFx0c0VtYWlsID0gQWNjb3VudFN0b3JlLmVtYWlsKCksXG5cdFx0Ly8gXHRcdFx0YUFjb3VudHMgPSBBY2NvdW50U3RvcmUuYWNjb3VudHMoKVxuXHRcdC8vIFx0XHQ7XG5cdFx0Ly9cblx0XHQvLyBcdFx0Xy5lYWNoKG9EYXRhLlJlc3VsdFsnQ291bnRzJ10sIChvSXRlbSkgPT4ge1xuXHRcdC8vXG5cdFx0Ly8gXHRcdFx0dmFyIG9BY2NvdW50ID0gXy5maW5kKGFBY291bnRzLCAob0FjY291bnQpID0+IHtcblx0XHQvLyBcdFx0XHRcdHJldHVybiBvQWNjb3VudCAmJiBvSXRlbVswXSA9PT0gb0FjY291bnQuZW1haWwgJiYgc0VtYWlsICE9PSBvQWNjb3VudC5lbWFpbDtcblx0XHQvLyBcdFx0XHR9KTtcblx0XHQvL1xuXHRcdC8vIFx0XHRcdGlmIChvQWNjb3VudClcblx0XHQvLyBcdFx0XHR7XG5cdFx0Ly8gXHRcdFx0XHRvQWNjb3VudC5jb3VudChwSW50KG9JdGVtWzFdKSk7XG5cdFx0Ly8gXHRcdFx0fVxuXHRcdC8vIFx0XHR9KTtcblx0XHQvLyBcdH1cblx0XHQvLyB9KTtcblx0fVxuXG5cdGFjY291bnRzQW5kSWRlbnRpdGllcyhiQm9vdCkge1xuXHRcdEFjY291bnRTdG9yZS5hY2NvdW50cy5sb2FkaW5nKHRydWUpO1xuXHRcdElkZW50aXR5U3RvcmUuaWRlbnRpdGllcy5sb2FkaW5nKHRydWUpO1xuXG5cdFx0UmVtb3RlLmFjY291bnRzQW5kSWRlbnRpdGllcygoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHRcdEFjY291bnRTdG9yZS5hY2NvdW50cy5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdElkZW50aXR5U3RvcmUuaWRlbnRpdGllcy5sb2FkaW5nKGZhbHNlKTtcblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGNvbnN0IGNvdW50cyA9IHt9LFxuXHRcdFx0XHRcdHNBY2NvdW50RW1haWwgPSBBY2NvdW50U3RvcmUuZW1haWwoKTtcblx0XHRcdFx0bGV0IHBhcmVudEVtYWlsID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1BhcmVudEVtYWlsJyk7XG5cblx0XHRcdFx0cGFyZW50RW1haWwgPSAnJyA9PT0gcGFyZW50RW1haWwgPyBzQWNjb3VudEVtYWlsIDogcGFyZW50RW1haWw7XG5cblx0XHRcdFx0aWYgKGlzQXJyYXkob0RhdGEuUmVzdWx0LkFjY291bnRzKSkge1xuXHRcdFx0XHRcdF8uZWFjaChBY2NvdW50U3RvcmUuYWNjb3VudHMoKSwgKG9BY2NvdW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb3VudHNbb0FjY291bnQuZW1haWxdID0gb0FjY291bnQuY291bnQoKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KEFjY291bnRTdG9yZS5hY2NvdW50cygpKTtcblxuXHRcdFx0XHRcdEFjY291bnRTdG9yZS5hY2NvdW50cyhcblx0XHRcdFx0XHRcdF8ubWFwKFxuXHRcdFx0XHRcdFx0XHRvRGF0YS5SZXN1bHQuQWNjb3VudHMsXG5cdFx0XHRcdFx0XHRcdChzVmFsdWUpID0+IG5ldyBBY2NvdW50TW9kZWwoc1ZhbHVlLCBzVmFsdWUgIT09IHBhcmVudEVtYWlsLCBjb3VudHNbc1ZhbHVlXSB8fCAwKVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXNVbmQoYkJvb3QpID8gZmFsc2UgOiAhIWJCb290KSB7XG5cdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmFjY291bnRzQ291bnRzKCksIDEwMDAgKiA1KTtcblx0XHRcdFx0XHRFdmVudHMuc3ViKCdpbnRlcnZhbC4xMG0tYWZ0ZXI1bScsICgpID0+IHRoaXMuYWNjb3VudHNDb3VudHMoKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXNBcnJheShvRGF0YS5SZXN1bHQuSWRlbnRpdGllcykpIHtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveShJZGVudGl0eVN0b3JlLmlkZW50aXRpZXMoKSk7XG5cblx0XHRcdFx0XHRJZGVudGl0eVN0b3JlLmlkZW50aXRpZXMoXG5cdFx0XHRcdFx0XHRfLm1hcChvRGF0YS5SZXN1bHQuSWRlbnRpdGllcywgKGlkZW50aXR5RGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBpZCA9IHBTdHJpbmcoaWRlbnRpdHlEYXRhLklkKSxcblx0XHRcdFx0XHRcdFx0XHRlbWFpbCA9IHBTdHJpbmcoaWRlbnRpdHlEYXRhLkVtYWlsKSxcblx0XHRcdFx0XHRcdFx0XHRpZGVudGl0eSA9IG5ldyBJZGVudGl0eU1vZGVsKGlkLCBlbWFpbCk7XG5cblx0XHRcdFx0XHRcdFx0aWRlbnRpdHkubmFtZShwU3RyaW5nKGlkZW50aXR5RGF0YS5OYW1lKSk7XG5cdFx0XHRcdFx0XHRcdGlkZW50aXR5LnJlcGx5VG8ocFN0cmluZyhpZGVudGl0eURhdGEuUmVwbHlUbykpO1xuXHRcdFx0XHRcdFx0XHRpZGVudGl0eS5iY2MocFN0cmluZyhpZGVudGl0eURhdGEuQmNjKSk7XG5cdFx0XHRcdFx0XHRcdGlkZW50aXR5LnNpZ25hdHVyZShwU3RyaW5nKGlkZW50aXR5RGF0YS5TaWduYXR1cmUpKTtcblx0XHRcdFx0XHRcdFx0aWRlbnRpdHkuc2lnbmF0dXJlSW5zZXJ0QmVmb3JlKCEhaWRlbnRpdHlEYXRhLlNpZ25hdHVyZUluc2VydEJlZm9yZSk7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGlkZW50aXR5O1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHR0ZW1wbGF0ZXMoKSB7XG5cdFx0VGVtcGxhdGVTdG9yZS50ZW1wbGF0ZXMubG9hZGluZyh0cnVlKTtcblxuXHRcdFJlbW90ZS50ZW1wbGF0ZXMoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0VGVtcGxhdGVTdG9yZS50ZW1wbGF0ZXMubG9hZGluZyhmYWxzZSk7XG5cblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YS5SZXN1bHQgJiYgaXNBcnJheShkYXRhLlJlc3VsdC5UZW1wbGF0ZXMpKSB7XG5cdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KFRlbXBsYXRlU3RvcmUudGVtcGxhdGVzKCkpO1xuXG5cdFx0XHRcdFRlbXBsYXRlU3RvcmUudGVtcGxhdGVzKFxuXHRcdFx0XHRcdF8uY29tcGFjdChcblx0XHRcdFx0XHRcdF8ubWFwKGRhdGEuUmVzdWx0LlRlbXBsYXRlcywgKHRlbXBsYXRlRGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZU1vZGVsKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0ZW1wbGF0ZS5wYXJzZSh0ZW1wbGF0ZURhdGEpID8gdGVtcGxhdGUgOiBudWxsO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRxdW90YSgpIHtcblx0XHRSZW1vdGUucXVvdGEoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiZcblx0XHRcdFx0ZGF0YSAmJlxuXHRcdFx0XHRkYXRhLlJlc3VsdCAmJlxuXHRcdFx0XHRpc0FycmF5KGRhdGEuUmVzdWx0KSAmJlxuXHRcdFx0XHQxIDwgZGF0YS5SZXN1bHQubGVuZ3RoICYmXG5cdFx0XHRcdGlzUG9zTnVtZXJpYyhkYXRhLlJlc3VsdFswXSwgdHJ1ZSkgJiZcblx0XHRcdFx0aXNQb3NOdW1lcmljKGRhdGEuUmVzdWx0WzFdLCB0cnVlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdFF1b3RhU3RvcmUucG9wdWxhdGVEYXRhKHBJbnQoZGF0YS5SZXN1bHRbMV0pLCBwSW50KGRhdGEuUmVzdWx0WzBdKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlclxuXHQgKiBAcGFyYW0ge0FycmF5PX0gbGlzdCA9IFtdXG5cdCAqL1xuXHRmb2xkZXJJbmZvcm1hdGlvbihmb2xkZXIsIGxpc3QpIHtcblx0XHRpZiAoJycgIT09IHRyaW0oZm9sZGVyKSkge1xuXHRcdFx0UmVtb3RlLmZvbGRlckluZm9ybWF0aW9uKFxuXHRcdFx0XHQocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCkge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5SZXN1bHQgJiYgZGF0YS5SZXN1bHQuSGFzaCAmJiBkYXRhLlJlc3VsdC5Gb2xkZXIpIHtcblx0XHRcdFx0XHRcdFx0bGV0IHVpZCA9ICcnLFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrID0gZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0dW5yZWFkQ291bnRDaGFuZ2UgPSBmYWxzZTtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBmb2xkZXJGcm9tQ2FjaGUgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KGRhdGEuUmVzdWx0LkZvbGRlcik7XG5cdFx0XHRcdFx0XHRcdGlmIChmb2xkZXJGcm9tQ2FjaGUpIHtcblx0XHRcdFx0XHRcdFx0XHRmb2xkZXJGcm9tQ2FjaGUuaW50ZXJ2YWwgPSBtb21lbnROb3dVbml4KCk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5SZXN1bHQuSGFzaCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0Rm9sZGVySGFzaChkYXRhLlJlc3VsdC5Gb2xkZXIsIGRhdGEuUmVzdWx0Lkhhc2gpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmIChpc05vcm1hbChkYXRhLlJlc3VsdC5NZXNzYWdlQ291bnQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb2xkZXJGcm9tQ2FjaGUubWVzc2FnZUNvdW50QWxsKGRhdGEuUmVzdWx0Lk1lc3NhZ2VDb3VudCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGlzTm9ybWFsKGRhdGEuUmVzdWx0Lk1lc3NhZ2VVbnNlZW5Db3VudCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChwSW50KGZvbGRlckZyb21DYWNoZS5tZXNzYWdlQ291bnRVbnJlYWQoKSkgIT09IHBJbnQoZGF0YS5SZXN1bHQuTWVzc2FnZVVuc2VlbkNvdW50KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bnJlYWRDb3VudENoYW5nZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdGZvbGRlckZyb21DYWNoZS5tZXNzYWdlQ291bnRVbnJlYWQoZGF0YS5SZXN1bHQuTWVzc2FnZVVuc2VlbkNvdW50KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAodW5yZWFkQ291bnRDaGFuZ2UpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNsZWFyTWVzc2FnZUZsYWdzRnJvbUNhY2hlQnlGb2xkZXIoZm9sZGVyRnJvbUNhY2hlLmZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5SZXN1bHQuRmxhZ3MpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAodWlkIGluIGRhdGEuUmVzdWx0LkZsYWdzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChoYXMoZGF0YS5SZXN1bHQuRmxhZ3MsIHVpZCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVjayA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZmxhZ3MgPSBkYXRhLlJlc3VsdC5GbGFnc1t1aWRdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZUJ5Rm9sZGVyQW5kVWlkKGZvbGRlckZyb21DYWNoZS5mdWxsTmFtZVJhdywgdWlkLnRvU3RyaW5nKCksIFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFmbGFncy5Jc1NlZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQhIWZsYWdzLklzRmxhZ2dlZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCEhZmxhZ3MuSXNBbnN3ZXJlZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCEhZmxhZ3MuSXNGb3J3YXJkZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQhIWZsYWdzLklzUmVhZFJlY2VpcHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2hlY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZWxvYWRGbGFnc0N1cnJlbnRNZXNzYWdlTGlzdEFuZE1lc3NhZ2VGcm9tQ2FjaGUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRNZXNzYWdlU3RvcmUuaW5pdFVpZE5leHRBbmROZXdNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0XHRcdGZvbGRlckZyb21DYWNoZS5mdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGEuUmVzdWx0LlVpZE5leHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLlJlc3VsdC5OZXdNZXNzYWdlc1xuXHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRjb25zdCBoYXNoID0gZ2V0Rm9sZGVySGFzaChkYXRhLlJlc3VsdC5Gb2xkZXIpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChkYXRhLlJlc3VsdC5IYXNoICE9PSBoYXNoIHx8ICcnID09PSBoYXNoIHx8IHVucmVhZENvdW50Q2hhbmdlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZm9sZGVyRnJvbUNhY2hlLmZ1bGxOYW1lUmF3ID09PSBGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlbG9hZE1lc3NhZ2VMaXN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGdldEZvbGRlckluYm94TmFtZSgpID09PSBmb2xkZXJGcm9tQ2FjaGUuZnVsbE5hbWVSYXcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZWNhY2hlSW5ib3hNZXNzYWdlTGlzdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Zm9sZGVyLFxuXHRcdFx0XHRsaXN0XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBib290ID0gZmFsc2Vcblx0ICovXG5cdGZvbGRlckluZm9ybWF0aW9uTXVsdGlwbHkoYm9vdCA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgZm9sZGVycyA9IEZvbGRlclN0b3JlLmdldE5leHRGb2xkZXJOYW1lcygpO1xuXHRcdGlmIChpc05vbkVtcHR5QXJyYXkoZm9sZGVycykpIHtcblx0XHRcdFJlbW90ZS5mb2xkZXJJbmZvcm1hdGlvbk11bHRpcGx5KChzUmVzdWx0LCBvRGF0YSkgPT4ge1xuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCkge1xuXHRcdFx0XHRcdGlmIChvRGF0YSAmJiBvRGF0YS5SZXN1bHQgJiYgb0RhdGEuUmVzdWx0Lkxpc3QgJiYgaXNOb25FbXB0eUFycmF5KG9EYXRhLlJlc3VsdC5MaXN0KSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdXRjID0gbW9tZW50Tm93VW5peCgpO1xuXHRcdFx0XHRcdFx0Xy5lYWNoKG9EYXRhLlJlc3VsdC5MaXN0LCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBoYXNoID0gZ2V0Rm9sZGVySGFzaChpdGVtLkZvbGRlciksXG5cdFx0XHRcdFx0XHRcdFx0Zm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChpdGVtLkZvbGRlcik7XG5cdFx0XHRcdFx0XHRcdGxldCB1bnJlYWRDb3VudENoYW5nZSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChmb2xkZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRmb2xkZXIuaW50ZXJ2YWwgPSB1dGM7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoaXRlbS5IYXNoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZXRGb2xkZXJIYXNoKGl0ZW0uRm9sZGVyLCBpdGVtLkhhc2gpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmIChpc05vcm1hbChpdGVtLk1lc3NhZ2VDb3VudCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvbGRlci5tZXNzYWdlQ291bnRBbGwoaXRlbS5NZXNzYWdlQ291bnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmIChpc05vcm1hbChpdGVtLk1lc3NhZ2VVbnNlZW5Db3VudCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChwSW50KGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSkgIT09IHBJbnQoaXRlbS5NZXNzYWdlVW5zZWVuQ291bnQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVucmVhZENvdW50Q2hhbmdlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZChpdGVtLk1lc3NhZ2VVbnNlZW5Db3VudCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHVucmVhZENvdW50Q2hhbmdlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGVhck1lc3NhZ2VGbGFnc0Zyb21DYWNoZUJ5Rm9sZGVyKGZvbGRlci5mdWxsTmFtZVJhdyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0uSGFzaCAhPT0gaGFzaCB8fCAnJyA9PT0gaGFzaCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZvbGRlci5mdWxsTmFtZVJhdyA9PT0gRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZWxvYWRNZXNzYWdlTGlzdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodW5yZWFkQ291bnRDaGFuZ2UpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChmb2xkZXIuZnVsbE5hbWVSYXcgPT09IEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGxpc3QgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3QoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShsaXN0KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZm9sZGVySW5mb3JtYXRpb24oZm9sZGVyLmZ1bGxOYW1lUmF3LCBsaXN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmIChib290KSB7XG5cdFx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5mb2xkZXJJbmZvcm1hdGlvbk11bHRpcGx5KHRydWUpLCAyMDAwKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sIGZvbGRlcnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBpU2V0QWN0aW9uXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBtZXNzYWdlcyA9IG51bGxcblx0ICovXG5cdG1lc3NhZ2VMaXN0QWN0aW9uKHNGb2xkZXJGdWxsTmFtZVJhdywgaVNldEFjdGlvbiwgbWVzc2FnZXMpIHtcblx0XHRsZXQgZm9sZGVyID0gbnVsbCxcblx0XHRcdGFscmVhZHlVbnJlYWQgPSAwLFxuXHRcdFx0cm9vdFVpZHMgPSBbXTtcblxuXHRcdGlmIChpc1VuZChtZXNzYWdlcykgfHwgIW1lc3NhZ2VzKSB7XG5cdFx0XHRtZXNzYWdlcyA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWQoKTtcblx0XHR9XG5cblx0XHRyb290VWlkcyA9IF8udW5pcShfLmNvbXBhY3QoXy5tYXAobWVzc2FnZXMsIChvTWVzc2FnZSkgPT4gKG9NZXNzYWdlICYmIG9NZXNzYWdlLnVpZCA/IG9NZXNzYWdlLnVpZCA6IG51bGwpKSkpO1xuXG5cdFx0aWYgKCcnICE9PSBzRm9sZGVyRnVsbE5hbWVSYXcgJiYgMCA8IHJvb3RVaWRzLmxlbmd0aCkge1xuXHRcdFx0c3dpdGNoIChpU2V0QWN0aW9uKSB7XG5cdFx0XHRcdGNhc2UgTWVzc2FnZVNldEFjdGlvbi5TZXRTZWVuOlxuXHRcdFx0XHRcdF8uZWFjaChyb290VWlkcywgKHNTdWJVaWQpID0+IHtcblx0XHRcdFx0XHRcdGFscmVhZHlVbnJlYWQgKz0gc3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlTZXRBY3Rpb24oc0ZvbGRlckZ1bGxOYW1lUmF3LCBzU3ViVWlkLCBpU2V0QWN0aW9uKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3Qoc0ZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdFx0XHRmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSAtIGFscmVhZHlVbnJlYWQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFJlbW90ZS5tZXNzYWdlU2V0U2Vlbihub29wLCBzRm9sZGVyRnVsbE5hbWVSYXcsIHJvb3RVaWRzLCB0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRTZWVuOlxuXHRcdFx0XHRcdF8uZWFjaChyb290VWlkcywgKHNTdWJVaWQpID0+IHtcblx0XHRcdFx0XHRcdGFscmVhZHlVbnJlYWQgKz0gc3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlTZXRBY3Rpb24oc0ZvbGRlckZ1bGxOYW1lUmF3LCBzU3ViVWlkLCBpU2V0QWN0aW9uKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3Qoc0ZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdFx0XHRmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSAtIGFscmVhZHlVbnJlYWQgKyByb290VWlkcy5sZW5ndGgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFJlbW90ZS5tZXNzYWdlU2V0U2Vlbihub29wLCBzRm9sZGVyRnVsbE5hbWVSYXcsIHJvb3RVaWRzLCBmYWxzZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWc6XG5cdFx0XHRcdFx0Xy5lYWNoKHJvb3RVaWRzLCAoc1N1YlVpZCkgPT4ge1xuXHRcdFx0XHRcdFx0c3RvcmVNZXNzYWdlRmxhZ3NUb0NhY2hlQnlTZXRBY3Rpb24oc0ZvbGRlckZ1bGxOYW1lUmF3LCBzU3ViVWlkLCBpU2V0QWN0aW9uKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFJlbW90ZS5tZXNzYWdlU2V0RmxhZ2dlZChub29wLCBzRm9sZGVyRnVsbE5hbWVSYXcsIHJvb3RVaWRzLCB0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRGbGFnOlxuXHRcdFx0XHRcdF8uZWFjaChyb290VWlkcywgKHNTdWJVaWQpID0+IHtcblx0XHRcdFx0XHRcdHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZUJ5U2V0QWN0aW9uKHNGb2xkZXJGdWxsTmFtZVJhdywgc1N1YlVpZCwgaVNldEFjdGlvbik7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRSZW1vdGUubWVzc2FnZVNldEZsYWdnZWQobm9vcCwgc0ZvbGRlckZ1bGxOYW1lUmF3LCByb290VWlkcywgZmFsc2UpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucmVsb2FkRmxhZ3NDdXJyZW50TWVzc2FnZUxpc3RBbmRNZXNzYWdlRnJvbUNhY2hlKCk7XG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZS52aWV3VHJpZ2dlcighTWVzc2FnZVN0b3JlLm1lc3NhZ2Uudmlld1RyaWdnZXIoKSk7XG5cdFx0fVxuXHR9XG5cblx0Z29vZ2xlQ29ubmVjdCgpIHtcblx0XHR3aW5kb3cub3Blbihcblx0XHRcdHNvY2lhbEdvb2dsZSgpLFxuXHRcdFx0J0dvb2dsZScsXG5cdFx0XHQnbGVmdD0yMDAsdG9wPTEwMCx3aWR0aD02NTAsaGVpZ2h0PTYwMCxtZW51YmFyPW5vLHN0YXR1cz1ubyxyZXNpemFibGU9eWVzLHNjcm9sbGJhcnM9eWVzJ1xuXHRcdCk7XG5cdH1cblxuXHR0d2l0dGVyQ29ubmVjdCgpIHtcblx0XHR3aW5kb3cub3Blbihcblx0XHRcdHNvY2lhbFR3aXR0ZXIoKSxcblx0XHRcdCdUd2l0dGVyJyxcblx0XHRcdCdsZWZ0PTIwMCx0b3A9MTAwLHdpZHRoPTY1MCxoZWlnaHQ9MzUwLG1lbnViYXI9bm8sc3RhdHVzPW5vLHJlc2l6YWJsZT15ZXMsc2Nyb2xsYmFycz15ZXMnXG5cdFx0KTtcblx0fVxuXG5cdGZhY2Vib29rQ29ubmVjdCgpIHtcblx0XHR3aW5kb3cub3Blbihcblx0XHRcdHNvY2lhbEZhY2Vib29rKCksXG5cdFx0XHQnRmFjZWJvb2snLFxuXHRcdFx0J2xlZnQ9MjAwLHRvcD0xMDAsd2lkdGg9NjUwLGhlaWdodD0zMzUsbWVudWJhcj1ubyxzdGF0dXM9bm8scmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPXllcydcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGZpcmVBbGxBY3Rpb25zID0gZmFsc2Vcblx0ICovXG5cdHNvY2lhbFVzZXJzKGZpcmVBbGxBY3Rpb25zID0gZmFsc2UpIHtcblx0XHRpZiAodHJ1ZSA9PT0gZmlyZUFsbEFjdGlvbnMpIHtcblx0XHRcdFNvY2lhbFN0b3JlLmdvb2dsZS5sb2FkaW5nKHRydWUpO1xuXHRcdFx0U29jaWFsU3RvcmUuZmFjZWJvb2subG9hZGluZyh0cnVlKTtcblx0XHRcdFNvY2lhbFN0b3JlLnR3aXR0ZXIubG9hZGluZyh0cnVlKTtcblx0XHR9XG5cblx0XHRSZW1vdGUuc29jaWFsVXNlcnMoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFNvY2lhbFN0b3JlLmdvb2dsZS51c2VyTmFtZShkYXRhLlJlc3VsdC5Hb29nbGUgfHwgJycpO1xuXHRcdFx0XHRTb2NpYWxTdG9yZS5mYWNlYm9vay51c2VyTmFtZShkYXRhLlJlc3VsdC5GYWNlYm9vayB8fCAnJyk7XG5cdFx0XHRcdFNvY2lhbFN0b3JlLnR3aXR0ZXIudXNlck5hbWUoZGF0YS5SZXN1bHQuVHdpdHRlciB8fCAnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRTb2NpYWxTdG9yZS5nb29nbGUudXNlck5hbWUoJycpO1xuXHRcdFx0XHRTb2NpYWxTdG9yZS5mYWNlYm9vay51c2VyTmFtZSgnJyk7XG5cdFx0XHRcdFNvY2lhbFN0b3JlLnR3aXR0ZXIudXNlck5hbWUoJycpO1xuXHRcdFx0fVxuXG5cdFx0XHRTb2NpYWxTdG9yZS5nb29nbGUubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRTb2NpYWxTdG9yZS5mYWNlYm9vay5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdFNvY2lhbFN0b3JlLnR3aXR0ZXIubG9hZGluZyhmYWxzZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRnb29nbGVEaXNjb25uZWN0KCkge1xuXHRcdFNvY2lhbFN0b3JlLmdvb2dsZS5sb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5nb29nbGVEaXNjb25uZWN0KHRoaXMuc29jaWFsVXNlcnMpO1xuXHR9XG5cblx0ZmFjZWJvb2tEaXNjb25uZWN0KCkge1xuXHRcdFNvY2lhbFN0b3JlLmZhY2Vib29rLmxvYWRpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLmZhY2Vib29rRGlzY29ubmVjdCh0aGlzLnNvY2lhbFVzZXJzKTtcblx0fVxuXG5cdHR3aXR0ZXJEaXNjb25uZWN0KCkge1xuXHRcdFNvY2lhbFN0b3JlLnR3aXR0ZXIubG9hZGluZyh0cnVlKTtcblx0XHRSZW1vdGUudHdpdHRlckRpc2Nvbm5lY3QodGhpcy5zb2NpYWxVc2Vycyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGF1dG9jb21wbGV0ZUNhbGxiYWNrXG5cdCAqL1xuXHRnZXRBdXRvY29tcGxldGUocXVlcnksIGF1dG9jb21wbGV0ZUNhbGxiYWNrKSB7XG5cdFx0UmVtb3RlLnN1Z2dlc3Rpb25zKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBpc0FycmF5KGRhdGEuUmVzdWx0KSkge1xuXHRcdFx0XHRhdXRvY29tcGxldGVDYWxsYmFjayhcblx0XHRcdFx0XHRfLmNvbXBhY3QoXy5tYXAoZGF0YS5SZXN1bHQsIChpdGVtKSA9PiAoaXRlbSAmJiBpdGVtWzBdID8gbmV3IEVtYWlsTW9kZWwoaXRlbVswXSwgaXRlbVsxXSkgOiBudWxsKSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLkFib3J0ICE9PSByZXN1bHQpIHtcblx0XHRcdFx0YXV0b2NvbXBsZXRlQ2FsbGJhY2soW10pO1xuXHRcdFx0fVxuXHRcdH0sIHF1ZXJ5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Z1bGxOYW1lSGFzaFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJFeHBhbmRlZFxuXHQgKi9cblx0c2V0RXhwYW5kZWRGb2xkZXIoc0Z1bGxOYW1lSGFzaCwgYkV4cGFuZGVkKSB7XG5cdFx0bGV0IGFFeHBhbmRlZExpc3QgPSBMb2NhbC5nZXQoQ2xpZW50U2lkZUtleU5hbWUuRXhwYW5kZWRGb2xkZXJzKTtcblx0XHRpZiAoIWlzQXJyYXkoYUV4cGFuZGVkTGlzdCkpIHtcblx0XHRcdGFFeHBhbmRlZExpc3QgPSBbXTtcblx0XHR9XG5cblx0XHRpZiAoYkV4cGFuZGVkKSB7XG5cdFx0XHRhRXhwYW5kZWRMaXN0LnB1c2goc0Z1bGxOYW1lSGFzaCk7XG5cdFx0XHRhRXhwYW5kZWRMaXN0ID0gXy51bmlxKGFFeHBhbmRlZExpc3QpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhRXhwYW5kZWRMaXN0ID0gXy53aXRob3V0KGFFeHBhbmRlZExpc3QsIHNGdWxsTmFtZUhhc2gpO1xuXHRcdH1cblxuXHRcdExvY2FsLnNldChDbGllbnRTaWRlS2V5TmFtZS5FeHBhbmRlZEZvbGRlcnMsIGFFeHBhbmRlZExpc3QpO1xuXHR9XG5cblx0aW5pdEhvcml6b250YWxMYXlvdXRSZXNpemVyKHNDbGllbnRTaWRlS2V5TmFtZSkge1xuXHRcdGxldCB0b3AgPSBudWxsLFxuXHRcdFx0Ym90dG9tID0gbnVsbDtcblxuXHRcdGNvbnN0IG1pbkhlaWdodCA9IDIwMCxcblx0XHRcdG1heEhlaWdodCA9IDUwMCxcblx0XHRcdGZTZXRIZWlnaHQgPSAoaGVpZ2h0KSA9PiB7XG5cdFx0XHRcdGlmIChoZWlnaHQpIHtcblx0XHRcdFx0XHRpZiAodG9wKSB7XG5cdFx0XHRcdFx0XHR0b3AuYXR0cignc3R5bGUnLCAnaGVpZ2h0OicgKyBoZWlnaHQgKyAncHgnKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoYm90dG9tKSB7XG5cdFx0XHRcdFx0XHRib3R0b20uYXR0cignc3R5bGUnLCAndG9wOicgKyAoNTUgLyogdG9wIHRvb2xiYXIgKi8gKyBoZWlnaHQpICsgJ3B4Jyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZlJlc2l6ZUNyZWF0ZUZ1bmN0aW9uID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudCAmJiBldmVudC50YXJnZXQpIHtcblx0XHRcdFx0XHQkKGV2ZW50LnRhcmdldClcblx0XHRcdFx0XHRcdC5maW5kKCcudWktcmVzaXphYmxlLWhhbmRsZScpXG5cdFx0XHRcdFx0XHQub24oJ21vdXNlZG93bicsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3JsLXJlc2l6ZXInKTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQub24oJ21vdXNldXAnLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdybC1yZXNpemVyJyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGZSZXNpemVTdGFydEZ1bmN0aW9uID0gKCkgPT4ge1xuXHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0fSxcblx0XHRcdGZSZXNpemVSZXNpemVGdW5jdGlvbiA9IF8uZGVib3VuY2UoXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQ1MDAsXG5cdFx0XHRcdHRydWVcblx0XHRcdCksXG5cdFx0XHRmUmVzaXplU3RvcEZ1bmN0aW9uID0gKG9FdmVudCwgb09iamVjdCkgPT4ge1xuXHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0XHRpZiAob09iamVjdCAmJiBvT2JqZWN0LnNpemUgJiYgb09iamVjdC5zaXplLmhlaWdodCkge1xuXHRcdFx0XHRcdExvY2FsLnNldChzQ2xpZW50U2lkZUtleU5hbWUsIG9PYmplY3Quc2l6ZS5oZWlnaHQpO1xuXG5cdFx0XHRcdFx0ZlNldEhlaWdodChvT2JqZWN0LnNpemUuaGVpZ2h0KTtcblxuXHRcdFx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b09wdGlvbnMgPSB7XG5cdFx0XHRcdGhlbHBlcjogJ3VpLXJlc2l6YWJsZS1oZWxwZXItaCcsXG5cdFx0XHRcdG1pbkhlaWdodDogbWluSGVpZ2h0LFxuXHRcdFx0XHRtYXhIZWlnaHQ6IG1heEhlaWdodCxcblx0XHRcdFx0aGFuZGxlczogJ3MnLFxuXHRcdFx0XHRjcmVhdGU6IGZSZXNpemVDcmVhdGVGdW5jdGlvbixcblx0XHRcdFx0cmVzaXplOiBmUmVzaXplUmVzaXplRnVuY3Rpb24sXG5cdFx0XHRcdHN0YXJ0OiBmUmVzaXplU3RhcnRGdW5jdGlvbixcblx0XHRcdFx0c3RvcDogZlJlc2l6ZVN0b3BGdW5jdGlvblxuXHRcdFx0fSxcblx0XHRcdGZEaXNhYmxlID0gKGJEaXNhYmxlKSA9PiB7XG5cdFx0XHRcdGlmIChiRGlzYWJsZSkge1xuXHRcdFx0XHRcdGlmICh0b3AgJiYgdG9wLmhhc0NsYXNzKCd1aS1yZXNpemFibGUnKSkge1xuXHRcdFx0XHRcdFx0dG9wLnJlc2l6YWJsZSgnZGVzdHJveScpLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGJvdHRvbSkge1xuXHRcdFx0XHRcdFx0Ym90dG9tLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKCRodG1sLmhhc0NsYXNzKCdybC1ib3R0b20tcHJldmlldy1wYW5lJykpIHtcblx0XHRcdFx0XHR0b3AgPSAkKCcuYi1tZXNzYWdlLWxpc3Qtd3JhcHBlcicpO1xuXHRcdFx0XHRcdGJvdHRvbSA9ICQoJy5iLW1lc3NhZ2Utdmlldy13cmFwcGVyJyk7XG5cblx0XHRcdFx0XHRpZiAoIXRvcC5oYXNDbGFzcygndWktcmVzaXphYmxlJykpIHtcblx0XHRcdFx0XHRcdHRvcC5yZXNpemFibGUob09wdGlvbnMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGlIZWlnaHQgPSBwSW50KExvY2FsLmdldChzQ2xpZW50U2lkZUtleU5hbWUpKSB8fCAzMDA7XG5cdFx0XHRcdFx0ZlNldEhlaWdodChpSGVpZ2h0ID4gbWluSGVpZ2h0ID8gaUhlaWdodCA6IG1pbkhlaWdodCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRmRGlzYWJsZShmYWxzZSk7XG5cblx0XHRFdmVudHMuc3ViKCdsYXlvdXQnLCAobGF5b3V0KSA9PiB7XG5cdFx0XHRmRGlzYWJsZShMYXlvdXQuQm90dG9tUHJldmlldyAhPT0gbGF5b3V0KTtcblx0XHR9KTtcblx0fVxuXG5cdGluaXRWZXJ0aWNhbExheW91dFJlc2l6ZXIoc0NsaWVudFNpZGVLZXlOYW1lKSB7XG5cdFx0Y29uc3QgZGlzYWJsZWRXaWR0aCA9IDYwLFxuXHRcdFx0bWluV2lkdGggPSAxNTUsXG5cdFx0XHRsTGVmdCA9ICQoJyNybC1sZWZ0JyksXG5cdFx0XHRyaWdodCA9ICQoJyNybC1yaWdodCcpLFxuXHRcdFx0bUxlZnRXaWR0aCA9IExvY2FsLmdldChzQ2xpZW50U2lkZUtleU5hbWUpIHx8IG51bGwsXG5cdFx0XHRmU2V0V2lkdGggPSAoaVdpZHRoKSA9PiB7XG5cdFx0XHRcdGlmIChpV2lkdGgpIHtcblx0XHRcdFx0XHRsZWZ0UGFuZWxXaWR0aChpV2lkdGgpO1xuXG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXJlc2l6ZXInKTtcblxuXHRcdFx0XHRcdGxMZWZ0LmNzcyh7XG5cdFx0XHRcdFx0XHR3aWR0aDogJycgKyBpV2lkdGggKyAncHgnXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRyaWdodC5jc3Moe1xuXHRcdFx0XHRcdFx0bGVmdDogJycgKyBpV2lkdGggKyAncHgnXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmRGlzYWJsZSA9IChiRGlzYWJsZSkgPT4ge1xuXHRcdFx0XHRpZiAoYkRpc2FibGUpIHtcblx0XHRcdFx0XHRsTGVmdC5yZXNpemFibGUoJ2Rpc2FibGUnKTtcblx0XHRcdFx0XHRmU2V0V2lkdGgoZGlzYWJsZWRXaWR0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bExlZnQucmVzaXphYmxlKCdlbmFibGUnKTtcblx0XHRcdFx0XHRjb25zdCB3aWR0aCA9IHBJbnQoTG9jYWwuZ2V0KHNDbGllbnRTaWRlS2V5TmFtZSkpIHx8IG1pbldpZHRoO1xuXHRcdFx0XHRcdGZTZXRXaWR0aCh3aWR0aCA+IG1pbldpZHRoID8gd2lkdGggOiBtaW5XaWR0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmUmVzaXplQ3JlYXRlRnVuY3Rpb24gPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldCkge1xuXHRcdFx0XHRcdCQoZXZlbnQudGFyZ2V0KVxuXHRcdFx0XHRcdFx0LmZpbmQoJy51aS1yZXNpemFibGUtaGFuZGxlJylcblx0XHRcdFx0XHRcdC5vbignbW91c2Vkb3duJywgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5vbignbW91c2V1cCcsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXJlc2l6ZXInKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZlJlc2l6ZVJlc2l6ZUZ1bmN0aW9uID0gXy5kZWJvdW5jZShcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdybC1yZXNpemVyJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdDUwMCxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KSxcblx0XHRcdGZSZXNpemVTdGFydEZ1bmN0aW9uID0gKCkgPT4ge1xuXHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0fSxcblx0XHRcdGZSZXNpemVTdG9wRnVuY3Rpb24gPSAoZXZlbnQsIG9iaikgPT4ge1xuXHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtcmVzaXplcicpO1xuXHRcdFx0XHRpZiAob2JqICYmIG9iai5zaXplICYmIG9iai5zaXplLndpZHRoKSB7XG5cdFx0XHRcdFx0TG9jYWwuc2V0KHNDbGllbnRTaWRlS2V5TmFtZSwgb2JqLnNpemUud2lkdGgpO1xuXG5cdFx0XHRcdFx0bGVmdFBhbmVsV2lkdGgob2JqLnNpemUud2lkdGgpO1xuXG5cdFx0XHRcdFx0cmlnaHQuY3NzKHtcblx0XHRcdFx0XHRcdGxlZnQ6ICcnICsgb2JqLnNpemUud2lkdGggKyAncHgnXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRsTGVmdC5jc3Moe1xuXHRcdFx0XHRcdFx0cG9zaXRpb246ICcnLFxuXHRcdFx0XHRcdFx0dG9wOiAnJyxcblx0XHRcdFx0XHRcdGxlZnQ6ICcnLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiAnJ1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0aWYgKG51bGwgIT09IG1MZWZ0V2lkdGgpIHtcblx0XHRcdGZTZXRXaWR0aChtTGVmdFdpZHRoID4gbWluV2lkdGggPyBtTGVmdFdpZHRoIDogbWluV2lkdGgpO1xuXHRcdH1cblxuXHRcdGxMZWZ0LnJlc2l6YWJsZSh7XG5cdFx0XHRoZWxwZXI6ICd1aS1yZXNpemFibGUtaGVscGVyLXcnLFxuXHRcdFx0bWluV2lkdGg6IG1pbldpZHRoLFxuXHRcdFx0bWF4V2lkdGg6IE1hZ2ljcy5TaXplMzUwcHgsXG5cdFx0XHRoYW5kbGVzOiAnZScsXG5cdFx0XHRjcmVhdGU6IGZSZXNpemVDcmVhdGVGdW5jdGlvbixcblx0XHRcdHJlc2l6ZTogZlJlc2l6ZVJlc2l6ZUZ1bmN0aW9uLFxuXHRcdFx0c3RhcnQ6IGZSZXNpemVTdGFydEZ1bmN0aW9uLFxuXHRcdFx0c3RvcDogZlJlc2l6ZVN0b3BGdW5jdGlvblxuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1YignbGVmdC1wYW5lbC5vZmYnLCAoKSA9PiB7XG5cdFx0XHRmRGlzYWJsZSh0cnVlKTtcblx0XHR9KTtcblxuXHRcdEV2ZW50cy5zdWIoJ2xlZnQtcGFuZWwub24nLCAoKSA9PiB7XG5cdFx0XHRmRGlzYWJsZShmYWxzZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRsb2dvdXQoKSB7XG5cdFx0UmVtb3RlLmxvZ291dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmxvZ2luQW5kTG9nb3V0UmVsb2FkKFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1BhcmVudEVtYWlsJykgJiYgMCA8IFNldHRpbmdzLnNldHRpbmdzR2V0KCdQYXJlbnRFbWFpbCcpLmxlbmd0aFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxuXG5cdGJvb3RzdGFydFR3b0ZhY3RvclNjcmVlbigpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Ud29GYWN0b3JDb25maWd1cmF0aW9uJyksIFt0cnVlXSk7XG5cdH1cblxuXHRib290c3RhcnRXZWxjb21lUG9wdXAodXJsKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvV2VsY29tZVBhZ2UnKSwgW3VybF0pO1xuXHR9XG5cblx0Ym9vdHN0YXJ0TG9naW5TY3JlZW4oKSB7XG5cdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXVzZXItYXV0aCcpLmFkZENsYXNzKCdybC11c2VyLW5vLWF1dGgnKTtcblxuXHRcdGNvbnN0IGN1c3RvbUxvZ2luTGluayA9IHBTdHJpbmcoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2N1c3RvbUxvZ2luTGluaycpKTtcblx0XHRpZiAoIWN1c3RvbUxvZ2luTGluaykge1xuXHRcdFx0c3RhcnRTY3JlZW5zKFtMb2dpblVzZXJTY3JlZW5dKTtcblxuXHRcdFx0cnVuSG9vaygncmwtc3RhcnQtbG9naW4tc2NyZWVucycpO1xuXHRcdFx0RXZlbnRzLnB1YigncmwuYm9vdHN0YXJ0LWxvZ2luLXNjcmVlbnMnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdF8uZGVmZXIoKCkgPT4ge1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IGN1c3RvbUxvZ2luTGluaztcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGJvb3RlbmQoKSB7XG5cdFx0aWYgKHByb2dyZXNzSnMpIHtcblx0XHRcdHByb2dyZXNzSnMuc2V0KDEwMCkuZW5kKCk7XG5cdFx0fVxuXHRcdGhpZGVMb2FkaW5nKCk7XG5cdH1cblxuXHRib290c3RhcnQoKSB7XG5cdFx0c3VwZXIuYm9vdHN0YXJ0KCk7XG5cblx0XHRBcHBTdG9yZS5wb3B1bGF0ZSgpO1xuXHRcdFNldHRpbmdzU3RvcmUucG9wdWxhdGUoKTtcblx0XHROb3RpZmljYXRpb25TdG9yZS5wb3B1bGF0ZSgpO1xuXHRcdEFjY291bnRTdG9yZS5wb3B1bGF0ZSgpO1xuXHRcdENvbnRhY3RTdG9yZS5wb3B1bGF0ZSgpO1xuXG5cdFx0bGV0IGNvbnRhY3RzU3luY0ludGVydmFsID0gcEludChTZXR0aW5ncy5zZXR0aW5nc0dldCgnQ29udGFjdHNTeW5jSW50ZXJ2YWwnKSk7XG5cblx0XHRjb25zdCBqc0hhc2ggPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnanNIYXNoJyksXG5cdFx0XHRzdGFydHVwVXJsID0gcFN0cmluZyhTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3RhcnR1cFVybCcpKSxcblx0XHRcdGFsbG93R29vZ2xlID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsJyksXG5cdFx0XHRhbGxvd0ZhY2Vib29rID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93RmFjZWJvb2tTb2NpYWwnKSxcblx0XHRcdGFsbG93VHdpdHRlciA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd1R3aXR0ZXJTb2NpYWwnKTtcblxuXHRcdGlmIChwcm9ncmVzc0pzKSB7XG5cdFx0XHRwcm9ncmVzc0pzLnNldCg5MCk7XG5cdFx0fVxuXG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0RXZlbnRzLnB1YignbGVmdC1wYW5lbC4nICsgKHZhbHVlID8gJ29mZicgOiAnb24nKSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNldFdpbmRvd1RpdGxlKCcnKTtcblx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGgnKSkge1xuXHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3JsLXVzZXItYXV0aCcpO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdFNldHRpbmdzLmNhcGEoQ2FwYS5Ud29GYWN0b3IpICYmXG5cdFx0XHRcdFNldHRpbmdzLmNhcGEoQ2FwYS5Ud29GYWN0b3JGb3JjZSkgJiZcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1JlcXVpcmVUd29GYWN0b3InKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMuYm9vdGVuZCgpO1xuXHRcdFx0XHR0aGlzLmJvb3RzdGFydFR3b0ZhY3RvclNjcmVlbigpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRXaW5kb3dUaXRsZShpMThuKCdUSVRMRVMvTE9BRElORycpKTtcblxuXHRcdFx0XHQvLyByZXF1aXJlLmVuc3VyZShbXSwgZnVuY3Rpb24oKSB7IC8vIHJlcXVpcmUgY29kZSBzcGxpdHRpbmdcblxuXHRcdFx0XHR0aGlzLmZvbGRlcnNSZWxvYWQoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5ib290ZW5kKCk7XG5cblx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdGlmICgnJyAhPT0gc3RhcnR1cFVybCkge1xuXHRcdFx0XHRcdFx0XHRyb3V0ZU9mZigpO1xuXHRcdFx0XHRcdFx0XHRzZXRIYXNoKHJvb3Qoc3RhcnR1cFVybCksIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRyb3V0ZU9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChqYXNzbCAmJiB3aW5kb3cuY3J5cHRvICYmIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIFNldHRpbmdzLmNhcGEoQ2FwYS5PcGVuUEdQKSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvcGVucGdwQ2FsbGJhY2sgPSAob3BlbnBncCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFBncFN0b3JlLm9wZW5wZ3AgPSBvcGVucGdwO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHdpbmRvdy5Xb3JrZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFBncFN0b3JlLm9wZW5wZ3AuaW5pdFdvcmtlcih7IHBhdGg6IG9wZW5QZ3BXb3JrZXJKcygpIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsb2coZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0UGdwU3RvcmUub3BlbnBncEtleXJpbmcgPSBuZXcgb3BlbnBncC5LZXlyaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0UGdwU3RvcmUuY2FwYU9wZW5QR1AodHJ1ZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRFdmVudHMucHViKCdvcGVucGdwLmluaXQnKTtcblxuXHRcdFx0XHRcdFx0XHRcdHRoaXMucmVsb2FkT3BlblBncEtleXMoKTtcblx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRpZiAod2luZG93Lm9wZW5wZ3ApIHtcblx0XHRcdFx0XHRcdFx0XHRvcGVucGdwQ2FsbGJhY2sod2luZG93Lm9wZW5wZ3ApO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGphc3NsKG9wZW5QZ3BKcygpKS50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh3aW5kb3cub3BlbnBncCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcGVucGdwQ2FsbGJhY2sod2luZG93Lm9wZW5wZ3ApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRQZ3BTdG9yZS5jYXBhT3BlblBHUChmYWxzZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0U2NyZWVucyhbXG5cdFx0XHRcdFx0XHRcdE1haWxCb3hVc2VyU2NyZWVuLFxuXHRcdFx0XHRcdFx0XHRTZXR0aW5ncy5jYXBhKENhcGEuU2V0dGluZ3MpID8gU2V0dGluZ3NVc2VyU2NyZWVuIDogbnVsbFxuXHRcdFx0XHRcdFx0XHQvLyBmYWxzZSA/IEFib3V0VXNlclNjcmVlbiA6IG51bGxcblx0XHRcdFx0XHRcdF0pO1xuXG5cdFx0XHRcdFx0XHRpZiAoYWxsb3dHb29nbGUgfHwgYWxsb3dGYWNlYm9vayB8fCBhbGxvd1R3aXR0ZXIpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zb2NpYWxVc2Vycyh0cnVlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0RXZlbnRzLnN1YignaW50ZXJ2YWwuMm0nLCAoKSA9PiB0aGlzLmZvbGRlckluZm9ybWF0aW9uKGdldEZvbGRlckluYm94TmFtZSgpKSk7XG5cdFx0XHRcdFx0XHRFdmVudHMuc3ViKCdpbnRlcnZhbC4zbScsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0YgPSBGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKTtcblx0XHRcdFx0XHRcdFx0aWYgKGdldEZvbGRlckluYm94TmFtZSgpICE9PSBzRikge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZm9sZGVySW5mb3JtYXRpb24oc0YpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0RXZlbnRzLnN1YignaW50ZXJ2YWwuMm0tYWZ0ZXI1bScsICgpID0+IHRoaXMuZm9sZGVySW5mb3JtYXRpb25NdWx0aXBseSgpKTtcblx0XHRcdFx0XHRcdEV2ZW50cy5zdWIoJ2ludGVydmFsLjE1bScsICgpID0+IHRoaXMucXVvdGEoKSk7XG5cdFx0XHRcdFx0XHRFdmVudHMuc3ViKCdpbnRlcnZhbC4yMG0nLCAoKSA9PiB0aGlzLmZvbGRlcnNSZWxvYWQoKSk7XG5cblx0XHRcdFx0XHRcdGNvbnRhY3RzU3luY0ludGVydmFsID0gNSA8PSBjb250YWN0c1N5bmNJbnRlcnZhbCA/IGNvbnRhY3RzU3luY0ludGVydmFsIDogMjA7XG5cdFx0XHRcdFx0XHRjb250YWN0c1N5bmNJbnRlcnZhbCA9IDMyMCA+PSBjb250YWN0c1N5bmNJbnRlcnZhbCA/IGNvbnRhY3RzU3luY0ludGVydmFsIDogMzIwO1xuXG5cdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHRoaXMuY29udGFjdHNTeW5jKCksIE1hZ2ljcy5UaW1lMTBzKTtcblx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5mb2xkZXJJbmZvcm1hdGlvbk11bHRpcGx5KHRydWUpLCBNYWdpY3MuVGltZTJzKTtcblxuXHRcdFx0XHRcdFx0d2luZG93LnNldEludGVydmFsKCgpID0+IHRoaXMuY29udGFjdHNTeW5jKCksIGNvbnRhY3RzU3luY0ludGVydmFsICogNjAwMDAgKyA1MDAwKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5hY2NvdW50c0FuZElkZW50aXRpZXModHJ1ZSk7XG5cblx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzRiA9IEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZ2V0Rm9sZGVySW5ib3hOYW1lKCkgIT09IHNGKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5mb2xkZXJJbmZvcm1hdGlvbihzRik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sIDEwMDApO1xuXG5cdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHRoaXMucXVvdGEoKSwgNTAwMCk7XG5cdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IFJlbW90ZS5hcHBEZWxheVN0YXJ0KG5vb3ApLCAzNTAwMCk7XG5cblx0XHRcdFx0XHRcdEV2ZW50cy5zdWIoJ3JsLmF1dG8tbG9nb3V0JywgKCkgPT4gdGhpcy5sb2dvdXQoKSk7XG5cblx0XHRcdFx0XHRcdHJ1bkhvb2soJ3JsLXN0YXJ0LXVzZXItc2NyZWVucycpO1xuXHRcdFx0XHRcdFx0RXZlbnRzLnB1YigncmwuYm9vdHN0YXJ0LXVzZXItc2NyZWVucycpO1xuXG5cdFx0XHRcdFx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1dlbGNvbWVQYWdlVXJsJykpIHtcblx0XHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmJvb3RzdGFydFdlbGNvbWVQb3B1cChTZXR0aW5ncy5zZXR0aW5nc0dldCgnV2VsY29tZVBhZ2VVcmwnKSksIDEwMDApO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FjY291bnRTaWduTWUnKSAmJlxuXHRcdFx0XHRcdFx0XHR3aW5kb3cubmF2aWdhdG9yLnJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyICYmXG5cdFx0XHRcdFx0XHRcdFNldHRpbmdzLmNhcGEoQ2FwYS5Db21wb3Nlcilcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0d2luZG93Lm5hdmlnYXRvci5yZWdpc3RlclByb3RvY29sSGFuZGxlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0J21haWx0bycsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArICc/bWFpbHRvJnRvPSVzJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0JycgKyAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RpdGxlJykgfHwgJ1JhaW5Mb29wJylcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdNYWlsVG9FbWFpbCcpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtYWlsVG9IZWxwZXIoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ01haWxUb0VtYWlsJyksIHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29tcG9zZScpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sIDUwMCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICghYk1vYmlsZURldmljZSkge1xuXHRcdFx0XHRcdFx0XHRfLmRlZmVyKCgpID0+IHRoaXMuaW5pdFZlcnRpY2FsTGF5b3V0UmVzaXplcihDbGllbnRTaWRlS2V5TmFtZS5Gb2xkZXJMaXN0U2l6ZSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmxvZ291dCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gfSk7IC8vIHJlcXVpcmUgY29kZSBzcGxpdHRpbmdcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5ib290ZW5kKCk7XG5cdFx0XHR0aGlzLmJvb3RzdGFydExvZ2luU2NyZWVuKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGFsbG93R29vZ2xlKSB7XG5cdFx0XHR3aW5kb3dbJ3JsXycgKyBqc0hhc2ggKyAnX2dvb2dsZV9zZXJ2aWNlJ10gPSAoKSA9PiB7XG5cdFx0XHRcdFNvY2lhbFN0b3JlLmdvb2dsZS5sb2FkaW5nKHRydWUpO1xuXHRcdFx0XHR0aGlzLnNvY2lhbFVzZXJzKCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChhbGxvd0ZhY2Vib29rKSB7XG5cdFx0XHR3aW5kb3dbJ3JsXycgKyBqc0hhc2ggKyAnX2ZhY2Vib29rX3NlcnZpY2UnXSA9ICgpID0+IHtcblx0XHRcdFx0U29jaWFsU3RvcmUuZmFjZWJvb2subG9hZGluZyh0cnVlKTtcblx0XHRcdFx0dGhpcy5zb2NpYWxVc2VycygpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoYWxsb3dUd2l0dGVyKSB7XG5cdFx0XHR3aW5kb3dbJ3JsXycgKyBqc0hhc2ggKyAnX3R3aXR0ZXJfc2VydmljZSddID0gKCkgPT4ge1xuXHRcdFx0XHRTb2NpYWxTdG9yZS50d2l0dGVyLmxvYWRpbmcodHJ1ZSk7XG5cdFx0XHRcdHRoaXMuc29jaWFsVXNlcnMoKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0RXZlbnRzLnN1YignaW50ZXJ2YWwuMW0nLCAoKSA9PiBtb21lbnRSZWxvYWQoKSk7XG5cblx0XHRydW5Ib29rKCdybC1zdGFydC1zY3JlZW5zJyk7XG5cdFx0RXZlbnRzLnB1YigncmwuYm9vdHN0YXJ0LWVuZCcpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBcHBVc2VyKCk7XG4iLCIvLyBCYXNlNjQgZW5jb2RlIC8gZGVjb2RlXG4vLyBodHRwOi8vd3d3LndlYnRvb2xraXQuaW5mby9cblxuY29uc3QgQkFTRV82NF9DSFIgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAgKi9cbmNvbnN0IEJhc2U2NCA9IHtcblx0Ly8gcHVibGljIG1ldGhvZCBmb3IgdXJsc2FmZSBlbmNvZGluZ1xuXHR1cmxzYWZlX2VuY29kZTogKGlucHV0KSA9PlxuXHRcdEJhc2U2NC5lbmNvZGUoaW5wdXQpXG5cdFx0XHQucmVwbGFjZSgvWytdL2csICctJylcblx0XHRcdC5yZXBsYWNlKC9bXFwvXS9nLCAnXycpXG5cdFx0XHQucmVwbGFjZSgvWz1dL2csICcnKSxcblxuXHQvLyBwdWJsaWMgbWV0aG9kIGZvciBlbmNvZGluZ1xuXHRlbmNvZGU6IChpbnB1dCkgPT4ge1xuXHRcdGxldCBvdXRwdXQgPSAnJyxcblx0XHRcdGNocjEsXG5cdFx0XHRjaHIyLFxuXHRcdFx0Y2hyMyxcblx0XHRcdGVuYzEsXG5cdFx0XHRlbmMyLFxuXHRcdFx0ZW5jMyxcblx0XHRcdGVuYzQsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlucHV0ID0gQmFzZTY0Ll91dGY4X2VuY29kZShpbnB1dCk7XG5cblx0XHR3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCkge1xuXHRcdFx0Y2hyMSA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcblx0XHRcdGNocjIgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XG5cdFx0XHRjaHIzID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xuXG5cdFx0XHRlbmMxID0gY2hyMSA+PiAyO1xuXHRcdFx0ZW5jMiA9ICgoY2hyMSAmIDMpIDw8IDQpIHwgKGNocjIgPj4gNCk7XG5cdFx0XHRlbmMzID0gKChjaHIyICYgMTUpIDw8IDIpIHwgKGNocjMgPj4gNik7XG5cdFx0XHRlbmM0ID0gY2hyMyAmIDYzO1xuXG5cdFx0XHRpZiAoaXNOYU4oY2hyMikpIHtcblx0XHRcdFx0ZW5jMyA9IGVuYzQgPSA2NDtcblx0XHRcdH0gZWxzZSBpZiAoaXNOYU4oY2hyMykpIHtcblx0XHRcdFx0ZW5jNCA9IDY0O1xuXHRcdFx0fVxuXG5cdFx0XHRvdXRwdXQgPVxuXHRcdFx0XHRvdXRwdXQgK1xuXHRcdFx0XHRCQVNFXzY0X0NIUi5jaGFyQXQoZW5jMSkgK1xuXHRcdFx0XHRCQVNFXzY0X0NIUi5jaGFyQXQoZW5jMikgK1xuXHRcdFx0XHRCQVNFXzY0X0NIUi5jaGFyQXQoZW5jMykgK1xuXHRcdFx0XHRCQVNFXzY0X0NIUi5jaGFyQXQoZW5jNCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fSxcblxuXHQvLyBwdWJsaWMgbWV0aG9kIGZvciBkZWNvZGluZ1xuXHRkZWNvZGU6IChpbnB1dCkgPT4ge1xuXHRcdGxldCBvdXRwdXQgPSAnJyxcblx0XHRcdGNocjEsXG5cdFx0XHRjaHIyLFxuXHRcdFx0Y2hyMyxcblx0XHRcdGVuYzEsXG5cdFx0XHRlbmMyLFxuXHRcdFx0ZW5jMyxcblx0XHRcdGVuYzQsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZSgvW15BLVphLXowLTlcXCtcXC9cXD1dL2csICcnKTtcblxuXHRcdHdoaWxlIChpIDwgaW5wdXQubGVuZ3RoKSB7XG5cdFx0XHRlbmMxID0gQkFTRV82NF9DSFIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XG5cdFx0XHRlbmMyID0gQkFTRV82NF9DSFIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XG5cdFx0XHRlbmMzID0gQkFTRV82NF9DSFIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XG5cdFx0XHRlbmM0ID0gQkFTRV82NF9DSFIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XG5cblx0XHRcdGNocjEgPSAoZW5jMSA8PCAyKSB8IChlbmMyID4+IDQpO1xuXHRcdFx0Y2hyMiA9ICgoZW5jMiAmIDE1KSA8PCA0KSB8IChlbmMzID4+IDIpO1xuXHRcdFx0Y2hyMyA9ICgoZW5jMyAmIDMpIDw8IDYpIHwgZW5jNDtcblxuXHRcdFx0b3V0cHV0ID0gb3V0cHV0ICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaHIxKTtcblxuXHRcdFx0aWYgKGVuYzMgIT09IDY0KSB7XG5cdFx0XHRcdG91dHB1dCA9IG91dHB1dCArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMik7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbmM0ICE9PSA2NCkge1xuXHRcdFx0XHRvdXRwdXQgPSBvdXRwdXQgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBCYXNlNjQuX3V0ZjhfZGVjb2RlKG91dHB1dCk7XG5cdH0sXG5cblx0Ly8gcHJpdmF0ZSBtZXRob2QgZm9yIFVURi04IGVuY29kaW5nXG5cdF91dGY4X2VuY29kZTogKHN0cmluZykgPT4ge1xuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpO1xuXG5cdFx0bGV0IHV0ZnRleHQgPSAnJyxcblx0XHRcdG4gPSAwLFxuXHRcdFx0bCA9IHN0cmluZy5sZW5ndGgsXG5cdFx0XHRjID0gMDtcblxuXHRcdGZvciAoOyBuIDwgbDsgbisrKSB7XG5cdFx0XHRjID0gc3RyaW5nLmNoYXJDb2RlQXQobik7XG5cblx0XHRcdGlmIChjIDwgMTI4KSB7XG5cdFx0XHRcdHV0ZnRleHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcblx0XHRcdH0gZWxzZSBpZiAoYyA+IDEyNyAmJiBjIDwgMjA0OCkge1xuXHRcdFx0XHR1dGZ0ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgPj4gNikgfCAxOTIpO1xuXHRcdFx0XHR1dGZ0ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiA2MykgfCAxMjgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dXRmdGV4dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjID4+IDEyKSB8IDIyNCk7XG5cdFx0XHRcdHV0ZnRleHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgPj4gNikgJiA2MykgfCAxMjgpO1xuXHRcdFx0XHR1dGZ0ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiA2MykgfCAxMjgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB1dGZ0ZXh0O1xuXHR9LFxuXG5cdC8vIHByaXZhdGUgbWV0aG9kIGZvciBVVEYtOCBkZWNvZGluZ1xuXHRfdXRmOF9kZWNvZGU6ICh1dGZ0ZXh0KSA9PiB7XG5cdFx0bGV0IHN0cmluZyA9ICcnLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRjID0gMCxcblx0XHRcdGMyID0gMCxcblx0XHRcdGMzID0gMDtcblxuXHRcdHdoaWxlIChpIDwgdXRmdGV4dC5sZW5ndGgpIHtcblx0XHRcdGMgPSB1dGZ0ZXh0LmNoYXJDb2RlQXQoaSk7XG5cblx0XHRcdGlmIChjIDwgMTI4KSB7XG5cdFx0XHRcdHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuXHRcdFx0XHRpKys7XG5cdFx0XHR9IGVsc2UgaWYgKGMgPiAxOTEgJiYgYyA8IDIyNCkge1xuXHRcdFx0XHRjMiA9IHV0ZnRleHQuY2hhckNvZGVBdChpICsgMSk7XG5cdFx0XHRcdHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDMxKSA8PCA2KSB8IChjMiAmIDYzKSk7XG5cdFx0XHRcdGkgKz0gMjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGMyID0gdXRmdGV4dC5jaGFyQ29kZUF0KGkgKyAxKTtcblx0XHRcdFx0YzMgPSB1dGZ0ZXh0LmNoYXJDb2RlQXQoaSArIDIpO1xuXHRcdFx0XHRzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAxNSkgPDwgMTIpIHwgKChjMiAmIDYzKSA8PCA2KSB8IChjMyAmIDYzKSk7XG5cdFx0XHRcdGkgKz0gMztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZGVjb2RlID0gQmFzZTY0LmRlY29kZTtcbmV4cG9ydCBjb25zdCBlbmNvZGUgPSBCYXNlNjQuZW5jb2RlO1xuZXhwb3J0IGNvbnN0IHVybHNhZmVfZW5jb2RlID0gQmFzZTY0LnVybHNhZmVfZW5jb2RlO1xuLyogZXNsaW50LWVuYWJsZSAqL1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5cbmltcG9ydCB7IFVOVVNFRF9PUFRJT05fVkFMVUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcbmltcG9ydCB7IGlzQXJyYXksIGlzTm9ybWFsLCBwSW50LCBpc1VuZCwgbm9vcCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBDbGllbnRTaWRlS2V5TmFtZSwgU2VydmVyRm9sZGVyVHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBDYWNoZSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCAqIGFzIExvY2FsIGZyb20gJ1N0b3JhZ2UvQ2xpZW50JztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FwcCc7XG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgRm9sZGVyTW9kZWwgfSBmcm9tICdNb2RlbC9Gb2xkZXInO1xuaW1wb3J0IHsgQWJzdHJhY3RCYXNpY1Byb21pc2VzIH0gZnJvbSAnUHJvbWlzZXMvQWJzdHJhY3RCYXNpYyc7XG5cbmNsYXNzIFByb21pc2VzVXNlclBvcHVsYXRvciBleHRlbmRzIEFic3RyYWN0QmFzaWNQcm9taXNlcyB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Z1bGxOYW1lSGFzaFxuXHQgKiBAcGFyYW0ge0FycmF5P30gZXhwYW5kZWRGb2xkZXJzXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNGb2xkZXJFeHBhbmRlZChzRnVsbE5hbWVIYXNoLCBleHBhbmRlZEZvbGRlcnMpIHtcblx0XHRyZXR1cm4gZXhwYW5kZWRGb2xkZXJzICYmIGlzQXJyYXkoZXhwYW5kZWRGb2xkZXJzKSAmJiAtMSAhPT0gXy5pbmRleE9mKGV4cGFuZGVkRm9sZGVycywgc0Z1bGxOYW1lSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0bm9ybWFsaXplRm9sZGVyKHNGb2xkZXJGdWxsTmFtZVJhdykge1xuXHRcdHJldHVybiAnJyA9PT0gc0ZvbGRlckZ1bGxOYW1lUmF3IHx8XG5cdFx0XHRVTlVTRURfT1BUSU9OX1ZBTFVFID09PSBzRm9sZGVyRnVsbE5hbWVSYXcgfHxcblx0XHRcdG51bGwgIT09IENhY2hlLmdldEZvbGRlckZyb21DYWNoZUxpc3Qoc0ZvbGRlckZ1bGxOYW1lUmF3KVxuXHRcdFx0PyBzRm9sZGVyRnVsbE5hbWVSYXdcblx0XHRcdDogJyc7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lc3BhY2Vcblx0ICogQHBhcmFtIHtBcnJheX0gYUZvbGRlcnNcblx0ICogQHBhcmFtIHtBcnJheT99IGV4cGFuZGVkRm9sZGVyc1xuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHRmb2xkZXJSZXNwb25zZVBhcnNlUmVjKHNOYW1lc3BhY2UsIGFGb2xkZXJzLCBleHBhbmRlZEZvbGRlcnMpIHtcblx0XHRjb25zdCBiRGlzcGxheVNwZWNTZXR0aW5nID0gRm9sZGVyU3RvcmUuZGlzcGxheVNwZWNTZXR0aW5nKCksXG5cdFx0XHRhTGlzdCA9IFtdO1xuXG5cdFx0Xy5lYWNoKGFGb2xkZXJzLCAob0ZvbGRlcikgPT4ge1xuXHRcdFx0aWYgKG9Gb2xkZXIpIHtcblx0XHRcdFx0bGV0IG9DYWNoZUZvbGRlciA9IENhY2hlLmdldEZvbGRlckZyb21DYWNoZUxpc3Qob0ZvbGRlci5GdWxsTmFtZVJhdyk7XG5cdFx0XHRcdGlmICghb0NhY2hlRm9sZGVyKSB7XG5cdFx0XHRcdFx0b0NhY2hlRm9sZGVyID0gRm9sZGVyTW9kZWwubmV3SW5zdGFuY2VGcm9tSnNvbihvRm9sZGVyKTtcblx0XHRcdFx0XHRpZiAob0NhY2hlRm9sZGVyKSB7XG5cdFx0XHRcdFx0XHRDYWNoZS5zZXRGb2xkZXJUb0NhY2hlTGlzdChvRm9sZGVyLkZ1bGxOYW1lUmF3LCBvQ2FjaGVGb2xkZXIpO1xuXHRcdFx0XHRcdFx0Q2FjaGUuc2V0Rm9sZGVyRnVsbE5hbWVSYXcob0NhY2hlRm9sZGVyLmZ1bGxOYW1lSGFzaCwgb0ZvbGRlci5GdWxsTmFtZVJhdywgb0NhY2hlRm9sZGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0NhY2hlRm9sZGVyKSB7XG5cdFx0XHRcdFx0aWYgKGJEaXNwbGF5U3BlY1NldHRpbmcpIHtcblx0XHRcdFx0XHRcdG9DYWNoZUZvbGRlci5jaGVja2FibGUoISFvRm9sZGVyLkNoZWNrYWJsZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9DYWNoZUZvbGRlci5jaGVja2FibGUodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b0NhY2hlRm9sZGVyLmNvbGxhcHNlZCghdGhpcy5pc0ZvbGRlckV4cGFuZGVkKG9DYWNoZUZvbGRlci5mdWxsTmFtZUhhc2gsIGV4cGFuZGVkRm9sZGVycykpO1xuXG5cdFx0XHRcdFx0aWYgKG9Gb2xkZXIuRXh0ZW5kZWQpIHtcblx0XHRcdFx0XHRcdGlmIChvRm9sZGVyLkV4dGVuZGVkLkhhc2gpIHtcblx0XHRcdFx0XHRcdFx0Q2FjaGUuc2V0Rm9sZGVySGFzaChvQ2FjaGVGb2xkZXIuZnVsbE5hbWVSYXcsIG9Gb2xkZXIuRXh0ZW5kZWQuSGFzaCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChpc05vcm1hbChvRm9sZGVyLkV4dGVuZGVkLk1lc3NhZ2VDb3VudCkpIHtcblx0XHRcdFx0XHRcdFx0b0NhY2hlRm9sZGVyLm1lc3NhZ2VDb3VudEFsbChvRm9sZGVyLkV4dGVuZGVkLk1lc3NhZ2VDb3VudCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChpc05vcm1hbChvRm9sZGVyLkV4dGVuZGVkLk1lc3NhZ2VVbnNlZW5Db3VudCkpIHtcblx0XHRcdFx0XHRcdFx0b0NhY2hlRm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZChvRm9sZGVyLkV4dGVuZGVkLk1lc3NhZ2VVbnNlZW5Db3VudCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0b0ZvbGRlci5TdWJGb2xkZXJzICYmXG5cdFx0XHRcdFx0XHQnQ29sbGVjdGlvbi9Gb2xkZXJDb2xsZWN0aW9uJyA9PT0gb0ZvbGRlci5TdWJGb2xkZXJzWydAT2JqZWN0J10gJiZcblx0XHRcdFx0XHRcdG9Gb2xkZXIuU3ViRm9sZGVyc1snQENvbGxlY3Rpb24nXSAmJlxuXHRcdFx0XHRcdFx0aXNBcnJheShvRm9sZGVyLlN1YkZvbGRlcnNbJ0BDb2xsZWN0aW9uJ10pXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvQ2FjaGVGb2xkZXIuc3ViRm9sZGVycyhcblx0XHRcdFx0XHRcdFx0dGhpcy5mb2xkZXJSZXNwb25zZVBhcnNlUmVjKHNOYW1lc3BhY2UsIG9Gb2xkZXIuU3ViRm9sZGVyc1snQENvbGxlY3Rpb24nXSwgZXhwYW5kZWRGb2xkZXJzKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhTGlzdC5wdXNoKG9DYWNoZUZvbGRlcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBhTGlzdDtcblx0fVxuXG5cdGZvbGRlcnNMaXN0KG9EYXRhKSB7XG5cdFx0aWYgKFxuXHRcdFx0b0RhdGEgJiZcblx0XHRcdCdDb2xsZWN0aW9uL0ZvbGRlckNvbGxlY3Rpb24nID09PSBvRGF0YVsnQE9iamVjdCddICYmXG5cdFx0XHRvRGF0YVsnQENvbGxlY3Rpb24nXSAmJlxuXHRcdFx0aXNBcnJheShvRGF0YVsnQENvbGxlY3Rpb24nXSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IGV4cGFuZGVkRm9sZGVycyA9IExvY2FsLmdldChDbGllbnRTaWRlS2V5TmFtZS5FeHBhbmRlZEZvbGRlcnMpLFxuXHRcdFx0XHRjbnQgPSBwSW50KG9EYXRhLkNvdW50UmVjKTtcblxuXHRcdFx0bGV0IGxpbWl0ID0gcEludChTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnZm9sZGVyU3BlY0xpbWl0JykpO1xuXHRcdFx0bGltaXQgPSAxMDAgPCBsaW1pdCA/IDEwMCA6IDEwID4gbGltaXQgPyAxMCA6IGxpbWl0O1xuXG5cdFx0XHRGb2xkZXJTdG9yZS5kaXNwbGF5U3BlY1NldHRpbmcoMCA+PSBjbnQgfHwgbGltaXQgPCBjbnQpO1xuXG5cdFx0XHRGb2xkZXJTdG9yZS5mb2xkZXJMaXN0KFxuXHRcdFx0XHR0aGlzLmZvbGRlclJlc3BvbnNlUGFyc2VSZWMoXG5cdFx0XHRcdFx0aXNVbmQob0RhdGEuTmFtZXNwYWNlKSA/ICcnIDogb0RhdGEuTmFtZXNwYWNlLFxuXHRcdFx0XHRcdG9EYXRhWydAQ29sbGVjdGlvbiddLFxuXHRcdFx0XHRcdGV4cGFuZGVkRm9sZGVyc1xuXHRcdFx0XHQpXG5cdFx0XHQpOyAvLyBAdG9kbyBvcHRpbWl6YXRpb24gcmVxdWlyZWRcblx0XHR9XG5cdH1cblxuXHRmb2xkZXJzQWRkaXRpb25hbFBhcmFtZXRlcnMob0RhdGEpIHtcblx0XHRpZiAoXG5cdFx0XHRvRGF0YSAmJlxuXHRcdFx0b0RhdGEgJiZcblx0XHRcdCdDb2xsZWN0aW9uL0ZvbGRlckNvbGxlY3Rpb24nID09PSBvRGF0YVsnQE9iamVjdCddICYmXG5cdFx0XHRvRGF0YVsnQENvbGxlY3Rpb24nXSAmJlxuXHRcdFx0aXNBcnJheShvRGF0YVsnQENvbGxlY3Rpb24nXSlcblx0XHQpIHtcblx0XHRcdGlmICghaXNVbmQob0RhdGEuTmFtZXNwYWNlKSkge1xuXHRcdFx0XHRGb2xkZXJTdG9yZS5uYW1lc3BhY2UgPSBvRGF0YS5OYW1lc3BhY2U7XG5cdFx0XHR9XG5cblx0XHRcdEFwcFN0b3JlLnRocmVhZHNBbGxvd2VkKCEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3VzZUltYXBUaHJlYWQnKSAmJiBvRGF0YS5Jc1RocmVhZHNTdXBwb3J0ZWQgJiYgdHJ1ZSk7XG5cblx0XHRcdEZvbGRlclN0b3JlLmZvbGRlckxpc3Qub3B0aW1pemVkKCEhb0RhdGEuT3B0aW1pemVkKTtcblxuXHRcdFx0bGV0IHVwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9EYXRhLlN5c3RlbUZvbGRlcnMgJiZcblx0XHRcdFx0JycgPT09XG5cdFx0XHRcdFx0JycgK1xuXHRcdFx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1NlbnRGb2xkZXInKSArXG5cdFx0XHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc0dldCgnRHJhZnRGb2xkZXInKSArXG5cdFx0XHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3BhbUZvbGRlcicpICtcblx0XHRcdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzR2V0KCdUcmFzaEZvbGRlcicpICtcblx0XHRcdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzR2V0KCdBcmNoaXZlRm9sZGVyJykgK1xuXHRcdFx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NHZXQoJ051bGxGb2xkZXInKVxuXHRcdFx0KSB7XG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzU2V0KCdTZW50Rm9sZGVyJywgb0RhdGEuU3lzdGVtRm9sZGVyc1tTZXJ2ZXJGb2xkZXJUeXBlLlNFTlRdIHx8IG51bGwpO1xuXHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc1NldCgnRHJhZnRGb2xkZXInLCBvRGF0YS5TeXN0ZW1Gb2xkZXJzW1NlcnZlckZvbGRlclR5cGUuRFJBRlRTXSB8fCBudWxsKTtcblx0XHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ1NwYW1Gb2xkZXInLCBvRGF0YS5TeXN0ZW1Gb2xkZXJzW1NlcnZlckZvbGRlclR5cGUuSlVOS10gfHwgbnVsbCk7XG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzU2V0KCdUcmFzaEZvbGRlcicsIG9EYXRhLlN5c3RlbUZvbGRlcnNbU2VydmVyRm9sZGVyVHlwZS5UUkFTSF0gfHwgbnVsbCk7XG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzU2V0KCdBcmNoaXZlRm9sZGVyJywgb0RhdGEuU3lzdGVtRm9sZGVyc1tTZXJ2ZXJGb2xkZXJUeXBlLkFMTF0gfHwgbnVsbCk7XG5cblx0XHRcdFx0dXBkYXRlID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Rm9sZGVyU3RvcmUuc2VudEZvbGRlcih0aGlzLm5vcm1hbGl6ZUZvbGRlcihTZXR0aW5ncy5zZXR0aW5nc0dldCgnU2VudEZvbGRlcicpKSk7XG5cdFx0XHRGb2xkZXJTdG9yZS5kcmFmdEZvbGRlcih0aGlzLm5vcm1hbGl6ZUZvbGRlcihTZXR0aW5ncy5zZXR0aW5nc0dldCgnRHJhZnRGb2xkZXInKSkpO1xuXHRcdFx0Rm9sZGVyU3RvcmUuc3BhbUZvbGRlcih0aGlzLm5vcm1hbGl6ZUZvbGRlcihTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3BhbUZvbGRlcicpKSk7XG5cdFx0XHRGb2xkZXJTdG9yZS50cmFzaEZvbGRlcih0aGlzLm5vcm1hbGl6ZUZvbGRlcihTZXR0aW5ncy5zZXR0aW5nc0dldCgnVHJhc2hGb2xkZXInKSkpO1xuXHRcdFx0Rm9sZGVyU3RvcmUuYXJjaGl2ZUZvbGRlcih0aGlzLm5vcm1hbGl6ZUZvbGRlcihTZXR0aW5ncy5zZXR0aW5nc0dldCgnQXJjaGl2ZUZvbGRlcicpKSk7XG5cblx0XHRcdGlmICh1cGRhdGUpIHtcblx0XHRcdFx0UmVtb3RlLnNhdmVTeXN0ZW1Gb2xkZXJzKG5vb3AsIHtcblx0XHRcdFx0XHRTZW50Rm9sZGVyOiBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyKCksXG5cdFx0XHRcdFx0RHJhZnRGb2xkZXI6IEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKCksXG5cdFx0XHRcdFx0U3BhbUZvbGRlcjogRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpLFxuXHRcdFx0XHRcdFRyYXNoRm9sZGVyOiBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcigpLFxuXHRcdFx0XHRcdEFyY2hpdmVGb2xkZXI6IEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIoKSxcblx0XHRcdFx0XHROdWxsRm9sZGVyOiAnTnVsbEZvbGRlcidcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdExvY2FsLnNldChDbGllbnRTaWRlS2V5TmFtZS5Gb2xkZXJzTGFzaEhhc2gsIG9EYXRhLkZvbGRlcnNIYXNoKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFByb21pc2VzVXNlclBvcHVsYXRvcigpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBGaWx0ZXJSdWxlc1R5cGUsIEZpbHRlcnNBY3Rpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcFN0cmluZywgaW5BcnJheSwgaXNOb25FbXB0eUFycmF5LCBmYWtlTWQ1LCBkZWxlZ2F0ZVJ1bk9uRGVzdHJveSwgd2luZG93UmVzaXplQ2FsbGJhY2sgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGdldEZvbGRlckZyb21DYWNoZUxpc3QgfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgQWNjb3VudFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FjY291bnQnO1xuXG5pbXBvcnQgeyBGaWx0ZXJDb25kaXRpb25Nb2RlbCB9IGZyb20gJ01vZGVsL0ZpbHRlckNvbmRpdGlvbic7XG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIEZpbHRlck1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCdGaWx0ZXJNb2RlbCcpO1xuXG5cdFx0dGhpcy5lbmFibGVkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuaWQgPSAnJztcblxuXHRcdHRoaXMubmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubmFtZS5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubmFtZS5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmNvbmRpdGlvbnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMuY29uZGl0aW9uc1R5cGUgPSBrby5vYnNlcnZhYmxlKEZpbHRlclJ1bGVzVHlwZS5BbnkpO1xuXG5cdFx0Ly8gQWN0aW9uc1xuXHRcdHRoaXMuYWN0aW9uVmFsdWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFjdGlvblZhbHVlLmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFjdGlvblZhbHVlU2Vjb25kID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hY3Rpb25WYWx1ZVRoaXJkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmFjdGlvblZhbHVlRm91cnRoID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hY3Rpb25WYWx1ZUZvdXJ0aC5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hY3Rpb25NYXJrQXNSZWFkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFjdGlvbktlZXAgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuYWN0aW9uTm9TdG9wID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFjdGlvblR5cGUgPSBrby5vYnNlcnZhYmxlKEZpbHRlcnNBY3Rpb24uTW92ZVRvKTtcblxuXHRcdHRoaXMuYWN0aW9uVHlwZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hY3Rpb25WYWx1ZSgnJyk7XG5cdFx0XHR0aGlzLmFjdGlvblZhbHVlLmVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWVTZWNvbmQoJycpO1xuXHRcdFx0dGhpcy5hY3Rpb25WYWx1ZVRoaXJkKCcnKTtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWVGb3VydGgoJycpO1xuXHRcdFx0dGhpcy5hY3Rpb25WYWx1ZUZvdXJ0aC5lcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBmR2V0UmVhbEZvbGRlck5hbWUgPSAoZm9sZGVyRnVsbE5hbWVSYXcpID0+IHtcblx0XHRcdGNvbnN0IGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoZm9sZGVyRnVsbE5hbWVSYXcpO1xuXHRcdFx0cmV0dXJuIGZvbGRlciA/IGZvbGRlci5mdWxsTmFtZS5yZXBsYWNlKCcuJyA9PT0gZm9sZGVyLmRlbGltaXRlciA/IC9cXC4vIDogL1tcXFxcL10rLywgJyAvICcpIDogZm9sZGVyRnVsbE5hbWVSYXc7XG5cdFx0fTtcblxuXHRcdHRoaXMubmFtZVN1YiA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGxldCByZXN1bHQgPSAnJztcblx0XHRcdGNvbnN0IGFjdGlvblZhbHVlID0gdGhpcy5hY3Rpb25WYWx1ZSgpO1xuXG5cdFx0XHRzd2l0Y2ggKHRoaXMuYWN0aW9uVHlwZSgpKSB7XG5cdFx0XHRcdGNhc2UgRmlsdGVyc0FjdGlvbi5Nb3ZlVG86XG5cdFx0XHRcdFx0cmVzdWx0ID0gaTE4bignU0VUVElOR1NfRklMVEVSUy9TVUJOQU1FX01PVkVfVE8nLCB7XG5cdFx0XHRcdFx0XHRGT0xERVI6IGZHZXRSZWFsRm9sZGVyTmFtZShhY3Rpb25WYWx1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLkZvcndhcmQ6XG5cdFx0XHRcdFx0cmVzdWx0ID0gaTE4bignU0VUVElOR1NfRklMVEVSUy9TVUJOQU1FX0ZPUldBUkRfVE8nLCB7XG5cdFx0XHRcdFx0XHRFTUFJTDogYWN0aW9uVmFsdWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLlZhY2F0aW9uOlxuXHRcdFx0XHRcdHJlc3VsdCA9IGkxOG4oJ1NFVFRJTkdTX0ZJTFRFUlMvU1VCTkFNRV9WQUNBVElPTl9NRVNTQUdFJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsdGVyc0FjdGlvbi5SZWplY3Q6XG5cdFx0XHRcdFx0cmVzdWx0ID0gaTE4bignU0VUVElOR1NfRklMVEVSUy9TVUJOQU1FX1JFSkVDVCcpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbHRlcnNBY3Rpb24uRGlzY2FyZDpcblx0XHRcdFx0XHRyZXN1bHQgPSBpMThuKCdTRVRUSU5HU19GSUxURVJTL1NVQk5BTUVfRElTQ0FSRCcpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQgPyAnKCcgKyByZXN1bHQgKyAnKScgOiAnJztcblx0XHR9KTtcblxuXHRcdHRoaXMuYWN0aW9uVGVtcGxhdGUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cblx0XHRcdHN3aXRjaCAodGhpcy5hY3Rpb25UeXBlKCkpIHtcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLkZvcndhcmQ6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ1NldHRpbmdzRmlsdGVyc0FjdGlvbkZvcndhcmQnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbHRlcnNBY3Rpb24uVmFjYXRpb246XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ1NldHRpbmdzRmlsdGVyc0FjdGlvblZhY2F0aW9uJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLlJlamVjdDpcblx0XHRcdFx0XHRyZXN1bHQgPSAnU2V0dGluZ3NGaWx0ZXJzQWN0aW9uUmVqZWN0Jztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGaWx0ZXJzQWN0aW9uLk5vbmU6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ1NldHRpbmdzRmlsdGVyc0FjdGlvbk5vbmUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZpbHRlcnNBY3Rpb24uRGlzY2FyZDpcblx0XHRcdFx0XHRyZXN1bHQgPSAnU2V0dGluZ3NGaWx0ZXJzQWN0aW9uRGlzY2FyZCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsdGVyc0FjdGlvbi5Nb3ZlVG86XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmVzdWx0ID0gJ1NldHRpbmdzRmlsdGVyc0FjdGlvbk1vdmVUb0ZvbGRlcic7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnJlZ0Rpc3Bvc2FibGVzKHRoaXMuY29uZGl0aW9ucy5zdWJzY3JpYmUod2luZG93UmVzaXplQ2FsbGJhY2spKTtcblxuXHRcdHRoaXMucmVnRGlzcG9zYWJsZXMoXG5cdFx0XHR0aGlzLm5hbWUuc3Vic2NyaWJlKChzVmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5uYW1lLmVycm9yKCcnID09PSBzVmFsdWUpO1xuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0dGhpcy5yZWdEaXNwb3NhYmxlcyhcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWUuc3Vic2NyaWJlKChzVmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5hY3Rpb25WYWx1ZS5lcnJvcignJyA9PT0gc1ZhbHVlKTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdHRoaXMucmVnRGlzcG9zYWJsZXMoW3RoaXMuYWN0aW9uTm9TdG9wLCB0aGlzLmFjdGlvblRlbXBsYXRlXSk7XG5cblx0XHR0aGlzLmRlbGV0ZUFjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY2FuQmVEZWxldGVkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0fVxuXG5cdGdlbmVyYXRlSUQoKSB7XG5cdFx0dGhpcy5pZCA9IGZha2VNZDUoKTtcblx0fVxuXG5cdHZlcmlmeSgpIHtcblx0XHRpZiAoJycgPT09IHRoaXMubmFtZSgpKSB7XG5cdFx0XHR0aGlzLm5hbWUuZXJyb3IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKDAgPCB0aGlzLmNvbmRpdGlvbnMoKS5sZW5ndGgpIHtcblx0XHRcdGlmIChfLmZpbmQodGhpcy5jb25kaXRpb25zKCksIChjb25kKSA9PiBjb25kICYmICFjb25kLnZlcmlmeSgpKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCcnID09PSB0aGlzLmFjdGlvblZhbHVlKCkpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0LTEgPFxuXHRcdFx0XHRpbkFycmF5KHRoaXMuYWN0aW9uVHlwZSgpLCBbXG5cdFx0XHRcdFx0RmlsdGVyc0FjdGlvbi5Nb3ZlVG8sXG5cdFx0XHRcdFx0RmlsdGVyc0FjdGlvbi5Gb3J3YXJkLFxuXHRcdFx0XHRcdEZpbHRlcnNBY3Rpb24uUmVqZWN0LFxuXHRcdFx0XHRcdEZpbHRlcnNBY3Rpb24uVmFjYXRpb25cblx0XHRcdFx0XSlcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLmFjdGlvblZhbHVlLmVycm9yKHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKEZpbHRlcnNBY3Rpb24uRm9yd2FyZCA9PT0gdGhpcy5hY3Rpb25UeXBlKCkgJiYgLTEgPT09IHRoaXMuYWN0aW9uVmFsdWUoKS5pbmRleE9mKCdAJykpIHtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWUuZXJyb3IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0RmlsdGVyc0FjdGlvbi5WYWNhdGlvbiA9PT0gdGhpcy5hY3Rpb25UeXBlKCkgJiZcblx0XHRcdCcnICE9PSB0aGlzLmFjdGlvblZhbHVlRm91cnRoKCkgJiZcblx0XHRcdC0xID09PSB0aGlzLmFjdGlvblZhbHVlRm91cnRoKCkuaW5kZXhPZignQCcpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLmFjdGlvblZhbHVlRm91cnRoLmVycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMubmFtZS5lcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5hY3Rpb25WYWx1ZS5lcnJvcihmYWxzZSk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHRvSnNvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0SUQ6IHRoaXMuaWQsXG5cdFx0XHRFbmFibGVkOiB0aGlzLmVuYWJsZWQoKSA/ICcxJyA6ICcwJyxcblx0XHRcdE5hbWU6IHRoaXMubmFtZSgpLFxuXHRcdFx0Q29uZGl0aW9uc1R5cGU6IHRoaXMuY29uZGl0aW9uc1R5cGUoKSxcblx0XHRcdENvbmRpdGlvbnM6IF8ubWFwKHRoaXMuY29uZGl0aW9ucygpLCAoaXRlbSkgPT4gaXRlbS50b0pzb24oKSksXG5cblx0XHRcdEFjdGlvblZhbHVlOiB0aGlzLmFjdGlvblZhbHVlKCksXG5cdFx0XHRBY3Rpb25WYWx1ZVNlY29uZDogdGhpcy5hY3Rpb25WYWx1ZVNlY29uZCgpLFxuXHRcdFx0QWN0aW9uVmFsdWVUaGlyZDogdGhpcy5hY3Rpb25WYWx1ZVRoaXJkKCksXG5cdFx0XHRBY3Rpb25WYWx1ZUZvdXJ0aDogdGhpcy5hY3Rpb25WYWx1ZUZvdXJ0aCgpLFxuXHRcdFx0QWN0aW9uVHlwZTogdGhpcy5hY3Rpb25UeXBlKCksXG5cblx0XHRcdFN0b3A6IHRoaXMuYWN0aW9uTm9TdG9wKCkgPyAnMCcgOiAnMScsXG5cdFx0XHRLZWVwOiB0aGlzLmFjdGlvbktlZXAoKSA/ICcxJyA6ICcwJyxcblx0XHRcdE1hcmtBc1JlYWQ6IHRoaXMuYWN0aW9uTWFya0FzUmVhZCgpID8gJzEnIDogJzAnXG5cdFx0fTtcblx0fVxuXG5cdGFkZENvbmRpdGlvbigpIHtcblx0XHR0aGlzLmNvbmRpdGlvbnMucHVzaChuZXcgRmlsdGVyQ29uZGl0aW9uTW9kZWwoKSk7XG5cdH1cblxuXHRyZW1vdmVDb25kaXRpb24ob0NvbmRpdGlvblRvRGVsZXRlKSB7XG5cdFx0dGhpcy5jb25kaXRpb25zLnJlbW92ZShvQ29uZGl0aW9uVG9EZWxldGUpO1xuXHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KG9Db25kaXRpb25Ub0RlbGV0ZSk7XG5cdH1cblxuXHRzZXRSZWNpcGllbnRzKCkge1xuXHRcdHRoaXMuYWN0aW9uVmFsdWVGb3VydGgoQWNjb3VudFN0b3JlLmFjY291bnRzRW1haWxzKCkuam9pbignLCAnKSk7XG5cdH1cblxuXHRwYXJzZShqc29uKSB7XG5cdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRcdGlmIChqc29uICYmICdPYmplY3QvRmlsdGVyJyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHR0aGlzLmlkID0gcFN0cmluZyhqc29uLklEKTtcblx0XHRcdHRoaXMubmFtZShwU3RyaW5nKGpzb24uTmFtZSkpO1xuXHRcdFx0dGhpcy5lbmFibGVkKCEhanNvbi5FbmFibGVkKTtcblxuXHRcdFx0dGhpcy5jb25kaXRpb25zVHlwZShwU3RyaW5nKGpzb24uQ29uZGl0aW9uc1R5cGUpKTtcblxuXHRcdFx0dGhpcy5jb25kaXRpb25zKFtdKTtcblxuXHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShqc29uLkNvbmRpdGlvbnMpKSB7XG5cdFx0XHRcdHRoaXMuY29uZGl0aW9ucyhcblx0XHRcdFx0XHRfLmNvbXBhY3QoXG5cdFx0XHRcdFx0XHRfLm1hcChqc29uLkNvbmRpdGlvbnMsIChhRGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmaWx0ZXJDb25kaXRpb24gPSBuZXcgRmlsdGVyQ29uZGl0aW9uTW9kZWwoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZpbHRlckNvbmRpdGlvbiAmJiBmaWx0ZXJDb25kaXRpb24ucGFyc2UoYURhdGEpID8gZmlsdGVyQ29uZGl0aW9uIDogbnVsbDtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmFjdGlvblR5cGUocFN0cmluZyhqc29uLkFjdGlvblR5cGUpKTtcblxuXHRcdFx0dGhpcy5hY3Rpb25WYWx1ZShwU3RyaW5nKGpzb24uQWN0aW9uVmFsdWUpKTtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWVTZWNvbmQocFN0cmluZyhqc29uLkFjdGlvblZhbHVlU2Vjb25kKSk7XG5cdFx0XHR0aGlzLmFjdGlvblZhbHVlVGhpcmQocFN0cmluZyhqc29uLkFjdGlvblZhbHVlVGhpcmQpKTtcblx0XHRcdHRoaXMuYWN0aW9uVmFsdWVGb3VydGgocFN0cmluZyhqc29uLkFjdGlvblZhbHVlRm91cnRoKSk7XG5cblx0XHRcdHRoaXMuYWN0aW9uTm9TdG9wKCFqc29uLlN0b3ApO1xuXHRcdFx0dGhpcy5hY3Rpb25LZWVwKCEhanNvbi5LZWVwKTtcblx0XHRcdHRoaXMuYWN0aW9uTWFya0FzUmVhZCghIWpzb24uTWFya0FzUmVhZCk7XG5cblx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNsb25lU2VsZigpIHtcblx0XHRjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyTW9kZWwoKTtcblxuXHRcdGZpbHRlci5pZCA9IHRoaXMuaWQ7XG5cblx0XHRmaWx0ZXIuZW5hYmxlZCh0aGlzLmVuYWJsZWQoKSk7XG5cblx0XHRmaWx0ZXIubmFtZSh0aGlzLm5hbWUoKSk7XG5cdFx0ZmlsdGVyLm5hbWUuZXJyb3IodGhpcy5uYW1lLmVycm9yKCkpO1xuXG5cdFx0ZmlsdGVyLmNvbmRpdGlvbnNUeXBlKHRoaXMuY29uZGl0aW9uc1R5cGUoKSk7XG5cblx0XHRmaWx0ZXIuYWN0aW9uTWFya0FzUmVhZCh0aGlzLmFjdGlvbk1hcmtBc1JlYWQoKSk7XG5cblx0XHRmaWx0ZXIuYWN0aW9uVHlwZSh0aGlzLmFjdGlvblR5cGUoKSk7XG5cblx0XHRmaWx0ZXIuYWN0aW9uVmFsdWUodGhpcy5hY3Rpb25WYWx1ZSgpKTtcblx0XHRmaWx0ZXIuYWN0aW9uVmFsdWUuZXJyb3IodGhpcy5hY3Rpb25WYWx1ZS5lcnJvcigpKTtcblxuXHRcdGZpbHRlci5hY3Rpb25WYWx1ZVNlY29uZCh0aGlzLmFjdGlvblZhbHVlU2Vjb25kKCkpO1xuXHRcdGZpbHRlci5hY3Rpb25WYWx1ZVRoaXJkKHRoaXMuYWN0aW9uVmFsdWVUaGlyZCgpKTtcblx0XHRmaWx0ZXIuYWN0aW9uVmFsdWVGb3VydGgodGhpcy5hY3Rpb25WYWx1ZUZvdXJ0aCgpKTtcblxuXHRcdGZpbHRlci5hY3Rpb25LZWVwKHRoaXMuYWN0aW9uS2VlcCgpKTtcblx0XHRmaWx0ZXIuYWN0aW9uTm9TdG9wKHRoaXMuYWN0aW9uTm9TdG9wKCkpO1xuXG5cdFx0ZmlsdGVyLmNvbmRpdGlvbnMoXy5tYXAodGhpcy5jb25kaXRpb25zKCksIChpdGVtKSA9PiBpdGVtLmNsb25lU2VsZigpKSk7XG5cblx0XHRyZXR1cm4gZmlsdGVyO1xuXHR9XG59XG5cbmV4cG9ydCB7IEZpbHRlck1vZGVsLCBGaWx0ZXJNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBGaWx0ZXJDb25kaXRpb25GaWVsZCwgRmlsdGVyQ29uZGl0aW9uVHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBwU3RyaW5nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RNb2RlbCB9IGZyb20gJ0tub2luL0Fic3RyYWN0TW9kZWwnO1xuXG5jbGFzcyBGaWx0ZXJDb25kaXRpb25Nb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcignRmlsdGVyQ29uZGl0aW9uTW9kZWwnKTtcblxuXHRcdHRoaXMuZmllbGQgPSBrby5vYnNlcnZhYmxlKEZpbHRlckNvbmRpdGlvbkZpZWxkLkZyb20pO1xuXHRcdHRoaXMudHlwZSA9IGtvLm9ic2VydmFibGUoRmlsdGVyQ29uZGl0aW9uVHlwZS5Db250YWlucyk7XG5cdFx0dGhpcy52YWx1ZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmFsdWUuZXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudmFsdWVTZWNvbmQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZhbHVlU2Vjb25kLmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnRlbXBsYXRlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0bGV0IHRlbXBsYXRlID0gJyc7XG5cdFx0XHRzd2l0Y2ggKHRoaXMuZmllbGQoKSkge1xuXHRcdFx0XHRjYXNlIEZpbHRlckNvbmRpdGlvbkZpZWxkLlNpemU6XG5cdFx0XHRcdFx0dGVtcGxhdGUgPSAnU2V0dGluZ3NGaWx0ZXJzQ29uZGl0aW9uU2l6ZSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRmlsdGVyQ29uZGl0aW9uRmllbGQuSGVhZGVyOlxuXHRcdFx0XHRcdHRlbXBsYXRlID0gJ1NldHRpbmdzRmlsdGVyc0NvbmRpdGlvbk1vcmUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRlbXBsYXRlID0gJ1NldHRpbmdzRmlsdGVyc0NvbmRpdGlvbkRlZmF1bHQnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGVtcGxhdGU7XG5cdFx0fSwgdGhpcyk7XG5cblx0XHR0aGlzLmZpZWxkLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnZhbHVlKCcnKTtcblx0XHRcdHRoaXMudmFsdWVTZWNvbmQoJycpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5yZWdEaXNwb3NhYmxlcyhbdGhpcy50ZW1wbGF0ZV0pO1xuXHR9XG5cblx0dmVyaWZ5KCkge1xuXHRcdGlmICgnJyA9PT0gdGhpcy52YWx1ZSgpKSB7XG5cdFx0XHR0aGlzLnZhbHVlLmVycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChGaWx0ZXJDb25kaXRpb25GaWVsZC5IZWFkZXIgPT09IHRoaXMuZmllbGQoKSAmJiAnJyA9PT0gdGhpcy52YWx1ZVNlY29uZCgpKSB7XG5cdFx0XHR0aGlzLnZhbHVlU2Vjb25kLmVycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cGFyc2UoanNvbikge1xuXHRcdGlmIChqc29uICYmIGpzb24uRmllbGQgJiYganNvbi5UeXBlKSB7XG5cdFx0XHR0aGlzLmZpZWxkKHBTdHJpbmcoanNvbi5GaWVsZCkpO1xuXHRcdFx0dGhpcy50eXBlKHBTdHJpbmcoanNvbi5UeXBlKSk7XG5cdFx0XHR0aGlzLnZhbHVlKHBTdHJpbmcoanNvbi5WYWx1ZSkpO1xuXHRcdFx0dGhpcy52YWx1ZVNlY29uZChwU3RyaW5nKGpzb24uVmFsdWVTZWNvbmQpKTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0dG9Kc29uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRGaWVsZDogdGhpcy5maWVsZCgpLFxuXHRcdFx0VHlwZTogdGhpcy50eXBlKCksXG5cdFx0XHRWYWx1ZTogdGhpcy52YWx1ZSgpLFxuXHRcdFx0VmFsdWVTZWNvbmQ6IHRoaXMudmFsdWVTZWNvbmQoKVxuXHRcdH07XG5cdH1cblxuXHRjbG9uZVNlbGYoKSB7XG5cdFx0Y29uc3QgZmlsdGVyQ29uZCA9IG5ldyBGaWx0ZXJDb25kaXRpb25Nb2RlbCgpO1xuXG5cdFx0ZmlsdGVyQ29uZC5maWVsZCh0aGlzLmZpZWxkKCkpO1xuXHRcdGZpbHRlckNvbmQudHlwZSh0aGlzLnR5cGUoKSk7XG5cdFx0ZmlsdGVyQ29uZC52YWx1ZSh0aGlzLnZhbHVlKCkpO1xuXHRcdGZpbHRlckNvbmQudmFsdWVTZWNvbmQodGhpcy52YWx1ZVNlY29uZCgpKTtcblxuXHRcdHJldHVybiBmaWx0ZXJDb25kO1xuXHR9XG59XG5cbmV4cG9ydCB7IEZpbHRlckNvbmRpdGlvbk1vZGVsLCBGaWx0ZXJDb25kaXRpb25Nb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5xcjsiLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IHsgS2V5U3RhdGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7IHBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9LZXlib2FyZFNob3J0Y3V0c0hlbHAnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzS2V5Ym9hcmRTaG9ydGN1dHNIZWxwJ1xufSlcbmNsYXNzIEtleWJvYXJkU2hvcnRjdXRzSGVscFBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuc0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLlBvcHVwS2V5Ym9hcmRTaG9ydGN1dHNIZWxwO1xuXHR9XG5cblx0b25CdWlsZChkb20pIHtcblx0XHRrZXkoXG5cdFx0XHQndGFiLCBzaGlmdCt0YWIsIGxlZnQsIHJpZ2h0Jyxcblx0XHRcdEtleVN0YXRlLlBvcHVwS2V5Ym9hcmRTaG9ydGN1dHNIZWxwLFxuXHRcdFx0Xy50aHJvdHRsZSgoZXZlbnQsIGhhbmRsZXIpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGhhbmRsZXIpIHtcblx0XHRcdFx0XHRjb25zdCAkdGFicyA9IGRvbS5maW5kKCcubmF2Lm5hdi10YWJzID4gbGknKSxcblx0XHRcdFx0XHRcdGlzTmV4dCA9IGhhbmRsZXIgJiYgKCd0YWInID09PSBoYW5kbGVyLnNob3J0Y3V0IHx8ICdyaWdodCcgPT09IGhhbmRsZXIuc2hvcnRjdXQpO1xuXG5cdFx0XHRcdFx0bGV0IGluZGV4ID0gJHRhYnMuaW5kZXgoJHRhYnMuZmlsdGVyKCcuYWN0aXZlJykpO1xuXHRcdFx0XHRcdGlmICghaXNOZXh0ICYmIDAgPCBpbmRleCkge1xuXHRcdFx0XHRcdFx0aW5kZXggLT0gMTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzTmV4dCAmJiBpbmRleCA8ICR0YWJzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdGluZGV4ICs9IDE7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGluZGV4ID0gaXNOZXh0ID8gMCA6ICR0YWJzLmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JHRhYnNcblx0XHRcdFx0XHRcdC5lcShpbmRleClcblx0XHRcdFx0XHRcdC5maW5kKCdhW2RhdGEtdG9nZ2xlPVwidGFiXCJdJylcblx0XHRcdFx0XHRcdC50YWIoJ3Nob3cnKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpXG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgeyBLZXlib2FyZFNob3J0Y3V0c0hlbHBQb3B1cFZpZXcsIEtleWJvYXJkU2hvcnRjdXRzSGVscFBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcbmltcG9ydCBKdWEgZnJvbSAnSnVhJztcblxuaW1wb3J0IHtcblx0U2F2ZVNldHRpbmdzU3RlcCxcblx0Q29udGFjdFByb3BlcnR5VHlwZSxcblx0Q29tcG9zZVR5cGUsXG5cdENhcGEsXG5cdE1hZ2ljcyxcblx0U3RvcmFnZVJlc3VsdFR5cGUsXG5cdE5vdGlmaWNhdGlvbixcblx0S2V5U3RhdGVcbn0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuaW1wb3J0IHtcblx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3ksXG5cdGNvbXB1dGVkUGFnZW5hdG9ySGVscGVyLFxuXHRpbkFycmF5LFxuXHR0cmltLFxuXHR3aW5kb3dSZXNpemVDYWxsYmFjayxcblx0aXNOb25FbXB0eUFycmF5LFxuXHRmYWtlTWQ1LFxuXHRwSW50LFxuXHRpc1VuZFxufSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBDT05UQUNUU19QRVJfUEFHRSB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICdDb21tb24vU2VsZWN0b3InO1xuaW1wb3J0IHsgZXhwb3J0Q29udGFjdHNWY2YsIGV4cG9ydENvbnRhY3RzQ3N2LCB1cGxvYWRDb250YWN0cyB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBpMThuLCBnZXROb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBDb250YWN0U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQ29udGFjdCc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBFbWFpbE1vZGVsIH0gZnJvbSAnTW9kZWwvRW1haWwnO1xuaW1wb3J0IHsgQ29udGFjdE1vZGVsIH0gZnJvbSAnTW9kZWwvQ29udGFjdCc7XG5pbXBvcnQgeyBDb250YWN0UHJvcGVydHlNb2RlbCB9IGZyb20gJ01vZGVsL0NvbnRhY3RQcm9wZXJ0eSc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCwgc2hvd1NjcmVlblBvcHVwLCBoaWRlU2NyZWVuUG9wdXAsIHJvdXRlT24sIHJvdXRlT2ZmIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Db250YWN0cycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNDb250YWN0cydcbn0pXG5jbGFzcyBDb250YWN0c1BvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0Y29uc3QgZkZhc3RDbGVhckVtcHR5TGlzdEhlbHBlciA9IChsaXN0KSA9PiB7XG5cdFx0XHRpZiAobGlzdCAmJiAwIDwgbGlzdC5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy52aWV3UHJvcGVydGllcy5yZW1vdmVBbGwobGlzdCk7XG5cdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGxpc3QpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLmJCYWNrVG9Db21wb3NlID0gZmFsc2U7XG5cdFx0dGhpcy5zTGFzdENvbXBvc2VGb2N1c2VkRmllbGQgPSAnJztcblxuXHRcdHRoaXMuYWxsb3dDb250YWN0c1N5bmMgPSBDb250YWN0U3RvcmUuYWxsb3dDb250YWN0c1N5bmM7XG5cdFx0dGhpcy5lbmFibGVDb250YWN0c1N5bmMgPSBDb250YWN0U3RvcmUuZW5hYmxlQ29udGFjdHNTeW5jO1xuXHRcdHRoaXMuYWxsb3dFeHBvcnQgPSAhYk1vYmlsZURldmljZTtcblxuXHRcdHRoaXMuc2VhcmNoID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jb250YWN0c0NvdW50ID0ga28ub2JzZXJ2YWJsZSgwKTtcblx0XHR0aGlzLmNvbnRhY3RzID0gQ29udGFjdFN0b3JlLmNvbnRhY3RzO1xuXG5cdFx0dGhpcy5jdXJyZW50Q29udGFjdCA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLmltcG9ydFVwbG9hZGVyQnV0dG9uID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdHRoaXMuY29udGFjdHNQYWdlID0ga28ub2JzZXJ2YWJsZSgxKTtcblx0XHR0aGlzLmNvbnRhY3RzUGFnZUNvdW50ID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgaVBhZ2UgPSB3aW5kb3cuTWF0aC5jZWlsKHRoaXMuY29udGFjdHNDb3VudCgpIC8gQ09OVEFDVFNfUEVSX1BBR0UpO1xuXHRcdFx0cmV0dXJuIDAgPj0gaVBhZ2UgPyAxIDogaVBhZ2U7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzUGFnZW5hdG9yID0ga28uY29tcHV0ZWQoY29tcHV0ZWRQYWdlbmF0b3JIZWxwZXIodGhpcy5jb250YWN0c1BhZ2UsIHRoaXMuY29udGFjdHNQYWdlQ291bnQpKTtcblxuXHRcdHRoaXMuZW1wdHlTZWxlY3Rpb24gPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMudmlld0NsZWFyU2VhcmNoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnZpZXdJRCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld1JlYWRPbmx5ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy52aWV3UHJvcGVydGllcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLnZpZXdTYXZlVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNOYW1lcyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcihcblx0XHRcdFx0dGhpcy52aWV3UHJvcGVydGllcygpLFxuXHRcdFx0XHQocHJvcGVydHkpID0+IC0xIDwgaW5BcnJheShwcm9wZXJ0eS50eXBlKCksIFtDb250YWN0UHJvcGVydHlUeXBlLkZpcnN0TmFtZSwgQ29udGFjdFByb3BlcnR5VHlwZS5MYXN0TmFtZV0pXG5cdFx0XHQpXG5cdFx0KTtcblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzT3RoZXIgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5maWx0ZXIodGhpcy52aWV3UHJvcGVydGllcygpLCAocHJvcGVydHkpID0+IC0xIDwgaW5BcnJheShwcm9wZXJ0eS50eXBlKCksIFtDb250YWN0UHJvcGVydHlUeXBlLk5pY2tdKSlcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3UHJvcGVydGllc0VtYWlscyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnZpZXdQcm9wZXJ0aWVzKCksIChwcm9wZXJ0eSkgPT4gQ29udGFjdFByb3BlcnR5VHlwZS5FbWFpbCA9PT0gcHJvcGVydHkudHlwZSgpKVxuXHRcdCk7XG5cblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzV2ViID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMudmlld1Byb3BlcnRpZXMoKSwgKHByb3BlcnR5KSA9PiBDb250YWN0UHJvcGVydHlUeXBlLldlYiA9PT0gcHJvcGVydHkudHlwZSgpKVxuXHRcdCk7XG5cblx0XHR0aGlzLnZpZXdIYXNOb25FbXB0eVJlcXVpcmVkUHJvcGVydGllcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IG5hbWVzID0gdGhpcy52aWV3UHJvcGVydGllc05hbWVzKCksXG5cdFx0XHRcdGVtYWlscyA9IHRoaXMudmlld1Byb3BlcnRpZXNFbWFpbHMoKSxcblx0XHRcdFx0ZkZpbHRlciA9IChwcm9wZXJ0eSkgPT4gJycgIT09IHRyaW0ocHJvcGVydHkudmFsdWUoKSk7XG5cblx0XHRcdHJldHVybiAhIShfLmZpbmQobmFtZXMsIGZGaWx0ZXIpIHx8IF8uZmluZChlbWFpbHMsIGZGaWx0ZXIpKTtcblx0XHR9KTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNQaG9uZXMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5maWx0ZXIodGhpcy52aWV3UHJvcGVydGllcygpLCAocHJvcGVydHkpID0+IENvbnRhY3RQcm9wZXJ0eVR5cGUuUGhvbmUgPT09IHByb3BlcnR5LnR5cGUoKSlcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3UHJvcGVydGllc0VtYWlsc05vbkVtcHR5ID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMudmlld1Byb3BlcnRpZXNOYW1lcygpLCAocHJvcGVydHkpID0+ICcnICE9PSB0cmltKHByb3BlcnR5LnZhbHVlKCkpKVxuXHRcdCk7XG5cblx0XHRjb25zdCBwcm9wZXJ0eUZvY3VzZWQgPSAocHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IGZvY3VzZWQgPSBwcm9wZXJ0eS5mb2N1c2VkKCk7XG5cdFx0XHRyZXR1cm4gJycgPT09IHRyaW0ocHJvcGVydHkudmFsdWUoKSkgJiYgIWZvY3VzZWQ7XG5cdFx0fTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNFbWFpbHNFbXB0eUFuZE9uRm9jdXNlZCA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnZpZXdQcm9wZXJ0aWVzRW1haWxzKCksIHByb3BlcnR5Rm9jdXNlZClcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3UHJvcGVydGllc1Bob25lc0VtcHR5QW5kT25Gb2N1c2VkID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMudmlld1Byb3BlcnRpZXNQaG9uZXMoKSwgcHJvcGVydHlGb2N1c2VkKVxuXHRcdCk7XG5cblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzV2ViRW1wdHlBbmRPbkZvY3VzZWQgPSBrby5jb21wdXRlZCgoKSA9PiBfLmZpbHRlcih0aGlzLnZpZXdQcm9wZXJ0aWVzV2ViKCksIHByb3BlcnR5Rm9jdXNlZCkpO1xuXG5cdFx0dGhpcy52aWV3UHJvcGVydGllc090aGVyRW1wdHlBbmRPbkZvY3VzZWQgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5maWx0ZXIodGhpcy52aWV3UHJvcGVydGllc090aGVyKCksIHByb3BlcnR5Rm9jdXNlZClcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3UHJvcGVydGllc0VtYWlsc0VtcHR5QW5kT25Gb2N1c2VkLnN1YnNjcmliZShmRmFzdENsZWFyRW1wdHlMaXN0SGVscGVyKTtcblx0XHR0aGlzLnZpZXdQcm9wZXJ0aWVzUGhvbmVzRW1wdHlBbmRPbkZvY3VzZWQuc3Vic2NyaWJlKGZGYXN0Q2xlYXJFbXB0eUxpc3RIZWxwZXIpO1xuXHRcdHRoaXMudmlld1Byb3BlcnRpZXNXZWJFbXB0eUFuZE9uRm9jdXNlZC5zdWJzY3JpYmUoZkZhc3RDbGVhckVtcHR5TGlzdEhlbHBlcik7XG5cdFx0dGhpcy52aWV3UHJvcGVydGllc090aGVyRW1wdHlBbmRPbkZvY3VzZWQuc3Vic2NyaWJlKGZGYXN0Q2xlYXJFbXB0eUxpc3RIZWxwZXIpO1xuXG5cdFx0dGhpcy52aWV3U2F2aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnVzZUNoZWNrYm94ZXNJbkxpc3QgPSBTZXR0aW5nc1N0b3JlLnVzZUNoZWNrYm94ZXNJbkxpc3Q7XG5cblx0XHR0aGlzLnNlYXJjaC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5yZWxvYWRDb250YWN0TGlzdCgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb250YWN0cy5zdWJzY3JpYmUod2luZG93UmVzaXplQ2FsbGJhY2spO1xuXHRcdHRoaXMudmlld1Byb3BlcnRpZXMuc3Vic2NyaWJlKHdpbmRvd1Jlc2l6ZUNhbGxiYWNrKTtcblxuXHRcdHRoaXMuY29udGFjdHNDaGVja2VkID0ga28uY29tcHV0ZWQoKCkgPT4gXy5maWx0ZXIodGhpcy5jb250YWN0cygpLCAoaXRlbSkgPT4gaXRlbS5jaGVja2VkKCkpKTtcblxuXHRcdHRoaXMuY29udGFjdHNDaGVja2VkT3JTZWxlY3RlZCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGNoZWNrZWQgPSB0aGlzLmNvbnRhY3RzQ2hlY2tlZCgpLFxuXHRcdFx0XHRzZWxlY3RlZCA9IHRoaXMuY3VycmVudENvbnRhY3QoKTtcblxuXHRcdFx0cmV0dXJuIF8udW5pb24oY2hlY2tlZCwgc2VsZWN0ZWQgPyBbc2VsZWN0ZWRdIDogW10pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb250YWN0c0NoZWNrZWRPclNlbGVjdGVkVWlkcyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLm1hcCh0aGlzLmNvbnRhY3RzQ2hlY2tlZE9yU2VsZWN0ZWQoKSwgKGNvbnRhY3QpID0+IGNvbnRhY3QuaWRDb250YWN0KVxuXHRcdCk7XG5cblx0XHR0aGlzLnNlbGVjdG9yID0gbmV3IFNlbGVjdG9yKFxuXHRcdFx0dGhpcy5jb250YWN0cyxcblx0XHRcdHRoaXMuY3VycmVudENvbnRhY3QsXG5cdFx0XHRudWxsLFxuXHRcdFx0Jy5lLWNvbnRhY3QtaXRlbSAuYWN0aW9uSGFuZGxlJyxcblx0XHRcdCcuZS1jb250YWN0LWl0ZW0uc2VsZWN0ZWQnLFxuXHRcdFx0Jy5lLWNvbnRhY3QtaXRlbSAuY2hlY2tib3hJdGVtJyxcblx0XHRcdCcuZS1jb250YWN0LWl0ZW0uZm9jdXNlZCdcblx0XHQpO1xuXG5cdFx0dGhpcy5zZWxlY3Rvci5vbignb25JdGVtU2VsZWN0JywgKGNvbnRhY3QpID0+IHtcblx0XHRcdHRoaXMucG9wdWxhdGVWaWV3Q29udGFjdChjb250YWN0ID8gY29udGFjdCA6IG51bGwpO1xuXHRcdFx0aWYgKCFjb250YWN0KSB7XG5cdFx0XHRcdHRoaXMuZW1wdHlTZWxlY3Rpb24odHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNlbGVjdG9yLm9uKCdvbkl0ZW1HZXRVaWQnLCAoY29udGFjdCkgPT4gKGNvbnRhY3QgPyBjb250YWN0LmdlbmVyYXRlVWlkKCkgOiAnJykpO1xuXG5cdFx0dGhpcy5iRHJvcFBhZ2VBZnRlckRlbGV0ZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy53YXRjaERpcnR5ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy53YXRjaEhhc2ggPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudmlld0hhc2ggPSBrby5jb21wdXRlZCgoKSA9PiAnJyArIF8ubWFwKHRoaXMudmlld1Byb3BlcnRpZXMoKSwgKG9JdGVtKSA9PiBvSXRlbS52YWx1ZSgpKS5qb2luKCcnKSk7XG5cblx0XHQvLyB0aGlzLnNhdmVDb21tYW5kRGVib3VuY2UgPSBfLmRlYm91bmNlKF8uYmluZCh0aGlzLnNhdmVDb21tYW5kLCB0aGlzKSwgMTAwMCk7XG5cblx0XHR0aGlzLnZpZXdIYXNoLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy53YXRjaEhhc2goKSAmJiAhdGhpcy52aWV3UmVhZE9ubHkoKSAmJiAhdGhpcy53YXRjaERpcnR5KCkpIHtcblx0XHRcdFx0dGhpcy53YXRjaERpcnR5KHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuQ29udGFjdExpc3Q7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdG5ld0NvbW1hbmQoKSB7XG5cdFx0dGhpcy5wb3B1bGF0ZVZpZXdDb250YWN0KG51bGwpO1xuXHRcdHRoaXMuY3VycmVudENvbnRhY3QobnVsbCk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gMCA8IHNlbGYuY29udGFjdHNDaGVja2VkT3JTZWxlY3RlZCgpLmxlbmd0aClcblx0ZGVsZXRlQ29tbWFuZCgpIHtcblx0XHR0aGlzLmRlbGV0ZVNlbGVjdGVkQ29udGFjdHMoKTtcblx0XHR0aGlzLmVtcHR5U2VsZWN0aW9uKHRydWUpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IDAgPCBzZWxmLmNvbnRhY3RzQ2hlY2tlZE9yU2VsZWN0ZWQoKS5sZW5ndGgpXG5cdG5ld01lc3NhZ2VDb21tYW5kKCkge1xuXHRcdGlmICghU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGxldCBhRSA9IFtdLFxuXHRcdFx0dG9FbWFpbHMgPSBudWxsLFxuXHRcdFx0Y2NFbWFpbHMgPSBudWxsLFxuXHRcdFx0YmNjRW1haWxzID0gbnVsbDtcblxuXHRcdGNvbnN0IGFDID0gdGhpcy5jb250YWN0c0NoZWNrZWRPclNlbGVjdGVkKCk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShhQykpIHtcblx0XHRcdGFFID0gXy5tYXAoYUMsIChvSXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAob0l0ZW0pIHtcblx0XHRcdFx0XHRjb25zdCBkYXRhID0gb0l0ZW0uZ2V0TmFtZUFuZEVtYWlsSGVscGVyKCksXG5cdFx0XHRcdFx0XHRlbWFpbCA9IGRhdGEgPyBuZXcgRW1haWxNb2RlbChkYXRhWzBdLCBkYXRhWzFdKSA6IG51bGw7XG5cblx0XHRcdFx0XHRpZiAoZW1haWwgJiYgZW1haWwudmFsaWRhdGUoKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVtYWlsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fSk7XG5cblx0XHRcdGFFID0gXy5jb21wYWN0KGFFKTtcblx0XHR9XG5cblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGFFKSkge1xuXHRcdFx0dGhpcy5iQmFja1RvQ29tcG9zZSA9IGZhbHNlO1xuXG5cdFx0XHRoaWRlU2NyZWVuUG9wdXAoQ29udGFjdHNQb3B1cFZpZXcpO1xuXG5cdFx0XHRzd2l0Y2ggKHRoaXMuc0xhc3RDb21wb3NlRm9jdXNlZEZpZWxkKSB7XG5cdFx0XHRcdGNhc2UgJ2NjJzpcblx0XHRcdFx0XHRjY0VtYWlscyA9IGFFO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdiY2MnOlxuXHRcdFx0XHRcdGJjY0VtYWlscyA9IGFFO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd0byc6XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dG9FbWFpbHMgPSBhRTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zTGFzdENvbXBvc2VGb2N1c2VkRmllbGQgPSAnJztcblxuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2UnKSwgW0NvbXBvc2VUeXBlLkVtcHR5LCBudWxsLCB0b0VtYWlscywgY2NFbWFpbHMsIGJjY0VtYWlsc10pO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWUyMDBtcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGNsZWFyQ29tbWFuZCgpIHtcblx0XHR0aGlzLnNlYXJjaCgnJyk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4ge1xuXHRcdGNvbnN0IGJWID0gc2VsZi52aWV3SGFzTm9uRW1wdHlSZXF1aXJlZFByb3BlcnRpZXMoKSxcblx0XHRcdGJSZWFkT25seSA9IHNlbGYudmlld1JlYWRPbmx5KCk7XG5cdFx0cmV0dXJuICFzZWxmLnZpZXdTYXZpbmcoKSAmJiBiViAmJiAhYlJlYWRPbmx5O1xuXHR9KVxuXHRzYXZlQ29tbWFuZCgpIHtcblx0XHR0aGlzLnZpZXdTYXZpbmcodHJ1ZSk7XG5cdFx0dGhpcy52aWV3U2F2ZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5BbmltYXRlKTtcblxuXHRcdGNvbnN0IHJlcXVlc3RVaWQgPSBmYWtlTWQ1KCksXG5cdFx0XHRwcm9wZXJ0aWVzID0gW107XG5cblx0XHRfLmVhY2godGhpcy52aWV3UHJvcGVydGllcygpLCAob0l0ZW0pID0+IHtcblx0XHRcdGlmIChvSXRlbS50eXBlKCkgJiYgb0l0ZW0udHlwZSgpICE9PSBDb250YWN0UHJvcGVydHlUeXBlLkZ1bGxOYW1lICYmICcnICE9PSB0cmltKG9JdGVtLnZhbHVlKCkpKSB7XG5cdFx0XHRcdHByb3BlcnRpZXMucHVzaChbb0l0ZW0udHlwZSgpLCBvSXRlbS52YWx1ZSgpLCBvSXRlbS50eXBlU3RyKCldKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdFJlbW90ZS5jb250YWN0U2F2ZShcblx0XHRcdChzUmVzdWx0LCBvRGF0YSkgPT4ge1xuXHRcdFx0XHRsZXQgcmVzID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMudmlld1NhdmluZyhmYWxzZSk7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiZcblx0XHRcdFx0XHRvRGF0YSAmJlxuXHRcdFx0XHRcdG9EYXRhLlJlc3VsdCAmJlxuXHRcdFx0XHRcdG9EYXRhLlJlc3VsdC5SZXF1ZXN0VWlkID09PSByZXF1ZXN0VWlkICYmXG5cdFx0XHRcdFx0MCA8IHBJbnQob0RhdGEuUmVzdWx0LlJlc3VsdElEKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAoJycgPT09IHRoaXMudmlld0lEKCkpIHtcblx0XHRcdFx0XHRcdHRoaXMudmlld0lEKHBJbnQob0RhdGEuUmVzdWx0LlJlc3VsdElEKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5yZWxvYWRDb250YWN0TGlzdCgpO1xuXHRcdFx0XHRcdHJlcyA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnZpZXdTYXZlVHJpZ2dlcihyZXMgPyBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQgOiBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0KTtcblx0XHRcdFx0fSwgTWFnaWNzLlRpbWUzNTBtcyk7XG5cblx0XHRcdFx0aWYgKHJlcykge1xuXHRcdFx0XHRcdHRoaXMud2F0Y2hEaXJ0eShmYWxzZSk7XG5cblx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMudmlld1NhdmVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0XHRcdFx0fSwgTWFnaWNzLlRpbWUxcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyZXF1ZXN0VWlkLFxuXHRcdFx0dGhpcy52aWV3SUQoKSxcblx0XHRcdHByb3BlcnRpZXNcblx0XHQpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLmNvbnRhY3RzLnN5bmNpbmcoKSAmJiAhc2VsZi5jb250YWN0cy5pbXBvcnRpbmcoKSlcblx0c3luY0NvbW1hbmQoKSB7XG5cdFx0Z2V0QXBwKCkuY29udGFjdHNTeW5jKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzICE9PSByZXN1bHQgfHwgIWRhdGEgfHwgIWRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdHdpbmRvdy5hbGVydChnZXROb3RpZmljYXRpb24oZGF0YSAmJiBkYXRhLkVycm9yQ29kZSA/IGRhdGEuRXJyb3JDb2RlIDogTm90aWZpY2F0aW9uLkNvbnRhY3RzU3luY0Vycm9yKSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucmVsb2FkQ29udGFjdExpc3QodHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRQcm9wZXJ0eVBsYWNlaG9sZGVyKHR5cGUpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRjYXNlIENvbnRhY3RQcm9wZXJ0eVR5cGUuTGFzdE5hbWU6XG5cdFx0XHRcdHJlc3VsdCA9ICdDT05UQUNUUy9QTEFDRUhPTERFUl9FTlRFUl9MQVNUX05BTUUnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgQ29udGFjdFByb3BlcnR5VHlwZS5GaXJzdE5hbWU6XG5cdFx0XHRcdHJlc3VsdCA9ICdDT05UQUNUUy9QTEFDRUhPTERFUl9FTlRFUl9GSVJTVF9OQU1FJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIENvbnRhY3RQcm9wZXJ0eVR5cGUuTmljazpcblx0XHRcdFx0cmVzdWx0ID0gJ0NPTlRBQ1RTL1BMQUNFSE9MREVSX0VOVEVSX05JQ0tfTkFNRSc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGROZXdQcm9wZXJ0eSh0eXBlLCB0eXBlU3RyKSB7XG5cdFx0dGhpcy52aWV3UHJvcGVydGllcy5wdXNoKFxuXHRcdFx0bmV3IENvbnRhY3RQcm9wZXJ0eU1vZGVsKHR5cGUsIHR5cGVTdHIgfHwgJycsICcnLCB0cnVlLCB0aGlzLmdldFByb3BlcnR5UGxhY2Vob2xkZXIodHlwZSkpXG5cdFx0KTtcblx0fVxuXG5cdGFkZE5ld09yRm9jdXNQcm9wZXJ0eSh0eXBlLCB0eXBlU3RyKSB7XG5cdFx0Y29uc3QgaXRlbSA9IF8uZmluZCh0aGlzLnZpZXdQcm9wZXJ0aWVzKCksIChwcm9wKSA9PiB0eXBlID09PSBwcm9wLnR5cGUoKSk7XG5cdFx0aWYgKGl0ZW0pIHtcblx0XHRcdGl0ZW0uZm9jdXNlZCh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hZGROZXdQcm9wZXJ0eSh0eXBlLCB0eXBlU3RyKTtcblx0XHR9XG5cdH1cblxuXHRhZGROZXdFbWFpbCgpIHtcblx0XHR0aGlzLmFkZE5ld1Byb3BlcnR5KENvbnRhY3RQcm9wZXJ0eVR5cGUuRW1haWwsICdIb21lJyk7XG5cdH1cblxuXHRhZGROZXdQaG9uZSgpIHtcblx0XHR0aGlzLmFkZE5ld1Byb3BlcnR5KENvbnRhY3RQcm9wZXJ0eVR5cGUuUGhvbmUsICdNb2JpbGUnKTtcblx0fVxuXG5cdGFkZE5ld1dlYigpIHtcblx0XHR0aGlzLmFkZE5ld1Byb3BlcnR5KENvbnRhY3RQcm9wZXJ0eVR5cGUuV2ViKTtcblx0fVxuXG5cdGFkZE5ld05pY2tuYW1lKCkge1xuXHRcdHRoaXMuYWRkTmV3T3JGb2N1c1Byb3BlcnR5KENvbnRhY3RQcm9wZXJ0eVR5cGUuTmljayk7XG5cdH1cblxuXHRhZGROZXdOb3RlcygpIHtcblx0XHR0aGlzLmFkZE5ld09yRm9jdXNQcm9wZXJ0eShDb250YWN0UHJvcGVydHlUeXBlLk5vdGUpO1xuXHR9XG5cblx0YWRkTmV3QmlydGhkYXkoKSB7XG5cdFx0dGhpcy5hZGROZXdPckZvY3VzUHJvcGVydHkoQ29udGFjdFByb3BlcnR5VHlwZS5CaXJ0aGRheSk7XG5cdH1cblxuXHRleHBvcnRWY2YoKSB7XG5cdFx0Z2V0QXBwKCkuZG93bmxvYWQoZXhwb3J0Q29udGFjdHNWY2YoKSk7XG5cdH1cblxuXHRleHBvcnRDc3YoKSB7XG5cdFx0Z2V0QXBwKCkuZG93bmxvYWQoZXhwb3J0Q29udGFjdHNDc3YoKSk7XG5cdH1cblxuXHRpbml0VXBsb2FkZXIoKSB7XG5cdFx0aWYgKHRoaXMuaW1wb3J0VXBsb2FkZXJCdXR0b24oKSkge1xuXHRcdFx0Y29uc3QgaiA9IG5ldyBKdWEoe1xuXHRcdFx0XHQnYWN0aW9uJzogdXBsb2FkQ29udGFjdHMoKSxcblx0XHRcdFx0J25hbWUnOiAndXBsb2FkZXInLFxuXHRcdFx0XHQncXVldWVTaXplJzogMSxcblx0XHRcdFx0J211bHRpcGxlU2l6ZUxpbWl0JzogMSxcblx0XHRcdFx0J2Rpc2FibGVEcmFnQW5kRHJvcCc6IHRydWUsXG5cdFx0XHRcdCdkaXNhYmxlTXVsdGlwbGUnOiB0cnVlLFxuXHRcdFx0XHQnZGlzYWJsZURvY3VtZW50RHJvcFByZXZlbnQnOiB0cnVlLFxuXHRcdFx0XHQnY2xpY2tFbGVtZW50JzogdGhpcy5pbXBvcnRVcGxvYWRlckJ1dHRvbigpXG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGopIHtcblx0XHRcdFx0ai5vbignb25TdGFydCcsICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmNvbnRhY3RzLmltcG9ydGluZyh0cnVlKTtcblx0XHRcdFx0fSkub24oJ29uQ29tcGxldGUnLCAoaWQsIHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuY29udGFjdHMuaW1wb3J0aW5nKGZhbHNlKTtcblx0XHRcdFx0XHR0aGlzLnJlbG9hZENvbnRhY3RMaXN0KCk7XG5cdFx0XHRcdFx0aWYgKCFpZCB8fCAhcmVzdWx0IHx8ICFkYXRhIHx8ICFkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRcdFx0d2luZG93LmFsZXJ0KGkxOG4oJ0NPTlRBQ1RTL0VSUk9SX0lNUE9SVF9GSUxFJykpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmVtb3ZlQ2hlY2tlZE9yU2VsZWN0ZWRDb250YWN0c0Zyb21MaXN0KCkge1xuXHRcdGNvbnN0IGtvQ29udGFjdHMgPSB0aGlzLmNvbnRhY3RzLFxuXHRcdFx0Y29udGFjdHMgPSB0aGlzLmNvbnRhY3RzQ2hlY2tlZE9yU2VsZWN0ZWQoKTtcblxuXHRcdGxldCBjdXJyZW50Q29udGFjdCA9IHRoaXMuY3VycmVudENvbnRhY3QoKSxcblx0XHRcdGNvdW50ID0gdGhpcy5jb250YWN0cygpLmxlbmd0aDtcblxuXHRcdGlmICgwIDwgY29udGFjdHMubGVuZ3RoKSB7XG5cdFx0XHRfLmVhY2goY29udGFjdHMsIChjb250YWN0KSA9PiB7XG5cdFx0XHRcdGlmIChjdXJyZW50Q29udGFjdCAmJiBjdXJyZW50Q29udGFjdC5pZENvbnRhY3QgPT09IGNvbnRhY3QuaWRDb250YWN0KSB7XG5cdFx0XHRcdFx0Y3VycmVudENvbnRhY3QgPSBudWxsO1xuXHRcdFx0XHRcdHRoaXMuY3VycmVudENvbnRhY3QobnVsbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb250YWN0LmRlbGV0ZWQodHJ1ZSk7XG5cdFx0XHRcdGNvdW50IC09IDE7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKDAgPj0gY291bnQpIHtcblx0XHRcdFx0dGhpcy5iRHJvcFBhZ2VBZnRlckRlbGV0ZSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRfLmVhY2goY29udGFjdHMsIChjb250YWN0KSA9PiB7XG5cdFx0XHRcdFx0a29Db250YWN0cy5yZW1vdmUoY29udGFjdCk7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3koY29udGFjdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWU1MDBtcyk7XG5cdFx0fVxuXHR9XG5cblx0ZGVsZXRlU2VsZWN0ZWRDb250YWN0cygpIHtcblx0XHRpZiAoMCA8IHRoaXMuY29udGFjdHNDaGVja2VkT3JTZWxlY3RlZCgpLmxlbmd0aCkge1xuXHRcdFx0UmVtb3RlLmNvbnRhY3RzRGVsZXRlKF8uYmluZCh0aGlzLmRlbGV0ZVJlc3BvbnNlLCB0aGlzKSwgdGhpcy5jb250YWN0c0NoZWNrZWRPclNlbGVjdGVkVWlkcygpKTtcblxuXHRcdFx0dGhpcy5yZW1vdmVDaGVja2VkT3JTZWxlY3RlZENvbnRhY3RzRnJvbUxpc3QoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXN1bHRcblx0ICogQHBhcmFtIHtBamF4SnNvbkRlZmF1bHRSZXNwb25zZX0gb0RhdGFcblx0ICovXG5cdGRlbGV0ZVJlc3BvbnNlKHNSZXN1bHQsIG9EYXRhKSB7XG5cdFx0aWYgKE1hZ2ljcy5UaW1lNTAwbXMgPCAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiBvRGF0YS5UaW1lID8gcEludChvRGF0YS5UaW1lKSA6IDApKSB7XG5cdFx0XHR0aGlzLnJlbG9hZENvbnRhY3RMaXN0KHRoaXMuYkRyb3BQYWdlQWZ0ZXJEZWxldGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWxvYWRDb250YWN0TGlzdCh0aGlzLmJEcm9wUGFnZUFmdGVyRGVsZXRlKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdH1cblx0fVxuXG5cdHJlbW92ZVByb3BlcnR5KG9Qcm9wKSB7XG5cdFx0dGhpcy52aWV3UHJvcGVydGllcy5yZW1vdmUob1Byb3ApO1xuXHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KG9Qcm9wKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9Db250YWN0TW9kZWx9IGNvbnRhY3Rcblx0ICovXG5cdHBvcHVsYXRlVmlld0NvbnRhY3QoY29udGFjdCkge1xuXHRcdGxldCBpZCA9ICcnLFxuXHRcdFx0bGFzdE5hbWUgPSAnJyxcblx0XHRcdGZpcnN0TmFtZSA9ICcnO1xuXHRcdGNvbnN0IGxpc3QgPSBbXTtcblxuXHRcdHRoaXMud2F0Y2hIYXNoKGZhbHNlKTtcblxuXHRcdHRoaXMuZW1wdHlTZWxlY3Rpb24oZmFsc2UpO1xuXHRcdHRoaXMudmlld1JlYWRPbmx5KGZhbHNlKTtcblxuXHRcdGlmIChjb250YWN0KSB7XG5cdFx0XHRpZCA9IGNvbnRhY3QuaWRDb250YWN0O1xuXHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjb250YWN0LnByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdF8uZWFjaChjb250YWN0LnByb3BlcnRpZXMsIChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eVswXSkge1xuXHRcdFx0XHRcdFx0aWYgKENvbnRhY3RQcm9wZXJ0eVR5cGUuTGFzdE5hbWUgPT09IHByb3BlcnR5WzBdKSB7XG5cdFx0XHRcdFx0XHRcdGxhc3ROYW1lID0gcHJvcGVydHlbMV07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKENvbnRhY3RQcm9wZXJ0eVR5cGUuRmlyc3ROYW1lID09PSBwcm9wZXJ0eVswXSkge1xuXHRcdFx0XHRcdFx0XHRmaXJzdE5hbWUgPSBwcm9wZXJ0eVsxXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGxpc3QucHVzaChuZXcgQ29udGFjdFByb3BlcnR5TW9kZWwocHJvcGVydHlbMF0sIHByb3BlcnR5WzJdIHx8ICcnLCBwcm9wZXJ0eVsxXSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMudmlld1JlYWRPbmx5KCEhY29udGFjdC5yZWFkT25seSk7XG5cdFx0fVxuXG5cdFx0bGlzdC51bnNoaWZ0KFxuXHRcdFx0bmV3IENvbnRhY3RQcm9wZXJ0eU1vZGVsKFxuXHRcdFx0XHRDb250YWN0UHJvcGVydHlUeXBlLkxhc3ROYW1lLFxuXHRcdFx0XHQnJyxcblx0XHRcdFx0bGFzdE5hbWUsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHR0aGlzLmdldFByb3BlcnR5UGxhY2Vob2xkZXIoQ29udGFjdFByb3BlcnR5VHlwZS5MYXN0TmFtZSlcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0bGlzdC51bnNoaWZ0KFxuXHRcdFx0bmV3IENvbnRhY3RQcm9wZXJ0eU1vZGVsKFxuXHRcdFx0XHRDb250YWN0UHJvcGVydHlUeXBlLkZpcnN0TmFtZSxcblx0XHRcdFx0JycsXG5cdFx0XHRcdGZpcnN0TmFtZSxcblx0XHRcdFx0IWNvbnRhY3QsXG5cdFx0XHRcdHRoaXMuZ2V0UHJvcGVydHlQbGFjZWhvbGRlcihDb250YWN0UHJvcGVydHlUeXBlLkZpcnN0TmFtZSlcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0dGhpcy52aWV3SUQoaWQpO1xuXG5cdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3kodGhpcy52aWV3UHJvcGVydGllcygpKTtcblxuXHRcdHRoaXMudmlld1Byb3BlcnRpZXMoW10pO1xuXHRcdHRoaXMudmlld1Byb3BlcnRpZXMobGlzdCk7XG5cblx0XHR0aGlzLndhdGNoRGlydHkoZmFsc2UpO1xuXHRcdHRoaXMud2F0Y2hIYXNoKHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGRyb3BQYWdlUG9zaXRpb24gPSBmYWxzZVxuXHQgKi9cblx0cmVsb2FkQ29udGFjdExpc3QoZHJvcFBhZ2VQb3NpdGlvbiA9IGZhbHNlKSB7XG5cdFx0bGV0IG9mZnNldCA9ICh0aGlzLmNvbnRhY3RzUGFnZSgpIC0gMSkgKiBDT05UQUNUU19QRVJfUEFHRTtcblxuXHRcdHRoaXMuYkRyb3BQYWdlQWZ0ZXJEZWxldGUgPSBmYWxzZTtcblxuXHRcdGlmIChkcm9wUGFnZVBvc2l0aW9uKSB7XG5cdFx0XHR0aGlzLmNvbnRhY3RzUGFnZSgxKTtcblx0XHRcdG9mZnNldCA9IDA7XG5cdFx0fVxuXG5cdFx0dGhpcy5jb250YWN0cy5sb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jb250YWN0cyhcblx0XHRcdChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0bGV0IGNvdW50ID0gMCxcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0Lkxpc3QpIHtcblx0XHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGRhdGEuUmVzdWx0Lkxpc3QpKSB7XG5cdFx0XHRcdFx0XHRsaXN0ID0gXy5tYXAoZGF0YS5SZXN1bHQuTGlzdCwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY29udGFjdCA9IG5ldyBDb250YWN0TW9kZWwoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRhY3QucGFyc2UoaXRlbSkgPyBjb250YWN0IDogbnVsbDtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRsaXN0ID0gXy5jb21wYWN0KGxpc3QpO1xuXG5cdFx0XHRcdFx0XHRjb3VudCA9IHBJbnQoZGF0YS5SZXN1bHQuQ291bnQpO1xuXHRcdFx0XHRcdFx0Y291bnQgPSAwIDwgY291bnQgPyBjb3VudCA6IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5jb250YWN0c0NvdW50KGNvdW50KTtcblxuXHRcdFx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveSh0aGlzLmNvbnRhY3RzKCkpO1xuXHRcdFx0XHR0aGlzLmNvbnRhY3RzKGxpc3QpO1xuXG5cdFx0XHRcdHRoaXMuY29udGFjdHMubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRcdHRoaXMudmlld0NsZWFyU2VhcmNoKCcnICE9PSB0aGlzLnNlYXJjaCgpKTtcblx0XHRcdH0sXG5cdFx0XHRvZmZzZXQsXG5cdFx0XHRDT05UQUNUU19QRVJfUEFHRSxcblx0XHRcdHRoaXMuc2VhcmNoKClcblx0XHQpO1xuXHR9XG5cblx0b25CdWlsZChkb20pIHtcblx0XHR0aGlzLm9Db250ZW50VmlzaWJsZSA9ICQoJy5iLWxpc3QtY29udGVudCcsIGRvbSk7XG5cdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUgPSAkKCcuY29udGVudCcsIHRoaXMub0NvbnRlbnRWaXNpYmxlKTtcblxuXHRcdHRoaXMuc2VsZWN0b3IuaW5pdCh0aGlzLm9Db250ZW50VmlzaWJsZSwgdGhpcy5vQ29udGVudFNjcm9sbGFibGUsIEtleVN0YXRlLkNvbnRhY3RMaXN0KTtcblxuXHRcdGtleSgnZGVsZXRlJywgS2V5U3RhdGUuQ29udGFjdExpc3QsICgpID0+IHtcblx0XHRcdHRoaXMuZGVsZXRlQ29tbWFuZCgpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdjLCB3JywgS2V5U3RhdGUuQ29udGFjdExpc3QsICgpID0+IHtcblx0XHRcdHRoaXMubmV3TWVzc2FnZUNvbW1hbmQoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0ZG9tLm9uKCdjbGljaycsICcuZS1wYWdlbmF0b3IgLmUtcGFnZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdGNvbnN0IHBhZ2UgPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0aWYgKHBhZ2UpIHtcblx0XHRcdFx0c2VsZi5jb250YWN0c1BhZ2UocEludChwYWdlLnZhbHVlKSk7XG5cdFx0XHRcdHNlbGYucmVsb2FkQ29udGFjdExpc3QoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuaW5pdFVwbG9hZGVyKCk7XG5cdH1cblxuXHRvblNob3coYkJhY2tUb0NvbXBvc2UsIHNMYXN0Q29tcG9zZUZvY3VzZWRGaWVsZCkge1xuXHRcdHRoaXMuYkJhY2tUb0NvbXBvc2UgPSBpc1VuZChiQmFja1RvQ29tcG9zZSkgPyBmYWxzZSA6ICEhYkJhY2tUb0NvbXBvc2U7XG5cdFx0dGhpcy5zTGFzdENvbXBvc2VGb2N1c2VkRmllbGQgPSBpc1VuZChzTGFzdENvbXBvc2VGb2N1c2VkRmllbGQpID8gJycgOiBzTGFzdENvbXBvc2VGb2N1c2VkRmllbGQ7XG5cblx0XHRyb3V0ZU9mZigpO1xuXHRcdHRoaXMucmVsb2FkQ29udGFjdExpc3QodHJ1ZSk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0cm91dGVPbigpO1xuXG5cdFx0dGhpcy5jdXJyZW50Q29udGFjdChudWxsKTtcblx0XHR0aGlzLmVtcHR5U2VsZWN0aW9uKHRydWUpO1xuXHRcdHRoaXMuc2VhcmNoKCcnKTtcblx0XHR0aGlzLmNvbnRhY3RzQ291bnQoMCk7XG5cblx0XHRkZWxlZ2F0ZVJ1bk9uRGVzdHJveSh0aGlzLmNvbnRhY3RzKCkpO1xuXHRcdHRoaXMuY29udGFjdHMoW10pO1xuXG5cdFx0dGhpcy5zTGFzdENvbXBvc2VGb2N1c2VkRmllbGQgPSAnJztcblxuXHRcdGlmICh0aGlzLmJCYWNrVG9Db21wb3NlKSB7XG5cdFx0XHR0aGlzLmJCYWNrVG9Db21wb3NlID0gZmFsc2U7XG5cblx0XHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpKSB7XG5cdFx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2UnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IENvbnRhY3RzUG9wdXBWaWV3LCBDb250YWN0c1BvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgVU5VU0VEX09QVElPTl9WQUxVRSB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IHRyaW0sIGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciwgZm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IEZvbGRlclN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0ZvbGRlcic7XG5cbmltcG9ydCBQcm9taXNlcyBmcm9tICdQcm9taXNlcy9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0ZvbGRlckNyZWF0ZScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNGb2xkZXJDcmVhdGUnXG59KVxuY2xhc3MgRm9sZGVyQ3JlYXRlVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5mb2xkZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mb2xkZXJOYW1lLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWRQYXJlbnRWYWx1ZSA9IGtvLm9ic2VydmFibGUoVU5VU0VEX09QVElPTl9WQUxVRSk7XG5cblx0XHR0aGlzLnBhcmVudEZvbGRlclNlbGVjdExpc3QgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCB0b3AgPSBbXSxcblx0XHRcdFx0bGlzdCA9IEZvbGRlclN0b3JlLmZvbGRlckxpc3QoKSxcblx0XHRcdFx0ZlJlbmFtZUNhbGxiYWNrID0gKG9JdGVtKSA9PlxuXHRcdFx0XHRcdG9JdGVtID8gKG9JdGVtLmlzU3lzdGVtRm9sZGVyKCkgPyBvSXRlbS5uYW1lKCkgKyAnICcgKyBvSXRlbS5tYW5hZ2VGb2xkZXJTeXN0ZW1OYW1lKCkgOiBvSXRlbS5uYW1lKCkpIDogJyc7XG5cblx0XHRcdHRvcC5wdXNoKFsnJywgJyddKTtcblxuXHRcdFx0bGV0IGZEaXNhYmxlQ2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0aWYgKCcnICE9PSBGb2xkZXJTdG9yZS5uYW1lc3BhY2UpIHtcblx0XHRcdFx0ZkRpc2FibGVDYWxsYmFjayA9IChpdGVtKSA9PiBGb2xkZXJTdG9yZS5uYW1lc3BhY2UgIT09IGl0ZW0uZnVsbE5hbWVSYXcuc3Vic3RyKDAsIEZvbGRlclN0b3JlLm5hbWVzcGFjZS5sZW5ndGgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFtdLCBsaXN0LCBbXSwgdG9wLCBudWxsLCBmRGlzYWJsZUNhbGxiYWNrLCBudWxsLCBmUmVuYW1lQ2FsbGJhY2spO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5kZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgPSBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXI7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5zaW1wbGVGb2xkZXJOYW1lVmFsaWRhdGlvbihzZWxmLmZvbGRlck5hbWUoKSkpXG5cdGNyZWF0ZUZvbGRlckNvbW1hbmQoKSB7XG5cdFx0bGV0IHBhcmVudEZvbGRlck5hbWUgPSB0aGlzLnNlbGVjdGVkUGFyZW50VmFsdWUoKTtcblx0XHRpZiAoJycgPT09IHBhcmVudEZvbGRlck5hbWUgJiYgMSA8IEZvbGRlclN0b3JlLm5hbWVzcGFjZS5sZW5ndGgpIHtcblx0XHRcdHBhcmVudEZvbGRlck5hbWUgPSBGb2xkZXJTdG9yZS5uYW1lc3BhY2Uuc3Vic3RyKDAsIEZvbGRlclN0b3JlLm5hbWVzcGFjZS5sZW5ndGggLSAxKTtcblx0XHR9XG5cblx0XHRnZXRBcHAoKS5mb2xkZXJzUHJvbWlzZXNBY3Rpb25IZWxwZXIoXG5cdFx0XHRQcm9taXNlcy5mb2xkZXJDcmVhdGUodGhpcy5mb2xkZXJOYW1lKCksIHBhcmVudEZvbGRlck5hbWUsIEZvbGRlclN0b3JlLmZvbGRlcnNDcmVhdGluZyksXG5cdFx0XHROb3RpZmljYXRpb24uQ2FudENyZWF0ZUZvbGRlclxuXHRcdCk7XG5cblx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0fVxuXG5cdHNpbXBsZUZvbGRlck5hbWVWYWxpZGF0aW9uKHNOYW1lKSB7XG5cdFx0cmV0dXJuIC9eW15cXFxcL10rJC9nLnRlc3QodHJpbShzTmFtZSkpO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmZvbGRlck5hbWUoJycpO1xuXHRcdHRoaXMuc2VsZWN0ZWRQYXJlbnRWYWx1ZSgnJyk7XG5cdFx0dGhpcy5mb2xkZXJOYW1lLmZvY3VzZWQoZmFsc2UpO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdGlmICghYk1vYmlsZURldmljZSkge1xuXHRcdFx0dGhpcy5mb2xkZXJOYW1lLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEZvbGRlckNyZWF0ZVZpZXcsIEZvbGRlckNyZWF0ZVZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBGaWx0ZXJzQWN0aW9uLCBGaWx0ZXJDb25kaXRpb25GaWVsZCwgRmlsdGVyQ29uZGl0aW9uVHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyLCBkZWxlZ2F0ZVJ1biB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuLCBpbml0T25TdGFydE9yTGFuZ0NoYW5nZSB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IEZpbHRlclN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0ZpbHRlcic7XG5pbXBvcnQgRm9sZGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRm9sZGVyJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0ZpbHRlcicsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNGaWx0ZXInXG59KVxuY2xhc3MgRmlsdGVyUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmlzTmV3ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMubW9kdWxlcyA9IEZpbHRlclN0b3JlLm1vZHVsZXM7XG5cblx0XHR0aGlzLmZUcnVlQ2FsbGJhY2sgPSBudWxsO1xuXHRcdHRoaXMuZmlsdGVyID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdHRoaXMuYWxsb3dNYXJrQXNSZWFkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciA9IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcjtcblx0XHR0aGlzLmZvbGRlclNlbGVjdExpc3QgPSBGb2xkZXJTdG9yZS5mb2xkZXJNZW51Rm9yRmlsdGVycztcblx0XHR0aGlzLnNlbGVjdGVkRm9sZGVyVmFsdWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWRGb2xkZXJWYWx1ZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZmlsdGVyKCkpIHtcblx0XHRcdFx0dGhpcy5maWx0ZXIoKS5hY3Rpb25WYWx1ZS5lcnJvcihmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmFjdGlvblR5cGVPcHRpb25zID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmZpZWxkT3B0aW9ucyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy50eXBlT3B0aW9ucyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy50eXBlT3B0aW9uc1NpemUgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0aW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UoXy5iaW5kKHRoaXMucG9wdWxhdGVPcHRpb25zLCB0aGlzKSk7XG5cblx0XHR0aGlzLm1vZHVsZXMuc3Vic2NyaWJlKHRoaXMucG9wdWxhdGVPcHRpb25zLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0c2F2ZUZpbHRlckNvbW1hbmQoKSB7XG5cdFx0aWYgKHRoaXMuZmlsdGVyKCkpIHtcblx0XHRcdGlmIChGaWx0ZXJzQWN0aW9uLk1vdmVUbyA9PT0gdGhpcy5maWx0ZXIoKS5hY3Rpb25UeXBlKCkpIHtcblx0XHRcdFx0dGhpcy5maWx0ZXIoKS5hY3Rpb25WYWx1ZSh0aGlzLnNlbGVjdGVkRm9sZGVyVmFsdWUoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghdGhpcy5maWx0ZXIoKS52ZXJpZnkoKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmZUcnVlQ2FsbGJhY2spIHtcblx0XHRcdFx0dGhpcy5mVHJ1ZUNhbGxiYWNrKHRoaXMuZmlsdGVyKCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRkZWxlZ2F0ZVJ1bih0aGlzLCAnY2xvc2VDb21tYW5kJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwb3B1bGF0ZU9wdGlvbnMoKSB7XG5cdFx0dGhpcy5hY3Rpb25UeXBlT3B0aW9ucyhbXSk7XG5cblx0XHQvLyB0aGlzLmFjdGlvblR5cGVPcHRpb25zLnB1c2goeydpZCc6IEZpbHRlcnNBY3Rpb24uTm9uZSxcblx0XHQvLyAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX0FDVElPTl9OT05FJyl9KTtcblxuXHRcdGNvbnN0IG1vZHVsZXMgPSB0aGlzLm1vZHVsZXMoKTtcblx0XHRpZiAobW9kdWxlcykge1xuXHRcdFx0aWYgKG1vZHVsZXMubWFya2FzcmVhZCkge1xuXHRcdFx0XHR0aGlzLmFsbG93TWFya0FzUmVhZCh0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1vZHVsZXMubW92ZXRvKSB7XG5cdFx0XHRcdHRoaXMuYWN0aW9uVHlwZU9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0J2lkJzogRmlsdGVyc0FjdGlvbi5Nb3ZlVG8sXG5cdFx0XHRcdFx0J25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9BQ1RJT05fTU9WRV9UTycpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobW9kdWxlcy5yZWRpcmVjdCkge1xuXHRcdFx0XHR0aGlzLmFjdGlvblR5cGVPcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdCdpZCc6IEZpbHRlcnNBY3Rpb24uRm9yd2FyZCxcblx0XHRcdFx0XHQnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX0FDVElPTl9GT1JXQVJEX1RPJylcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtb2R1bGVzLnJlamVjdCkge1xuXHRcdFx0XHR0aGlzLmFjdGlvblR5cGVPcHRpb25zLnB1c2goeyAnaWQnOiBGaWx0ZXJzQWN0aW9uLlJlamVjdCwgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9BQ1RJT05fUkVKRUNUJykgfSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtb2R1bGVzLnZhY2F0aW9uKSB7XG5cdFx0XHRcdHRoaXMuYWN0aW9uVHlwZU9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0J2lkJzogRmlsdGVyc0FjdGlvbi5WYWNhdGlvbixcblx0XHRcdFx0XHQnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX0FDVElPTl9WQUNBVElPTl9NRVNTQUdFJylcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5hY3Rpb25UeXBlT3B0aW9ucy5wdXNoKHsgJ2lkJzogRmlsdGVyc0FjdGlvbi5EaXNjYXJkLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX0FDVElPTl9ESVNDQVJEJykgfSk7XG5cblx0XHR0aGlzLmZpZWxkT3B0aW9ucyhbXG5cdFx0XHR7ICdpZCc6IEZpbHRlckNvbmRpdGlvbkZpZWxkLkZyb20sICduYW1lJzogaTE4bignUE9QVVBTX0ZJTFRFUi9TRUxFQ1RfRklFTERfRlJPTScpIH0sXG5cdFx0XHR7ICdpZCc6IEZpbHRlckNvbmRpdGlvbkZpZWxkLlJlY2lwaWVudCwgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9GSUVMRF9SRUNJUElFTlRTJykgfSxcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uRmllbGQuU3ViamVjdCwgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9GSUVMRF9TVUJKRUNUJykgfSxcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uRmllbGQuU2l6ZSwgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9GSUVMRF9TSVpFJykgfSxcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uRmllbGQuSGVhZGVyLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX0ZJRUxEX0hFQURFUicpIH1cblx0XHRdKTtcblxuXHRcdHRoaXMudHlwZU9wdGlvbnMoW1xuXHRcdFx0eyAnaWQnOiBGaWx0ZXJDb25kaXRpb25UeXBlLkNvbnRhaW5zLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX1RZUEVfQ09OVEFJTlMnKSB9LFxuXHRcdFx0eyAnaWQnOiBGaWx0ZXJDb25kaXRpb25UeXBlLk5vdENvbnRhaW5zLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX1RZUEVfTk9UX0NPTlRBSU5TJykgfSxcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uVHlwZS5FcXVhbFRvLCAnbmFtZSc6IGkxOG4oJ1BPUFVQU19GSUxURVIvU0VMRUNUX1RZUEVfRVFVQUxfVE8nKSB9LFxuXHRcdFx0eyAnaWQnOiBGaWx0ZXJDb25kaXRpb25UeXBlLk5vdEVxdWFsVG8sICduYW1lJzogaTE4bignUE9QVVBTX0ZJTFRFUi9TRUxFQ1RfVFlQRV9OT1RfRVFVQUxfVE8nKSB9XG5cdFx0XSk7XG5cblx0XHRpZiAobW9kdWxlcyAmJiBtb2R1bGVzLnJlZ2V4KSB7XG5cdFx0XHR0aGlzLnR5cGVPcHRpb25zLnB1c2goeyAnaWQnOiBGaWx0ZXJDb25kaXRpb25UeXBlLlJlZ2V4LCAnbmFtZSc6ICdSZWdleCcgfSk7XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlT3B0aW9uc1NpemUoW1xuXHRcdFx0eyAnaWQnOiBGaWx0ZXJDb25kaXRpb25UeXBlLk92ZXIsICduYW1lJzogaTE4bignUE9QVVBTX0ZJTFRFUi9TRUxFQ1RfVFlQRV9PVkVSJykgfSxcblx0XHRcdHsgJ2lkJzogRmlsdGVyQ29uZGl0aW9uVHlwZS5VbmRlciwgJ25hbWUnOiBpMThuKCdQT1BVUFNfRklMVEVSL1NFTEVDVF9UWVBFX1VOREVSJykgfVxuXHRcdF0pO1xuXHR9XG5cblx0cmVtb3ZlQ29uZGl0aW9uKG9Db25kaXRpb25Ub0RlbGV0ZSkge1xuXHRcdGlmICh0aGlzLmZpbHRlcigpKSB7XG5cdFx0XHR0aGlzLmZpbHRlcigpLnJlbW92ZUNvbmRpdGlvbihvQ29uZGl0aW9uVG9EZWxldGUpO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5pc05ldyh0cnVlKTtcblxuXHRcdHRoaXMuZlRydWVDYWxsYmFjayA9IG51bGw7XG5cdFx0dGhpcy5maWx0ZXIobnVsbCk7XG5cdH1cblxuXHRvblNob3cob0ZpbHRlciwgZlRydWVDYWxsYmFjaywgYkVkaXQpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdHRoaXMuZlRydWVDYWxsYmFjayA9IGZUcnVlQ2FsbGJhY2s7XG5cdFx0dGhpcy5maWx0ZXIob0ZpbHRlcik7XG5cblx0XHRpZiAob0ZpbHRlcikge1xuXHRcdFx0dGhpcy5zZWxlY3RlZEZvbGRlclZhbHVlKG9GaWx0ZXIuYWN0aW9uVmFsdWUoKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5pc05ldyghYkVkaXQpO1xuXG5cdFx0aWYgKCFiRWRpdCAmJiBvRmlsdGVyKSB7XG5cdFx0XHRvRmlsdGVyLm5hbWUuZm9jdXNlZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKHRoaXMuaXNOZXcoKSAmJiB0aGlzLmZpbHRlcigpICYmICFiTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHR0aGlzLmZpbHRlcigpLm5hbWUuZm9jdXNlZCh0cnVlKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgRmlsdGVyUG9wdXBWaWV3LCBGaWx0ZXJQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHFyIGZyb20gJ3FyJztcblxuaW1wb3J0IHsgQ2FwYSwgU3RvcmFnZVJlc3VsdFR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcFN0cmluZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL1R3b0ZhY3RvckNvbmZpZ3VyYXRpb24nLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzVHdvRmFjdG9yQ29uZmlndXJhdGlvbidcbn0pXG5jbGFzcyBUd29GYWN0b3JDb25maWd1cmF0aW9uUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmxvY2sgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvciA9IFNldHRpbmdzLmNhcGEoQ2FwYS5Ud29GYWN0b3IpO1xuXG5cdFx0dGhpcy5wcm9jZXNzaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jbGVhcmluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2VjcmV0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnZpZXdVc2VyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50d29GYWN0b3JTdGF0dXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudHdvRmFjdG9yVGVzdGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnZpZXdTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdCYWNrdXBDb2RlcyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld1VybFRpdGxlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3VXJsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnZpZXdFbmFibGVfID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnZpZXdFbmFibGUgPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0aGlzLnZpZXdFbmFibGVfLFxuXHRcdFx0d3JpdGU6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHR2YWx1ZSA9ICEhdmFsdWU7XG5cdFx0XHRcdGlmICh2YWx1ZSAmJiB0aGlzLnR3b0ZhY3RvclRlc3RlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy52aWV3RW5hYmxlXyh2YWx1ZSk7XG5cdFx0XHRcdFx0UmVtb3RlLmVuYWJsZVR3b0ZhY3RvcigocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyAhPT0gcmVzdWx0IHx8ICFkYXRhIHx8ICFkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnZpZXdFbmFibGVfKGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCB0cnVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnZpZXdFbmFibGVfKHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRSZW1vdGUuZW5hYmxlVHdvRmFjdG9yKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzICE9PSByZXN1bHQgfHwgIWRhdGEgfHwgIWRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMudmlld0VuYWJsZV8oZmFsc2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy52aWV3VHdvRmFjdG9yRW5hYmxlVG9vbHRpcCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cdFx0XHRyZXR1cm4gdGhpcy50d29GYWN0b3JUZXN0ZWQoKSB8fCB0aGlzLnZpZXdFbmFibGVfKClcblx0XHRcdFx0PyAnJ1xuXHRcdFx0XHQ6IGkxOG4oJ1BPUFVQU19UV09fRkFDVE9SX0NGRy9UV09fRkFDVE9SX1NFQ1JFVF9URVNUX0JFRk9SRV9ERVNDJyk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZpZXdUd29GYWN0b3JTdGF0dXMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIGkxOG4oXG5cdFx0XHRcdHRoaXMudHdvRmFjdG9yU3RhdHVzKClcblx0XHRcdFx0XHQ/ICdQT1BVUFNfVFdPX0ZBQ1RPUl9DRkcvVFdPX0ZBQ1RPUl9TRUNSRVRfQ09ORklHVVJFRF9ERVNDJ1xuXHRcdFx0XHRcdDogJ1BPUFVQU19UV09fRkFDVE9SX0NGRy9UV09fRkFDVE9SX1NFQ1JFVF9OT1RfQ09ORklHVVJFRF9ERVNDJ1xuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdHRoaXMudHdvRmFjdG9yQWxsb3dlZEVuYWJsZSA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMudmlld0VuYWJsZSgpIHx8IHRoaXMudHdvRmFjdG9yVGVzdGVkKCkpO1xuXG5cdFx0dGhpcy5vblJlc3VsdCA9IF8uYmluZCh0aGlzLm9uUmVzdWx0LCB0aGlzKTtcblx0XHR0aGlzLm9uU2hvd1NlY3JldFJlc3VsdCA9IF8uYmluZCh0aGlzLm9uU2hvd1NlY3JldFJlc3VsdCwgdGhpcyk7XG5cdH1cblxuXHRzaG93U2VjcmV0KCkge1xuXHRcdHRoaXMuc2VjcmV0aW5nKHRydWUpO1xuXHRcdFJlbW90ZS5zaG93VHdvRmFjdG9yU2VjcmV0KHRoaXMub25TaG93U2VjcmV0UmVzdWx0KTtcblx0fVxuXG5cdGhpZGVTZWNyZXQoKSB7XG5cdFx0dGhpcy52aWV3U2VjcmV0KCcnKTtcblx0XHR0aGlzLnZpZXdCYWNrdXBDb2RlcygnJyk7XG5cdFx0dGhpcy52aWV3VXJsVGl0bGUoJycpO1xuXHRcdHRoaXMudmlld1VybCgnJyk7XG5cdH1cblxuXHRjcmVhdGVUd29GYWN0b3IoKSB7XG5cdFx0dGhpcy5wcm9jZXNzaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jcmVhdGVUd29GYWN0b3IodGhpcy5vblJlc3VsdCk7XG5cdH1cblxuXHRsb2dvdXQoKSB7XG5cdFx0Z2V0QXBwKCkubG9nb3V0KCk7XG5cdH1cblxuXHR0ZXN0VHdvRmFjdG9yKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL1R3b0ZhY3RvclRlc3QnKSwgW3RoaXMudHdvRmFjdG9yVGVzdGVkXSk7XG5cdH1cblxuXHRjbGVhclR3b0ZhY3RvcigpIHtcblx0XHR0aGlzLnZpZXdTZWNyZXQoJycpO1xuXHRcdHRoaXMudmlld0JhY2t1cENvZGVzKCcnKTtcblx0XHR0aGlzLnZpZXdVcmxUaXRsZSgnJyk7XG5cdFx0dGhpcy52aWV3VXJsKCcnKTtcblxuXHRcdHRoaXMudHdvRmFjdG9yVGVzdGVkKGZhbHNlKTtcblxuXHRcdHRoaXMuY2xlYXJpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLmNsZWFyVHdvRmFjdG9yKHRoaXMub25SZXN1bHQpO1xuXHR9XG5cblx0b25TaG93KGJMb2NrKSB7XG5cdFx0dGhpcy5sb2NrKCEhYkxvY2spO1xuXG5cdFx0dGhpcy52aWV3U2VjcmV0KCcnKTtcblx0XHR0aGlzLnZpZXdCYWNrdXBDb2RlcygnJyk7XG5cdFx0dGhpcy52aWV3VXJsVGl0bGUoJycpO1xuXHRcdHRoaXMudmlld1VybCgnJyk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0aWYgKHRoaXMubG9jaygpKSB7XG5cdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0UXIoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCdvdHBhdXRoOi8vdG90cC8nICtcblx0XHRcdHdpbmRvdy5lbmNvZGVVUklDb21wb25lbnQodGhpcy52aWV3VXNlcigpKSArXG5cdFx0XHQnP3NlY3JldD0nICtcblx0XHRcdHdpbmRvdy5lbmNvZGVVUklDb21wb25lbnQodGhpcy52aWV3U2VjcmV0KCkpICtcblx0XHRcdCcmaXNzdWVyPScgK1xuXHRcdFx0d2luZG93LmVuY29kZVVSSUNvbXBvbmVudCgnJylcblx0XHQpO1xuXHR9XG5cblx0b25SZXN1bHQoc1Jlc3VsdCwgb0RhdGEpIHtcblx0XHR0aGlzLnByb2Nlc3NpbmcoZmFsc2UpO1xuXHRcdHRoaXMuY2xlYXJpbmcoZmFsc2UpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEgJiYgb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHR0aGlzLnZpZXdVc2VyKHBTdHJpbmcob0RhdGEuUmVzdWx0LlVzZXIpKTtcblx0XHRcdHRoaXMudmlld0VuYWJsZV8oISFvRGF0YS5SZXN1bHQuRW5hYmxlKTtcblx0XHRcdHRoaXMudHdvRmFjdG9yU3RhdHVzKCEhb0RhdGEuUmVzdWx0LklzU2V0KTtcblx0XHRcdHRoaXMudHdvRmFjdG9yVGVzdGVkKCEhb0RhdGEuUmVzdWx0LlRlc3RlZCk7XG5cblx0XHRcdHRoaXMudmlld1NlY3JldChwU3RyaW5nKG9EYXRhLlJlc3VsdC5TZWNyZXQpKTtcblx0XHRcdHRoaXMudmlld0JhY2t1cENvZGVzKHBTdHJpbmcob0RhdGEuUmVzdWx0LkJhY2t1cENvZGVzKS5yZXBsYWNlKC9bXFxzXSsvZywgJyAgJykpO1xuXG5cdFx0XHR0aGlzLnZpZXdVcmxUaXRsZShwU3RyaW5nKG9EYXRhLlJlc3VsdC5VcmxUaXRsZSkpO1xuXHRcdFx0dGhpcy52aWV3VXJsKHFyLnRvRGF0YVVSTCh7IGxldmVsOiAnTScsIHNpemU6IDgsIHZhbHVlOiB0aGlzLmdldFFyKCkgfSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnZpZXdVc2VyKCcnKTtcblx0XHRcdHRoaXMudmlld0VuYWJsZV8oZmFsc2UpO1xuXHRcdFx0dGhpcy50d29GYWN0b3JTdGF0dXMoZmFsc2UpO1xuXHRcdFx0dGhpcy50d29GYWN0b3JUZXN0ZWQoZmFsc2UpO1xuXG5cdFx0XHR0aGlzLnZpZXdTZWNyZXQoJycpO1xuXHRcdFx0dGhpcy52aWV3QmFja3VwQ29kZXMoJycpO1xuXHRcdFx0dGhpcy52aWV3VXJsVGl0bGUoJycpO1xuXHRcdFx0dGhpcy52aWV3VXJsKCcnKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3dTZWNyZXRSZXN1bHQocmVzdWx0LCBkYXRhKSB7XG5cdFx0dGhpcy5zZWNyZXRpbmcoZmFsc2UpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHR0aGlzLnZpZXdTZWNyZXQocFN0cmluZyhkYXRhLlJlc3VsdC5TZWNyZXQpKTtcblx0XHRcdHRoaXMudmlld1VybFRpdGxlKHBTdHJpbmcoZGF0YS5SZXN1bHQuVXJsVGl0bGUpKTtcblx0XHRcdHRoaXMudmlld1VybChxci50b0RhdGFVUkwoeyBsZXZlbDogJ00nLCBzaXplOiA2LCB2YWx1ZTogdGhpcy5nZXRRcigpIH0pKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy52aWV3U2VjcmV0KCcnKTtcblx0XHRcdHRoaXMudmlld1VybFRpdGxlKCcnKTtcblx0XHRcdHRoaXMudmlld1VybCgnJyk7XG5cdFx0fVxuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRpZiAodGhpcy5jYXBhVHdvRmFjdG9yKSB7XG5cdFx0XHR0aGlzLnByb2Nlc3NpbmcodHJ1ZSk7XG5cdFx0XHRSZW1vdGUuZ2V0VHdvRmFjdG9yKHRoaXMub25SZXN1bHQpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBUd29GYWN0b3JDb25maWd1cmF0aW9uUG9wdXBWaWV3LCBUd29GYWN0b3JDb25maWd1cmF0aW9uUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgdHJpbSwgaXNOb3JtYWwgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgSHRtbEVkaXRvciB9IGZyb20gJ0NvbW1vbi9IdG1sRWRpdG9yJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9UZW1wbGF0ZScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNUZW1wbGF0ZSdcbn0pXG5jbGFzcyBUZW1wbGF0ZVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5lZGl0b3IgPSBudWxsO1xuXHRcdHRoaXMuc2lnbmF0dXJlRG9tID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdHRoaXMuaWQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMubmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubmFtZS5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubmFtZS5mb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5ib2R5ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5ib2R5LmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmJvZHkuZXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMubmFtZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5uYW1lLmVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYm9keS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5ib2R5LmVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdGFkZFRlbXBsYXRlQ29tbWFuZCgpIHtcblx0XHR0aGlzLnBvcHVsYXRlQm9keUZyb21FZGl0b3IoKTtcblxuXHRcdHRoaXMubmFtZS5lcnJvcignJyA9PT0gdHJpbSh0aGlzLm5hbWUoKSkpO1xuXHRcdHRoaXMuYm9keS5lcnJvcignJyA9PT0gdHJpbSh0aGlzLmJvZHkoKSkgfHwgJzpIVE1MOicgPT09IHRyaW0odGhpcy5ib2R5KCkpKTtcblxuXHRcdGlmICh0aGlzLm5hbWUuZXJyb3IoKSB8fCB0aGlzLmJvZHkuZXJyb3IoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCh0cnVlKTtcblxuXHRcdFJlbW90ZS50ZW1wbGF0ZVNldHVwKFxuXHRcdFx0KHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEpIHtcblx0XHRcdFx0XHRpZiAoZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdGdldEFwcCgpLnRlbXBsYXRlcygpO1xuXHRcdFx0XHRcdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLlVua25vd25FcnJvcikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5pZCgpLFxuXHRcdFx0dGhpcy5uYW1lKCksXG5cdFx0XHR0aGlzLmJvZHkoKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5pZCgnJyk7XG5cblx0XHR0aGlzLm5hbWUoJycpO1xuXHRcdHRoaXMubmFtZS5lcnJvcihmYWxzZSk7XG5cblx0XHR0aGlzLmJvZHkoJycpO1xuXHRcdHRoaXMuYm9keS5sb2FkaW5nKGZhbHNlKTtcblx0XHR0aGlzLmJvZHkuZXJyb3IoZmFsc2UpO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHR0aGlzLnN1Ym1pdEVycm9yKCcnKTtcblxuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dGhpcy5lZGl0b3Iuc2V0UGxhaW4oJycsIGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHRwb3B1bGF0ZUJvZHlGcm9tRWRpdG9yKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dGhpcy5ib2R5KHRoaXMuZWRpdG9yLmdldERhdGFXaXRoSHRtbE1hcmsoKSk7XG5cdFx0fVxuXHR9XG5cblx0ZWRpdG9yU2V0Qm9keShzQm9keSkge1xuXHRcdGlmICghdGhpcy5lZGl0b3IgJiYgdGhpcy5zaWduYXR1cmVEb20oKSkge1xuXHRcdFx0dGhpcy5lZGl0b3IgPSBuZXcgSHRtbEVkaXRvcihcblx0XHRcdFx0dGhpcy5zaWduYXR1cmVEb20oKSxcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucG9wdWxhdGVCb2R5RnJvbUVkaXRvcigpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0SHRtbE9yUGxhaW4oc0JvZHkpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVkaXRvci5zZXRIdG1sT3JQbGFpbihzQm9keSk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KHRlbXBsYXRlKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cblx0XHRpZiAodGVtcGxhdGUgJiYgdGVtcGxhdGUuaWQpIHtcblx0XHRcdHRoaXMuaWQodGVtcGxhdGUuaWQpO1xuXHRcdFx0dGhpcy5uYW1lKHRlbXBsYXRlLm5hbWUpO1xuXHRcdFx0dGhpcy5ib2R5KHRlbXBsYXRlLmJvZHkpO1xuXG5cdFx0XHRpZiAodGVtcGxhdGUucG9wdWxhdGVkKSB7XG5cdFx0XHRcdHRoaXMuZWRpdG9yU2V0Qm9keSh0aGlzLmJvZHkoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmJvZHkubG9hZGluZyh0cnVlKTtcblx0XHRcdFx0dGhpcy5ib2R5LmVycm9yKGZhbHNlKTtcblxuXHRcdFx0XHRSZW1vdGUudGVtcGxhdGVHZXRCeUlkKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0XHR0aGlzLmJvZHkubG9hZGluZyhmYWxzZSk7XG5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiZcblx0XHRcdFx0XHRcdGRhdGEgJiZcblx0XHRcdFx0XHRcdGRhdGEuUmVzdWx0ICYmXG5cdFx0XHRcdFx0XHQnT2JqZWN0L1RlbXBsYXRlJyA9PT0gZGF0YS5SZXN1bHRbJ0BPYmplY3QnXSAmJlxuXHRcdFx0XHRcdFx0aXNOb3JtYWwoZGF0YS5SZXN1bHQuQm9keSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRlbXBsYXRlLmJvZHkgPSBkYXRhLlJlc3VsdC5Cb2R5O1xuXHRcdFx0XHRcdFx0dGVtcGxhdGUucG9wdWxhdGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0dGhpcy5ib2R5KHRlbXBsYXRlLmJvZHkpO1xuXHRcdFx0XHRcdFx0dGhpcy5ib2R5LmVycm9yKGZhbHNlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5ib2R5KCcnKTtcblx0XHRcdFx0XHRcdHRoaXMuYm9keS5lcnJvcih0cnVlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLmVkaXRvclNldEJvZHkodGhpcy5ib2R5KCkpO1xuXHRcdFx0XHR9LCB0aGlzLmlkKCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVkaXRvclNldEJvZHkoJycpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLm5hbWUuZm9jdXModHJ1ZSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgVGVtcGxhdGVQb3B1cFZpZXcsIFRlbXBsYXRlUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsIi8qIVxuICBDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcbiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0XHRpZiAoYXJnLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBpbm5lciA9IGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHRcdFx0XHRpZiAoaW5uZXIpIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChpbm5lcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGlmIChhcmcudG9TdHJpbmcgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpIHtcblx0XHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiLyohIGxvemFkLmpzIC0gdjEuMTYuMCAtIDIwMjAtMDktMDZcbiogaHR0cHM6Ly9naXRodWIuY29tL0Fwb29ydlNheGVuYS9sb3phZC5qc1xuKiBDb3B5cmlnaHQgKGMpIDIwMjAgQXBvb3J2IFNheGVuYTsgTGljZW5zZWQgTUlUICovXG4hZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKTp0LmxvemFkPWUoKX0odGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO1xuLyoqXG4gICAqIERldGVjdCBJRSBicm93c2VyXG4gICAqIEBjb25zdCB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovdmFyIGc9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5kb2N1bWVudE1vZGUsZj17cm9vdE1hcmdpbjpcIjBweFwiLHRocmVzaG9sZDowLGxvYWQ6ZnVuY3Rpb24odCl7aWYoXCJwaWN0dXJlXCI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe3ZhciBlPXQucXVlcnlTZWxlY3RvcihcImltZ1wiKSxyPSExO251bGw9PT1lJiYoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpLHI9ITApLGcmJnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1pZXNyY1wiKSYmKGUuc3JjPXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1pZXNyY1wiKSksdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWFsdFwiKSYmKGUuYWx0PXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hbHRcIikpLHImJnQuYXBwZW5kKGUpfWlmKFwidmlkZW9cIj09PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmIXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1zcmNcIikmJnQuY2hpbGRyZW4pe2Zvcih2YXIgYT10LmNoaWxkcmVuLG89dm9pZCAwLGk9MDtpPD1hLmxlbmd0aC0xO2krKykobz1hW2ldLmdldEF0dHJpYnV0ZShcImRhdGEtc3JjXCIpKSYmKGFbaV0uc3JjPW8pO3QubG9hZCgpfXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1wb3N0ZXJcIikmJih0LnBvc3Rlcj10LmdldEF0dHJpYnV0ZShcImRhdGEtcG9zdGVyXCIpKSx0LmdldEF0dHJpYnV0ZShcImRhdGEtc3JjXCIpJiYodC5zcmM9dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXNyY1wiKSksdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXNyY3NldFwiKSYmdC5zZXRBdHRyaWJ1dGUoXCJzcmNzZXRcIix0LmdldEF0dHJpYnV0ZShcImRhdGEtc3Jjc2V0XCIpKTt2YXIgbj1cIixcIjtpZih0LmdldEF0dHJpYnV0ZShcImRhdGEtYmFja2dyb3VuZC1kZWxpbWl0ZXJcIikmJihuPXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1iYWNrZ3JvdW5kLWRlbGltaXRlclwiKSksdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWJhY2tncm91bmQtaW1hZ2VcIikpdC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9XCJ1cmwoJ1wiK3QuZ2V0QXR0cmlidXRlKFwiZGF0YS1iYWNrZ3JvdW5kLWltYWdlXCIpLnNwbGl0KG4pLmpvaW4oXCInKSx1cmwoJ1wiKStcIicpXCI7ZWxzZSBpZih0LmdldEF0dHJpYnV0ZShcImRhdGEtYmFja2dyb3VuZC1pbWFnZS1zZXRcIikpe3ZhciBkPXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1iYWNrZ3JvdW5kLWltYWdlLXNldFwiKS5zcGxpdChuKSx1PWRbMF0uc3Vic3RyKDAsZFswXS5pbmRleE9mKFwiIFwiKSl8fGRbMF07Ly8gU3Vic3RyaW5nIGJlZm9yZSAuLi4gMXhcbnU9LTE9PT11LmluZGV4T2YoXCJ1cmwoXCIpP1widXJsKFwiK3UrXCIpXCI6dSwxPT09ZC5sZW5ndGg/dC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9dTp0LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsKHQuZ2V0QXR0cmlidXRlKFwic3R5bGVcIil8fFwiXCIpK1wiYmFja2dyb3VuZC1pbWFnZTogXCIrdStcIjsgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1pbWFnZS1zZXQoXCIrZCtcIik7IGJhY2tncm91bmQtaW1hZ2U6IGltYWdlLXNldChcIitkK1wiKVwiKX10LmdldEF0dHJpYnV0ZShcImRhdGEtdG9nZ2xlLWNsYXNzXCIpJiZ0LmNsYXNzTGlzdC50b2dnbGUodC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRvZ2dsZS1jbGFzc1wiKSl9LGxvYWRlZDpmdW5jdGlvbigpe319O2Z1bmN0aW9uIEEodCl7dC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWxvYWRlZFwiLCEwKX12YXIgbT1mdW5jdGlvbih0KXtyZXR1cm5cInRydWVcIj09PXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1sb2FkZWRcIil9LHY9ZnVuY3Rpb24odCl7dmFyIGU9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmRvY3VtZW50O3JldHVybiB0IGluc3RhbmNlb2YgRWxlbWVudD9bdF06dCBpbnN0YW5jZW9mIE5vZGVMaXN0P3Q6ZS5xdWVyeVNlbGVjdG9yQWxsKHQpfTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhLG89MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlwiLmxvemFkXCIsdD0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sZT1PYmplY3QuYXNzaWduKHt9LGYsdCksaT1lLnJvb3Qsbj1lLnJvb3RNYXJnaW4sZD1lLnRocmVzaG9sZCx1PWUubG9hZCxnPWUubG9hZGVkLHM9dm9pZCAwO1widW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlciYmKHM9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChyPXUsYT1nLGZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpeygwPHQuaW50ZXJzZWN0aW9uUmF0aW98fHQuaXNJbnRlcnNlY3RpbmcpJiYoZS51bm9ic2VydmUodC50YXJnZXQpLG0odC50YXJnZXQpfHwocih0LnRhcmdldCksQSh0LnRhcmdldCksYSh0LnRhcmdldCkpKX0pfSkse3Jvb3Q6aSxyb290TWFyZ2luOm4sdGhyZXNob2xkOmR9KSk7Zm9yKHZhciBjLGw9dihvLGkpLGI9MDtiPGwubGVuZ3RoO2IrKykoYz1sW2JdKS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBsYWNlaG9sZGVyLWJhY2tncm91bmRcIikmJihjLnN0eWxlLmJhY2tncm91bmQ9Yy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBsYWNlaG9sZGVyLWJhY2tncm91bmRcIikpO3JldHVybntvYnNlcnZlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXYobyxpKSxlPTA7ZTx0Lmxlbmd0aDtlKyspbSh0W2VdKXx8KHM/cy5vYnNlcnZlKHRbZV0pOih1KHRbZV0pLEEodFtlXSksZyh0W2VdKSkpfSx0cmlnZ2VyTG9hZDpmdW5jdGlvbih0KXttKHQpfHwodSh0KSxBKHQpLGcodCkpfSxvYnNlcnZlcjpzfX19KTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcblxuY2xhc3MgQ29va2llRHJpdmVyIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHsqfSBkYXRhXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0c2V0KGtleSwgZGF0YSkge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZSxcblx0XHRcdHN0b3JhZ2VSZXN1bHQgPSBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHN0b3JhZ2VSZXN1bHQgPSBDb29raWVzLmdldEpTT04oQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FKTtcblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHQoc3RvcmFnZVJlc3VsdCB8fCAoc3RvcmFnZVJlc3VsdCA9IHt9KSlba2V5XSA9IGRhdGE7XG5cblx0XHR0cnkge1xuXHRcdFx0Q29va2llcy5zZXQoQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FLCBzdG9yYWdlUmVzdWx0LCB7XG5cdFx0XHRcdGV4cGlyZXM6IDMwXG5cdFx0XHR9KTtcblxuXHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRnZXQoa2V5KSB7XG5cdFx0bGV0IHJlc3VsdCA9IG51bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc3RvcmFnZVJlc3VsdCA9IENvb2tpZXMuZ2V0SlNPTihDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUpO1xuXHRcdFx0cmVzdWx0ID0gc3RvcmFnZVJlc3VsdCAmJiAhaXNVbmQoc3RvcmFnZVJlc3VsdFtrZXldKSA/IHN0b3JhZ2VSZXN1bHRba2V5XSA6IG51bGw7XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBzdXBwb3J0ZWQoKSB7XG5cdFx0cmV0dXJuICEhKHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci5jb29raWVFbmFibGVkKTtcblx0fVxufVxuXG5leHBvcnQgeyBDb29raWVEcml2ZXIsIENvb2tpZURyaXZlciBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpc1N0b3JhZ2VTdXBwb3J0ZWQgfSBmcm9tICdTdG9yYWdlL1JhaW5Mb29wJztcbmltcG9ydCB7IENMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuXG5jbGFzcyBMb2NhbFN0b3JhZ2VEcml2ZXIge1xuXHRzID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnMgPSB3aW5kb3cubG9jYWxTdG9yYWdlIHx8IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0geyp9IGRhdGFcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRzZXQoa2V5LCBkYXRhKSB7XG5cdFx0aWYgKCF0aGlzLnMpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRsZXQgc3RvcmFnZVJlc3VsdCA9IG51bGw7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHN0b3JhZ2VWYWx1ZSA9IHRoaXMucy5nZXRJdGVtKENMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSkgfHwgbnVsbDtcblx0XHRcdHN0b3JhZ2VSZXN1bHQgPSBudWxsID09PSBzdG9yYWdlVmFsdWUgPyBudWxsIDogd2luZG93LkpTT04ucGFyc2Uoc3RvcmFnZVZhbHVlKTtcblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHQoc3RvcmFnZVJlc3VsdCB8fCAoc3RvcmFnZVJlc3VsdCA9IHt9KSlba2V5XSA9IGRhdGE7XG5cblx0XHR0cnkge1xuXHRcdFx0dGhpcy5zLnNldEl0ZW0oQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FLCB3aW5kb3cuSlNPTi5zdHJpbmdpZnkoc3RvcmFnZVJlc3VsdCkpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHJldHVybnMgeyp9XG5cdCAqL1xuXHRnZXQoa2V5KSB7XG5cdFx0aWYgKCF0aGlzLnMpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzdG9yYWdlVmFsdWUgPSB0aGlzLnMuZ2V0SXRlbShDTElFTlRfU0lERV9TVE9SQUdFX0lOREVYX05BTUUpIHx8IG51bGwsXG5cdFx0XHRcdHN0b3JhZ2VSZXN1bHQgPSBudWxsID09PSBzdG9yYWdlVmFsdWUgPyBudWxsIDogd2luZG93LkpTT04ucGFyc2Uoc3RvcmFnZVZhbHVlKTtcblxuXHRcdFx0cmV0dXJuIHN0b3JhZ2VSZXN1bHQgJiYgIWlzVW5kKHN0b3JhZ2VSZXN1bHRba2V5XSkgPyBzdG9yYWdlUmVzdWx0W2tleV0gOiBudWxsO1xuXHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIHN1cHBvcnRlZCgpIHtcblx0XHRyZXR1cm4gaXNTdG9yYWdlU3VwcG9ydGVkKCdsb2NhbFN0b3JhZ2UnKTtcblx0fVxufVxuXG5leHBvcnQgeyBMb2NhbFN0b3JhZ2VEcml2ZXIsIExvY2FsU3RvcmFnZURyaXZlciBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IEZvbGRlclR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaXNQb3NOdW1lcmljIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG4sIHRyaWdnZXIgYXMgdHJhbnNsYXRvclRyaWdnZXIgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBnZXRGb2xkZXJJbmJveE5hbWUgfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuaW1wb3J0ICogYXMgRXZlbnRzIGZyb20gJ0NvbW1vbi9FdmVudHMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIEZvbGRlck1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCdGb2xkZXJNb2RlbCcpO1xuXG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mdWxsTmFtZSA9ICcnO1xuXHRcdHRoaXMuZnVsbE5hbWVSYXcgPSAnJztcblx0XHR0aGlzLmZ1bGxOYW1lSGFzaCA9ICcnO1xuXHRcdHRoaXMuZGVsaW1pdGVyID0gJyc7XG5cdFx0dGhpcy5uYW1lc3BhY2UgPSAnJztcblx0XHR0aGlzLmRlZXAgPSAwO1xuXHRcdHRoaXMuaW50ZXJ2YWwgPSAwO1xuXG5cdFx0dGhpcy5zZWxlY3RhYmxlID0gZmFsc2U7XG5cdFx0dGhpcy5leGlzdGVuID0gdHJ1ZTtcblxuXHRcdHRoaXMudHlwZSA9IGtvLm9ic2VydmFibGUoRm9sZGVyVHlwZS5Vc2VyKTtcblxuXHRcdHRoaXMuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2VsZWN0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmVkaXRlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3ViU2NyaWJlZCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5jaGVja2FibGUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnN1YkZvbGRlcnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMuZGVsZXRlQWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hY3Rpb25CbGluayA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMTAwMCB9KTtcblxuXHRcdHRoaXMubmFtZUZvckVkaXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMucHJpdmF0ZU1lc3NhZ2VDb3VudEFsbCA9IGtvLm9ic2VydmFibGUoMCk7XG5cdFx0dGhpcy5wcml2YXRlTWVzc2FnZUNvdW50VW5yZWFkID0ga28ub2JzZXJ2YWJsZSgwKTtcblxuXHRcdHRoaXMuY29sbGFwc2VkUHJpdmF0ZSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0ge0FqYXhKc29uRm9sZGVyfSBqc29uXG5cdCAqIEByZXR1cm5zIHs/Rm9sZGVyTW9kZWx9XG5cdCAqL1xuXHRzdGF0aWMgbmV3SW5zdGFuY2VGcm9tSnNvbihqc29uKSB7XG5cdFx0Y29uc3QgZm9sZGVyID0gbmV3IEZvbGRlck1vZGVsKCk7XG5cdFx0cmV0dXJuIGZvbGRlci5pbml0QnlKc29uKGpzb24pID8gZm9sZGVyLmluaXRDb21wdXRlZCgpIDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Rm9sZGVyTW9kZWx9XG5cdCAqL1xuXHRpbml0Q29tcHV0ZWQoKSB7XG5cdFx0Y29uc3QgaW5ib3hGb2xkZXJOYW1lID0gZ2V0Rm9sZGVySW5ib3hOYW1lKCk7XG5cblx0XHR0aGlzLmlzSW5ib3ggPSBrby5jb21wdXRlZCgoKSA9PiBGb2xkZXJUeXBlLkluYm94ID09PSB0aGlzLnR5cGUoKSk7XG5cblx0XHR0aGlzLmhhc1N1YlNjcmliZWRTdWJmb2xkZXJzID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PlxuXHRcdFx0XHQhIV8uZmluZChcblx0XHRcdFx0XHR0aGlzLnN1YkZvbGRlcnMoKSxcblx0XHRcdFx0XHQob0ZvbGRlcikgPT4gKG9Gb2xkZXIuc3ViU2NyaWJlZCgpIHx8IG9Gb2xkZXIuaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMoKSkgJiYgIW9Gb2xkZXIuaXNTeXN0ZW1Gb2xkZXIoKVxuXHRcdFx0XHQpXG5cdFx0KTtcblxuXHRcdHRoaXMuY2FuQmVFZGl0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiBGb2xkZXJUeXBlLlVzZXIgPT09IHRoaXMudHlwZSgpICYmIHRoaXMuZXhpc3RlbiAmJiB0aGlzLnNlbGVjdGFibGUpO1xuXG5cdFx0dGhpcy52aXNpYmxlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgaXNTdWJTY3JpYmVkID0gdGhpcy5zdWJTY3JpYmVkKCksXG5cdFx0XHRcdGlzU3ViRm9sZGVycyA9IHRoaXMuaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMoKTtcblxuXHRcdFx0cmV0dXJuIGlzU3ViU2NyaWJlZCB8fCAoaXNTdWJGb2xkZXJzICYmICghdGhpcy5leGlzdGVuIHx8ICF0aGlzLnNlbGVjdGFibGUpKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuaXNTeXN0ZW1Gb2xkZXIgPSBrby5jb21wdXRlZCgoKSA9PiBGb2xkZXJUeXBlLlVzZXIgIT09IHRoaXMudHlwZSgpKTtcblxuXHRcdHRoaXMuaGlkZGVuID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgaXNTeXN0ZW0gPSB0aGlzLmlzU3lzdGVtRm9sZGVyKCksXG5cdFx0XHRcdGlzU3ViRm9sZGVycyA9IHRoaXMuaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMoKTtcblxuXHRcdFx0cmV0dXJuIChpc1N5c3RlbSAmJiAhaXNTdWJGb2xkZXJzKSB8fCAoIXRoaXMuc2VsZWN0YWJsZSAmJiAhaXNTdWJGb2xkZXJzKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2VsZWN0YWJsZUZvckZvbGRlckxpc3QgPSBrby5jb21wdXRlZCgoKSA9PiAhdGhpcy5pc1N5c3RlbUZvbGRlcigpICYmIHRoaXMuc2VsZWN0YWJsZSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VDb3VudEFsbCA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoe1xuXHRcdFx0XHRyZWFkOiB0aGlzLnByaXZhdGVNZXNzYWdlQ291bnRBbGwsXG5cdFx0XHRcdHdyaXRlOiAoaVZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGlzUG9zTnVtZXJpYyhpVmFsdWUsIHRydWUpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByaXZhdGVNZXNzYWdlQ291bnRBbGwoaVZhbHVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5wcml2YXRlTWVzc2FnZUNvdW50QWxsLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5leHRlbmQoeyBub3RpZnk6ICdhbHdheXMnIH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlQ291bnRVbnJlYWQgPSBrb1xuXHRcdFx0LmNvbXB1dGVkKHtcblx0XHRcdFx0cmVhZDogdGhpcy5wcml2YXRlTWVzc2FnZUNvdW50VW5yZWFkLFxuXHRcdFx0XHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGlzUG9zTnVtZXJpYyh2YWx1ZSwgdHJ1ZSkpIHtcblx0XHRcdFx0XHRcdHRoaXMucHJpdmF0ZU1lc3NhZ2VDb3VudFVucmVhZCh2YWx1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMucHJpdmF0ZU1lc3NhZ2VDb3VudFVucmVhZC52YWx1ZUhhc011dGF0ZWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZXh0ZW5kKHsgbm90aWZ5OiAnYWx3YXlzJyB9KTtcblxuXHRcdHRoaXMucHJpbnRhYmxlVW5yZWFkQ291bnQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBjb3VudCA9IHRoaXMubWVzc2FnZUNvdW50QWxsKCksXG5cdFx0XHRcdHVucmVhZCA9IHRoaXMubWVzc2FnZUNvdW50VW5yZWFkKCksXG5cdFx0XHRcdHR5cGUgPSB0aGlzLnR5cGUoKTtcblxuXHRcdFx0aWYgKDAgPCBjb3VudCkge1xuXHRcdFx0XHRpZiAoRm9sZGVyVHlwZS5EcmFmdCA9PT0gdHlwZSkge1xuXHRcdFx0XHRcdHJldHVybiAnJyArIGNvdW50O1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdDAgPCB1bnJlYWQgJiZcblx0XHRcdFx0XHRGb2xkZXJUeXBlLlRyYXNoICE9PSB0eXBlICYmXG5cdFx0XHRcdFx0Rm9sZGVyVHlwZS5BcmNoaXZlICE9PSB0eXBlICYmXG5cdFx0XHRcdFx0Rm9sZGVyVHlwZS5TZW50SXRlbXMgIT09IHR5cGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuICcnICsgdW5yZWFkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAnJztcblx0XHR9KTtcblxuXHRcdHRoaXMuY2FuQmVEZWxldGVkID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgYlN5c3RlbSA9IHRoaXMuaXNTeXN0ZW1Gb2xkZXIoKTtcblx0XHRcdHJldHVybiAhYlN5c3RlbSAmJiAwID09PSB0aGlzLnN1YkZvbGRlcnMoKS5sZW5ndGggJiYgaW5ib3hGb2xkZXJOYW1lICE9PSB0aGlzLmZ1bGxOYW1lUmF3O1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYW5CZVN1YlNjcmliZWQgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+ICF0aGlzLmlzU3lzdGVtRm9sZGVyKCkgJiYgdGhpcy5zZWxlY3RhYmxlICYmIGluYm94Rm9sZGVyTmFtZSAhPT0gdGhpcy5mdWxsTmFtZVJhd1xuXHRcdCk7XG5cblx0XHR0aGlzLmNhbkJlQ2hlY2tlZCA9IHRoaXMuY2FuQmVTdWJTY3JpYmVkO1xuXG5cdFx0dGhpcy5sb2NhbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXG5cdFx0XHRsZXQgbmFtZSA9IHRoaXMubmFtZSgpO1xuXHRcdFx0Y29uc3QgdHlwZSA9IHRoaXMudHlwZSgpO1xuXG5cdFx0XHRpZiAodGhpcy5pc1N5c3RlbUZvbGRlcigpKSB7XG5cdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5JbmJveDpcblx0XHRcdFx0XHRcdG5hbWUgPSBpMThuKCdGT0xERVJfTElTVC9JTkJPWF9OQU1FJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuU2VudEl0ZW1zOlxuXHRcdFx0XHRcdFx0bmFtZSA9IGkxOG4oJ0ZPTERFUl9MSVNUL1NFTlRfTkFNRScpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBGb2xkZXJUeXBlLkRyYWZ0OlxuXHRcdFx0XHRcdFx0bmFtZSA9IGkxOG4oJ0ZPTERFUl9MSVNUL0RSQUZUU19OQU1FJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuU3BhbTpcblx0XHRcdFx0XHRcdG5hbWUgPSBpMThuKCdGT0xERVJfTElTVC9TUEFNX05BTUUnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5UcmFzaDpcblx0XHRcdFx0XHRcdG5hbWUgPSBpMThuKCdGT0xERVJfTElTVC9UUkFTSF9OQU1FJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuQXJjaGl2ZTpcblx0XHRcdFx0XHRcdG5hbWUgPSBpMThuKCdGT0xERVJfTElTVC9BUkNISVZFX05BTUUnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9KTtcblxuXHRcdHRoaXMubWFuYWdlRm9sZGVyU3lzdGVtTmFtZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cblx0XHRcdGxldCBzdWZmaXggPSAnJztcblx0XHRcdGNvbnN0IHR5cGUgPSB0aGlzLnR5cGUoKSxcblx0XHRcdFx0bmFtZSA9IHRoaXMubmFtZSgpO1xuXG5cdFx0XHRpZiAodGhpcy5pc1N5c3RlbUZvbGRlcigpKSB7XG5cdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5JbmJveDpcblx0XHRcdFx0XHRcdHN1ZmZpeCA9ICcoJyArIGkxOG4oJ0ZPTERFUl9MSVNUL0lOQk9YX05BTUUnKSArICcpJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5TZW50SXRlbXM6XG5cdFx0XHRcdFx0XHRzdWZmaXggPSAnKCcgKyBpMThuKCdGT0xERVJfTElTVC9TRU5UX05BTUUnKSArICcpJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgRm9sZGVyVHlwZS5EcmFmdDpcblx0XHRcdFx0XHRcdHN1ZmZpeCA9ICcoJyArIGkxOG4oJ0ZPTERFUl9MSVNUL0RSQUZUU19OQU1FJykgKyAnKSc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIEZvbGRlclR5cGUuU3BhbTpcblx0XHRcdFx0XHRcdHN1ZmZpeCA9ICcoJyArIGkxOG4oJ0ZPTERFUl9MSVNUL1NQQU1fTkFNRScpICsgJyknO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBGb2xkZXJUeXBlLlRyYXNoOlxuXHRcdFx0XHRcdFx0c3VmZml4ID0gJygnICsgaTE4bignRk9MREVSX0xJU1QvVFJBU0hfTkFNRScpICsgJyknO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBGb2xkZXJUeXBlLkFyY2hpdmU6XG5cdFx0XHRcdFx0XHRzdWZmaXggPSAnKCcgKyBpMThuKCdGT0xERVJfTElTVC9BUkNISVZFX05BTUUnKSArICcpJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoKCcnICE9PSBzdWZmaXggJiYgJygnICsgbmFtZSArICcpJyA9PT0gc3VmZml4KSB8fCAnKGluYm94KScgPT09IHN1ZmZpeC50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0XHRcdHN1ZmZpeCA9ICcnO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc3VmZml4O1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb2xsYXBzZWQgPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiAoKSA9PiAhdGhpcy5oaWRkZW4oKSAmJiB0aGlzLmNvbGxhcHNlZFByaXZhdGUoKSxcblx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5jb2xsYXBzZWRQcml2YXRlKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuaGFzVW5yZWFkTWVzc2FnZXMgPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5tZXNzYWdlQ291bnRVbnJlYWQoKSAmJiAnJyAhPT0gdGhpcy5wcmludGFibGVVbnJlYWRDb3VudCgpKTtcblxuXHRcdHRoaXMuaGFzU3ViU2NyaWJlZFVucmVhZE1lc3NhZ2VzU3ViZm9sZGVycyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0ISFfLmZpbmQoXG5cdFx0XHRcdFx0dGhpcy5zdWJGb2xkZXJzKCksXG5cdFx0XHRcdFx0KGZvbGRlcikgPT4gZm9sZGVyLmhhc1VucmVhZE1lc3NhZ2VzKCkgfHwgZm9sZGVyLmhhc1N1YlNjcmliZWRVbnJlYWRNZXNzYWdlc1N1YmZvbGRlcnMoKVxuXHRcdFx0XHQpXG5cdFx0KTtcblxuXHRcdC8vIHN1YnNjcmliZVxuXHRcdHRoaXMubmFtZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHR0aGlzLm5hbWVGb3JFZGl0KHZhbHVlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuZWRpdGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLm5hbWVGb3JFZGl0KHRoaXMubmFtZSgpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZUNvdW50VW5yZWFkLnN1YnNjcmliZSgodW5yZWFkKSA9PiB7XG5cdFx0XHRpZiAoRm9sZGVyVHlwZS5JbmJveCA9PT0gdGhpcy50eXBlKCkpIHtcblx0XHRcdFx0RXZlbnRzLnB1YignbWFpbGJveC5pbmJveC11bnJlYWQtY291bnQnLCBbdW5yZWFkXSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Y29sbGFwc2VkQ3NzKCkge1xuXHRcdHJldHVybiB0aGlzLmhhc1N1YlNjcmliZWRTdWJmb2xkZXJzKClcblx0XHRcdD8gdGhpcy5jb2xsYXBzZWQoKVxuXHRcdFx0XHQ/ICdpY29uLXJpZ2h0LW1pbmkgZS1jb2xsYXBzZWQtc2lnbidcblx0XHRcdFx0OiAnaWNvbi1kb3duLW1pbmkgZS1jb2xsYXBzZWQtc2lnbidcblx0XHRcdDogJ2ljb24tbm9uZSBlLWNvbGxhcHNlZC1zaWduJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FqYXhKc29uRm9sZGVyfSBqc29uXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aW5pdEJ5SnNvbihqc29uKSB7XG5cdFx0bGV0IGJSZXN1bHQgPSBmYWxzZTtcblx0XHRjb25zdCBzSW5ib3hGb2xkZXJOYW1lID0gZ2V0Rm9sZGVySW5ib3hOYW1lKCk7XG5cblx0XHRpZiAoanNvbiAmJiAnT2JqZWN0L0ZvbGRlcicgPT09IGpzb25bJ0BPYmplY3QnXSkge1xuXHRcdFx0dGhpcy5uYW1lKGpzb24uTmFtZSk7XG5cdFx0XHR0aGlzLmRlbGltaXRlciA9IGpzb24uRGVsaW1pdGVyO1xuXHRcdFx0dGhpcy5mdWxsTmFtZSA9IGpzb24uRnVsbE5hbWU7XG5cdFx0XHR0aGlzLmZ1bGxOYW1lUmF3ID0ganNvbi5GdWxsTmFtZVJhdztcblx0XHRcdHRoaXMuZnVsbE5hbWVIYXNoID0ganNvbi5GdWxsTmFtZUhhc2g7XG5cdFx0XHR0aGlzLmRlZXAgPSBqc29uLkZ1bGxOYW1lUmF3LnNwbGl0KHRoaXMuZGVsaW1pdGVyKS5sZW5ndGggLSAxO1xuXHRcdFx0dGhpcy5zZWxlY3RhYmxlID0gISFqc29uLklzU2VsZWN0YWJsZTtcblx0XHRcdHRoaXMuZXhpc3RlbiA9ICEhanNvbi5Jc0V4aXN0cztcblxuXHRcdFx0dGhpcy5zdWJTY3JpYmVkKCEhanNvbi5Jc1N1YnNjcmliZWQpO1xuXHRcdFx0dGhpcy5jaGVja2FibGUoISFqc29uLkNoZWNrYWJsZSk7XG5cblx0XHRcdHRoaXMudHlwZShzSW5ib3hGb2xkZXJOYW1lID09PSB0aGlzLmZ1bGxOYW1lUmF3ID8gRm9sZGVyVHlwZS5JbmJveCA6IEZvbGRlclR5cGUuVXNlcik7XG5cblx0XHRcdGJSZXN1bHQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBiUmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRwcmludGFibGVGdWxsTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5mdWxsTmFtZS5zcGxpdCh0aGlzLmRlbGltaXRlcikuam9pbignIC8gJyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgRm9sZGVyTW9kZWwsIEZvbGRlck1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuXG5pbXBvcnQgeyBhamF4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IG1pY3JvdGltZSwgaXNVbmQsIGlzTm9ybWFsLCBwU3RyaW5nLCBwSW50LCBpbkFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IERFRkFVTFRfQUpBWF9USU1FT1VULCBUT0tFTl9FUlJPUl9MSU1JVCwgQUpBWF9FUlJPUl9MSU1JVCB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RCYXNpY1Byb21pc2VzIH0gZnJvbSAnUHJvbWlzZXMvQWJzdHJhY3RCYXNpYyc7XG5cbmNsYXNzIEFic3RyYWN0QWpheFByb21pc2VzIGV4dGVuZHMgQWJzdHJhY3RCYXNpY1Byb21pc2VzIHtcblx0b1JlcXVlc3RzID0ge307XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuY2xlYXIoKTtcblx0fVxuXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMub1JlcXVlc3RzID0ge307XG5cdH1cblxuXHRhYm9ydChzQWN0aW9uLCBiQ2xlYXJPbmx5KSB7XG5cdFx0aWYgKHRoaXMub1JlcXVlc3RzW3NBY3Rpb25dKSB7XG5cdFx0XHRpZiAoIWJDbGVhck9ubHkgJiYgdGhpcy5vUmVxdWVzdHNbc0FjdGlvbl0uYWJvcnQpIHtcblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbc0FjdGlvbl0uX19hYm9ydGVkX18gPSB0cnVlO1xuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1tzQWN0aW9uXS5hYm9ydCgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm9SZXF1ZXN0c1tzQWN0aW9uXSA9IG51bGw7XG5cdFx0XHRkZWxldGUgdGhpcy5vUmVxdWVzdHNbc0FjdGlvbl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRhamF4UmVxdWVzdChhY3Rpb24sIGlzUG9zdCwgdGltZU91dCwgcGFyYW1zLCBhZGRpdGlvbmFsR2V0U3RyaW5nLCBmVHJpZ2dlcikge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RhcnQgPSBtaWNyb3RpbWUoKTtcblxuXHRcdFx0dGltZU91dCA9IGlzTm9ybWFsKHRpbWVPdXQpID8gdGltZU91dCA6IERFRkFVTFRfQUpBWF9USU1FT1VUO1xuXHRcdFx0YWRkaXRpb25hbEdldFN0cmluZyA9IGlzVW5kKGFkZGl0aW9uYWxHZXRTdHJpbmcpID8gJycgOiBwU3RyaW5nKGFkZGl0aW9uYWxHZXRTdHJpbmcpO1xuXG5cdFx0XHRpZiAoaXNQb3N0KSB7XG5cdFx0XHRcdHBhcmFtcy5YVG9rZW4gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndG9rZW4nKTtcblx0XHRcdH1cblxuXHRcdFx0UGx1Z2lucy5ydW5Ib29rKCdhamF4LWRlZmF1bHQtcmVxdWVzdCcsIFthY3Rpb24sIHBhcmFtcywgYWRkaXRpb25hbEdldFN0cmluZ10pO1xuXG5cdFx0XHR0aGlzLnNldFRyaWdnZXIoZlRyaWdnZXIsIHRydWUpO1xuXG5cdFx0XHRjb25zdCBvSCA9ICQuYWpheCh7XG5cdFx0XHRcdHR5cGU6IGlzUG9zdCA/ICdQT1NUJyA6ICdHRVQnLFxuXHRcdFx0XHR1cmw6IGFqYXgoYWRkaXRpb25hbEdldFN0cmluZyksXG5cdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxuXHRcdFx0XHRkYXRhOiBpc1Bvc3QgPyBwYXJhbXMgfHwge30gOiB7fSxcblx0XHRcdFx0dGltZW91dDogdGltZU91dCxcblx0XHRcdFx0Z2xvYmFsOiB0cnVlXG5cdFx0XHR9KS5hbHdheXMoKGRhdGEsIHRleHRTdGF0dXMpID0+IHtcblx0XHRcdFx0bGV0IGlzQ2FjaGVkID0gZmFsc2UsXG5cdFx0XHRcdFx0ZXJyb3JEYXRhID0gbnVsbDtcblxuXHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLlRpbWUpIHtcblx0XHRcdFx0XHRpc0NhY2hlZCA9IHBJbnQoZGF0YS5UaW1lKSA+IG1pY3JvdGltZSgpIC0gc3RhcnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLlVwZGF0ZVRva2VuKSB7XG5cdFx0XHRcdFx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18gJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5zZXRDbGllbnRTaWRlVG9rZW4pIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18uc2V0Q2xpZW50U2lkZVRva2VuKGRhdGEuVXBkYXRlVG9rZW4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGJhY2t3YXJkIGNhcGFiaWxpdHlcblx0XHRcdFx0bGV0IHR5cGUgPSAnJztcblx0XHRcdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRcdFx0Y2FzZSAnc3VjY2VzcycgPT09IHRleHRTdGF0dXMgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBhY3Rpb24gPT09IGRhdGEuQWN0aW9uOlxuXHRcdFx0XHRcdFx0dHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3M7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdhYm9ydCcgPT09IHRleHRTdGF0dXMgJiYgKCFkYXRhIHx8ICFkYXRhLl9fYWJvcnRlZF9fKTpcblx0XHRcdFx0XHRcdHR5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR0eXBlID0gU3RvcmFnZVJlc3VsdFR5cGUuRXJyb3I7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdFBsdWdpbnMucnVuSG9vaygnYWpheC1kZWZhdWx0LXJlc3BvbnNlJywgW1xuXHRcdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSB0eXBlID8gZGF0YSA6IG51bGwsXG5cdFx0XHRcdFx0dHlwZSxcblx0XHRcdFx0XHRpc0NhY2hlZCxcblx0XHRcdFx0XHRwYXJhbXNcblx0XHRcdFx0XSk7XG5cblx0XHRcdFx0aWYgKCdzdWNjZXNzJyA9PT0gdGV4dFN0YXR1cykge1xuXHRcdFx0XHRcdGlmIChkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGFjdGlvbiA9PT0gZGF0YS5BY3Rpb24pIHtcblx0XHRcdFx0XHRcdGRhdGEuX19jYWNoZWRfXyA9IGlzQ2FjaGVkO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShkYXRhKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS5BY3Rpb24pIHtcblx0XHRcdFx0XHRcdGVycm9yRGF0YSA9IGRhdGE7XG5cdFx0XHRcdFx0XHRyZWplY3QoZGF0YS5FcnJvckNvZGUgPyBkYXRhLkVycm9yQ29kZSA6IE5vdGlmaWNhdGlvbi5BamF4RmFsc2UpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlcnJvckRhdGEgPSBkYXRhO1xuXHRcdFx0XHRcdFx0cmVqZWN0KE5vdGlmaWNhdGlvbi5BamF4UGFyc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICgndGltZW91dCcgPT09IHRleHRTdGF0dXMpIHtcblx0XHRcdFx0XHRlcnJvckRhdGEgPSBkYXRhO1xuXHRcdFx0XHRcdHJlamVjdChOb3RpZmljYXRpb24uQWpheFRpbWVvdXQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCdhYm9ydCcgPT09IHRleHRTdGF0dXMpIHtcblx0XHRcdFx0XHRpZiAoIWRhdGEgfHwgIWRhdGEuX19hYm9ydGVkX18pIHtcblx0XHRcdFx0XHRcdHJlamVjdChOb3RpZmljYXRpb24uQWpheEFib3J0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZXJyb3JEYXRhID0gZGF0YTtcblx0XHRcdFx0XHRyZWplY3QoTm90aWZpY2F0aW9uLkFqYXhQYXJzZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXSkge1xuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0gPSBudWxsO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLm9SZXF1ZXN0c1thY3Rpb25dO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zZXRUcmlnZ2VyKGZUcmlnZ2VyLCBmYWxzZSk7XG5cblx0XHRcdFx0aWYgKGVycm9yRGF0YSkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdC0xIDxcblx0XHRcdFx0XHRcdGluQXJyYXkoZXJyb3JEYXRhLkVycm9yQ29kZSwgW1xuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQXV0aEVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQWNjZXNzRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Db25uZWN0aW9uRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Eb21haW5Ob3RBbGxvd2VkLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQWNjb3VudE5vdEFsbG93ZWQsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5NYWlsU2VydmVyRXJyb3IsXG5cdFx0XHRcdFx0XHRcdE5vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uVW5rbm93bkVycm9yXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuaUFqYXhFcnJvckNvdW50ICs9IDE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKE5vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4gPT09IGVycm9yRGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLmlUb2tlbkVycm9yQ291bnQgKz0gMTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoVE9LRU5fRVJST1JfTElNSVQgPCBHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50KSB7XG5cdFx0XHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLmxvZ2luQW5kTG9nb3V0UmVsb2FkKSB7XG5cdFx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChlcnJvckRhdGEuQ2xlYXJBdXRoIHx8IGVycm9yRGF0YS5Mb2dvdXQgfHwgQUpBWF9FUlJPUl9MSU1JVCA8IEdsb2JhbHNEYXRhLmlBamF4RXJyb3JDb3VudCkge1xuXHRcdFx0XHRcdFx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18gJiYgR2xvYmFsc0RhdGEuX19BUFBfXy5jbGVhckNsaWVudFNpZGVUb2tlbikge1xuXHRcdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmICFlcnJvckRhdGEuQ2xlYXJBdXRoICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKG9IKSB7XG5cdFx0XHRcdGlmICh0aGlzLm9SZXF1ZXN0c1thY3Rpb25dKSB7XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG51bGw7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMub1JlcXVlc3RzW2FjdGlvbl07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gb0g7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRSZXF1ZXN0KHNBY3Rpb24sIGZUcmlnZ2VyLCBzQWRkaXRpb25hbEdldFN0cmluZywgaVRpbWVPdXQpIHtcblx0XHRzQWRkaXRpb25hbEdldFN0cmluZyA9IGlzVW5kKHNBZGRpdGlvbmFsR2V0U3RyaW5nKSA/ICcnIDogcFN0cmluZyhzQWRkaXRpb25hbEdldFN0cmluZyk7XG5cdFx0c0FkZGl0aW9uYWxHZXRTdHJpbmcgPSBzQWN0aW9uICsgJy8nICsgc0FkZGl0aW9uYWxHZXRTdHJpbmc7XG5cblx0XHRyZXR1cm4gdGhpcy5hamF4UmVxdWVzdChzQWN0aW9uLCBmYWxzZSwgaVRpbWVPdXQsIG51bGwsIHNBZGRpdGlvbmFsR2V0U3RyaW5nLCBmVHJpZ2dlcik7XG5cdH1cblxuXHRwb3N0UmVxdWVzdChhY3Rpb24sIGZUcmlnZ2VyLCBwYXJhbXMsIHRpbWVPdXQpIHtcblx0XHRwYXJhbXMgPSBwYXJhbXMgfHwge307XG5cdFx0cGFyYW1zLkFjdGlvbiA9IGFjdGlvbjtcblxuXHRcdHJldHVybiB0aGlzLmFqYXhSZXF1ZXN0KGFjdGlvbiwgdHJ1ZSwgdGltZU91dCwgcGFyYW1zLCAnJywgZlRyaWdnZXIpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0QWpheFByb21pc2VzLCBBYnN0cmFjdEFqYXhQcm9taXNlcyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBjaGFuZ2UgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIEFjY291bnRNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwge1xuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGNhbkJlRGVsZXRlID0gdHJ1ZVxuXHQgKiBAcGFyYW0ge251bWJlcj19IGNvdW50ID0gMFxuXHQgKi9cblx0Y29uc3RydWN0b3IoZW1haWwsIGNhbkJlRGVsZXRlID0gdHJ1ZSwgY291bnQgPSAwKSB7XG5cdFx0c3VwZXIoJ0FjY291bnRNb2RlbCcpO1xuXG5cdFx0dGhpcy5lbWFpbCA9IGVtYWlsO1xuXG5cdFx0dGhpcy5jb3VudCA9IGtvLm9ic2VydmFibGUoY291bnQpO1xuXG5cdFx0dGhpcy5kZWxldGVBY2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmNhbkJlRGVsZXRlZCA9IGtvLm9ic2VydmFibGUoISFjYW5CZURlbGV0ZSk7XG5cdFx0dGhpcy5jYW5CZUVkaXQgPSB0aGlzLmNhbkJlRGVsZXRlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Y2hhbmdlQWNjb3VudExpbmsoKSB7XG5cdFx0cmV0dXJuIGNoYW5nZSh0aGlzLmVtYWlsKTtcblx0fVxufVxuXG5leHBvcnQgeyBBY2NvdW50TW9kZWwsIEFjY291bnRNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIElkZW50aXR5TW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcblx0ICovXG5cdGNvbnN0cnVjdG9yKGlkLCBlbWFpbCkge1xuXHRcdHN1cGVyKCdJZGVudGl0eU1vZGVsJyk7XG5cblx0XHR0aGlzLmlkID0ga28ub2JzZXJ2YWJsZShpZCB8fCAnJyk7XG5cdFx0dGhpcy5lbWFpbCA9IGtvLm9ic2VydmFibGUoZW1haWwpO1xuXHRcdHRoaXMubmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5yZXBseVRvID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5iY2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuc2lnbmF0dXJlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zaWduYXR1cmVJbnNlcnRCZWZvcmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZGVsZXRlQWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jYW5CZURlbGV0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5pZCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Zm9ybWF0dGVkTmFtZSgpIHtcblx0XHRjb25zdCBuYW1lID0gdGhpcy5uYW1lKCksXG5cdFx0XHRlbWFpbCA9IHRoaXMuZW1haWwoKTtcblxuXHRcdHJldHVybiAnJyAhPT0gbmFtZSA/IG5hbWUgKyAnICgnICsgZW1haWwgKyAnKScgOiBlbWFpbDtcblx0fVxufVxuXG5leHBvcnQgeyBJZGVudGl0eU1vZGVsLCBJZGVudGl0eU1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IHBTdHJpbmcgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIFRlbXBsYXRlTW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYm9keVxuXHQgKi9cblx0Y29uc3RydWN0b3IoaWQsIG5hbWUsIGJvZHkpIHtcblx0XHRzdXBlcignVGVtcGxhdGVNb2RlbCcpO1xuXG5cdFx0dGhpcy5pZCA9IGlkO1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdFx0dGhpcy5ib2R5ID0gYm9keTtcblx0XHR0aGlzLnBvcHVsYXRlZCA9IHRydWU7XG5cblx0XHR0aGlzLmRlbGV0ZUFjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0cGFyc2UoanNvbikge1xuXHRcdGxldCByZXN1bHQgPSBmYWxzZTtcblx0XHRpZiAoanNvbiAmJiAnT2JqZWN0L1RlbXBsYXRlJyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHR0aGlzLmlkID0gcFN0cmluZyhqc29uLklEKTtcblx0XHRcdHRoaXMubmFtZSA9IHBTdHJpbmcoanNvbi5OYW1lKTtcblx0XHRcdHRoaXMuYm9keSA9IHBTdHJpbmcoanNvbi5Cb2R5KTtcblx0XHRcdHRoaXMucG9wdWxhdGVkID0gISFqc29uLlBvcHVsYXRlZDtcblxuXHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG5cbmV4cG9ydCB7IFRlbXBsYXRlTW9kZWwsIFRlbXBsYXRlTW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgaXNOb25FbXB0eUFycmF5LCBsb2cgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmltcG9ydCBQZ3BTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9QZ3AnO1xuXG5jbGFzcyBPcGVuUGdwS2V5TW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpbmRleFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZ3VJRFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gSURcblx0ICogQHBhcmFtIHthcnJheX0gSURzXG5cdCAqIEBwYXJhbSB7YXJyYXl9IHVzZXJJRHNcblx0ICogQHBhcmFtIHthcnJheX0gZW1haWxzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQcml2YXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhcm1vclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihpbmRleCwgZ3VJRCwgSUQsIElEcywgdXNlcklEcywgZW1haWxzLCBpc1ByaXZhdGUsIGFybW9yLCB1c2VySUQpIHtcblx0XHRzdXBlcignT3BlblBncEtleU1vZGVsJyk7XG5cblx0XHR0aGlzLmluZGV4ID0gaW5kZXg7XG5cdFx0dGhpcy5pZCA9IElEO1xuXHRcdHRoaXMuaWRzID0gaXNOb25FbXB0eUFycmF5KElEcykgPyBJRHMgOiBbSURdO1xuXHRcdHRoaXMuZ3VpZCA9IGd1SUQ7XG5cdFx0dGhpcy51c2VyID0gJyc7XG5cdFx0dGhpcy51c2VycyA9IHVzZXJJRHM7XG5cdFx0dGhpcy5lbWFpbCA9ICcnO1xuXHRcdHRoaXMuZW1haWxzID0gZW1haWxzO1xuXHRcdHRoaXMuYXJtb3IgPSBhcm1vcjtcblx0XHR0aGlzLmlzUHJpdmF0ZSA9ICEhaXNQcml2YXRlO1xuXG5cdFx0dGhpcy5zZWxlY3RVc2VyKHVzZXJJRCk7XG5cblx0XHR0aGlzLmRlbGV0ZUFjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0Z2V0TmF0aXZlS2V5KCkge1xuXHRcdGxldCBrZXkgPSBudWxsO1xuXHRcdHRyeSB7XG5cdFx0XHRrZXkgPSBQZ3BTdG9yZS5vcGVucGdwLmtleS5yZWFkQXJtb3JlZCh0aGlzLmFybW9yKTtcblx0XHRcdGlmIChrZXkgJiYgIWtleS5lcnIgJiYga2V5LmtleXMgJiYga2V5LmtleXNbMF0pIHtcblx0XHRcdFx0cmV0dXJuIGtleTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRsb2coZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXROYXRpdmVLZXlzKCkge1xuXHRcdGNvbnN0IGtleSA9IHRoaXMuZ2V0TmF0aXZlS2V5KCk7XG5cdFx0cmV0dXJuIGtleSAmJiBrZXkua2V5cyA/IGtleS5rZXlzIDogbnVsbDtcblx0fVxuXG5cdHNlbGVjdChwYXR0ZXJuLCBwcm9wZXJ0eSkge1xuXHRcdGlmICh0aGlzW3Byb3BlcnR5XSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSB0aGlzW3Byb3BlcnR5XS5pbmRleE9mKHBhdHRlcm4pO1xuXHRcdFx0aWYgKC0xICE9PSBpbmRleCkge1xuXHRcdFx0XHR0aGlzLnVzZXIgPSB0aGlzLnVzZXJzW2luZGV4XTtcblx0XHRcdFx0dGhpcy5lbWFpbCA9IHRoaXMuZW1haWxzW2luZGV4XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZWxlY3RVc2VyKHVzZXIpIHtcblx0XHR0aGlzLnNlbGVjdCh1c2VyLCAndXNlcnMnKTtcblx0fVxuXG5cdHNlbGVjdEVtYWlsKGVtYWlsKSB7XG5cdFx0dGhpcy5zZWxlY3QoZW1haWwsICdlbWFpbHMnKTtcblx0fVxufVxuXG5leHBvcnQgeyBPcGVuUGdwS2V5TW9kZWwsIE9wZW5QZ3BLZXlNb2RlbCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgeyBBYnN0cmFjdFNjcmVlbiB9IGZyb20gJ0tub2luL0Fic3RyYWN0U2NyZWVuJztcblxuaW1wb3J0IHsgTG9naW5Vc2VyVmlldyB9IGZyb20gJ1ZpZXcvVXNlci9Mb2dpbic7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5jbGFzcyBMb2dpblVzZXJTY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNjcmVlbiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCdsb2dpbicsIFtMb2dpblVzZXJWaWV3XSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoJycpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luVXNlclNjcmVlbiwgTG9naW5Vc2VyU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHtcblx0TG9naW5TaWduTWVUeXBlLFxuXHRMb2dpblNpZ25NZVR5cGVBc1N0cmluZyxcblx0Q2xpZW50U2lkZUtleU5hbWUsXG5cdFN0b3JhZ2VSZXN1bHRUeXBlLFxuXHRNYWdpY3MsXG5cdE5vdGlmaWNhdGlvblxufSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyB0cmltLCBpbkFycmF5LCBwSW50LCBjb252ZXJ0TGFuZ05hbWUsIHRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7ICR3aW4gfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBzb2NpYWxGYWNlYm9vaywgc29jaWFsR29vZ2xlLCBzb2NpYWxUd2l0dGVyIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiwgZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlLCByZWxvYWQgYXMgdHJhbnNsYXRvclJlbG9hZCB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IExhbmd1YWdlU3RvcmUgZnJvbSAnU3RvcmVzL0xhbmd1YWdlJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBMb2NhbCBmcm9tICdTdG9yYWdlL0NsaWVudCc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyB2aWV3LCBjb21tYW5kLCBWaWV3VHlwZSwgcm91dGVPZmYsIHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHZpZXcoe1xuXHRuYW1lOiBbJ1ZpZXcvQXBwL0xvZ2luJywgJ1ZpZXcvVXNlci9Mb2dpbiddLFxuXHR0eXBlOiBWaWV3VHlwZS5DZW50ZXIsXG5cdHRlbXBsYXRlSUQ6ICdMb2dpbidcbn0pXG5jbGFzcyBMb2dpblVzZXJWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmhpZGVTdWJtaXRCdXR0b24gPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdoaWRlU3VibWl0QnV0dG9uJyk7XG5cblx0XHR0aGlzLndlbGNvbWUgPSBrby5vYnNlcnZhYmxlKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZUxvZ2luV2VsY29tZVBhZ2UnKSk7XG5cblx0XHR0aGlzLmVtYWlsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc2lnbk1lID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3JBbmltYXRpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDUwMCB9KTtcblx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLnZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlU2lnbk1lID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmxvZ29JbWcgPSB0cmltKFNldHRpbmdzLnNldHRpbmdzR2V0KCdMb2dpbkxvZ28nKSk7XG5cdFx0dGhpcy5sb2dpbkRlc2NyaXB0aW9uID0gdHJpbShTZXR0aW5ncy5zZXR0aW5nc0dldCgnTG9naW5EZXNjcmlwdGlvbicpKTtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cdFx0dGhpcy5tb2JpbGVEZXZpY2UgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGVEZXZpY2UnKTtcblxuXHRcdHRoaXMuZm9yZ290UGFzc3dvcmRMaW5rVXJsID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2ZvcmdvdFBhc3N3b3JkTGlua1VybCcpO1xuXHRcdHRoaXMucmVnaXN0cmF0aW9uTGlua1VybCA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdyZWdpc3RyYXRpb25MaW5rVXJsJyk7XG5cblx0XHR0aGlzLmVtYWlsRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZW1haWxFcnJvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogNTAwIH0pO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogNTAwIH0pO1xuXG5cdFx0dGhpcy5mb3JtSGlkZGVuID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZvcm1FcnJvciA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0dGhpcy5lbWFpbEVycm9yQW5pbWF0aW9uKCkgfHxcblx0XHRcdFx0dGhpcy5wYXNzd29yZEVycm9yQW5pbWF0aW9uKCkgfHxcblx0XHRcdFx0KHRoaXMuYWRkaXRpb25hbENvZGUudmlzaWJpbGl0eSgpICYmIHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3JBbmltYXRpb24oKSlcblx0XHQpO1xuXG5cdFx0dGhpcy5lbWFpbEZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5wYXNzd29yZEZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmVtYWlsLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmVtYWlsRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZGRpdGlvbmFsQ29kZSgnJyk7XG5cdFx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLnZpc2liaWxpdHkoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wYXNzd29yZC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5wYXNzd29yZEVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRkaXRpb25hbENvZGUuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS52aXNpYmlsaXR5LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLmVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuZW1haWxFcnJvci5zdWJzY3JpYmUoKGJWKSA9PiB7XG5cdFx0XHR0aGlzLmVtYWlsRXJyb3JBbmltYXRpb24oISFiVik7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkRXJyb3Iuc3Vic2NyaWJlKChiVikgPT4ge1xuXHRcdFx0dGhpcy5wYXNzd29yZEVycm9yQW5pbWF0aW9uKCEhYlYpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS5lcnJvci5zdWJzY3JpYmUoKGJWKSA9PiB7XG5cdFx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLmVycm9yQW5pbWF0aW9uKCEhYlYpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zdWJtaXRFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3JBZGRpZGlvbmFsID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnN1Ym1pdEVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICgnJyA9PT0gdmFsdWUpIHtcblx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvckFkZGlkaW9uYWwoJycpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4gPSBBcHBTdG9yZS5hbGxvd0xhbmd1YWdlc09uTG9naW47XG5cblx0XHR0aGlzLmxhbmdSZXF1ZXN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5sYW5ndWFnZSA9IExhbmd1YWdlU3RvcmUubGFuZ3VhZ2U7XG5cdFx0dGhpcy5sYW5ndWFnZXMgPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlcztcblxuXHRcdHRoaXMuYlNlbmRMYW5ndWFnZSA9IGZhbHNlO1xuXG5cdFx0dGhpcy5sYW5ndWFnZUZ1bGxOYW1lID0ga28uY29tcHV0ZWQoKCkgPT4gY29udmVydExhbmdOYW1lKHRoaXMubGFuZ3VhZ2UoKSkpO1xuXG5cdFx0dGhpcy5zaWduTWVUeXBlID0ga28ub2JzZXJ2YWJsZShMb2dpblNpZ25NZVR5cGUuVW51c2VkKTtcblxuXHRcdHRoaXMuc2lnbk1lVHlwZS5zdWJzY3JpYmUoKGlWYWx1ZSkgPT4ge1xuXHRcdFx0dGhpcy5zaWduTWUoTG9naW5TaWduTWVUeXBlLkRlZmF1bHRPbiA9PT0gaVZhbHVlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2lnbk1lVmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+IExvZ2luU2lnbk1lVHlwZS5VbnVzZWQgIT09IHRoaXMuc2lnbk1lVHlwZSgpKTtcblxuXHRcdHRoaXMuZmFjZWJvb2tMb2dpbkVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZUxvZ2luRW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ29vZ2xlR21haWxMb2dpbkVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnR3aXR0ZXJMb2dpbkVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuc29jaWFsTG9naW5FbmFibGVkID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgYkYgPSB0aGlzLmZhY2Vib29rTG9naW5FbmFibGVkKCksXG5cdFx0XHRcdGJHID0gdGhpcy5nb29nbGVMb2dpbkVuYWJsZWQoKSxcblx0XHRcdFx0YlQgPSB0aGlzLnR3aXR0ZXJMb2dpbkVuYWJsZWQoKTtcblxuXHRcdFx0cmV0dXJuIGJGIHx8IGJHIHx8IGJUO1xuXHRcdH0pO1xuXG5cdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdBZGRpdGlvbmFsTG9naW5FcnJvcicpICYmICF0aGlzLnN1Ym1pdEVycm9yKCkpIHtcblx0XHRcdHRoaXMuc3VibWl0RXJyb3IoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FkZGl0aW9uYWxMb2dpbkVycm9yJykpO1xuXHRcdH1cblx0fVxuXG5cdHdpbmRvd09wZW5GZWF0dXJlcyh3aCkge1xuXHRcdHJldHVybiBgbGVmdD0yMDAsdG9wPTEwMCx3aWR0aD0ke3dofSxoZWlnaHQ9JHt3aH0sbWVudWJhcj1ubyxzdGF0dXM9bm8scmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPXllc2A7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gIXNlbGYuc3VibWl0UmVxdWVzdCgpICYmIHNlbGYuZmFjZWJvb2tMb2dpbkVuYWJsZWQoKSlcblx0ZmFjZWJvb2tDb21tYW5kKCkge1xuXHRcdHdpbmRvdy5vcGVuKHNvY2lhbEZhY2Vib29rKCksICdGYWNlYm9vaycsIHRoaXMud2luZG93T3BlbkZlYXR1cmVzKDUwMCkpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLnN1Ym1pdFJlcXVlc3QoKSAmJiBzZWxmLmdvb2dsZUxvZ2luRW5hYmxlZCgpKVxuXHRnb29nbGVDb21tYW5kKCkge1xuXHRcdHdpbmRvdy5vcGVuKHNvY2lhbEdvb2dsZSgpLCAnR29vZ2xlJywgdGhpcy53aW5kb3dPcGVuRmVhdHVyZXMoNTUwKSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gIXNlbGYuc3VibWl0UmVxdWVzdCgpICYmIHNlbGYuZ29vZ2xlR21haWxMb2dpbkVuYWJsZWQoKSlcblx0Z29vZ2xlR21haWxDb21tYW5kKCkge1xuXHRcdHdpbmRvdy5vcGVuKHNvY2lhbEdvb2dsZSh0cnVlKSwgJ0dvb2dsZScsIHRoaXMud2luZG93T3BlbkZlYXR1cmVzKDU1MCkpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLnN1Ym1pdFJlcXVlc3QoKSAmJiBzZWxmLnR3aXR0ZXJMb2dpbkVuYWJsZWQoKSlcblx0dHdpdHRlckNvbW1hbmQoKSB7XG5cdFx0d2luZG93Lm9wZW4oc29jaWFsVHdpdHRlcigpLCAnVHdpdHRlcicsIHRoaXMud2luZG93T3BlbkZlYXR1cmVzKDUwMCkpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLnN1Ym1pdFJlcXVlc3QoKSlcblx0c3VibWl0Q29tbWFuZCgpIHtcblx0XHR0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UoKTtcblxuXHRcdHRoaXMuZW1haWxFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yKGZhbHNlKTtcblxuXHRcdHRoaXMuZW1haWxFcnJvcignJyA9PT0gdHJpbSh0aGlzLmVtYWlsKCkpKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IoJycgPT09IHRyaW0odGhpcy5wYXNzd29yZCgpKSk7XG5cblx0XHRpZiAodGhpcy5hZGRpdGlvbmFsQ29kZS52aXNpYmlsaXR5KCkpIHtcblx0XHRcdHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS5lcnJvcignJyA9PT0gdHJpbSh0aGlzLmFkZGl0aW9uYWxDb2RlKCkpKTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLmVtYWlsRXJyb3IoKSB8fFxuXHRcdFx0dGhpcy5wYXNzd29yZEVycm9yKCkgfHxcblx0XHRcdCh0aGlzLmFkZGl0aW9uYWxDb2RlLnZpc2liaWxpdHkoKSAmJiB0aGlzLmFkZGl0aW9uYWxDb2RlLmVycm9yKCkpXG5cdFx0KSB7XG5cdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0Y2FzZSB0aGlzLmVtYWlsRXJyb3IoKTpcblx0XHRcdFx0XHR0aGlzLmVtYWlsRm9jdXModHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgdGhpcy5wYXNzd29yZEVycm9yKCk6XG5cdFx0XHRcdFx0dGhpcy5wYXNzd29yZEZvY3VzKHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIHRoaXMuYWRkaXRpb25hbENvZGUudmlzaWJpbGl0eSgpICYmIHRoaXMuYWRkaXRpb25hbENvZGUuZXJyb3IoKTpcblx0XHRcdFx0XHR0aGlzLmFkZGl0aW9uYWxDb2RlLmZvY3VzZWQodHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGxldCBwbHVnaW5SZXN1bHRDb2RlID0gMCxcblx0XHRcdHBsdWdpblJlc3VsdE1lc3NhZ2UgPSAnJztcblxuXHRcdGNvbnN0IGZTdWJtaXRSZXN1bHQgPSAoaVJlc3VsdENvZGUsIHNSZXN1bHRNZXNzYWdlKSA9PiB7XG5cdFx0XHRwbHVnaW5SZXN1bHRDb2RlID0gaVJlc3VsdENvZGUgfHwgMDtcblx0XHRcdHBsdWdpblJlc3VsdE1lc3NhZ2UgPSBzUmVzdWx0TWVzc2FnZSB8fCAnJztcblx0XHR9O1xuXG5cdFx0UGx1Z2lucy5ydW5Ib29rKCd1c2VyLWxvZ2luLXN1Ym1pdCcsIFtmU3VibWl0UmVzdWx0XSk7XG5cdFx0aWYgKDAgPCBwbHVnaW5SZXN1bHRDb2RlKSB7XG5cdFx0XHR0aGlzLnN1Ym1pdEVycm9yKGdldE5vdGlmaWNhdGlvbihwbHVnaW5SZXN1bHRDb2RlKSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICgnJyAhPT0gcGx1Z2luUmVzdWx0TWVzc2FnZSkge1xuXHRcdFx0dGhpcy5zdWJtaXRFcnJvcihwbHVnaW5SZXN1bHRNZXNzYWdlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QodHJ1ZSk7XG5cdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cblx0XHRjb25zdCBmTG9naW5SZXF1ZXN0ID0gKHNMb2dpblBhc3N3b3JkKSA9PiB7XG5cdFx0XHRSZW1vdGUubG9naW4oXG5cdFx0XHRcdChzUmVzdWx0LCBvRGF0YSkgPT4ge1xuXHRcdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXHRcdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuYWN0aXZhdGUnKTtcblxuXHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmICdMb2dpbicgPT09IG9EYXRhLkFjdGlvbikge1xuXHRcdFx0XHRcdFx0aWYgKG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRpZiAob0RhdGEuVHdvRmFjdG9yQXV0aCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWRkaXRpb25hbENvZGUoJycpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWRkaXRpb25hbENvZGUudmlzaWJpbGl0eSh0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmFkZGl0aW9uYWxDb2RlLmZvY3VzZWQodHJ1ZSksIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9EYXRhLkFkbWluKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2V0QXBwKCkucmVkaXJlY3RUb0FkbWluUGFuZWwoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRnZXRBcHAoKS5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdGlmICgtMSA8IGluQXJyYXkob0RhdGEuRXJyb3JDb2RlLCBbTm90aWZpY2F0aW9uLkludmFsaWRJbnB1dEFyZ3VtZW50XSkpIHtcblx0XHRcdFx0XHRcdFx0XHRvRGF0YS5FcnJvckNvZGUgPSBOb3RpZmljYXRpb24uQXV0aEVycm9yO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb25Gcm9tUmVzcG9uc2Uob0RhdGEpKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoJycgPT09IHRoaXMuc3VibWl0RXJyb3IoKSkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IpKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvRGF0YS5FcnJvck1lc3NhZ2VBZGRpdGlvbmFsKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvckFkZGlkaW9uYWwob0RhdGEuRXJyb3JNZXNzYWdlQWRkaXRpb25hbCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdEVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uVW5rbm93bkVycm9yKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVtYWlsKCksXG5cdFx0XHRcdCcnLFxuXHRcdFx0XHRzTG9naW5QYXNzd29yZCxcblx0XHRcdFx0ISF0aGlzLnNpZ25NZSgpLFxuXHRcdFx0XHR0aGlzLmJTZW5kTGFuZ3VhZ2UgPyB0aGlzLmxhbmd1YWdlKCkgOiAnJyxcblx0XHRcdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS52aXNpYmlsaXR5KCkgPyB0aGlzLmFkZGl0aW9uYWxDb2RlKCkgOiAnJyxcblx0XHRcdFx0dGhpcy5hZGRpdGlvbmFsQ29kZS52aXNpYmlsaXR5KCkgPyAhIXRoaXMuYWRkaXRpb25hbENvZGVTaWduTWUoKSA6IGZhbHNlXG5cdFx0XHQpO1xuXG5cdFx0XHRMb2NhbC5zZXQoQ2xpZW50U2lkZUtleU5hbWUuTGFzdFNpZ25NZSwgdGhpcy5zaWduTWUoKSA/ICctMS0nIDogJy0wLScpO1xuXHRcdH07XG5cblx0XHRmTG9naW5SZXF1ZXN0KHRoaXMucGFzc3dvcmQoKSk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGRpc3BsYXlNYWluRm9ybSgpIHtcblx0XHR0aGlzLndlbGNvbWUoZmFsc2UpO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHJvdXRlT2ZmKCk7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKCcnICE9PSB0aGlzLmVtYWlsKCkgJiYgJycgIT09IHRoaXMucGFzc3dvcmQoKSkge1xuXHRcdFx0dGhpcy5wYXNzd29yZEZvY3VzKHRydWUpO1xuXHRcdH0gZWxzZSBpZiAoJycgPT09IHRoaXMuZW1haWwoKSkge1xuXHRcdFx0dGhpcy5lbWFpbEZvY3VzKHRydWUpO1xuXHRcdH0gZWxzZSBpZiAoJycgPT09IHRoaXMucGFzc3dvcmQoKSkge1xuXHRcdFx0dGhpcy5wYXNzd29yZEZvY3VzKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVtYWlsRm9jdXModHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0b25IaWRlKCkge1xuXHRcdHRoaXMuZW1haWxGb2N1cyhmYWxzZSk7XG5cdFx0dGhpcy5wYXNzd29yZEZvY3VzKGZhbHNlKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Y29uc3Qgc2lnbk1lTG9jYWwgPSBMb2NhbC5nZXQoQ2xpZW50U2lkZUtleU5hbWUuTGFzdFNpZ25NZSksXG5cdFx0XHRzaWduTWUgPSAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1NpZ25NZScpIHx8ICd1bnVzZWQnKS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0anNIYXNoID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2pzSGFzaCcpLFxuXHRcdFx0ZlNvY2lhbCA9IChpRXJyb3JDb2RlKSA9PiB7XG5cdFx0XHRcdGlFcnJvckNvZGUgPSBwSW50KGlFcnJvckNvZGUpO1xuXHRcdFx0XHRpZiAoMCA9PT0gaUVycm9yQ29kZSkge1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdCh0cnVlKTtcblx0XHRcdFx0XHRnZXRBcHAoKS5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oaUVycm9yQ29kZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0dGhpcy5mYWNlYm9va0xvZ2luRW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0ZhY2Vib29rU29jaWFsJykpO1xuXHRcdHRoaXMudHdpdHRlckxvZ2luRW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd1R3aXR0ZXJTb2NpYWwnKSk7XG5cdFx0dGhpcy5nb29nbGVMb2dpbkVuYWJsZWQoXG5cdFx0XHQhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpICYmICEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsQXV0aCcpXG5cdFx0KTtcblx0XHR0aGlzLmdvb2dsZUdtYWlsTG9naW5FbmFibGVkKFxuXHRcdFx0ISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWwnKSAmJiAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbEF1dGhHbWFpbCcpXG5cdFx0KTtcblxuXHRcdHN3aXRjaCAoc2lnbk1lKSB7XG5cdFx0XHRjYXNlIExvZ2luU2lnbk1lVHlwZUFzU3RyaW5nLkRlZmF1bHRPZmY6XG5cdFx0XHRjYXNlIExvZ2luU2lnbk1lVHlwZUFzU3RyaW5nLkRlZmF1bHRPbjpcblx0XHRcdFx0dGhpcy5zaWduTWVUeXBlKFxuXHRcdFx0XHRcdExvZ2luU2lnbk1lVHlwZUFzU3RyaW5nLkRlZmF1bHRPbiA9PT0gc2lnbk1lID8gTG9naW5TaWduTWVUeXBlLkRlZmF1bHRPbiA6IExvZ2luU2lnbk1lVHlwZS5EZWZhdWx0T2ZmXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0c3dpdGNoIChzaWduTWVMb2NhbCkge1xuXHRcdFx0XHRcdGNhc2UgJy0xLSc6XG5cdFx0XHRcdFx0XHR0aGlzLnNpZ25NZVR5cGUoTG9naW5TaWduTWVUeXBlLkRlZmF1bHRPbik7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICctMC0nOlxuXHRcdFx0XHRcdFx0dGhpcy5zaWduTWVUeXBlKExvZ2luU2lnbk1lVHlwZS5EZWZhdWx0T2ZmKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBMb2dpblNpZ25NZVR5cGVBc1N0cmluZy5VbnVzZWQ6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aGlzLnNpZ25NZVR5cGUoTG9naW5TaWduTWVUeXBlLlVudXNlZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdHRoaXMuZW1haWwoQXBwU3RvcmUuZGV2RW1haWwpO1xuXHRcdHRoaXMucGFzc3dvcmQoQXBwU3RvcmUuZGV2UGFzc3dvcmQpO1xuXG5cdFx0aWYgKHRoaXMuZ29vZ2xlTG9naW5FbmFibGVkKCkgfHwgdGhpcy5nb29nbGVHbWFpbExvZ2luRW5hYmxlZCgpKSB7XG5cdFx0XHR3aW5kb3dbJ3JsXycgKyBqc0hhc2ggKyAnX2dvb2dsZV9sb2dpbl9zZXJ2aWNlJ10gPSBmU29jaWFsO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmZhY2Vib29rTG9naW5FbmFibGVkKCkpIHtcblx0XHRcdHdpbmRvd1sncmxfJyArIGpzSGFzaCArICdfZmFjZWJvb2tfbG9naW5fc2VydmljZSddID0gZlNvY2lhbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy50d2l0dGVyTG9naW5FbmFibGVkKCkpIHtcblx0XHRcdHdpbmRvd1sncmxfJyArIGpzSGFzaCArICdfdHdpdHRlcl9sb2dpbl9zZXJ2aWNlJ10gPSBmU29jaWFsO1xuXHRcdH1cblxuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0TGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMubGFuZ1JlcXVlc3QodHJ1ZSk7XG5cblx0XHRcdFx0dHJhbnNsYXRvclJlbG9hZChmYWxzZSwgdmFsdWUpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5sYW5nUmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0XHR0aGlzLmJTZW5kTGFuZ3VhZ2UgPSB0cnVlO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5sYW5nUmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblxuXHRcdHRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZSh0cnVlKTtcblx0fVxuXG5cdHN1Ym1pdEZvcm0oKSB7XG5cdFx0dGhpcy5zdWJtaXRDb21tYW5kKCk7XG5cdH1cblxuXHRzZWxlY3RMYW5ndWFnZSgpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9MYW5ndWFnZXMnKSwgW3RoaXMubGFuZ3VhZ2UsIHRoaXMubGFuZ3VhZ2VzKCksIExhbmd1YWdlU3RvcmUudXNlckxhbmd1YWdlKCldKTtcblx0fVxuXG5cdHNlbGVjdExhbmd1YWdlT25UYWIoYlNoaWZ0KSB7XG5cdFx0aWYgKCFiU2hpZnQpIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmVtYWlsRm9jdXModHJ1ZSk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuZXhwb3J0IHsgTG9naW5Vc2VyVmlldywgTG9naW5Vc2VyVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcblxuaW1wb3J0IHsgRm9jdXNlZCwgQ2FwYSwgQ2xpZW50U2lkZUtleU5hbWUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyAkaHRtbCwgbGVmdFBhbmVsRGlzYWJsZWQsIGxlZnRQYW5lbFR5cGUsIG1vdmVBY3Rpb24sIGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBwU3RyaW5nLCBwSW50LCBkZWNvZGVVUkksIHdpbmRvd1Jlc2l6ZUNhbGxiYWNrIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGdldEZvbGRlckZyb21DYWNoZUxpc3QsIGdldEZvbGRlckZ1bGxOYW1lUmF3LCBnZXRGb2xkZXJJbmJveE5hbWUgfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0ICogYXMgRXZlbnRzIGZyb20gJ0NvbW1vbi9FdmVudHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IEFjY291bnRTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BY2NvdW50JztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0IHsgU3lzdGVtRHJvcERvd25NYWlsQm94VXNlclZpZXcgfSBmcm9tICdWaWV3L1VzZXIvTWFpbEJveC9TeXN0ZW1Ecm9wRG93bic7XG5pbXBvcnQgeyBGb2xkZXJMaXN0TWFpbEJveFVzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL01haWxCb3gvRm9sZGVyTGlzdCc7XG5pbXBvcnQgeyBNZXNzYWdlTGlzdE1haWxCb3hVc2VyVmlldyB9IGZyb20gJ1ZpZXcvVXNlci9NYWlsQm94L01lc3NhZ2VMaXN0JztcbmltcG9ydCB7IE1lc3NhZ2VWaWV3TWFpbEJveFVzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL01haWxCb3gvTWVzc2FnZVZpZXcnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgd2FybVVwU2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmltcG9ydCB7IEFic3RyYWN0U2NyZWVuIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RTY3JlZW4nO1xuXG5jbGFzcyBNYWlsQm94VXNlclNjcmVlbiBleHRlbmRzIEFic3RyYWN0U2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ21haWxib3gnLCBbXG5cdFx0XHRTeXN0ZW1Ecm9wRG93bk1haWxCb3hVc2VyVmlldyxcblx0XHRcdEZvbGRlckxpc3RNYWlsQm94VXNlclZpZXcsXG5cdFx0XHRNZXNzYWdlTGlzdE1haWxCb3hVc2VyVmlldyxcblx0XHRcdE1lc3NhZ2VWaWV3TWFpbEJveFVzZXJWaWV3XG5cdFx0XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHR1cGRhdGVXaW5kb3dUaXRsZSgpIHtcblx0XHRsZXQgZm9sZGVyc0luYm94VW5yZWFkQ291bnQgPSBGb2xkZXJTdG9yZS5mb2xkZXJzSW5ib3hVbnJlYWRDb3VudCgpO1xuXHRcdGNvbnN0IGVtYWlsID0gQWNjb3VudFN0b3JlLmVtYWlsKCk7XG5cblx0XHRpZiAoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2xpc3RQZXJtYW5lbnRGaWx0ZXJlZCcpKSB7XG5cdFx0XHRmb2xkZXJzSW5ib3hVbnJlYWRDb3VudCA9IDA7XG5cdFx0fVxuXG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoXG5cdFx0XHQoJycgPT09IGVtYWlsXG5cdFx0XHRcdD8gJydcblx0XHRcdFx0OiAnJyArICgwIDwgZm9sZGVyc0luYm94VW5yZWFkQ291bnQgPyAnKCcgKyBmb2xkZXJzSW5ib3hVbnJlYWRDb3VudCArICcpICcgOiAnICcpICsgZW1haWwgKyAnIC0gJykgK1xuXHRcdFx0XHRpMThuKCdUSVRMRVMvTUFJTEJPWCcpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLnVwZGF0ZVdpbmRvd1RpdGxlKCk7XG5cblx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5Ob25lKTtcblx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlTGlzdCk7XG5cblx0XHRpZiAoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpKSB7XG5cdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHR9XG5cblx0XHRpZiAoIVNldHRpbmdzLmNhcGEoQ2FwYS5Gb2xkZXJzKSkge1xuXHRcdFx0bGVmdFBhbmVsVHlwZShTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpIHx8IFNldHRpbmdzLmNhcGEoQ2FwYS5Db250YWN0cykgPyAnc2hvcnQnIDogJ25vbmUnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGVmdFBhbmVsVHlwZSgnJyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJIYXNoXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRvblJvdXRlKGZvbGRlckhhc2gsIHBhZ2UsIHNlYXJjaCkge1xuXHRcdGxldCB0aHJlYWRVaWQgPSBmb2xkZXJIYXNoLnJlcGxhY2UoL14oLispfihbXFxkXSspJC8sICckMicpO1xuXHRcdGNvbnN0IGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3QoZ2V0Rm9sZGVyRnVsbE5hbWVSYXcoZm9sZGVySGFzaC5yZXBsYWNlKC9+KFtcXGRdKykkLywgJycpKSk7XG5cblx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRpZiAoZm9sZGVySGFzaCA9PT0gdGhyZWFkVWlkKSB7XG5cdFx0XHRcdHRocmVhZFVpZCA9ICcnO1xuXHRcdFx0fVxuXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyKGZvbGRlcik7XG5cblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFBhZ2UocGFnZSk7XG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RTZWFyY2goc2VhcmNoKTtcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFRocmVhZFVpZCh0aHJlYWRVaWQpO1xuXG5cdFx0XHRnZXRBcHAoKS5yZWxvYWRNZXNzYWdlTGlzdCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG9uU3RhcnQoKSB7XG5cdFx0Rm9sZGVyU3RvcmUuZm9sZGVyTGlzdC5zdWJzY3JpYmUod2luZG93UmVzaXplQ2FsbGJhY2spO1xuXG5cdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0LnN1YnNjcmliZSh3aW5kb3dSZXNpemVDYWxsYmFjayk7XG5cdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2Uuc3Vic2NyaWJlKHdpbmRvd1Jlc2l6ZUNhbGxiYWNrKTtcblxuXHRcdF8uZGVsYXkoKCkgPT4gU2V0dGluZ3NTdG9yZS5sYXlvdXQudmFsdWVIYXNNdXRhdGVkKCksIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdFx0Xy5kZWxheSgoKSA9PiB3YXJtVXBTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2UnKSksIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXG5cdFx0RXZlbnRzLnN1YignbWFpbGJveC5pbmJveC11bnJlYWQtY291bnQnLCAoY291bnQpID0+IHtcblx0XHRcdEZvbGRlclN0b3JlLmZvbGRlcnNJbmJveFVucmVhZENvdW50KGNvdW50KTtcblxuXHRcdFx0Y29uc3QgZW1haWwgPSBBY2NvdW50U3RvcmUuZW1haWwoKTtcblx0XHRcdF8uZWFjaChBY2NvdW50U3RvcmUuYWNjb3VudHMoKSwgKGl0ZW0pID0+IHtcblx0XHRcdFx0aWYgKGl0ZW0gJiYgZW1haWwgPT09IGl0ZW0uZW1haWwpIHtcblx0XHRcdFx0XHRpdGVtLmNvdW50KGNvdW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudXBkYXRlV2luZG93VGl0bGUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG9uQnVpbGQoKSB7XG5cdFx0aWYgKCFiTW9iaWxlRGV2aWNlICYmICFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJykpIHtcblx0XHRcdF8uZGVmZXIoKCkgPT4ge1xuXHRcdFx0XHRnZXRBcHAoKS5pbml0SG9yaXpvbnRhbExheW91dFJlc2l6ZXIoQ2xpZW50U2lkZUtleU5hbWUuTWVzc2FnZUxpc3RTaXplKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdCRodG1sLm9uKCdjbGljaycsICcjcmwtcmlnaHQnLCAoKSA9PiB7XG5cdFx0XHRtb3ZlQWN0aW9uKGZhbHNlKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuXHRyb3V0ZXMoKSB7XG5cdFx0Y29uc3QgaW5ib3hGb2xkZXJOYW1lID0gZ2V0Rm9sZGVySW5ib3hOYW1lKCksXG5cdFx0XHRmTm9ybVMgPSAocmVxdWVzdCwgdmFscykgPT4ge1xuXHRcdFx0XHR2YWxzWzBdID0gcFN0cmluZyh2YWxzWzBdKTtcblx0XHRcdFx0dmFsc1sxXSA9IHBJbnQodmFsc1sxXSk7XG5cdFx0XHRcdHZhbHNbMV0gPSAwID49IHZhbHNbMV0gPyAxIDogdmFsc1sxXTtcblx0XHRcdFx0dmFsc1syXSA9IHBTdHJpbmcodmFsc1syXSk7XG5cblx0XHRcdFx0aWYgKCcnID09PSByZXF1ZXN0KSB7XG5cdFx0XHRcdFx0dmFsc1swXSA9IGluYm94Rm9sZGVyTmFtZTtcblx0XHRcdFx0XHR2YWxzWzFdID0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbZGVjb2RlVVJJKHZhbHNbMF0pLCB2YWxzWzFdLCBkZWNvZGVVUkkodmFsc1syXSldO1xuXHRcdFx0fSxcblx0XHRcdGZOb3JtRCA9IChyZXF1ZXN0LCB2YWxzKSA9PiB7XG5cdFx0XHRcdHZhbHNbMF0gPSBwU3RyaW5nKHZhbHNbMF0pO1xuXHRcdFx0XHR2YWxzWzFdID0gcFN0cmluZyh2YWxzWzFdKTtcblxuXHRcdFx0XHRpZiAoJycgPT09IHJlcXVlc3QpIHtcblx0XHRcdFx0XHR2YWxzWzBdID0gaW5ib3hGb2xkZXJOYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtkZWNvZGVVUkkodmFsc1swXSksIDEsIGRlY29kZVVSSSh2YWxzWzFdKV07XG5cdFx0XHR9O1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdFsvXihbYS16QS1aMC05fl0rKVxcL3AoWzEtOV1bMC05XSopXFwvKC4rKVxcLz8kLywgeyAnbm9ybWFsaXplXyc6IGZOb3JtUyB9XSxcblx0XHRcdFsvXihbYS16QS1aMC05fl0rKVxcL3AoWzEtOV1bMC05XSopJC8sIHsgJ25vcm1hbGl6ZV8nOiBmTm9ybVMgfV0sXG5cdFx0XHRbL14oW2EtekEtWjAtOX5dKylcXC8oLispXFwvPyQvLCB7ICdub3JtYWxpemVfJzogZk5vcm1EIH1dLFxuXHRcdFx0Wy9eKFteL10qKSQvLCB7ICdub3JtYWxpemVfJzogZk5vcm1TIH1dXG5cdFx0XTtcblx0fVxufVxuXG5leHBvcnQgeyBNYWlsQm94VXNlclNjcmVlbiwgTWFpbEJveFVzZXJTY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgdmlldywgVmlld1R5cGUgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFN5c3RlbURyb3BEb3duVXNlclZpZXcgfSBmcm9tICdWaWV3L1VzZXIvQWJzdHJhY3RTeXN0ZW1Ecm9wRG93bic7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvVXNlci9NYWlsQm94L1N5c3RlbURyb3BEb3duJyxcblx0dHlwZTogVmlld1R5cGUuUmlnaHQsXG5cdHRlbXBsYXRlSUQ6ICdTeXN0ZW1Ecm9wRG93bidcbn0pXG5jbGFzcyBTeXN0ZW1Ecm9wRG93bk1haWxCb3hVc2VyVmlldyBleHRlbmRzIEFic3RyYWN0U3lzdGVtRHJvcERvd25Vc2VyVmlldyB7fVxuXG5leHBvcnQgeyBTeXN0ZW1Ecm9wRG93bk1haWxCb3hVc2VyVmlldywgU3lzdGVtRHJvcERvd25NYWlsQm94VXNlclZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyB0cmltLCBpc05vcm1hbCwgaXNBcnJheSwgd2luZG93UmVzaXplIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IENhcGEsIEZvY3VzZWQsIExheW91dCwgS2V5U3RhdGUsIEV2ZW50S2V5Q29kZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7ICRodG1sLCBsZWZ0UGFuZWxEaXNhYmxlZCwgbW92ZUFjdGlvbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IG1haWxCb3gsIHNldHRpbmdzIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IHNldEZvbGRlckhhc2ggfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyB2aWV3LCBWaWV3VHlwZSwgc2hvd1NjcmVlblBvcHVwLCBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5Admlldyh7XG5cdG5hbWU6ICdWaWV3L1VzZXIvTWFpbEJveC9Gb2xkZXJMaXN0Jyxcblx0dHlwZTogVmlld1R5cGUuTGVmdCxcblx0dGVtcGxhdGVJRDogJ01haWxGb2xkZXJMaXN0J1xufSlcbmNsYXNzIEZvbGRlckxpc3RNYWlsQm94VXNlclZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMub0NvbnRlbnRWaXNpYmxlID0gbnVsbDtcblx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSA9IG51bGw7XG5cblx0XHR0aGlzLmNvbXBvc2VJbkVkaXQgPSBBcHBTdG9yZS5jb21wb3NlSW5FZGl0O1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdCA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdDtcblx0XHR0aGlzLmZvbGRlckxpc3QgPSBGb2xkZXJTdG9yZS5mb2xkZXJMaXN0O1xuXHRcdHRoaXMuZm9sZGVyTGlzdFN5c3RlbSA9IEZvbGRlclN0b3JlLmZvbGRlckxpc3RTeXN0ZW07XG5cdFx0dGhpcy5mb2xkZXJzQ2hhbmdpbmcgPSBGb2xkZXJTdG9yZS5mb2xkZXJzQ2hhbmdpbmc7XG5cblx0XHR0aGlzLm1vdmVBY3Rpb24gPSBtb3ZlQWN0aW9uO1xuXG5cdFx0dGhpcy5mb2xkZXJzTGlzdFdpdGhTaW5nbGVJbmJveFJvb3RGb2xkZXIgPSBGb2xkZXJTdG9yZS5mb2xkZXJzTGlzdFdpdGhTaW5nbGVJbmJveFJvb3RGb2xkZXI7XG5cblx0XHR0aGlzLmxlZnRQYW5lbERpc2FibGVkID0gbGVmdFBhbmVsRGlzYWJsZWQ7XG5cblx0XHR0aGlzLmlEcm9wT3ZlclRpbWVyID0gMDtcblxuXHRcdHRoaXMuYWxsb3dDb21wb3NlciA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKTtcblx0XHR0aGlzLmFsbG93Q29udGFjdHMgPSAhIUFwcFN0b3JlLmNvbnRhY3RzSXNBbGxvd2VkKCk7XG5cdFx0dGhpcy5hbGxvd0ZvbGRlcnMgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5Gb2xkZXJzKTtcblxuXHRcdHRoaXMuZm9sZGVyTGlzdEZvY3VzZWQgPSBrby5jb21wdXRlZCgoKSA9PiBGb2N1c2VkLkZvbGRlckxpc3QgPT09IEFwcFN0b3JlLmZvY3VzZWRTdGF0ZSgpKTtcblxuXHRcdHRoaXMuaXNJbmJveFN0YXJyZWQgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXIoKSAmJlxuXHRcdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyKCkuaXNJbmJveCgpICYmXG5cdFx0XHRcdC0xIDwgdHJpbShNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RTZWFyY2goKSkuaW5kZXhPZignaXM6ZmxhZ2dlZCcpXG5cdFx0KTtcblx0fVxuXG5cdG9uQnVpbGQoZG9tKSB7XG5cdFx0dGhpcy5vQ29udGVudFZpc2libGUgPSAkKCcuYi1jb250ZW50JywgZG9tKTtcblx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZSA9ICQoJy5jb250ZW50JywgdGhpcy5vQ29udGVudFZpc2libGUpO1xuXG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXMsXG5cdFx0XHRpc01vYmlsZSA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGUnKSxcblx0XHRcdGZTZWxlY3RGb2xkZXIgPSAoZWwsIGV2ZW50LCBzdGFycmVkKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlzTW92ZSA9IG1vdmVBY3Rpb24oKTtcblx0XHRcdFx0aWYgKGlzTW9iaWxlKSB7XG5cdFx0XHRcdFx0bGVmdFBhbmVsRGlzYWJsZWQodHJ1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRcdGlmIChzdGFycmVkKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmb2xkZXIgPSBrby5kYXRhRm9yKGVsKTtcblx0XHRcdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0XHRcdGlmIChpc01vdmUpIHtcblx0XHRcdFx0XHRcdG1vdmVBY3Rpb24oZmFsc2UpO1xuXHRcdFx0XHRcdFx0Z2V0QXBwKCkubW92ZU1lc3NhZ2VzVG9Gb2xkZXIoXG5cdFx0XHRcdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpLFxuXHRcdFx0XHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMoKSxcblx0XHRcdFx0XHRcdFx0Zm9sZGVyLmZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKExheW91dC5Ob1ByZXZpZXcgPT09IFNldHRpbmdzU3RvcmUubGF5b3V0KCkpIHtcblx0XHRcdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChmb2xkZXIuZnVsbE5hbWVSYXcgPT09IEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpKSB7XG5cdFx0XHRcdFx0XHRcdHNldEZvbGRlckhhc2goZm9sZGVyLmZ1bGxOYW1lUmF3LCAnJyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChzdGFycmVkKSB7XG5cdFx0XHRcdFx0XHRcdHNldEhhc2gobWFpbEJveChmb2xkZXIuZnVsbE5hbWVIYXNoLCAxLCAnaXM6ZmxhZ2dlZCcpKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHNldEhhc2gobWFpbEJveChmb2xkZXIuZnVsbE5hbWVIYXNoKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZUxpc3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0ZG9tXG5cdFx0XHQub24oJ2NsaWNrJywgJy5iLWZvbGRlcnMgLmUtaXRlbSAuZS1saW5rIC5lLWNvbGxhcHNlZC1zaWduJywgZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Y29uc3QgZm9sZGVyID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0aWYgKGZvbGRlciAmJiBldmVudCkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxhcHNlZCA9IGZvbGRlci5jb2xsYXBzZWQoKTtcblx0XHRcdFx0XHRnZXRBcHAoKS5zZXRFeHBhbmRlZEZvbGRlcihmb2xkZXIuZnVsbE5hbWVIYXNoLCBjb2xsYXBzZWQpO1xuXG5cdFx0XHRcdFx0Zm9sZGVyLmNvbGxhcHNlZCghY29sbGFwc2VkKTtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcuYi1mb2xkZXJzIC5lLWl0ZW0gLmUtbGluay5zZWxlY3RhYmxlIC5pbmJveC1zdGFyLWljb24nLCBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRmU2VsZWN0Rm9sZGVyKHRoaXMsIGV2ZW50LCAhc2VsZi5pc0luYm94U3RhcnJlZCgpKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdH0pXG5cdFx0XHQub24oJ2NsaWNrJywgJy5iLWZvbGRlcnMgLmUtaXRlbSAuZS1saW5rLnNlbGVjdGFibGUnLCBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRmU2VsZWN0Rm9sZGVyKHRoaXMsIGV2ZW50LCBmYWxzZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHR9KTtcblxuXHRcdGtleSgndXAsIGRvd24nLCBLZXlTdGF0ZS5Gb2xkZXJMaXN0LCAoZXZlbnQsIGhhbmRsZXIpID0+IHtcblx0XHRcdGNvbnN0IGtleUNvZGUgPSBoYW5kbGVyICYmICd1cCcgPT09IGhhbmRsZXIuc2hvcnRjdXQgPyBFdmVudEtleUNvZGUuVXAgOiBFdmVudEtleUNvZGUuRG93bixcblx0XHRcdFx0JGl0ZW1zID0gJCgnLmItZm9sZGVycyAuZS1pdGVtIC5lLWxpbms6bm90KC5oaWRkZW4pOnZpc2libGUnLCBkb20pO1xuXG5cdFx0XHRpZiAoZXZlbnQgJiYgJGl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0XHRsZXQgaW5kZXggPSAkaXRlbXMuaW5kZXgoJGl0ZW1zLmZpbHRlcignLmZvY3VzZWQnKSk7XG5cdFx0XHRcdGlmICgtMSA8IGluZGV4KSB7XG5cdFx0XHRcdFx0JGl0ZW1zLmVxKGluZGV4KS5yZW1vdmVDbGFzcygnZm9jdXNlZCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKEV2ZW50S2V5Q29kZS5VcCA9PT0ga2V5Q29kZSAmJiAwIDwgaW5kZXgpIHtcblx0XHRcdFx0XHRpbmRleCAtPSAxO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5Eb3duID09PSBrZXlDb2RlICYmIGluZGV4IDwgJGl0ZW1zLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRpbmRleCArPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JGl0ZW1zLmVxKGluZGV4KS5hZGRDbGFzcygnZm9jdXNlZCcpO1xuXHRcdFx0XHRzZWxmLnNjcm9sbFRvRm9jdXNlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRrZXkoJ2VudGVyJywgS2V5U3RhdGUuRm9sZGVyTGlzdCwgKCkgPT4ge1xuXHRcdFx0Y29uc3QgJGl0ZW1zID0gJCgnLmItZm9sZGVycyAuZS1pdGVtIC5lLWxpbms6bm90KC5oaWRkZW4pLmZvY3VzZWQnLCBkb20pO1xuXHRcdFx0aWYgKCRpdGVtcy5sZW5ndGggJiYgJGl0ZW1zWzBdKSB7XG5cdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLk1lc3NhZ2VMaXN0KTtcblx0XHRcdFx0JGl0ZW1zLmNsaWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGtleSgnc3BhY2UnLCBLZXlTdGF0ZS5Gb2xkZXJMaXN0LCAoKSA9PiB7XG5cdFx0XHRjb25zdCAkaXRlbXMgPSAkKCcuYi1mb2xkZXJzIC5lLWl0ZW0gLmUtbGluazpub3QoLmhpZGRlbikuZm9jdXNlZCcsIGRvbSk7XG5cdFx0XHRpZiAoJGl0ZW1zLmxlbmd0aCAmJiAkaXRlbXNbMF0pIHtcblx0XHRcdFx0Y29uc3QgZm9sZGVyID0ga28uZGF0YUZvcigkaXRlbXNbMF0pO1xuXHRcdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGFwc2VkID0gZm9sZGVyLmNvbGxhcHNlZCgpO1xuXHRcdFx0XHRcdGdldEFwcCgpLnNldEV4cGFuZGVkRm9sZGVyKGZvbGRlci5mdWxsTmFtZUhhc2gsIGNvbGxhcHNlZCk7XG5cdFx0XHRcdFx0Zm9sZGVyLmNvbGxhcHNlZCghY29sbGFwc2VkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRrZXkoJ2VzYywgdGFiLCBzaGlmdCt0YWIsIHJpZ2h0JywgS2V5U3RhdGUuRm9sZGVyTGlzdCwgKCkgPT4ge1xuXHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZUxpc3QpO1xuXHRcdFx0bW92ZUFjdGlvbihmYWxzZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0JCgnLmItZm9sZGVycyAuZS1pdGVtIC5lLWxpbmsuZm9jdXNlZCcsIGRvbSkucmVtb3ZlQ2xhc3MoJ2ZvY3VzZWQnKTtcblx0XHRcdGlmIChGb2N1c2VkLkZvbGRlckxpc3QgPT09IHZhbHVlKSB7XG5cdFx0XHRcdCQoJy5iLWZvbGRlcnMgLmUtaXRlbSAuZS1saW5rLnNlbGVjdGVkJywgZG9tKS5hZGRDbGFzcygnZm9jdXNlZCcpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0bWVzc2FnZXNEcm9wT3Zlcihmb2xkZXIpIHtcblx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuaURyb3BPdmVyVGltZXIpO1xuXHRcdGlmIChmb2xkZXIgJiYgZm9sZGVyLmNvbGxhcHNlZCgpKSB7XG5cdFx0XHR0aGlzLmlEcm9wT3ZlclRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRmb2xkZXIuY29sbGFwc2VkKGZhbHNlKTtcblx0XHRcdFx0Z2V0QXBwKCkuc2V0RXhwYW5kZWRGb2xkZXIoZm9sZGVyLmZ1bGxOYW1lSGFzaCwgdHJ1ZSk7XG5cdFx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWU1MDBtcyk7XG5cdFx0fVxuXHR9XG5cblx0bWVzc2FnZXNEcm9wT3V0KCkge1xuXHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5pRHJvcE92ZXJUaW1lcik7XG5cdH1cblxuXHRzY3JvbGxUb0ZvY3VzZWQoKSB7XG5cdFx0aWYgKCF0aGlzLm9Db250ZW50VmlzaWJsZSB8fCAhdGhpcy5vQ29udGVudFNjcm9sbGFibGUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCBvZmZzZXQgPSAyMCxcblx0XHRcdGZvY3VzZWQgPSAkKCcuZS1pdGVtIC5lLWxpbmsuZm9jdXNlZCcsIHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlKSxcblx0XHRcdHBvcyA9IGZvY3VzZWQucG9zaXRpb24oKSxcblx0XHRcdHZpc2libGVIZWlnaHQgPSB0aGlzLm9Db250ZW50VmlzaWJsZS5oZWlnaHQoKSxcblx0XHRcdGZvY3VzZWRIZWlnaHQgPSBmb2N1c2VkLm91dGVySGVpZ2h0KCk7XG5cblx0XHRpZiAocG9zICYmICgwID4gcG9zLnRvcCB8fCBwb3MudG9wICsgZm9jdXNlZEhlaWdodCA+IHZpc2libGVIZWlnaHQpKSB7XG5cdFx0XHRpZiAoMCA+IHBvcy50b3ApIHtcblx0XHRcdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlLnNjcm9sbFRvcCgpICsgcG9zLnRvcCAtIG9mZnNldCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm9Db250ZW50U2Nyb2xsYWJsZS5zY3JvbGxUb3AoXG5cdFx0XHRcdFx0dGhpcy5vQ29udGVudFNjcm9sbGFibGUuc2Nyb2xsVG9wKCkgKyBwb3MudG9wIC0gdmlzaWJsZUhlaWdodCArIGZvY3VzZWRIZWlnaHQgKyBvZmZzZXRcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Rm9sZGVyTW9kZWx9IHRvRm9sZGVyXG5cdCAqIEBwYXJhbSB7e2hlbHBlcjpqUXVlcnl9fSB1aVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG1lc3NhZ2VzRHJvcCh0b0ZvbGRlciwgdWkpIHtcblx0XHRpZiAodG9Gb2xkZXIgJiYgdWkgJiYgdWkuaGVscGVyKSB7XG5cdFx0XHRjb25zdCBmcm9tRm9sZGVyRnVsbE5hbWVSYXcgPSB1aS5oZWxwZXIuZGF0YSgncmwtZm9sZGVyJyksXG5cdFx0XHRcdGNvcHkgPSAkaHRtbC5oYXNDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpLFxuXHRcdFx0XHR1aWRzID0gdWkuaGVscGVyLmRhdGEoJ3JsLXVpZHMnKTtcblxuXHRcdFx0aWYgKGlzTm9ybWFsKGZyb21Gb2xkZXJGdWxsTmFtZVJhdykgJiYgJycgIT09IGZyb21Gb2xkZXJGdWxsTmFtZVJhdyAmJiBpc0FycmF5KHVpZHMpKSB7XG5cdFx0XHRcdGdldEFwcCgpLm1vdmVNZXNzYWdlc1RvRm9sZGVyKGZyb21Gb2xkZXJGdWxsTmFtZVJhdywgdWlkcywgdG9Gb2xkZXIuZnVsbE5hbWVSYXcsIGNvcHkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbXBvc2VDbGljaygpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29tcG9zZScpKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVGb2xkZXIoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRm9sZGVyQ3JlYXRlJykpO1xuXHR9XG5cblx0Y29uZmlndXJlRm9sZGVycygpIHtcblx0XHRzZXRIYXNoKHNldHRpbmdzKCdmb2xkZXJzJykpO1xuXHR9XG5cblx0Y29udGFjdHNDbGljaygpIHtcblx0XHRpZiAodGhpcy5hbGxvd0NvbnRhY3RzKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db250YWN0cycpKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgRm9sZGVyTGlzdE1haWxCb3hVc2VyVmlldywgRm9sZGVyTGlzdE1haWxCb3hVc2VyVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IENvbnRhY3RQcm9wZXJ0eVR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgdHJpbSwgaXNOb25FbXB0eUFycmF5LCBpc05vcm1hbCwgcEludCwgcFN0cmluZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBlbXB0eUNvbnRhY3RQaWMgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdE1vZGVsIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RNb2RlbCc7XG5cbmNsYXNzIENvbnRhY3RNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcignQ29udGFjdE1vZGVsJyk7XG5cblx0XHR0aGlzLmlkQ29udGFjdCA9IDA7XG5cdFx0dGhpcy5kaXNwbGF5ID0gJyc7XG5cdFx0dGhpcy5wcm9wZXJ0aWVzID0gW107XG5cdFx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xuXG5cdFx0dGhpcy5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zZWxlY3RlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY2hlY2tlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZGVsZXRlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtBcnJheXxudWxsfVxuXHQgKi9cblx0Z2V0TmFtZUFuZEVtYWlsSGVscGVyKCkge1xuXHRcdGxldCBuYW1lID0gJycsXG5cdFx0XHRlbWFpbCA9ICcnO1xuXG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheSh0aGlzLnByb3BlcnRpZXMpKSB7XG5cdFx0XHRfLmVhY2godGhpcy5wcm9wZXJ0aWVzLCAocHJvcGVydHkpID0+IHtcblx0XHRcdFx0aWYgKHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0aWYgKENvbnRhY3RQcm9wZXJ0eVR5cGUuRmlyc3ROYW1lID09PSBwcm9wZXJ0eVswXSkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHRyaW0ocHJvcGVydHlbMV0gKyAnICcgKyBuYW1lKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKENvbnRhY3RQcm9wZXJ0eVR5cGUuTGFzdE5hbWUgPT09IHByb3BlcnR5WzBdKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gdHJpbShuYW1lICsgJyAnICsgcHJvcGVydHlbMV0pO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoJycgPT09IGVtYWlsICYmIENvbnRhY3RQcm9wZXJ0eVR5cGUuRW1haWwgPT09IHByb3BlcnR5WzBdKSB7XG5cdFx0XHRcdFx0XHRlbWFpbCA9IHByb3BlcnR5WzFdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnID09PSBlbWFpbCA/IG51bGwgOiBbZW1haWwsIG5hbWVdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvSXRlbVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHBhcnNlKGpzb24pIHtcblx0XHRsZXQgcmVzdWx0ID0gZmFsc2U7XG5cdFx0aWYgKGpzb24gJiYgJ09iamVjdC9Db250YWN0JyA9PT0ganNvblsnQE9iamVjdCddKSB7XG5cdFx0XHR0aGlzLmlkQ29udGFjdCA9IHBJbnQoanNvbi5JZENvbnRhY3QpO1xuXHRcdFx0dGhpcy5kaXNwbGF5ID0gcFN0cmluZyhqc29uLkRpc3BsYXkpO1xuXHRcdFx0dGhpcy5yZWFkT25seSA9ICEhanNvbi5SZWFkT25seTtcblxuXHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShqc29uLlByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdF8uZWFjaChqc29uLlByb3BlcnRpZXMsIChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5UeXBlICYmIGlzTm9ybWFsKHByb3BlcnR5LlZhbHVlKSAmJiBpc05vcm1hbChwcm9wZXJ0eS5UeXBlU3RyKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5wcm9wZXJ0aWVzLnB1c2goW3BJbnQocHJvcGVydHkuVHlwZSksIHBTdHJpbmcocHJvcGVydHkuVmFsdWUpLCBwU3RyaW5nKHByb3BlcnR5LlR5cGVTdHIpXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzcmNBdHRyKCkge1xuXHRcdHJldHVybiBlbXB0eUNvbnRhY3RQaWMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2VuZXJhdGVVaWQoKSB7XG5cdFx0cmV0dXJuIHBTdHJpbmcodGhpcy5pZENvbnRhY3QpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4gc3RyaW5nXG5cdCAqL1xuXHRsaW5lQXNDc3MoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0aWYgKHRoaXMuZGVsZXRlZCgpKSB7XG5cdFx0XHRyZXN1bHQucHVzaCgnZGVsZXRlZCcpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5zZWxlY3RlZCgpKSB7XG5cdFx0XHRyZXN1bHQucHVzaCgnc2VsZWN0ZWQnKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY2hlY2tlZCgpKSB7XG5cdFx0XHRyZXN1bHQucHVzaCgnY2hlY2tlZCcpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5mb2N1c2VkKCkpIHtcblx0XHRcdHJlc3VsdC5wdXNoKCdmb2N1c2VkJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQ29udGFjdE1vZGVsLCBDb250YWN0TW9kZWwgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQgSnVhIGZyb20gJ0p1YSc7XG5pbXBvcnQgaWZ2aXNpYmxlIGZyb20gJ2lmdmlzaWJsZSc7XG5cbmltcG9ydCB7XG5cdENhcGEsXG5cdExheW91dCxcblx0Rm9jdXNlZCxcblx0Q29tcG9zZVR5cGUsXG5cdEZvbGRlclR5cGUsXG5cdE1hZ2ljcyxcblx0TWVzc2FnZVNldEFjdGlvbixcblx0S2V5U3RhdGUsXG5cdFN0b3JhZ2VSZXN1bHRUeXBlXG59IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7IFVOVVNFRF9PUFRJT05fVkFMVUUgfSBmcm9tICdDb21tb24vQ29uc3RzJztcblxuaW1wb3J0IHsgYk1vYmlsZURldmljZSwgcG9wdXBWaXNpYmlsaXR5LCBsZWZ0UGFuZWxEaXNhYmxlZCwgbW92ZUFjdGlvbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHsgbm9vcCwgbm9vcEZhbHNlLCBjb21wdXRlZFBhZ2VuYXRvckhlbHBlciwgZHJhZ2dhYmxlUGxhY2UsIGZyaWVuZGx5U2l6ZSwgaW5BcnJheSwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBtYWlsQm94LCBhcHBlbmQgfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tICdDb21tb24vU2VsZWN0b3InO1xuaW1wb3J0ICogYXMgRXZlbnRzIGZyb20gJ0NvbW1vbi9FdmVudHMnO1xuXG5pbXBvcnQgeyBpMThuLCBpbml0T25TdGFydE9yTGFuZ0NoYW5nZSB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHtcblx0Z2V0Rm9sZGVyRnJvbUNhY2hlTGlzdCxcblx0Y2xlYXJNZXNzYWdlRmxhZ3NGcm9tQ2FjaGVCeUZvbGRlcixcblx0aGFzUmVxdWVzdGVkTWVzc2FnZSxcblx0YWRkUmVxdWVzdGVkTWVzc2FnZVxufSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBRdW90YVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1F1b3RhJztcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1NldHRpbmdzJztcbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgdmlldywgY29tbWFuZCwgVmlld1R5cGUsIHNob3dTY3JlZW5Qb3B1cCwgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuY29uc3QgY2FuQmVNb3ZlZEhlbHBlciA9IChzZWxmKSA9PiBzZWxmLmNhbkJlTW92ZWQoKTtcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9Vc2VyL01haWxCb3gvTWVzc2FnZUxpc3QnLFxuXHR0eXBlOiBWaWV3VHlwZS5SaWdodCxcblx0dGVtcGxhdGVJRDogJ01haWxNZXNzYWdlTGlzdCdcbn0pXG5jbGFzcyBNZXNzYWdlTGlzdE1haWxCb3hVc2VyVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5zTGFzdFVpZCA9IG51bGw7XG5cdFx0dGhpcy5iUHJlZmV0Y2ggPSBmYWxzZTtcblx0XHR0aGlzLmVtcHR5U3ViamVjdFZhbHVlID0gJyc7XG5cblx0XHR0aGlzLmlHb1RvVXBVcE9yRG93bkRvd25UaW1lb3V0ID0gMDtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cdFx0dGhpcy5uZXdNb3ZlVG9Gb2xkZXIgPSBBcHBTdG9yZS5uZXdNb3ZlVG9Gb2xkZXI7XG5cblx0XHR0aGlzLmFsbG93UmVsb2FkID0gISFTZXR0aW5ncy5jYXBhKENhcGEuUmVsb2FkKTtcblx0XHR0aGlzLmFsbG93U2VhcmNoID0gISFTZXR0aW5ncy5jYXBhKENhcGEuU2VhcmNoKTtcblx0XHR0aGlzLmFsbG93U2VhcmNoQWR2ID0gISFTZXR0aW5ncy5jYXBhKENhcGEuU2VhcmNoQWR2KTtcblx0XHR0aGlzLmFsbG93Q29tcG9zZXIgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5Db21wb3Nlcik7XG5cdFx0dGhpcy5hbGxvd01lc3NhZ2VMaXN0QWN0aW9ucyA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLk1lc3NhZ2VMaXN0QWN0aW9ucyk7XG5cdFx0dGhpcy5hbGxvd0Rhbmdlcm91c0FjdGlvbnMgPSAhIVNldHRpbmdzLmNhcGEoQ2FwYS5EYW5nZXJvdXNBY3Rpb25zKTtcblx0XHR0aGlzLmFsbG93Rm9sZGVycyA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLkZvbGRlcnMpO1xuXG5cdFx0dGhpcy5wb3B1cFZpc2liaWxpdHkgPSBwb3B1cFZpc2liaWxpdHk7XG5cblx0XHR0aGlzLm1lc3NhZ2UgPSBNZXNzYWdlU3RvcmUubWVzc2FnZTtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0ID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0O1xuXHRcdHRoaXMubWVzc2FnZUxpc3REaXNhYmxlQXV0b1NlbGVjdCA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdERpc2FibGVBdXRvU2VsZWN0O1xuXG5cdFx0dGhpcy5mb2xkZXJMaXN0ID0gRm9sZGVyU3RvcmUuZm9sZGVyTGlzdDtcblxuXHRcdHRoaXMuY29tcG9zZUluRWRpdCA9IEFwcFN0b3JlLmNvbXBvc2VJbkVkaXQ7XG5cdFx0dGhpcy5sZWZ0UGFuZWxEaXNhYmxlZCA9IGxlZnRQYW5lbERpc2FibGVkO1xuXG5cdFx0dGhpcy5zZWxlY3Rvck1lc3NhZ2VTZWxlY3RlZCA9IE1lc3NhZ2VTdG9yZS5zZWxlY3Rvck1lc3NhZ2VTZWxlY3RlZDtcblx0XHR0aGlzLnNlbGVjdG9yTWVzc2FnZUZvY3VzZWQgPSBNZXNzYWdlU3RvcmUuc2VsZWN0b3JNZXNzYWdlRm9jdXNlZDtcblx0XHR0aGlzLmlzTWVzc2FnZVNlbGVjdGVkID0gTWVzc2FnZVN0b3JlLmlzTWVzc2FnZVNlbGVjdGVkO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RTZWFyY2ggPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RTZWFyY2g7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdFRocmVhZFVpZCA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFRocmVhZFVpZDtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0RXJyb3IgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RFcnJvcjtcblx0XHR0aGlzLmZvbGRlck1lbnVGb3JNb3ZlID0gRm9sZGVyU3RvcmUuZm9sZGVyTWVudUZvck1vdmU7XG5cblx0XHR0aGlzLnVzZUNoZWNrYm94ZXNJbkxpc3QgPSBTZXR0aW5nc1N0b3JlLnVzZUNoZWNrYm94ZXNJbkxpc3Q7XG5cblx0XHR0aGlzLm1haW5NZXNzYWdlTGlzdFNlYXJjaCA9IE1lc3NhZ2VTdG9yZS5tYWluTWVzc2FnZUxpc3RTZWFyY2g7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdEVuZEZvbGRlciA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdEVuZEZvbGRlcjtcblx0XHR0aGlzLm1lc3NhZ2VMaXN0RW5kVGhyZWFkVWlkID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0RW5kVGhyZWFkVWlkO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdENoZWNrZWQgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZCA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHM7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGU7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdENvbXBsZXRlTG9hZGluZ1Rocm90dGxlRm9yQW5pbWF0aW9uID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGVGb3JBbmltYXRpb247XG5cblx0XHRpbml0T25TdGFydE9yTGFuZ0NoYW5nZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmVtcHR5U3ViamVjdFZhbHVlID0gaTE4bignTUVTU0FHRV9MSVNUL0VNUFRZX1NVQkpFQ1RfVEVYVCcpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy51c2VyUXVvdGEgPSBRdW90YVN0b3JlLnF1b3RhO1xuXHRcdHRoaXMudXNlclVzYWdlU2l6ZSA9IFF1b3RhU3RvcmUudXNhZ2U7XG5cdFx0dGhpcy51c2VyVXNhZ2VQcm9jID0gUXVvdGFTdG9yZS5wZXJjZW50YWdlO1xuXG5cdFx0dGhpcy5tb3ZlRHJvcGRvd25UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5tb3JlRHJvcGRvd25UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHQvLyBhcHBlbmQgZHJhZyBhbmQgZHJvcFxuXHRcdHRoaXMuZHJhZ092ZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyAndGhyb3R0bGUnOiAxIH0pO1xuXHRcdHRoaXMuZHJhZ092ZXJFbnRlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7ICd0aHJvdHRsZSc6IDEgfSk7XG5cdFx0dGhpcy5kcmFnT3ZlckFyZWEgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuZHJhZ092ZXJCb2R5QXJlYSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0SXRlbVRlbXBsYXRlID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdHRoaXMubW9iaWxlIHx8IExheW91dC5TaWRlUHJldmlldyA9PT0gU2V0dGluZ3NTdG9yZS5sYXlvdXQoKVxuXHRcdFx0XHQ/ICdNYWlsTWVzc2FnZUxpc3RJdGVtJ1xuXHRcdFx0XHQ6ICdNYWlsTWVzc2FnZUxpc3RJdGVtTm9QcmV2aWV3UGFuZSdcblx0XHQpO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdFNlYXJjaERlc2MgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdEVuZFNlYXJjaCgpO1xuXHRcdFx0cmV0dXJuICcnID09PSB2YWx1ZSA/ICcnIDogaTE4bignTUVTU0FHRV9MSVNUL1NFQVJDSF9SRVNVTFRfRk9SJywgeyAnU0VBUkNIJzogdmFsdWUgfSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VMaXN0UGFnZW5hdG9yID0ga28uY29tcHV0ZWQoXG5cdFx0XHRjb21wdXRlZFBhZ2VuYXRvckhlbHBlcihNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RQYWdlLCBNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RQYWdlQ291bnQpXG5cdFx0KTtcblxuXHRcdHRoaXMuY2hlY2tBbGwgPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiAoKSA9PiAwIDwgTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZCgpLmxlbmd0aCxcblx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0dmFsdWUgPSAhIXZhbHVlO1xuXHRcdFx0XHRfLmVhY2goTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KCksIChtZXNzYWdlKSA9PiB7XG5cdFx0XHRcdFx0bWVzc2FnZS5jaGVja2VkKHZhbHVlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmlucHV0TWVzc2FnZUxpc3RTZWFyY2hGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5zTGFzdFNlYXJjaFZhbHVlID0gJyc7XG5cdFx0dGhpcy5pbnB1dFByb3h5TWVzc2FnZUxpc3RTZWFyY2ggPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0aGlzLm1haW5NZXNzYWdlTGlzdFNlYXJjaCxcblx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5zTGFzdFNlYXJjaFZhbHVlID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmlzSW5jb21wbGV0ZUNoZWNrZWQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBtID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KCkubGVuZ3RoLFxuXHRcdFx0XHRjID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZCgpLmxlbmd0aDtcblx0XHRcdHJldHVybiAwIDwgbSAmJiAwIDwgYyAmJiBtID4gYztcblx0XHR9KTtcblxuXHRcdHRoaXMuaGFzTWVzc2FnZXMgPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5tZXNzYWdlTGlzdCgpLmxlbmd0aCk7XG5cblx0XHR0aGlzLmhhc0NoZWNrZWRPclNlbGVjdGVkTGluZXMgPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKCkubGVuZ3RoKTtcblxuXHRcdHRoaXMuaXNTcGFtRm9sZGVyID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCkgPT09IHRoaXMubWVzc2FnZUxpc3RFbmRGb2xkZXIoKSAmJiAnJyAhPT0gRm9sZGVyU3RvcmUuc3BhbUZvbGRlcigpXG5cdFx0KTtcblxuXHRcdHRoaXMuaXNTcGFtRGlzYWJsZWQgPSBrby5jb21wdXRlZCgoKSA9PiBVTlVTRURfT1BUSU9OX1ZBTFVFID09PSBGb2xkZXJTdG9yZS5zcGFtRm9sZGVyKCkpO1xuXG5cdFx0dGhpcy5pc1RyYXNoRm9sZGVyID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiBGb2xkZXJTdG9yZS50cmFzaEZvbGRlcigpID09PSB0aGlzLm1lc3NhZ2VMaXN0RW5kRm9sZGVyKCkgJiYgJycgIT09IEZvbGRlclN0b3JlLnRyYXNoRm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5pc0RyYWZ0Rm9sZGVyID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiBGb2xkZXJTdG9yZS5kcmFmdEZvbGRlcigpID09PSB0aGlzLm1lc3NhZ2VMaXN0RW5kRm9sZGVyKCkgJiYgJycgIT09IEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5pc1NlbnRGb2xkZXIgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+IEZvbGRlclN0b3JlLnNlbnRGb2xkZXIoKSA9PT0gdGhpcy5tZXNzYWdlTGlzdEVuZEZvbGRlcigpICYmICcnICE9PSBGb2xkZXJTdG9yZS5zZW50Rm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5pc0FyY2hpdmVGb2xkZXIgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+IEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIoKSA9PT0gdGhpcy5tZXNzYWdlTGlzdEVuZEZvbGRlcigpICYmICcnICE9PSBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5pc0FyY2hpdmVEaXNhYmxlZCA9IGtvLmNvbXB1dGVkKCgpID0+IFVOVVNFRF9PUFRJT05fVkFMVUUgPT09IEZvbGRlclN0b3JlLmFyY2hpdmVGb2xkZXIoKSk7XG5cblx0XHR0aGlzLmlzQXJjaGl2ZVZpc2libGUgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+ICF0aGlzLmlzQXJjaGl2ZUZvbGRlcigpICYmICF0aGlzLmlzQXJjaGl2ZURpc2FibGVkKCkgJiYgIXRoaXMuaXNEcmFmdEZvbGRlcigpXG5cdFx0KTtcblxuXHRcdHRoaXMuaXNTcGFtVmlzaWJsZSA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gIXRoaXMuaXNTcGFtRm9sZGVyKCkgJiYgIXRoaXMuaXNTcGFtRGlzYWJsZWQoKSAmJiAhdGhpcy5pc0RyYWZ0Rm9sZGVyKCkgJiYgIXRoaXMuaXNTZW50Rm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5pc1VuU3BhbVZpc2libGUgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+IHRoaXMuaXNTcGFtRm9sZGVyKCkgJiYgIXRoaXMuaXNTcGFtRGlzYWJsZWQoKSAmJiAhdGhpcy5pc0RyYWZ0Rm9sZGVyKCkgJiYgIXRoaXMuaXNTZW50Rm9sZGVyKClcblx0XHQpO1xuXG5cdFx0dGhpcy5tb2JpbGVDaGVja2VkU3RhdGVTaG93ID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgY2hlY2tlZCA9IDAgPCB0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZCgpLmxlbmd0aDtcblx0XHRcdHJldHVybiB0aGlzLm1vYmlsZSA/IGNoZWNrZWQgOiB0cnVlO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tb2JpbGVDaGVja2VkU3RhdGVIaWRlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgY2hlY2tlZCA9IDAgPCB0aGlzLm1lc3NhZ2VMaXN0Q2hlY2tlZCgpLmxlbmd0aDtcblx0XHRcdHJldHVybiB0aGlzLm1vYmlsZSA/ICFjaGVja2VkIDogdHJ1ZTtcblx0XHR9KTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RGb2N1c2VkID0ga28uY29tcHV0ZWQoKCkgPT4gRm9jdXNlZC5NZXNzYWdlTGlzdCA9PT0gQXBwU3RvcmUuZm9jdXNlZFN0YXRlKCkpO1xuXG5cdFx0dGhpcy5jYW5CZU1vdmVkID0gdGhpcy5oYXNDaGVja2VkT3JTZWxlY3RlZExpbmVzO1xuXG5cdFx0dGhpcy5xdW90YVRvb2x0aXAgPSBfLmJpbmQodGhpcy5xdW90YVRvb2x0aXAsIHRoaXMpO1xuXG5cdFx0dGhpcy5zZWxlY3RvciA9IG5ldyBTZWxlY3Rvcihcblx0XHRcdHRoaXMubWVzc2FnZUxpc3QsXG5cdFx0XHR0aGlzLnNlbGVjdG9yTWVzc2FnZVNlbGVjdGVkLFxuXHRcdFx0dGhpcy5zZWxlY3Rvck1lc3NhZ2VGb2N1c2VkLFxuXHRcdFx0Jy5tZXNzYWdlTGlzdEl0ZW0gLmFjdGlvbkhhbmRsZScsXG5cdFx0XHQnLm1lc3NhZ2VMaXN0SXRlbS5zZWxlY3RlZCcsXG5cdFx0XHQnLm1lc3NhZ2VMaXN0SXRlbSAuY2hlY2tib3hNZXNzYWdlJyxcblx0XHRcdCcubWVzc2FnZUxpc3RJdGVtLmZvY3VzZWQnXG5cdFx0KTtcblxuXHRcdHRoaXMuc2VsZWN0b3Iub24oJ29uSXRlbVNlbGVjdCcsIChtZXNzYWdlKSA9PiB7XG5cdFx0XHRNZXNzYWdlU3RvcmUuc2VsZWN0TWVzc2FnZShtZXNzYWdlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2VsZWN0b3Iub24oJ29uSXRlbUdldFVpZCcsIChtZXNzYWdlKSA9PiAobWVzc2FnZSA/IG1lc3NhZ2UuZ2VuZXJhdGVVaWQoKSA6ICcnKSk7XG5cblx0XHR0aGlzLnNlbGVjdG9yLm9uKCdvbkF1dG9TZWxlY3QnLCAoKSA9PiB0aGlzLnVzZUF1dG9TZWxlY3QoKSk7XG5cblx0XHR0aGlzLnNlbGVjdG9yLm9uKCdvblVwVXBPckRvd25Eb3duJywgKHYpID0+IHtcblx0XHRcdHRoaXMuZ29Ub1VwVXBPckRvd25Eb3duKHYpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1YignbWFpbGJveC5tZXNzYWdlLWxpc3Quc2VsZWN0b3IuZ28tZG93bicsIChzZWxlY3QpID0+IHtcblx0XHRcdHRoaXMuc2VsZWN0b3IuZ29Eb3duKHNlbGVjdCk7XG5cdFx0fSk7XG5cblx0XHRFdmVudHMuc3ViKCdtYWlsYm94Lm1lc3NhZ2UtbGlzdC5zZWxlY3Rvci5nby11cCcsIChzZWxlY3QpID0+IHtcblx0XHRcdHRoaXMuc2VsZWN0b3IuZ29VcChzZWxlY3QpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1YignbWFpbGJveC5tZXNzYWdlLnNob3cnLCAoc0ZvbGRlciwgc1VpZCkgPT4ge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IF8uZmluZChcblx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdCgpLFxuXHRcdFx0XHQoaXRlbSkgPT4gaXRlbSAmJiBzRm9sZGVyID09PSBpdGVtLmZvbGRlckZ1bGxOYW1lUmF3ICYmIHNVaWQgPT09IGl0ZW0udWlkXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoJ0lOQk9YJyA9PT0gc0ZvbGRlcikge1xuXHRcdFx0XHRzZXRIYXNoKG1haWxCb3goc0ZvbGRlciwgMSkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdG9yLnNlbGVjdE1lc3NhZ2VJdGVtKG1lc3NhZ2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCdJTkJPWCcgIT09IHNGb2xkZXIpIHtcblx0XHRcdFx0XHRzZXRIYXNoKG1haWxCb3goc0ZvbGRlciwgMSkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0TWVzc2FnZVN0b3JlLnNlbGVjdE1lc3NhZ2VCeUZvbGRlckFuZFVpZChzRm9sZGVyLCBzVWlkKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdEVuZEhhc2guc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuc2VsZWN0b3Iuc2Nyb2xsVG9Ub3AoKTtcblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0Y2xlYXJDb21tYW5kKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuRGFuZ2Vyb3VzQWN0aW9ucykpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0ZvbGRlckNsZWFyJyksIFtGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyKCldKTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdHJlbG9hZENvbW1hbmQoKSB7XG5cdFx0aWYgKCFNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDb21wbGV0ZUxvYWRpbmdUaHJvdHRsZUZvckFuaW1hdGlvbigpICYmIHRoaXMuYWxsb3dSZWxvYWQpIHtcblx0XHRcdGdldEFwcCgpLnJlbG9hZE1lc3NhZ2VMaXN0KGZhbHNlLCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRtdWx0eUZvcndhcmRDb21tYW5kKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlJyksIFtcblx0XHRcdFx0Q29tcG9zZVR5cGUuRm9yd2FyZEFzQXR0YWNobWVudCxcblx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWQoKVxuXHRcdFx0XSk7XG5cdFx0fVxuXHR9XG5cblx0QGNvbW1hbmQoY2FuQmVNb3ZlZEhlbHBlcilcblx0ZGVsZXRlV2l0aG91dE1vdmVDb21tYW5kKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuRGFuZ2Vyb3VzQWN0aW9ucykpIHtcblx0XHRcdGdldEFwcCgpLmRlbGV0ZU1lc3NhZ2VzRnJvbUZvbGRlcihcblx0XHRcdFx0Rm9sZGVyVHlwZS5UcmFzaCxcblx0XHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KCksXG5cdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRkZWxldGVDb21tYW5kKCkge1xuXHRcdGdldEFwcCgpLmRlbGV0ZU1lc3NhZ2VzRnJvbUZvbGRlcihcblx0XHRcdEZvbGRlclR5cGUuVHJhc2gsXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRhcmNoaXZlQ29tbWFuZCgpIHtcblx0XHRnZXRBcHAoKS5kZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXIoXG5cdFx0XHRGb2xkZXJUeXBlLkFyY2hpdmUsXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRzcGFtQ29tbWFuZCgpIHtcblx0XHRnZXRBcHAoKS5kZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXIoXG5cdFx0XHRGb2xkZXJUeXBlLlNwYW0sXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRub3RTcGFtQ29tbWFuZCgpIHtcblx0XHRnZXRBcHAoKS5kZWxldGVNZXNzYWdlc0Zyb21Gb2xkZXIoXG5cdFx0XHRGb2xkZXJUeXBlLk5vdFNwYW0sXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRtb3ZlQ29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cblxuXHRAY29tbWFuZChjYW5CZU1vdmVkSGVscGVyKVxuXHRtb3ZlTmV3Q29tbWFuZCh2bSwgZXZlbnQpIHtcblx0XHRpZiAodGhpcy5uZXdNb3ZlVG9Gb2xkZXIoKSAmJiB0aGlzLm1vYmlsZUNoZWNrZWRTdGF0ZVNob3coKSkge1xuXHRcdFx0aWYgKHZtICYmIGV2ZW50ICYmIGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAobW92ZUFjdGlvbigpKSB7XG5cdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLk1lc3NhZ2VMaXN0KTtcblx0XHRcdFx0bW92ZUFjdGlvbihmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5Gb2xkZXJMaXN0KTtcblx0XHRcdFx0bW92ZUFjdGlvbih0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoaWRlTGVmdChpdGVtLCBldmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0fVxuXG5cdHNob3dMZWZ0KGl0ZW0sIGV2ZW50KSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuXHRcdGxlZnRQYW5lbERpc2FibGVkKGZhbHNlKTtcblx0fVxuXG5cdGNvbXBvc2VDbGljaygpIHtcblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLkNvbXBvc2VyKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29tcG9zZScpKTtcblx0XHR9XG5cdH1cblxuXHRnb1RvVXBVcE9yRG93bkRvd24odXApIHtcblx0XHRpZiAoMCA8IHRoaXMubWVzc2FnZUxpc3RDaGVja2VkKCkubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0d2luZG93LmNsZWFyVGltZW91dCh0aGlzLmlHb1RvVXBVcE9yRG93bkRvd25UaW1lb3V0KTtcblx0XHR0aGlzLmlHb1RvVXBVcE9yRG93bkRvd25UaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0bGV0IHByZXYgPSBudWxsLFxuXHRcdFx0XHRuZXh0ID0gbnVsbCxcblx0XHRcdFx0dGVtcCA9IG51bGwsXG5cdFx0XHRcdGN1cnJlbnQgPSBudWxsO1xuXG5cdFx0XHRfLmZpbmQodGhpcy5tZXNzYWdlTGlzdFBhZ2VuYXRvcigpLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdGlmIChjdXJyZW50KSB7XG5cdFx0XHRcdFx0XHRuZXh0ID0gaXRlbTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaXRlbS5jdXJyZW50KSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50ID0gaXRlbTtcblx0XHRcdFx0XHRcdHByZXYgPSB0ZW1wO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChuZXh0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0ZW1wID0gaXRlbTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoTGF5b3V0Lk5vUHJldmlldyA9PT0gU2V0dGluZ3NTdG9yZS5sYXlvdXQoKSAmJiAhdGhpcy5tZXNzYWdlKCkpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3Rvci5pRm9jdXNlZE5leHRIZWxwZXIgPSB1cCA/IC0xIDogMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0b3IuaVNlbGVjdE5leHRIZWxwZXIgPSB1cCA/IC0xIDogMTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHVwID8gcHJldiA6IG5leHQpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3Rvci51bnNlbGVjdCgpO1xuXHRcdFx0XHR0aGlzLmdvdG9QYWdlKHVwID8gcHJldiA6IG5leHQpO1xuXHRcdFx0fVxuXHRcdH0sIE1hZ2ljcy5UaW1lMzUwbXMpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHR1c2VBdXRvU2VsZWN0KCkge1xuXHRcdGlmICh0aGlzLm1lc3NhZ2VMaXN0RGlzYWJsZUF1dG9TZWxlY3QoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICgvaXM6dW5zZWVuLy50ZXN0KHRoaXMubWFpbk1lc3NhZ2VMaXN0U2VhcmNoKCkpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIExheW91dC5Ob1ByZXZpZXcgIT09IFNldHRpbmdzU3RvcmUubGF5b3V0KCk7XG5cdH1cblxuXHRzZWFyY2hFbnRlckFjdGlvbigpIHtcblx0XHR0aGlzLm1haW5NZXNzYWdlTGlzdFNlYXJjaCh0aGlzLnNMYXN0U2VhcmNoVmFsdWUpO1xuXHRcdHRoaXMuaW5wdXRNZXNzYWdlTGlzdFNlYXJjaEZvY3VzKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0cHJpbnRhYmxlTWVzc2FnZUNvdW50Rm9yRGVsZXRpb24oKSB7XG5cdFx0Y29uc3QgY250ID0gdGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLmxlbmd0aDtcblx0XHRyZXR1cm4gMSA8IGNudCA/ICcgKCcgKyAoMTAwID4gY250ID8gY250IDogJzk5KycpICsgJyknIDogJyc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuXHR9XG5cblx0Y2FuY2VsU2VhcmNoKCkge1xuXHRcdHRoaXMubWFpbk1lc3NhZ2VMaXN0U2VhcmNoKCcnKTtcblx0XHR0aGlzLmlucHV0TWVzc2FnZUxpc3RTZWFyY2hGb2N1cyhmYWxzZSk7XG5cdH1cblxuXHRjYW5jZWxUaHJlYWRVaWQoKSB7XG5cdFx0c2V0SGFzaChcblx0XHRcdG1haWxCb3goXG5cdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZUhhc2goKSxcblx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0UGFnZUJlZm9yZVRocmVhZCgpLFxuXHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RTZWFyY2goKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNUb0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkNvcHlcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRtb3ZlU2VsZWN0ZWRNZXNzYWdlc1RvRm9sZGVyKHNUb0ZvbGRlckZ1bGxOYW1lUmF3LCBiQ29weSkge1xuXHRcdGlmICh0aGlzLmNhbkJlTW92ZWQoKSkge1xuXHRcdFx0Z2V0QXBwKCkubW92ZU1lc3NhZ2VzVG9Gb2xkZXIoXG5cdFx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpLFxuXHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3RDaGVja2VkT3JTZWxlY3RlZFVpZHNXaXRoU3ViTWFpbHMoKSxcblx0XHRcdFx0c1RvRm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdGJDb3B5XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGRyYWdBbmREcm9uSGVscGVyKG9NZXNzYWdlTGlzdEl0ZW0pIHtcblx0XHRpZiAob01lc3NhZ2VMaXN0SXRlbSkge1xuXHRcdFx0b01lc3NhZ2VMaXN0SXRlbS5jaGVja2VkKHRydWUpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVsID0gZHJhZ2dhYmxlUGxhY2UoKSxcblx0XHRcdHVwZGF0ZVVpZHNJbmZvID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCB1aWRzID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWRVaWRzV2l0aFN1Yk1haWxzKCk7XG5cdFx0XHRcdGVsLmRhdGEoJ3JsLXVpZHMnLCB1aWRzKTtcblx0XHRcdFx0ZWwuZmluZCgnLnRleHQnKS50ZXh0KCcnICsgdWlkcy5sZW5ndGgpO1xuXHRcdFx0fTtcblxuXHRcdGVsLmRhdGEoJ3JsLWZvbGRlcicsIEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpKTtcblxuXHRcdHVwZGF0ZVVpZHNJbmZvKCk7XG5cdFx0Xy5kZWZlcih1cGRhdGVVaWRzSW5mbyk7XG5cblx0XHRyZXR1cm4gZWw7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGb2xkZXJGdWxsTmFtZVJhd1xuXHQgKiBAcGFyYW0ge251bWJlcn0gaVNldEFjdGlvblxuXHQgKiBAcGFyYW0ge0FycmF5PX0gYU1lc3NhZ2VzID0gbnVsbFxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHNldEFjdGlvbihzRm9sZGVyRnVsbE5hbWVSYXcsIGlTZXRBY3Rpb24sIGFNZXNzYWdlcykge1xuXHRcdGdldEFwcCgpLm1lc3NhZ2VMaXN0QWN0aW9uKHNGb2xkZXJGdWxsTmFtZVJhdywgaVNldEFjdGlvbiwgYU1lc3NhZ2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0ZvbGRlckZ1bGxOYW1lUmF3XG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBpU2V0QWN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVGhyZWFkVWlkID0gJydcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRzZXRBY3Rpb25Gb3JBbGwoc0ZvbGRlckZ1bGxOYW1lUmF3LCBpU2V0QWN0aW9uLCBzVGhyZWFkVWlkID0gJycpIHtcblx0XHRpZiAoJycgIT09IHNGb2xkZXJGdWxsTmFtZVJhdykge1xuXHRcdFx0bGV0IGNudCA9IDA7XG5cdFx0XHRjb25zdCB1aWRzID0gW107XG5cblx0XHRcdGxldCBmb2xkZXIgPSBnZXRGb2xkZXJGcm9tQ2FjaGVMaXN0KHNGb2xkZXJGdWxsTmFtZVJhdyk7XG5cdFx0XHRpZiAoZm9sZGVyKSB7XG5cdFx0XHRcdHN3aXRjaCAoaVNldEFjdGlvbikge1xuXHRcdFx0XHRcdGNhc2UgTWVzc2FnZVNldEFjdGlvbi5TZXRTZWVuOlxuXHRcdFx0XHRcdFx0Zm9sZGVyID0gZ2V0Rm9sZGVyRnJvbUNhY2hlTGlzdChzRm9sZGVyRnVsbE5hbWVSYXcpO1xuXHRcdFx0XHRcdFx0aWYgKGZvbGRlcikge1xuXHRcdFx0XHRcdFx0XHRfLmVhY2goTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KCksIChtZXNzYWdlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG1lc3NhZ2UudW5zZWVuKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNudCArPSAxO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2UudW5zZWVuKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHR1aWRzLnB1c2gobWVzc2FnZS51aWQpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoc1RocmVhZFVpZCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoZm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZCgpIC0gY250KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoMCA+IGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZCgwKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZCgwKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNsZWFyTWVzc2FnZUZsYWdzRnJvbUNhY2hlQnlGb2xkZXIoc0ZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0UmVtb3RlLm1lc3NhZ2VTZXRTZWVuVG9BbGwobm9vcCwgc0ZvbGRlckZ1bGxOYW1lUmF3LCB0cnVlLCBzVGhyZWFkVWlkID8gdWlkcyA6IG51bGwpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBNZXNzYWdlU2V0QWN0aW9uLlVuc2V0U2Vlbjpcblx0XHRcdFx0XHRcdGZvbGRlciA9IGdldEZvbGRlckZyb21DYWNoZUxpc3Qoc0ZvbGRlckZ1bGxOYW1lUmF3KTtcblx0XHRcdFx0XHRcdGlmIChmb2xkZXIpIHtcblx0XHRcdFx0XHRcdFx0Xy5lYWNoKE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdCgpLCAobWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghbWVzc2FnZS51bnNlZW4oKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y250ICs9IDE7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZS51bnNlZW4odHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0dWlkcy5wdXNoKG1lc3NhZ2UudWlkKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHNUaHJlYWRVaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSArIGNudCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZvbGRlci5tZXNzYWdlQ291bnRBbGwoKSA8IGZvbGRlci5tZXNzYWdlQ291bnRVbnJlYWQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9sZGVyLm1lc3NhZ2VDb3VudFVucmVhZChmb2xkZXIubWVzc2FnZUNvdW50QWxsKCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRmb2xkZXIubWVzc2FnZUNvdW50VW5yZWFkKGZvbGRlci5tZXNzYWdlQ291bnRBbGwoKSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRjbGVhck1lc3NhZ2VGbGFnc0Zyb21DYWNoZUJ5Rm9sZGVyKHNGb2xkZXJGdWxsTmFtZVJhdyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFJlbW90ZS5tZXNzYWdlU2V0U2VlblRvQWxsKG5vb3AsIHNGb2xkZXJGdWxsTmFtZVJhdywgZmFsc2UsIHNUaHJlYWRVaWQgPyB1aWRzIDogbnVsbCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRGbGFnc0N1cnJlbnRNZXNzYWdlTGlzdEFuZE1lc3NhZ2VGcm9tQ2FjaGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRsaXN0U2V0U2VlbigpIHtcblx0XHR0aGlzLnNldEFjdGlvbihcblx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpLFxuXHRcdFx0TWVzc2FnZVNldEFjdGlvbi5TZXRTZWVuLFxuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWQoKVxuXHRcdCk7XG5cdH1cblxuXHRsaXN0U2V0QWxsU2VlbigpIHtcblx0XHR0aGlzLnNldEFjdGlvbkZvckFsbChcblx0XHRcdEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZVJhdygpLFxuXHRcdFx0TWVzc2FnZVNldEFjdGlvbi5TZXRTZWVuLFxuXHRcdFx0dGhpcy5tZXNzYWdlTGlzdEVuZFRocmVhZFVpZCgpXG5cdFx0KTtcblx0fVxuXG5cdGxpc3RVbnNldFNlZW4oKSB7XG5cdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRTZWVuLFxuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWQoKVxuXHRcdCk7XG5cdH1cblxuXHRsaXN0U2V0RmxhZ3MoKSB7XG5cdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTZXRBY3Rpb24uU2V0RmxhZyxcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKClcblx0XHQpO1xuXHR9XG5cblx0bGlzdFVuc2V0RmxhZ3MoKSB7XG5cdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRGb2xkZXJTdG9yZS5jdXJyZW50Rm9sZGVyRnVsbE5hbWVSYXcoKSxcblx0XHRcdE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRGbGFnLFxuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZE9yU2VsZWN0ZWQoKVxuXHRcdCk7XG5cdH1cblxuXHRmbGFnTWVzc2FnZXMoY3VycmVudE1lc3NhZ2UpIHtcblx0XHRjb25zdCBjaGVja2VkID0gdGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKCk7XG5cdFx0aWYgKGN1cnJlbnRNZXNzYWdlKSB7XG5cdFx0XHRjb25zdCBjaGVja2VkVWlkcyA9IF8ubWFwKGNoZWNrZWQsIChtZXNzYWdlKSA9PiBtZXNzYWdlLnVpZCk7XG5cdFx0XHRpZiAoMCA8IGNoZWNrZWRVaWRzLmxlbmd0aCAmJiAtMSA8IGluQXJyYXkoY3VycmVudE1lc3NhZ2UudWlkLCBjaGVja2VkVWlkcykpIHtcblx0XHRcdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRcdFx0Y3VycmVudE1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0Y3VycmVudE1lc3NhZ2UuZmxhZ2dlZCgpID8gTWVzc2FnZVNldEFjdGlvbi5VbnNldEZsYWcgOiBNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWcsXG5cdFx0XHRcdFx0Y2hlY2tlZFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRcdFx0Y3VycmVudE1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0Y3VycmVudE1lc3NhZ2UuZmxhZ2dlZCgpID8gTWVzc2FnZVNldEFjdGlvbi5VbnNldEZsYWcgOiBNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWcsXG5cdFx0XHRcdFx0W2N1cnJlbnRNZXNzYWdlXVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZsYWdNZXNzYWdlc0Zhc3QoYkZsYWcpIHtcblx0XHRjb25zdCBjaGVja2VkID0gdGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKCk7XG5cdFx0aWYgKDAgPCBjaGVja2VkLmxlbmd0aCkge1xuXHRcdFx0aWYgKGlzVW5kKGJGbGFnKSkge1xuXHRcdFx0XHRjb25zdCBmbGFnZ2VkID0gXy5maWx0ZXIoY2hlY2tlZCwgKG1lc3NhZ2UpID0+IG1lc3NhZ2UuZmxhZ2dlZCgpKTtcblx0XHRcdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRcdFx0Y2hlY2tlZFswXS5mb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRjaGVja2VkLmxlbmd0aCA9PT0gZmxhZ2dlZC5sZW5ndGggPyBNZXNzYWdlU2V0QWN0aW9uLlVuc2V0RmxhZyA6IE1lc3NhZ2VTZXRBY3Rpb24uU2V0RmxhZyxcblx0XHRcdFx0XHRjaGVja2VkXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldEFjdGlvbihcblx0XHRcdFx0XHRjaGVja2VkWzBdLmZvbGRlckZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdCFiRmxhZyA/IE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRGbGFnIDogTWVzc2FnZVNldEFjdGlvbi5TZXRGbGFnLFxuXHRcdFx0XHRcdGNoZWNrZWRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZWVuTWVzc2FnZXNGYXN0KHNlZW4pIHtcblx0XHRjb25zdCBjaGVja2VkID0gdGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKCk7XG5cdFx0aWYgKDAgPCBjaGVja2VkLmxlbmd0aCkge1xuXHRcdFx0aWYgKGlzVW5kKHNlZW4pKSB7XG5cdFx0XHRcdGNvbnN0IHVuc2VlbiA9IF8uZmlsdGVyKGNoZWNrZWQsIChtZXNzYWdlKSA9PiBtZXNzYWdlLnVuc2VlbigpKTtcblx0XHRcdFx0dGhpcy5zZXRBY3Rpb24oXG5cdFx0XHRcdFx0Y2hlY2tlZFswXS5mb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0XHQwIDwgdW5zZWVuLmxlbmd0aCA/IE1lc3NhZ2VTZXRBY3Rpb24uU2V0U2VlbiA6IE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRTZWVuLFxuXHRcdFx0XHRcdGNoZWNrZWRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0QWN0aW9uKFxuXHRcdFx0XHRcdGNoZWNrZWRbMF0uZm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0c2VlbiA/IE1lc3NhZ2VTZXRBY3Rpb24uU2V0U2VlbiA6IE1lc3NhZ2VTZXRBY3Rpb24uVW5zZXRTZWVuLFxuXHRcdFx0XHRcdGNoZWNrZWRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnb3RvUGFnZShwYWdlKSB7XG5cdFx0aWYgKHBhZ2UpIHtcblx0XHRcdHNldEhhc2goXG5cdFx0XHRcdG1haWxCb3goXG5cdFx0XHRcdFx0Rm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lSGFzaCgpLFxuXHRcdFx0XHRcdHBhZ2UudmFsdWUsXG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0U2VhcmNoKCksXG5cdFx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0VGhyZWFkVWlkKClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRnb3RvVGhyZWFkKG1lc3NhZ2UpIHtcblx0XHRpZiAobWVzc2FnZSAmJiAwIDwgbWVzc2FnZS50aHJlYWRzTGVuKCkpIHtcblx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdFBhZ2VCZWZvcmVUaHJlYWQoTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0UGFnZSgpKTtcblxuXHRcdFx0c2V0SGFzaChtYWlsQm94KEZvbGRlclN0b3JlLmN1cnJlbnRGb2xkZXJGdWxsTmFtZUhhc2goKSwgMSwgTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0U2VhcmNoKCksIG1lc3NhZ2UudWlkKSk7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJMaXN0SXNWaXNpYmxlKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQnJyA9PT0gdGhpcy5tZXNzYWdlTGlzdFNlYXJjaERlc2MoKSAmJlxuXHRcdFx0JycgPT09IHRoaXMubWVzc2FnZUxpc3RFcnJvcigpICYmXG5cdFx0XHQnJyA9PT0gdGhpcy5tZXNzYWdlTGlzdEVuZFRocmVhZFVpZCgpICYmXG5cdFx0XHQwIDwgdGhpcy5tZXNzYWdlTGlzdCgpLmxlbmd0aCAmJlxuXHRcdFx0KHRoaXMuaXNTcGFtRm9sZGVyKCkgfHwgdGhpcy5pc1RyYXNoRm9sZGVyKCkpXG5cdFx0KTtcblx0fVxuXG5cdG9uQnVpbGQoZG9tKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHR0aGlzLm9Db250ZW50VmlzaWJsZSA9ICQoJy5iLWNvbnRlbnQnLCBkb20pO1xuXHRcdHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlID0gJCgnLmNvbnRlbnQnLCB0aGlzLm9Db250ZW50VmlzaWJsZSk7XG5cblx0XHR0aGlzLnNlbGVjdG9yLmluaXQodGhpcy5vQ29udGVudFZpc2libGUsIHRoaXMub0NvbnRlbnRTY3JvbGxhYmxlLCBLZXlTdGF0ZS5NZXNzYWdlTGlzdCk7XG5cblx0XHRpZiAodGhpcy5tb2JpbGUpIHtcblx0XHRcdGRvbS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZG9tXG5cdFx0XHQub24oJ2NsaWNrJywgJy5tZXNzYWdlTGlzdCAuYi1tZXNzYWdlLWxpc3Qtd3JhcHBlcicsICgpID0+IHtcblx0XHRcdFx0aWYgKEZvY3VzZWQuTWVzc2FnZVZpZXcgPT09IEFwcFN0b3JlLmZvY3VzZWRTdGF0ZSgpKSB7XG5cdFx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZUxpc3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcuZS1wYWdlbmF0b3IgLmUtcGFnZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRzZWxmLmdvdG9QYWdlKGtvLmRhdGFGb3IodGhpcykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLm1lc3NhZ2VMaXN0IC5jaGVja2JveENrZWNrQWxsJywgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmNoZWNrQWxsKCF0aGlzLmNoZWNrQWxsKCkpO1xuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLm1lc3NhZ2VMaXN0IC5tZXNzYWdlTGlzdEl0ZW0gLmZsYWdQYXJlbnQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0c2VsZi5mbGFnTWVzc2FnZXMoa28uZGF0YUZvcih0aGlzKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcubWVzc2FnZUxpc3QgLm1lc3NhZ2VMaXN0SXRlbSAudGhyZWFkcy1sZW4nLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0c2VsZi5nb3RvVGhyZWFkKGtvLmRhdGFGb3IodGhpcykpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0fSlcblx0XHRcdC5vbignZGJsY2xpY2snLCAnLm1lc3NhZ2VMaXN0IC5tZXNzYWdlTGlzdEl0ZW0gLmFjdGlvbkhhbmRsZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRzZWxmLmdvdG9UaHJlYWQoa28uZGF0YUZvcih0aGlzKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuaW5pdFVwbG9hZGVyRm9yQXBwZW5kKCk7XG5cdFx0dGhpcy5pbml0U2hvcnRjdXRzKCk7XG5cblx0XHRpZiAoIWJNb2JpbGVEZXZpY2UgJiYgaWZ2aXNpYmxlICYmIFNldHRpbmdzLmNhcGEoQ2FwYS5QcmVmZXRjaCkpIHtcblx0XHRcdGlmdmlzaWJsZS5zZXRJZGxlRHVyYXRpb24oTWFnaWNzLmlmdmlzaWJsZUlkbGUxMHMpO1xuXG5cdFx0XHRpZnZpc2libGUuaWRsZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucHJlZmV0Y2hOZXh0VGljaygpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0aW5pdFNob3J0Y3V0cygpIHtcblx0XHRrZXkoJ2VudGVyJywgS2V5U3RhdGUuTWVzc2FnZUxpc3QsICgpID0+IHtcblx0XHRcdGlmICh0aGlzLm1lc3NhZ2UoKSAmJiB0aGlzLnVzZUF1dG9TZWxlY3QoKSkge1xuXHRcdFx0XHRFdmVudHMucHViKCdtYWlsYm94Lm1lc3NhZ2Utdmlldy50b2dnbGUtZnVsbC1zY3JlZW4nKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuTWVzc2FnZUxpc3RBY3Rpb25zKSkge1xuXHRcdFx0Ly8gYXJjaGl2ZSAoemlwKVxuXHRcdFx0a2V5KCd6JywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdFx0dGhpcy5hcmNoaXZlQ29tbWFuZCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gZGVsZXRlXG5cdFx0XHRrZXkoJ2RlbGV0ZSwgc2hpZnQrZGVsZXRlLCBzaGlmdCszJywgS2V5U3RhdGUuTWVzc2FnZUxpc3QsIChldmVudCwgaGFuZGxlcikgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQpIHtcblx0XHRcdFx0XHRpZiAoMCA8IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkKCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRpZiAoaGFuZGxlciAmJiAnc2hpZnQrZGVsZXRlJyA9PT0gaGFuZGxlci5zaG9ydGN1dCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmRlbGV0ZVdpdGhvdXRNb3ZlQ29tbWFuZCgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWxldGVDb21tYW5kKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLlJlbG9hZCkpIHtcblx0XHRcdC8vIGNoZWNrIG1haWxcblx0XHRcdGtleSgnY3RybCtyLCBjb21tYW5kK3InLCBbS2V5U3RhdGUuRm9sZGVyTGlzdCwgS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlbG9hZENvbW1hbmQoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gY2hlY2sgYWxsXG5cdFx0a2V5KCdjdHJsK2EsIGNvbW1hbmQrYScsIEtleVN0YXRlLk1lc3NhZ2VMaXN0LCAoKSA9PiB7XG5cdFx0XHR0aGlzLmNoZWNrQWxsKCEodGhpcy5jaGVja0FsbCgpICYmICF0aGlzLmlzSW5jb21wbGV0ZUNoZWNrZWQoKSkpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5Db21wb3NlcikpIHtcblx0XHRcdC8vIHdyaXRlL2NvbXBvc2UgKG9wZW4gY29tcG9zZSBwb3B1cClcblx0XHRcdGtleSgndyxjJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQ29tcG9zZScpKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5NZXNzYWdlTGlzdEFjdGlvbnMpKSB7XG5cdFx0XHQvLyBpbXBvcnRhbnQgLSBzdGFyL2ZsYWcgbWVzc2FnZXNcblx0XHRcdGtleSgnaScsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZmxhZ01lc3NhZ2VzRmFzdCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRrZXkoJ3QnLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3RdLCAoKSA9PiB7XG5cdFx0XHRsZXQgbWVzc2FnZSA9IHRoaXMuc2VsZWN0b3JNZXNzYWdlU2VsZWN0ZWQoKTtcblx0XHRcdGlmICghbWVzc2FnZSkge1xuXHRcdFx0XHRtZXNzYWdlID0gdGhpcy5zZWxlY3Rvck1lc3NhZ2VGb2N1c2VkKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtZXNzYWdlICYmIDAgPCBtZXNzYWdlLnRocmVhZHNMZW4oKSkge1xuXHRcdFx0XHR0aGlzLmdvdG9UaHJlYWQobWVzc2FnZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuTWVzc2FnZUxpc3RBY3Rpb25zKSkge1xuXHRcdFx0Ly8gbW92ZVxuXHRcdFx0a2V5KCdtJywgS2V5U3RhdGUuTWVzc2FnZUxpc3QsICgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMubmV3TW92ZVRvRm9sZGVyKCkpIHtcblx0XHRcdFx0XHR0aGlzLm1vdmVOZXdDb21tYW5kKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5tb3ZlRHJvcGRvd25UcmlnZ2VyKHRydWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5NZXNzYWdlTGlzdEFjdGlvbnMpKSB7XG5cdFx0XHQvLyByZWFkXG5cdFx0XHRrZXkoJ3EnLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnNlZW5NZXNzYWdlc0Zhc3QodHJ1ZSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyB1bnJlYWRcblx0XHRcdGtleSgndScsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2Vlbk1lc3NhZ2VzRmFzdChmYWxzZSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpKSB7XG5cdFx0XHRrZXkoJ3NoaWZ0K2YnLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLm11bHR5Rm9yd2FyZENvbW1hbmQoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5TZWFyY2gpKSB7XG5cdFx0XHQvLyBzZWFyY2ggaW5wdXQgZm9jdXNcblx0XHRcdGtleSgnLycsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaW5wdXRNZXNzYWdlTGlzdFNlYXJjaEZvY3VzKHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBjYW5jZWwgc2VhcmNoXG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgKCkgPT4ge1xuXHRcdFx0aWYgKCcnICE9PSB0aGlzLm1lc3NhZ2VMaXN0U2VhcmNoRGVzYygpKSB7XG5cdFx0XHRcdHRoaXMuY2FuY2VsU2VhcmNoKCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoJycgIT09IHRoaXMubWVzc2FnZUxpc3RFbmRUaHJlYWRVaWQoKSkge1xuXHRcdFx0XHR0aGlzLmNhbmNlbFRocmVhZFVpZCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXG5cdFx0Ly8gY2hhbmdlIGZvY3VzZWQgc3RhdGVcblx0XHRrZXkoJ3RhYiwgc2hpZnQrdGFiLCBsZWZ0LCByaWdodCcsIEtleVN0YXRlLk1lc3NhZ2VMaXN0LCAoZXZlbnQsIGhhbmRsZXIpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiBoYW5kbGVyICYmICgnc2hpZnQrdGFiJyA9PT0gaGFuZGxlci5zaG9ydGN1dCB8fCAnbGVmdCcgPT09IGhhbmRsZXIuc2hvcnRjdXQpKSB7XG5cdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLkZvbGRlckxpc3QpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLm1lc3NhZ2UoKSkge1xuXHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlVmlldyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGtleSgnY3RybCtsZWZ0LCBjb21tYW5kK2xlZnQnLCBLZXlTdGF0ZS5NZXNzYWdlVmlldywgbm9vcEZhbHNlKTtcblx0XHRrZXkoJ2N0cmwrcmlnaHQsIGNvbW1hbmQrcmlnaHQnLCBLZXlTdGF0ZS5NZXNzYWdlVmlldywgbm9vcEZhbHNlKTtcblx0fVxuXG5cdHByZWZldGNoTmV4dFRpY2soKSB7XG5cdFx0aWYgKGlmdmlzaWJsZSAmJiAhdGhpcy5iUHJlZmV0Y2ggJiYgIWlmdmlzaWJsZS5ub3coKSAmJiB0aGlzLnZpZXdNb2RlbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IF8uZmluZChcblx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdCgpLFxuXHRcdFx0XHQoaXRlbSkgPT4gaXRlbSAmJiAhaGFzUmVxdWVzdGVkTWVzc2FnZShpdGVtLmZvbGRlckZ1bGxOYW1lUmF3LCBpdGVtLnVpZClcblx0XHRcdCk7XG5cdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHR0aGlzLmJQcmVmZXRjaCA9IHRydWU7XG5cblx0XHRcdFx0YWRkUmVxdWVzdGVkTWVzc2FnZShtZXNzYWdlLmZvbGRlckZ1bGxOYW1lUmF3LCBtZXNzYWdlLnVpZCk7XG5cblx0XHRcdFx0UmVtb3RlLm1lc3NhZ2UoXG5cdFx0XHRcdFx0KHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV4dCA9ICEhKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KTtcblx0XHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmJQcmVmZXRjaCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRpZiAobmV4dCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucHJlZmV0Y2hOZXh0VGljaygpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LCBNYWdpY3MuVGltZTFzKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsXG5cdFx0XHRcdFx0bWVzc2FnZS51aWRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhZHZhbmNlZFNlYXJjaENsaWNrKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuU2VhcmNoQWR2KSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQWR2YW5jZWRTZWFyY2gnKSwgW3RoaXMubWFpbk1lc3NhZ2VMaXN0U2VhcmNoKCldKTtcblx0XHR9XG5cdH1cblxuXHRxdW90YVRvb2x0aXAoKSB7XG5cdFx0cmV0dXJuIGkxOG4oJ01FU1NBR0VfTElTVC9RVU9UQV9TSVpFJywge1xuXHRcdFx0J1NJWkUnOiBmcmllbmRseVNpemUodGhpcy51c2VyVXNhZ2VTaXplKCkpLFxuXHRcdFx0J1BST0MnOiB0aGlzLnVzZXJVc2FnZVByb2MoKSxcblx0XHRcdCdMSU1JVCc6IGZyaWVuZGx5U2l6ZSh0aGlzLnVzZXJRdW90YSgpKVxuXHRcdH0pO1xuXHR9XG5cblx0aW5pdFVwbG9hZGVyRm9yQXBwZW5kKCkge1xuXHRcdGlmICghU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93QXBwZW5kTWVzc2FnZScpIHx8ICF0aGlzLmRyYWdPdmVyQXJlYSgpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0p1YSA9IG5ldyBKdWEoe1xuXHRcdFx0YWN0aW9uOiBhcHBlbmQoKSxcblx0XHRcdG5hbWU6ICdBcHBlbmRGaWxlJyxcblx0XHRcdHF1ZXVlU2l6ZTogMSxcblx0XHRcdG11bHRpcGxlU2l6ZUxpbWl0OiAxLFxuXHRcdFx0aGlkZGVuOiB7XG5cdFx0XHRcdEZvbGRlcjogKCkgPT4gRm9sZGVyU3RvcmUuY3VycmVudEZvbGRlckZ1bGxOYW1lUmF3KClcblx0XHRcdH0sXG5cdFx0XHRkcmFnQW5kRHJvcEVsZW1lbnQ6IHRoaXMuZHJhZ092ZXJBcmVhKCksXG5cdFx0XHRkcmFnQW5kRHJvcEJvZHlFbGVtZW50OiB0aGlzLmRyYWdPdmVyQm9keUFyZWEoKVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5kcmFnT3Zlci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3Rvci5zY3JvbGxUb1RvcCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0b0p1YVxuXHRcdFx0Lm9uKCdvbkRyYWdFbnRlcicsICgpID0+IHtcblx0XHRcdFx0dGhpcy5kcmFnT3ZlckVudGVyKHRydWUpO1xuXHRcdFx0fSlcblx0XHRcdC5vbignb25EcmFnTGVhdmUnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZHJhZ092ZXJFbnRlcihmYWxzZSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdvbkJvZHlEcmFnRW50ZXInLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZHJhZ092ZXIodHJ1ZSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdvbkJvZHlEcmFnTGVhdmUnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZHJhZ092ZXIoZmFsc2UpO1xuXHRcdFx0fSlcblx0XHRcdC5vbignb25TZWxlY3QnLCAoc1VpZCwgb0RhdGEpID0+IHtcblx0XHRcdFx0aWYgKHNVaWQgJiYgb0RhdGEgJiYgJ21lc3NhZ2UvcmZjODIyJyA9PT0gb0RhdGEuVHlwZSkge1xuXHRcdFx0XHRcdE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdExvYWRpbmcodHJ1ZSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdvbkNvbXBsZXRlJywgKCkgPT4ge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRNZXNzYWdlTGlzdCh0cnVlLCB0cnVlKTtcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuICEhb0p1YTtcblx0fVxufVxuXG5leHBvcnQgeyBNZXNzYWdlTGlzdE1haWxCb3hVc2VyVmlldywgTWVzc2FnZUxpc3RNYWlsQm94VXNlclZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCB7IERBVEFfSU1BR0VfVVNFUl9ET1RfUElDLCBVTlVTRURfT1BUSU9OX1ZBTFVFIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5cbmltcG9ydCB7XG5cdENhcGEsXG5cdENvbXBvc2VUeXBlLFxuXHRDbGllbnRTaWRlS2V5TmFtZSxcblx0S2V5U3RhdGUsXG5cdEZvbGRlclR5cGUsXG5cdEZvY3VzZWQsXG5cdExheW91dCxcblx0TWFnaWNzLFxuXHRNZXNzYWdlU2V0QWN0aW9uXG59IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7ICRodG1sLCBsZWZ0UGFuZWxEaXNhYmxlZCwga2V5U2NvcGVSZWFsLCB1c2VLZXlib2FyZFNob3J0Y3V0cywgbW92ZUFjdGlvbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHtcblx0aW5BcnJheSxcblx0aXNBcnJheSxcblx0aXNOb25FbXB0eUFycmF5LFxuXHR0cmltLFxuXHRub29wLFxuXHR3aW5kb3dSZXNpemUsXG5cdHdpbmRvd1Jlc2l6ZUNhbGxiYWNrLFxuXHRpbkZvY3VzLFxuXHRyZW1vdmVTZWxlY3Rpb24sXG5cdHJlbW92ZUluRm9jdXMsXG5cdG1haWxUb0hlbHBlcixcblx0aXNUcmFuc3BhcmVudFxufSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgQXVkaW8gZnJvbSAnQ29tbW9uL0F1ZGlvJztcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tICdDb21tb24vRXZlbnRzJztcblxuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGF0dGFjaG1lbnREb3dubG9hZCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmltcG9ydCB7IGdldFVzZXJQaWMsIHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZSB9IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCBTb2NpYWxTdG9yZSBmcm9tICdTdG9yZXMvU29jaWFsJztcbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvU2V0dGluZ3MnO1xuaW1wb3J0IEFjY291bnRTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BY2NvdW50JztcbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0ICogYXMgTG9jYWwgZnJvbSAnU3RvcmFnZS9DbGllbnQnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5pbXBvcnQgUHJvbWlzZXMgZnJvbSAnUHJvbWlzZXMvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHZpZXcsIGNvbW1hbmQsIFZpZXdUeXBlLCBzaG93U2NyZWVuUG9wdXAsIGNyZWF0ZUNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvVXNlci9NYWlsQm94L01lc3NhZ2VWaWV3Jyxcblx0dHlwZTogVmlld1R5cGUuUmlnaHQsXG5cdHRlbXBsYXRlSUQ6ICdNYWlsTWVzc2FnZVZpZXcnXG59KVxuY2xhc3MgTWVzc2FnZVZpZXdNYWlsQm94VXNlclZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGxldCBsYXN0RW1haWwgPSAnJztcblxuXHRcdGNvbnN0IGNyZWF0ZUNvbW1hbmRSZXBseUhlbHBlciA9ICh0eXBlKSA9PlxuXHRcdFx0Y3JlYXRlQ29tbWFuZCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMubGFzdFJlcGx5QWN0aW9uKHR5cGUpO1xuXHRcdFx0XHR0aGlzLnJlcGx5T3Jmb3J3YXJkKHR5cGUpO1xuXHRcdFx0fSwgdGhpcy5jYW5CZVJlcGxpZWRPckZvcndhcmRlZCk7XG5cblx0XHRjb25zdCBjcmVhdGVDb21tYW5kQWN0aW9uSGVscGVyID0gKGZvbGRlclR5cGUsIHVzZUZvbGRlcikgPT5cblx0XHRcdGNyZWF0ZUNvbW1hbmQoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlKCk7XG5cdFx0XHRcdGlmIChtZXNzYWdlICYmIHRoaXMuYWxsb3dNZXNzYWdlTGlzdEFjdGlvbnMpIHtcblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHRcdFx0Z2V0QXBwKCkuZGVsZXRlTWVzc2FnZXNGcm9tRm9sZGVyKGZvbGRlclR5cGUsIG1lc3NhZ2UuZm9sZGVyRnVsbE5hbWVSYXcsIFttZXNzYWdlLnVpZF0sIHVzZUZvbGRlcik7XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRoaXMubWVzc2FnZVZpc2liaWxpdHkpO1xuXG5cdFx0dGhpcy5vRG9tID0gbnVsbDtcblx0XHR0aGlzLm9IZWFkZXJEb20gPSBudWxsO1xuXHRcdHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbSA9IG51bGw7XG5cblx0XHR0aGlzLmJvZHlCYWNrZ3JvdW5kQ29sb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMucHN3cCA9IG51bGw7XG5cblx0XHR0aGlzLm1vdmVBY3Rpb24gPSBtb3ZlQWN0aW9uO1xuXG5cdFx0dGhpcy5hbGxvd0NvbXBvc2VyID0gISFTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpO1xuXHRcdHRoaXMuYWxsb3dNZXNzYWdlQWN0aW9ucyA9ICEhU2V0dGluZ3MuY2FwYShDYXBhLk1lc3NhZ2VBY3Rpb25zKTtcblx0XHR0aGlzLmFsbG93TWVzc2FnZUxpc3RBY3Rpb25zID0gISFTZXR0aW5ncy5jYXBhKENhcGEuTWVzc2FnZUxpc3RBY3Rpb25zKTtcblxuXHRcdHRoaXMubG9nb0ltZyA9IHRyaW0oU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJMb2dvTWVzc2FnZScpKTtcblx0XHR0aGlzLmxvZ29JZnJhbWUgPSB0cmltKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VySWZyYW1lTWVzc2FnZScpKTtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRzQWN0aW9ucyA9IEFwcFN0b3JlLmF0dGFjaG1lbnRzQWN0aW9ucztcblxuXHRcdHRoaXMubWVzc2FnZSA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlO1xuXHRcdHRoaXMubWVzc2FnZUxpc3RDaGVja2VkID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q2hlY2tlZDtcblx0XHR0aGlzLmhhc0NoZWNrZWRNZXNzYWdlcyA9IE1lc3NhZ2VTdG9yZS5oYXNDaGVja2VkTWVzc2FnZXM7XG5cdFx0dGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscyA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscztcblx0XHR0aGlzLm1lc3NhZ2VMb2FkaW5nVGhyb3R0bGUgPSBNZXNzYWdlU3RvcmUubWVzc2FnZUxvYWRpbmdUaHJvdHRsZTtcblx0XHR0aGlzLm1lc3NhZ2VzQm9kaWVzRG9tID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VzQm9kaWVzRG9tO1xuXHRcdHRoaXMudXNlVGhyZWFkcyA9IFNldHRpbmdzU3RvcmUudXNlVGhyZWFkcztcblx0XHR0aGlzLnJlcGx5U2FtZUZvbGRlciA9IFNldHRpbmdzU3RvcmUucmVwbHlTYW1lRm9sZGVyO1xuXHRcdHRoaXMubGF5b3V0ID0gU2V0dGluZ3NTdG9yZS5sYXlvdXQ7XG5cdFx0dGhpcy51c2VQcmV2aWV3UGFuZSA9IFNldHRpbmdzU3RvcmUudXNlUHJldmlld1BhbmU7XG5cdFx0dGhpcy5pc01lc3NhZ2VTZWxlY3RlZCA9IE1lc3NhZ2VTdG9yZS5pc01lc3NhZ2VTZWxlY3RlZDtcblx0XHR0aGlzLm1lc3NhZ2VBY3RpdmVEb20gPSBNZXNzYWdlU3RvcmUubWVzc2FnZUFjdGl2ZURvbTtcblx0XHR0aGlzLm1lc3NhZ2VFcnJvciA9IE1lc3NhZ2VTdG9yZS5tZXNzYWdlRXJyb3I7XG5cblx0XHR0aGlzLmZ1bGxTY3JlZW5Nb2RlID0gTWVzc2FnZVN0b3JlLm1lc3NhZ2VGdWxsU2NyZWVuTW9kZTtcblxuXHRcdHRoaXMubWVzc2FnZUxpc3RPZlRocmVhZHNMb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAxIH0pO1xuXHRcdHRoaXMuaGlnaGxpZ2h0VW5zZWxlY3RlZEF0dGFjaG1lbnRzID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAwIH0pO1xuXG5cdFx0dGhpcy5zaG93QXR0YWNobW5ldENvbnRyb2xzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNob3dBdHRhY2htbmV0Q29udHJvbHNTdGF0ZSA9ICh2KSA9PiB7XG5cdFx0XHRMb2NhbC5zZXQoQ2xpZW50U2lkZUtleU5hbWUuTWVzc2FnZUF0dGFjaG1uZXRDb250cm9scywgISF2KTtcblx0XHR9O1xuXG5cdFx0dGhpcy5hbGxvd0F0dGFjaG1uZXRDb250cm9scyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gMCA8IHRoaXMuYXR0YWNobWVudHNBY3Rpb25zKCkubGVuZ3RoICYmIFNldHRpbmdzLmNhcGEoQ2FwYS5BdHRhY2htZW50c0FjdGlvbnMpXG5cdFx0KTtcblxuXHRcdHRoaXMuZG93bmxvYWRBc1ppcEFsbG93ZWQgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+IC0xIDwgaW5BcnJheSgnemlwJywgdGhpcy5hdHRhY2htZW50c0FjdGlvbnMoKSkgJiYgdGhpcy5hbGxvd0F0dGFjaG1uZXRDb250cm9scygpXG5cdFx0KTtcblxuXHRcdHRoaXMuZG93bmxvYWRBc1ppcExvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmRvd25sb2FkQXNaaXBFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogNzAwMCB9KTtcblxuXHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRBbGxvd2VkID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PiAtMSA8IGluQXJyYXkoJ293bmNsb3VkJywgdGhpcy5hdHRhY2htZW50c0FjdGlvbnMoKSkgJiYgdGhpcy5hbGxvd0F0dGFjaG1uZXRDb250cm9scygpXG5cdFx0KTtcblxuXHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRMb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zYXZlVG9Pd25DbG91ZFN1Y2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDIwMDAgfSk7XG5cdFx0dGhpcy5zYXZlVG9Pd25DbG91ZEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiA3MDAwIH0pO1xuXG5cdFx0dGhpcy5zYXZlVG9Pd25DbG91ZFN1Y2Nlc3Muc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHRpZiAodikge1xuXHRcdFx0XHR0aGlzLnNhdmVUb093bkNsb3VkRXJyb3IoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zYXZlVG9Pd25DbG91ZEVycm9yLnN1YnNjcmliZSgodikgPT4ge1xuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0dGhpcy5zYXZlVG9Pd25DbG91ZFN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zYXZlVG9Ecm9wYm94QWxsb3dlZCA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gLTEgPCBpbkFycmF5KCdkcm9wYm94JywgdGhpcy5hdHRhY2htZW50c0FjdGlvbnMoKSkgJiYgdGhpcy5hbGxvd0F0dGFjaG1uZXRDb250cm9scygpXG5cdFx0KTtcblxuXHRcdHRoaXMuc2F2ZVRvRHJvcGJveExvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hTdWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAwIH0pO1xuXHRcdHRoaXMuc2F2ZVRvRHJvcGJveEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiA3MDAwIH0pO1xuXG5cdFx0dGhpcy5zYXZlVG9Ecm9wYm94U3VjY2Vzcy5zdWJzY3JpYmUoKHYpID0+IHtcblx0XHRcdGlmICh2KSB7XG5cdFx0XHRcdHRoaXMuc2F2ZVRvRHJvcGJveEVycm9yKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZVRvRHJvcGJveEVycm9yLnN1YnNjcmliZSgodikgPT4ge1xuXHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94U3VjY2VzcyhmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNob3dBdHRhY2htbmV0Q29udHJvbHMuc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHRpZiAodGhpcy5tZXNzYWdlKCkpIHtcblx0XHRcdFx0Xy5lYWNoKHRoaXMubWVzc2FnZSgpLmF0dGFjaG1lbnRzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRcdGl0ZW0uY2hlY2tlZCghIXYpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmxhc3RSZXBseUFjdGlvbl8gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmxhc3RSZXBseUFjdGlvbiA9IGtvLmNvbXB1dGVkKHtcblx0XHRcdHJlYWQ6IHRoaXMubGFzdFJlcGx5QWN0aW9uXyxcblx0XHRcdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5sYXN0UmVwbHlBY3Rpb25fKFxuXHRcdFx0XHRcdC0xID09PSBpbkFycmF5KHZhbHVlLCBbQ29tcG9zZVR5cGUuUmVwbHksIENvbXBvc2VUeXBlLlJlcGx5QWxsLCBDb21wb3NlVHlwZS5Gb3J3YXJkXSlcblx0XHRcdFx0XHRcdD8gQ29tcG9zZVR5cGUuUmVwbHlcblx0XHRcdFx0XHRcdDogdmFsdWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMubGFzdFJlcGx5QWN0aW9uKExvY2FsLmdldChDbGllbnRTaWRlS2V5TmFtZS5MYXN0UmVwbHlBY3Rpb24pIHx8IENvbXBvc2VUeXBlLlJlcGx5KTtcblxuXHRcdHRoaXMubGFzdFJlcGx5QWN0aW9uXy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRMb2NhbC5zZXQoQ2xpZW50U2lkZUtleU5hbWUuTGFzdFJlcGx5QWN0aW9uLCB2YWx1ZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNob3dGdWxsSW5mbyA9IGtvLm9ic2VydmFibGUoJzEnID09PSBMb2NhbC5nZXQoQ2xpZW50U2lkZUtleU5hbWUuTWVzc2FnZUhlYWRlckZ1bGxJbmZvKSk7XG5cblx0XHR0aGlzLm1vcmVEcm9wZG93blRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm1lc3NhZ2VEb21Gb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAwIH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlVmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+ICF0aGlzLm1lc3NhZ2VMb2FkaW5nVGhyb3R0bGUoKSAmJiAhIXRoaXMubWVzc2FnZSgpKTtcblxuXHRcdHRoaXMubWVzc2FnZS5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcblx0XHRcdGlmICghbWVzc2FnZSkge1xuXHRcdFx0XHRNZXNzYWdlU3RvcmUuc2VsZWN0b3JNZXNzYWdlU2VsZWN0ZWQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNhbkJlUmVwbGllZE9yRm9yd2FyZGVkID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdiA9IHRoaXMubWVzc2FnZVZpc2liaWxpdHkoKTtcblx0XHRcdHJldHVybiAhdGhpcy5pc0RyYWZ0Rm9sZGVyKCkgJiYgdjtcblx0XHR9KTtcblxuXHRcdC8vIGNvbW1hbmRzXG5cdFx0dGhpcy5yZXBseUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kUmVwbHlIZWxwZXIoQ29tcG9zZVR5cGUuUmVwbHkpO1xuXHRcdHRoaXMucmVwbHlBbGxDb21tYW5kID0gY3JlYXRlQ29tbWFuZFJlcGx5SGVscGVyKENvbXBvc2VUeXBlLlJlcGx5QWxsKTtcblx0XHR0aGlzLmZvcndhcmRDb21tYW5kID0gY3JlYXRlQ29tbWFuZFJlcGx5SGVscGVyKENvbXBvc2VUeXBlLkZvcndhcmQpO1xuXHRcdHRoaXMuZm9yd2FyZEFzQXR0YWNobWVudENvbW1hbmQgPSBjcmVhdGVDb21tYW5kUmVwbHlIZWxwZXIoQ29tcG9zZVR5cGUuRm9yd2FyZEFzQXR0YWNobWVudCk7XG5cdFx0dGhpcy5lZGl0QXNOZXdDb21tYW5kID0gY3JlYXRlQ29tbWFuZFJlcGx5SGVscGVyKENvbXBvc2VUeXBlLkVkaXRBc05ldyk7XG5cblx0XHR0aGlzLmRlbGV0ZUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kQWN0aW9uSGVscGVyKEZvbGRlclR5cGUuVHJhc2gsIHRydWUpO1xuXHRcdHRoaXMuZGVsZXRlV2l0aG91dE1vdmVDb21tYW5kID0gY3JlYXRlQ29tbWFuZEFjdGlvbkhlbHBlcihGb2xkZXJUeXBlLlRyYXNoLCBmYWxzZSk7XG5cdFx0dGhpcy5hcmNoaXZlQ29tbWFuZCA9IGNyZWF0ZUNvbW1hbmRBY3Rpb25IZWxwZXIoRm9sZGVyVHlwZS5BcmNoaXZlLCB0cnVlKTtcblx0XHR0aGlzLnNwYW1Db21tYW5kID0gY3JlYXRlQ29tbWFuZEFjdGlvbkhlbHBlcihGb2xkZXJUeXBlLlNwYW0sIHRydWUpO1xuXHRcdHRoaXMubm90U3BhbUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kQWN0aW9uSGVscGVyKEZvbGRlclR5cGUuTm90U3BhbSwgdHJ1ZSk7XG5cblx0XHR0aGlzLmRyb3Bib3hFbmFibGVkID0gU29jaWFsU3RvcmUuZHJvcGJveC5lbmFibGVkO1xuXHRcdHRoaXMuZHJvcGJveEFwaUtleSA9IFNvY2lhbFN0b3JlLmRyb3Bib3guYXBpS2V5O1xuXG5cdFx0Ly8gdmlld2VyXG5cblx0XHR0aGlzLnZpZXdCb2R5VG9wVmFsdWUgPSBrby5vYnNlcnZhYmxlKDApO1xuXG5cdFx0dGhpcy52aWV3Rm9sZGVyID0gJyc7XG5cdFx0dGhpcy52aWV3VWlkID0gJyc7XG5cdFx0dGhpcy52aWV3SGFzaCA9ICcnO1xuXHRcdHRoaXMudmlld1N1YmplY3QgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdGcm9tU2hvcnQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdGcm9tRGtpbURhdGEgPSBrby5vYnNlcnZhYmxlKFsnbm9uZScsICcnXSk7XG5cdFx0dGhpcy52aWV3VG9TaG9ydCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld0Zyb20gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnZpZXdUbyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld0NjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3QmNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3UmVwbHlUbyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld1RpbWVTdGFtcCA9IGtvLm9ic2VydmFibGUoMCk7XG5cdFx0dGhpcy52aWV3U2l6ZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld0xpbmVBc0NzcyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudmlld1ZpZXdMaW5rID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3VW5zdWJzY3JpYmVMaW5rID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3RG93bmxvYWRMaW5rID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy52aWV3VXNlclBpYyA9IGtvLm9ic2VydmFibGUoREFUQV9JTUFHRV9VU0VSX0RPVF9QSUMpO1xuXHRcdHRoaXMudmlld1VzZXJQaWNWaXNpYmxlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy52aWV3SXNJbXBvcnRhbnQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnZpZXdJc0ZsYWdnZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudmlld0Zyb21Ea2ltVmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+ICdub25lJyAhPT0gdGhpcy52aWV3RnJvbURraW1EYXRhKClbMF0pO1xuXG5cdFx0dGhpcy52aWV3RnJvbURraW1TdGF0dXNJY29uQ2xhc3MgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKHRoaXMudmlld0Zyb21Ea2ltRGF0YSgpWzBdKSB7XG5cdFx0XHRcdGNhc2UgJ25vbmUnOlxuXHRcdFx0XHRcdHJldHVybiAnaWNvbi1ub25lIGljb25jb2xvci1kaXNwbGF5LW5vbmUnO1xuXHRcdFx0XHRjYXNlICdwYXNzJzpcblx0XHRcdFx0XHRyZXR1cm4gJ2ljb24tb2sgaWNvbmNvbG9yLWdyZWVuJztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gJ2ljb24td2FybmluZy1hbHQgaWNvbmNvbG9yLXJlZCc7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZpZXdGcm9tRGtpbVN0YXR1c1RpdGxlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RhdHVzID0gdGhpcy52aWV3RnJvbURraW1EYXRhKCk7XG5cdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHN0YXR1cykpIHtcblx0XHRcdFx0aWYgKHN0YXR1c1swXSAmJiBzdGF0dXNbMV0pIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdHVzWzFdO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHN0YXR1c1swXSkge1xuXHRcdFx0XHRcdHJldHVybiAnREtJTTogJyArIHN0YXR1c1swXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lc3NhZ2VBY3RpdmVEb20uc3Vic2NyaWJlKChkb20pID0+IHtcblx0XHRcdHRoaXMuYm9keUJhY2tncm91bmRDb2xvcihkb20gPyB0aGlzLmRldGVjdERvbUJhY2tncm91bmRDb2xvcihkb20pIDogJycpO1xuXHRcdH0sIHRoaXMpO1xuXG5cdFx0dGhpcy5tZXNzYWdlLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuXHRcdFx0dGhpcy5tZXNzYWdlQWN0aXZlRG9tKG51bGwpO1xuXG5cdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHR0aGlzLnNob3dBdHRhY2htbmV0Q29udHJvbHMoZmFsc2UpO1xuXHRcdFx0XHRpZiAoTG9jYWwuZ2V0KENsaWVudFNpZGVLZXlOYW1lLk1lc3NhZ2VBdHRhY2htbmV0Q29udHJvbHMpKSB7XG5cdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnNob3dBdHRhY2htbmV0Q29udHJvbHModHJ1ZSk7XG5cdFx0XHRcdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLnZpZXdIYXNoICE9PSBtZXNzYWdlLmhhc2gpIHtcblx0XHRcdFx0XHR0aGlzLnNjcm9sbE1lc3NhZ2VUb1RvcCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy52aWV3Rm9sZGVyID0gbWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdztcblx0XHRcdFx0dGhpcy52aWV3VWlkID0gbWVzc2FnZS51aWQ7XG5cdFx0XHRcdHRoaXMudmlld0hhc2ggPSBtZXNzYWdlLmhhc2g7XG5cdFx0XHRcdHRoaXMudmlld1N1YmplY3QobWVzc2FnZS5zdWJqZWN0KCkpO1xuXHRcdFx0XHR0aGlzLnZpZXdGcm9tU2hvcnQobWVzc2FnZS5mcm9tVG9MaW5lKHRydWUsIHRydWUpKTtcblx0XHRcdFx0dGhpcy52aWV3RnJvbURraW1EYXRhKG1lc3NhZ2UuZnJvbURraW1EYXRhKCkpO1xuXHRcdFx0XHR0aGlzLnZpZXdUb1Nob3J0KG1lc3NhZ2UudG9Ub0xpbmUodHJ1ZSwgdHJ1ZSkpO1xuXHRcdFx0XHR0aGlzLnZpZXdGcm9tKG1lc3NhZ2UuZnJvbVRvTGluZShmYWxzZSkpO1xuXHRcdFx0XHR0aGlzLnZpZXdUbyhtZXNzYWdlLnRvVG9MaW5lKGZhbHNlKSk7XG5cdFx0XHRcdHRoaXMudmlld0NjKG1lc3NhZ2UuY2NUb0xpbmUoZmFsc2UpKTtcblx0XHRcdFx0dGhpcy52aWV3QmNjKG1lc3NhZ2UuYmNjVG9MaW5lKGZhbHNlKSk7XG5cdFx0XHRcdHRoaXMudmlld1JlcGx5VG8obWVzc2FnZS5yZXBseVRvVG9MaW5lKGZhbHNlKSk7XG5cdFx0XHRcdHRoaXMudmlld1RpbWVTdGFtcChtZXNzYWdlLmRhdGVUaW1lU3RhbXBJblVUQygpKTtcblx0XHRcdFx0dGhpcy52aWV3U2l6ZShtZXNzYWdlLmZyaWVuZGx5U2l6ZSgpKTtcblx0XHRcdFx0dGhpcy52aWV3TGluZUFzQ3NzKG1lc3NhZ2UubGluZUFzQ3NzKCkpO1xuXHRcdFx0XHR0aGlzLnZpZXdWaWV3TGluayhtZXNzYWdlLnZpZXdMaW5rKCkpO1xuXHRcdFx0XHR0aGlzLnZpZXdVbnN1YnNjcmliZUxpbmsobWVzc2FnZS5nZXRGaXJzdFVuc3Vic3JpYmVMaW5rKCkpO1xuXHRcdFx0XHR0aGlzLnZpZXdEb3dubG9hZExpbmsobWVzc2FnZS5kb3dubG9hZExpbmsoKSk7XG5cdFx0XHRcdHRoaXMudmlld0lzSW1wb3J0YW50KG1lc3NhZ2UuaXNJbXBvcnRhbnQoKSk7XG5cdFx0XHRcdHRoaXMudmlld0lzRmxhZ2dlZChtZXNzYWdlLmZsYWdnZWQoKSk7XG5cblx0XHRcdFx0bGFzdEVtYWlsID0gbWVzc2FnZS5mcm9tQXNTaW5nbGVFbWFpbCgpO1xuXHRcdFx0XHRnZXRVc2VyUGljKGxhc3RFbWFpbCwgKHBpYywgZW1haWwpID0+IHtcblx0XHRcdFx0XHRpZiAocGljICE9PSB0aGlzLnZpZXdVc2VyUGljKCkgJiYgbGFzdEVtYWlsID09PSBlbWFpbCkge1xuXHRcdFx0XHRcdFx0dGhpcy52aWV3VXNlclBpY1Zpc2libGUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGhpcy52aWV3VXNlclBpYyhEQVRBX0lNQUdFX1VTRVJfRE9UX1BJQyk7XG5cdFx0XHRcdFx0XHRpZiAoJycgIT09IHBpYykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnZpZXdVc2VyUGljVmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0XHRcdFx0dGhpcy52aWV3VXNlclBpYyhwaWMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnZpZXdGb2xkZXIgPSAnJztcblx0XHRcdFx0dGhpcy52aWV3VWlkID0gJyc7XG5cdFx0XHRcdHRoaXMudmlld0hhc2ggPSAnJztcblxuXHRcdFx0XHR0aGlzLnNjcm9sbE1lc3NhZ2VUb1RvcCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlLnZpZXdUcmlnZ2VyLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlKCk7XG5cdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHR0aGlzLnZpZXdJc0ZsYWdnZWQobWVzc2FnZS5mbGFnZ2VkKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy52aWV3SXNGbGFnZ2VkKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuZnVsbFNjcmVlbk1vZGUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLW1lc3NhZ2UtZnVsbHNjcmVlbicsIHZhbHVlKTtcblx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZXNzYWdlTG9hZGluZ1Rocm90dGxlLnN1YnNjcmliZSh3aW5kb3dSZXNpemVDYWxsYmFjayk7XG5cblx0XHR0aGlzLm1lc3NhZ2VGb2N1c2VkID0ga28uY29tcHV0ZWQoKCkgPT4gRm9jdXNlZC5NZXNzYWdlVmlldyA9PT0gQXBwU3RvcmUuZm9jdXNlZFN0YXRlKCkpO1xuXG5cdFx0dGhpcy5tZXNzYWdlTGlzdEFuZE1lc3NhZ2VWaWV3TG9hZGluZyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT4gTWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0Q29tcGxldGVMb2FkaW5nVGhyb3R0bGUoKSB8fCBNZXNzYWdlU3RvcmUubWVzc2FnZUxvYWRpbmdUaHJvdHRsZSgpXG5cdFx0KTtcblxuXHRcdEV2ZW50cy5zdWIoJ21haWxib3gubWVzc2FnZS12aWV3LnRvZ2dsZS1mdWxsLXNjcmVlbicsICgpID0+IHtcblx0XHRcdHRoaXMudG9nZ2xlRnVsbFNjcmVlbigpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hdHRhY2htZW50UHJldmlldyA9IF8uYmluZCh0aGlzLmF0dGFjaG1lbnRQcmV2aWV3LCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0Y2xvc2VNZXNzYWdlQ29tbWFuZCgpIHtcblx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZShudWxsKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLm1lc3NhZ2VWaXNpYmlsaXR5KCkpXG5cdG1lc3NhZ2VWaXNpYmlsaXR5Q29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5tZXNzYWdlVmlzaWJpbGl0eSgpKVxuXHRtZXNzYWdlRWRpdENvbW1hbmQoKSB7XG5cdFx0dGhpcy5lZGl0TWVzc2FnZSgpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLm1lc3NhZ2VMaXN0QW5kTWVzc2FnZVZpZXdMb2FkaW5nKCkpXG5cdGdvVXBDb21tYW5kKCkge1xuXHRcdEV2ZW50cy5wdWIoJ21haWxib3gubWVzc2FnZS1saXN0LnNlbGVjdG9yLmdvLXVwJywgW0xheW91dC5Ob1ByZXZpZXcgPT09IHRoaXMubGF5b3V0KCkgPyAhIXRoaXMubWVzc2FnZSgpIDogdHJ1ZV0pO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLm1lc3NhZ2VMaXN0QW5kTWVzc2FnZVZpZXdMb2FkaW5nKCkpXG5cdGdvRG93bkNvbW1hbmQoKSB7XG5cdFx0RXZlbnRzLnB1YignbWFpbGJveC5tZXNzYWdlLWxpc3Quc2VsZWN0b3IuZ28tZG93bicsIFtMYXlvdXQuTm9QcmV2aWV3ID09PSB0aGlzLmxheW91dCgpID8gISF0aGlzLm1lc3NhZ2UoKSA6IHRydWVdKTtcblx0fVxuXG5cdGRldGVjdERvbUJhY2tncm91bmRDb2xvcihkb20pIHtcblx0XHRsZXQgbGltaXQgPSA1LFxuXHRcdFx0cmVzdWx0ID0gJyc7XG5cblx0XHRjb25zdCBmRmluZERvbSA9IGZ1bmN0aW9uKGlucHV0RG9tKSB7XG5cdFx0XHRcdGNvbnN0IGNoaWxkcmVuID0gaW5wdXREb20gPyBpbnB1dERvbS5jaGlsZHJlbigpIDogbnVsbDtcblx0XHRcdFx0cmV0dXJuIGNoaWxkcmVuICYmIDEgPT09IGNoaWxkcmVuLmxlbmd0aCAmJiBjaGlsZHJlbi5pcygndGFibGUsZGl2LGNlbnRlcicpID8gY2hpbGRyZW4gOiBudWxsO1xuXHRcdFx0fSxcblx0XHRcdGZGaW5kQ29sb3IgPSBmdW5jdGlvbihpbnB1dERvbSkge1xuXHRcdFx0XHRsZXQgY29sb3IgPSAnJztcblx0XHRcdFx0aWYgKGlucHV0RG9tKSB7XG5cdFx0XHRcdFx0Y29sb3IgPSBpbnB1dERvbS5jc3MoJ2JhY2tncm91bmQtY29sb3InKSB8fCAnJztcblx0XHRcdFx0XHRpZiAoIWlucHV0RG9tLmlzKCd0YWJsZScpKSB7XG5cdFx0XHRcdFx0XHRjb2xvciA9IGlzVHJhbnNwYXJlbnQoY29sb3IpID8gJycgOiBjb2xvcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gY29sb3I7XG5cdFx0XHR9O1xuXG5cdFx0aWYgKGRvbSAmJiAxID09PSBkb20ubGVuZ3RoKSB7XG5cdFx0XHRsZXQgYUMgPSBkb207XG5cdFx0XHR3aGlsZSAoJycgPT09IHJlc3VsdCkge1xuXHRcdFx0XHRsaW1pdCAtPSAxO1xuXHRcdFx0XHRpZiAoMCA+PSBsaW1pdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YUMgPSBmRmluZERvbShhQyk7XG5cdFx0XHRcdGlmIChhQykge1xuXHRcdFx0XHRcdHJlc3VsdCA9IGZGaW5kQ29sb3IoYUMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdCA9IGlzVHJhbnNwYXJlbnQocmVzdWx0KSA/ICcnIDogcmVzdWx0O1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmdWxsU2NyZWVuKCkge1xuXHRcdHRoaXMuZnVsbFNjcmVlbk1vZGUodHJ1ZSk7XG5cdFx0d2luZG93UmVzaXplKCk7XG5cdH1cblxuXHR1bkZ1bGxTY3JlZW4oKSB7XG5cdFx0dGhpcy5mdWxsU2NyZWVuTW9kZShmYWxzZSk7XG5cdFx0d2luZG93UmVzaXplKCk7XG5cdH1cblxuXHR0b2dnbGVGdWxsU2NyZWVuKCkge1xuXHRcdHJlbW92ZVNlbGVjdGlvbigpO1xuXG5cdFx0dGhpcy5mdWxsU2NyZWVuTW9kZSghdGhpcy5mdWxsU2NyZWVuTW9kZSgpKTtcblx0XHR3aW5kb3dSZXNpemUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1R5cGVcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRyZXBseU9yZm9yd2FyZChzVHlwZSkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlJyksIFtzVHlwZSwgTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKV0pO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrSGVhZGVySGVpZ2h0KCkge1xuXHRcdGlmICh0aGlzLm9IZWFkZXJEb20pIHtcblx0XHRcdHRoaXMudmlld0JvZHlUb3BWYWx1ZShcblx0XHRcdFx0dGhpcy5tZXNzYWdlKClcblx0XHRcdFx0XHQ/IHRoaXMub0hlYWRlckRvbS5oZWlnaHQoKSArXG5cdFx0XHRcdFx0ICBNYWdpY3MuU2l6ZTIwcHggLyogcGFkZGluZy0odG9wL2JvdHRvbSk6IDIwcHggKi8gK1xuXHRcdFx0XHRcdFx0XHRNYWdpY3MuU2l6ZTFweCAvKiBib3JkZWQtYm90dG9tOiAxcHggKi9cblx0XHRcdFx0XHQ6IDBcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gIGRpc3BsYXlNYWlsVG9Qb3B1cChzTWFpbFRvVXJsKSB7XG5cdC8vXHRcdHNNYWlsVG9VcmwgPSBzTWFpbFRvVXJsLnJlcGxhY2UoL1xcPy4rJC8sICcnKTtcblx0Ly9cblx0Ly9cdFx0dmFyXG5cdC8vXHRcdFx0c1Jlc3VsdCA9ICcnLFxuXHQvL1x0XHRcdGFUbyA9IFtdLFxuXHQvL1x0XHRcdEVtYWlsTW9kZWwgPSByZXF1aXJlKCdNb2RlbC9FbWFpbCcpLmRlZmF1bHQsXG5cdC8vXHRcdFx0ZlBhcnNlRW1haWxMaW5lID0gZnVuY3Rpb24oc0xpbmUpIHtcblx0Ly9cdFx0XHRcdHJldHVybiBzTGluZSA/IF8uY29tcGFjdChfLm1hcChbd2luZG93LmRlY29kZVVSSUNvbXBvbmVudChzTGluZSldLCBmdW5jdGlvbihzSXRlbSkge1xuXHQvL1x0XHRcdFx0XHRcdHZhciBvRW1haWxNb2RlbCA9IG5ldyBFbWFpbE1vZGVsKCk7XG5cdC8vXHRcdFx0XHRcdFx0b0VtYWlsTW9kZWwucGFyc2Uoc0l0ZW0pO1xuXHQvL1x0XHRcdFx0XHRcdHJldHVybiAnJyAhPT0gb0VtYWlsTW9kZWwuZW1haWwgPyBvRW1haWxNb2RlbCA6IG51bGw7XG5cdC8vXHRcdFx0XHRcdH0pKSA6IG51bGw7XG5cdC8vXHRcdFx0fVxuXHQvL1x0XHQ7XG5cdC8vXG5cdC8vXHRcdGFUbyA9IGZQYXJzZUVtYWlsTGluZShzTWFpbFRvVXJsKTtcblx0Ly9cdFx0c1Jlc3VsdCA9IGFUbyAmJiBhVG9bMF0gPyBhVG9bMF0uZW1haWwgOiAnJztcblx0Ly9cblx0Ly9cdFx0cmV0dXJuIHNSZXN1bHQ7XG5cdC8vXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvQXR0YWNobWVudFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGF0dGFjaG1lbnRQcmV2aWV3KGF0dGFjaG1lbnQpIHtcblx0XHRpZiAoYXR0YWNobWVudCAmJiBhdHRhY2htZW50LmlzSW1hZ2UoKSAmJiAhYXR0YWNobWVudC5pc0xpbmtlZCAmJiB0aGlzLm1lc3NhZ2UoKSAmJiB0aGlzLm1lc3NhZ2UoKS5hdHRhY2htZW50cygpKSB7XG5cdFx0XHRsZXQgaW5kZXggPSAwLFxuXHRcdFx0XHRsaXN0SW5kZXggPSAwO1xuXG5cdFx0XHRjb25zdCBkaXYgPSAkKCc8ZGl2PicpLFxuXHRcdFx0XHRkeW5hbWljRWxzID0gXy5jb21wYWN0KFxuXHRcdFx0XHRcdF8ubWFwKHRoaXMubWVzc2FnZSgpLmF0dGFjaG1lbnRzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbSAmJiAhaXRlbS5pc0xpbmtlZCAmJiBpdGVtLmlzSW1hZ2UoKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbSA9PT0gYXR0YWNobWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGluZGV4ID0gbGlzdEluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0bGlzdEluZGV4ICs9IDE7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzcmM6IGl0ZW0ubGlua1ByZXZpZXcoKSxcblx0XHRcdFx0XHRcdFx0XHR0aHVtYjogaXRlbS5saW5rVGh1bWJuYWlsKCksXG5cdFx0XHRcdFx0XHRcdFx0c3ViSHRtbDogaXRlbS5maWxlTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRkb3dubG9hZFVybDogaXRlbS5saW5rUHJldmlldygpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cblx0XHRcdGlmICgwIDwgZHluYW1pY0Vscy5sZW5ndGgpIHtcblx0XHRcdFx0ZGl2Lm9uKCdvbkJlZm9yZU9wZW4ubGcnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dXNlS2V5Ym9hcmRTaG9ydGN1dHMoZmFsc2UpO1xuXHRcdFx0XHRcdHJlbW92ZUluRm9jdXModHJ1ZSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGRpdi5vbignb25DbG9zZUFmdGVyLmxnJywgKCkgPT4ge1xuXHRcdFx0XHRcdHVzZUtleWJvYXJkU2hvcnRjdXRzKHRydWUpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRkaXYubGlnaHRHYWxsZXJ5KHtcblx0XHRcdFx0XHRkeW5hbWljOiB0cnVlLFxuXHRcdFx0XHRcdGxvYWRZb3V0dWJlVGh1bWJuYWlsOiBmYWxzZSxcblx0XHRcdFx0XHRsb2FkVmltZW9UaHVtYm5haWw6IGZhbHNlLFxuXHRcdFx0XHRcdHRodW1iV2lkdGg6IDgwLFxuXHRcdFx0XHRcdHRodW1iQ29udEhlaWdodDogOTUsXG5cdFx0XHRcdFx0c2hvd1RodW1iQnlEZWZhdWx0OiBmYWxzZSxcblx0XHRcdFx0XHRtb2RlOiAnbGctbG9sbGlwb3AnLCAvLyAnbGctc2xpZGUnLFxuXHRcdFx0XHRcdGluZGV4OiBpbmRleCxcblx0XHRcdFx0XHRkeW5hbWljRWw6IGR5bmFtaWNFbHNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdG9uQnVpbGQoZG9tKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXMsXG5cdFx0XHRmQ2hlY2tIZWFkZXJIZWlnaHQgPSBfLmJpbmQodGhpcy5jaGVja0hlYWRlckhlaWdodCwgdGhpcyk7XG5cblx0XHR0aGlzLm9Eb20gPSBkb207XG5cblx0XHR0aGlzLmZ1bGxTY3JlZW5Nb2RlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSAmJiB0aGlzLm1lc3NhZ2UoKSkge1xuXHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlVmlldyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNob3dBdHRhY2htbmV0Q29udHJvbHMuc3Vic2NyaWJlKGZDaGVja0hlYWRlckhlaWdodCk7XG5cdFx0dGhpcy5mdWxsU2NyZWVuTW9kZS5zdWJzY3JpYmUoZkNoZWNrSGVhZGVySGVpZ2h0KTtcblx0XHR0aGlzLnNob3dGdWxsSW5mby5zdWJzY3JpYmUoZkNoZWNrSGVhZGVySGVpZ2h0KTtcblx0XHR0aGlzLm1lc3NhZ2Uuc3Vic2NyaWJlKGZDaGVja0hlYWRlckhlaWdodCk7XG5cblx0XHRFdmVudHMuc3ViKFxuXHRcdFx0J3dpbmRvdy5yZXNpemUnLFxuXHRcdFx0Xy50aHJvdHRsZSgoKSA9PiB7XG5cdFx0XHRcdF8uZGVsYXkoZkNoZWNrSGVhZGVySGVpZ2h0LCAxKTtcblx0XHRcdFx0Xy5kZWxheShmQ2hlY2tIZWFkZXJIZWlnaHQsIE1hZ2ljcy5UaW1lMjAwbXMpO1xuXHRcdFx0XHRfLmRlbGF5KGZDaGVja0hlYWRlckhlaWdodCwgTWFnaWNzLlRpbWU1MDBtcyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwbXMpXG5cdFx0KTtcblxuXHRcdHRoaXMuc2hvd0Z1bGxJbmZvLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0d2luZG93UmVzaXplKE1hZ2ljcy5UaW1lMjAwbXMpO1xuXHRcdFx0TG9jYWwuc2V0KENsaWVudFNpZGVLZXlOYW1lLk1lc3NhZ2VIZWFkZXJGdWxsSW5mbywgdmFsdWUgPyAnMScgOiAnMCcpO1xuXHRcdH0pO1xuXG5cdFx0U29jaWFsU3RvcmUuYXBwZW5kRHJvcGJveCgpO1xuXG5cdFx0dGhpcy5vSGVhZGVyRG9tID0gJCgnLm1lc3NhZ2VJdGVtSGVhZGVyJywgZG9tKTtcblx0XHR0aGlzLm9IZWFkZXJEb20gPSB0aGlzLm9IZWFkZXJEb21bMF0gPyB0aGlzLm9IZWFkZXJEb20gOiBudWxsO1xuXG5cdFx0aWYgKHRoaXMubW9iaWxlKSB7XG5cdFx0XHRkb20ub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGRvbVxuXHRcdFx0Lm9uKCdjbGljaycsICdhJywgZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Ly8gc2V0dXAgbWFpdG8gcHJvdG9jb2xcblx0XHRcdFx0cmV0dXJuICEoXG5cdFx0XHRcdFx0ISFldmVudCAmJlxuXHRcdFx0XHRcdE1hZ2ljcy5FdmVudFdoaWNoTW91c2VNaWRkbGUgIT09IGV2ZW50LndoaWNoICYmXG5cdFx0XHRcdFx0bWFpbFRvSGVscGVyKFxuXHRcdFx0XHRcdFx0JCh0aGlzKS5hdHRyKCdocmVmJyksXG5cdFx0XHRcdFx0XHRTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpID8gcmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlJykgOiBudWxsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmF0dGFjaG1lbnRzUGxhY2UgLmF0dGFjaG1lbnRJY29uUGFyZW50JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudCAmJiBldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmF0dGFjaG1lbnRzUGxhY2UgLnNob3dQcmVwbGF5JywgZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChhdHRhY2htZW50ICYmIEF1ZGlvLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBBdWRpby5zdXBwb3J0ZWRNcDMgJiYgYXR0YWNobWVudC5pc01wMygpOlxuXHRcdFx0XHRcdFx0XHRBdWRpby5wbGF5TXAzKGF0dGFjaG1lbnQubGlua0Rvd25sb2FkKCksIGF0dGFjaG1lbnQuZmlsZU5hbWUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgQXVkaW8uc3VwcG9ydGVkT2dnICYmIGF0dGFjaG1lbnQuaXNPZ2coKTpcblx0XHRcdFx0XHRcdFx0QXVkaW8ucGxheU9nZyhhdHRhY2htZW50LmxpbmtEb3dubG9hZCgpLCBhdHRhY2htZW50LmZpbGVOYW1lKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIEF1ZGlvLnN1cHBvcnRlZFdhdiAmJiBhdHRhY2htZW50LmlzV2F2KCk6XG5cdFx0XHRcdFx0XHRcdEF1ZGlvLnBsYXlXYXYoYXR0YWNobWVudC5saW5rRG93bmxvYWQoKSwgYXR0YWNobWVudC5maWxlTmFtZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmF0dGFjaG1lbnRzUGxhY2UgLmF0dGFjaG1lbnRJdGVtIC5hdHRhY2htZW50TmFtZVBhcmVudCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBhdHRhY2htZW50ID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0aWYgKGF0dGFjaG1lbnQgJiYgYXR0YWNobWVudC5kb3dubG9hZCkge1xuXHRcdFx0XHRcdGdldEFwcCgpLmRvd25sb2FkKGF0dGFjaG1lbnQubGlua0Rvd25sb2FkKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcubWVzc2FnZUl0ZW1IZWFkZXIgLnN1YmplY3RQYXJlbnQgLmZsYWdQYXJlbnQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IHNlbGYubWVzc2FnZSgpO1xuXHRcdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHRcdGdldEFwcCgpLm1lc3NhZ2VMaXN0QWN0aW9uKFxuXHRcdFx0XHRcdFx0bWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRcdG1lc3NhZ2UuZmxhZ2dlZCgpID8gTWVzc2FnZVNldEFjdGlvbi5VbnNldEZsYWcgOiBNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWcsXG5cdFx0XHRcdFx0XHRbbWVzc2FnZV1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcudGhyZWFkLWxpc3QgLmZsYWdQYXJlbnQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2UuZm9sZGVyICYmIG1lc3NhZ2UudWlkKSB7XG5cdFx0XHRcdFx0Z2V0QXBwKCkubWVzc2FnZUxpc3RBY3Rpb24oXG5cdFx0XHRcdFx0XHRtZXNzYWdlLmZvbGRlcixcblx0XHRcdFx0XHRcdG1lc3NhZ2UuZmxhZ2dlZCgpID8gTWVzc2FnZVNldEFjdGlvbi5VbnNldEZsYWcgOiBNZXNzYWdlU2V0QWN0aW9uLlNldEZsYWcsXG5cdFx0XHRcdFx0XHRbbWVzc2FnZV1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi50aHJlYWRzRHJvcGRvd25UcmlnZ2VyKHRydWUpO1xuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmIChGb2N1c2VkLk1lc3NhZ2VWaWV3ICE9PSB2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnNjcm9sbE1lc3NhZ2VUb1RvcCgpO1xuXHRcdFx0XHR0aGlzLnNjcm9sbE1lc3NhZ2VUb0xlZnQoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtleVNjb3BlUmVhbC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VEb21Gb2N1c2VkKEtleVN0YXRlLk1lc3NhZ2VWaWV3ID09PSB2YWx1ZSAmJiAhaW5Gb2N1cygpKTtcblx0XHR9KTtcblxuXHRcdHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbSA9IGRvbS5maW5kKCcubWVzc2FnZUl0ZW0gLmNvbnRlbnQnKTtcblx0XHR0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb20gPVxuXHRcdFx0dGhpcy5vTWVzc2FnZVNjcm9sbGVyRG9tICYmIHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbVswXSA/IHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbSA6IG51bGw7XG5cblx0XHR0aGlzLmluaXRTaG9ydGN1dHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGVzY1Nob3J0Y3V0cygpIHtcblx0XHRpZiAodGhpcy52aWV3TW9kZWxWaXNpYmlsaXR5KCkgJiYgdGhpcy5tZXNzYWdlKCkpIHtcblx0XHRcdGlmICh0aGlzLmZ1bGxTY3JlZW5Nb2RlKCkpIHtcblx0XHRcdFx0dGhpcy5mdWxsU2NyZWVuTW9kZShmYWxzZSk7XG5cblx0XHRcdFx0aWYgKExheW91dC5Ob1ByZXZpZXcgIT09IHRoaXMubGF5b3V0KCkpIHtcblx0XHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlTGlzdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoTGF5b3V0Lk5vUHJldmlldyA9PT0gdGhpcy5sYXlvdXQoKSkge1xuXHRcdFx0XHR0aGlzLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRBcHBTdG9yZS5mb2N1c2VkU3RhdGUoRm9jdXNlZC5NZXNzYWdlTGlzdCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGluaXRTaG9ydGN1dHMoKSB7XG5cdFx0Ly8gZXhpdCBmdWxsc2NyZWVuLCBiYWNrXG5cdFx0a2V5KCdlc2MsIGJhY2tzcGFjZScsIEtleVN0YXRlLk1lc3NhZ2VWaWV3LCBfLmJpbmQodGhpcy5lc2NTaG9ydGN1dHMsIHRoaXMpKTtcblxuXHRcdC8vIGZ1bGxzY3JlZW5cblx0XHRrZXkoJ2VudGVyJywgS2V5U3RhdGUuTWVzc2FnZVZpZXcsICgpID0+IHtcblx0XHRcdHRoaXMudG9nZ2xlRnVsbFNjcmVlbigpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0Ly8gcmVwbHlcblx0XHRrZXkoJ3InLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0aWYgKE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkpIHtcblx0XHRcdFx0dGhpcy5yZXBseUNvbW1hbmQoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdC8vIHJlcGxhQWxsXG5cdFx0a2V5KCdhJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdGlmIChNZXNzYWdlU3RvcmUubWVzc2FnZSgpKSB7XG5cdFx0XHRcdHRoaXMucmVwbHlBbGxDb21tYW5kKCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHQvLyBmb3J3YXJkXG5cdFx0a2V5KCdmJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdGlmIChNZXNzYWdlU3RvcmUubWVzc2FnZSgpKSB7XG5cdFx0XHRcdHRoaXMuZm9yd2FyZENvbW1hbmQoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdC8vIG1lc3NhZ2UgaW5mb3JtYXRpb25cblx0XHRrZXkoJ2N0cmwraSwgY29tbWFuZCtpJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdGlmIChNZXNzYWdlU3RvcmUubWVzc2FnZSgpKSB7XG5cdFx0XHRcdHRoaXMuc2hvd0Z1bGxJbmZvKCF0aGlzLnNob3dGdWxsSW5mbygpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdC8vIHRvZ2dsZSBtZXNzYWdlIGJsb2NrcXVvdGVzXG5cdFx0a2V5KCdiJywgW0tleVN0YXRlLk1lc3NhZ2VMaXN0LCBLZXlTdGF0ZS5NZXNzYWdlVmlld10sICgpID0+IHtcblx0XHRcdGlmIChNZXNzYWdlU3RvcmUubWVzc2FnZSgpICYmIE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkuYm9keSkge1xuXHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZSgpXG5cdFx0XHRcdFx0LmJvZHkuZmluZCgnLnJsQmxvY2txdW90ZVN3aXRjaGVyJylcblx0XHRcdFx0XHQuY2xpY2soKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGtleSgnY3RybCt1cCwgY29tbWFuZCt1cCwgY3RybCtsZWZ0LCBjb21tYW5kK2xlZnQnLCBbS2V5U3RhdGUuTWVzc2FnZUxpc3QsIEtleVN0YXRlLk1lc3NhZ2VWaWV3XSwgKCkgPT4ge1xuXHRcdFx0dGhpcy5nb1VwQ29tbWFuZCgpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdjdHJsK2Rvd24sIGNvbW1hbmQrZG93biwgY3RybCtyaWdodCwgY29tbWFuZCtyaWdodCcsIFtLZXlTdGF0ZS5NZXNzYWdlTGlzdCwgS2V5U3RhdGUuTWVzc2FnZVZpZXddLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmdvRG93bkNvbW1hbmQoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdC8vIHByaW50XG5cdFx0a2V5KCdjdHJsK3AsIGNvbW1hbmQrcCcsIFtLZXlTdGF0ZS5NZXNzYWdlVmlldywgS2V5U3RhdGUuTWVzc2FnZUxpc3RdLCAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5tZXNzYWdlKCkpIHtcblx0XHRcdFx0dGhpcy5tZXNzYWdlKCkucHJpbnRNZXNzYWdlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblxuXHRcdC8vIGRlbGV0ZVxuXHRcdGtleSgnZGVsZXRlLCBzaGlmdCtkZWxldGUnLCBLZXlTdGF0ZS5NZXNzYWdlVmlldywgKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQpIHtcblx0XHRcdFx0aWYgKGhhbmRsZXIgJiYgJ3NoaWZ0K2RlbGV0ZScgPT09IGhhbmRsZXIuc2hvcnRjdXQpIHtcblx0XHRcdFx0XHR0aGlzLmRlbGV0ZVdpdGhvdXRNb3ZlQ29tbWFuZCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZGVsZXRlQ29tbWFuZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdC8vIGNoYW5nZSBmb2N1c2VkIHN0YXRlXG5cdFx0a2V5KCd0YWIsIHNoaWZ0K3RhYiwgbGVmdCcsIEtleVN0YXRlLk1lc3NhZ2VWaWV3LCAoZXZlbnQsIGhhbmRsZXIpID0+IHtcblx0XHRcdGlmICghdGhpcy5mdWxsU2NyZWVuTW9kZSgpICYmIHRoaXMubWVzc2FnZSgpICYmIExheW91dC5Ob1ByZXZpZXcgIT09IHRoaXMubGF5b3V0KCkpIHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGhhbmRsZXIgJiYgJ2xlZnQnID09PSBoYW5kbGVyLnNob3J0Y3V0KSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbSAmJiAwIDwgdGhpcy5vTWVzc2FnZVNjcm9sbGVyRG9tLnNjcm9sbExlZnQoKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0QXBwU3RvcmUuZm9jdXNlZFN0YXRlKEZvY3VzZWQuTWVzc2FnZUxpc3QpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdEFwcFN0b3JlLmZvY3VzZWRTdGF0ZShGb2N1c2VkLk1lc3NhZ2VMaXN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dGhpcy5tZXNzYWdlKCkgJiZcblx0XHRcdFx0TGF5b3V0Lk5vUHJldmlldyA9PT0gdGhpcy5sYXlvdXQoKSAmJlxuXHRcdFx0XHRldmVudCAmJlxuXHRcdFx0XHRoYW5kbGVyICYmXG5cdFx0XHRcdCdsZWZ0JyA9PT0gaGFuZGxlci5zaG9ydGN1dFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0RyYWZ0Rm9sZGVyKCkge1xuXHRcdHJldHVybiBNZXNzYWdlU3RvcmUubWVzc2FnZSgpICYmIEZvbGRlclN0b3JlLmRyYWZ0Rm9sZGVyKCkgPT09IE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkuZm9sZGVyRnVsbE5hbWVSYXc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc1NlbnRGb2xkZXIoKSB7XG5cdFx0cmV0dXJuIE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkgJiYgRm9sZGVyU3RvcmUuc2VudEZvbGRlcigpID09PSBNZXNzYWdlU3RvcmUubWVzc2FnZSgpLmZvbGRlckZ1bGxOYW1lUmF3O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aXNTcGFtRm9sZGVyKCkge1xuXHRcdHJldHVybiBNZXNzYWdlU3RvcmUubWVzc2FnZSgpICYmIEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKSA9PT0gTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKS5mb2xkZXJGdWxsTmFtZVJhdztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzU3BhbURpc2FibGVkKCkge1xuXHRcdHJldHVybiBNZXNzYWdlU3RvcmUubWVzc2FnZSgpICYmIEZvbGRlclN0b3JlLnNwYW1Gb2xkZXIoKSA9PT0gVU5VU0VEX09QVElPTl9WQUxVRTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQXJjaGl2ZUZvbGRlcigpIHtcblx0XHRyZXR1cm4gTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKSAmJiBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKCkgPT09IE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkuZm9sZGVyRnVsbE5hbWVSYXc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0FyY2hpdmVEaXNhYmxlZCgpIHtcblx0XHRyZXR1cm4gTWVzc2FnZVN0b3JlLm1lc3NhZ2UoKSAmJiBGb2xkZXJTdG9yZS5hcmNoaXZlRm9sZGVyKCkgPT09IFVOVVNFRF9PUFRJT05fVkFMVUU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0RyYWZ0T3JTZW50Rm9sZGVyKCkge1xuXHRcdHJldHVybiB0aGlzLmlzRHJhZnRGb2xkZXIoKSB8fCB0aGlzLmlzU2VudEZvbGRlcigpO1xuXHR9XG5cblx0Y29tcG9zZUNsaWNrKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Db21wb3NlJykpO1xuXHRcdH1cblx0fVxuXG5cdGVkaXRNZXNzYWdlKCkge1xuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQ29tcG9zZXIpICYmIE1lc3NhZ2VTdG9yZS5tZXNzYWdlKCkpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0NvbXBvc2UnKSwgW0NvbXBvc2VUeXBlLkRyYWZ0LCBNZXNzYWdlU3RvcmUubWVzc2FnZSgpXSk7XG5cdFx0fVxuXHR9XG5cblx0c2Nyb2xsTWVzc2FnZVRvVG9wKCkge1xuXHRcdGlmICh0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb20pIHtcblx0XHRcdGlmIChNYWdpY3MuU2l6ZTUwcHggPCB0aGlzLm9NZXNzYWdlU2Nyb2xsZXJEb20uc2Nyb2xsVG9wKCkpIHtcblx0XHRcdFx0dGhpcy5vTWVzc2FnZVNjcm9sbGVyRG9tLnNjcm9sbFRvcChNYWdpY3MuU2l6ZTUwcHgpLmFuaW1hdGUoeyAnc2Nyb2xsVG9wJzogMCB9LCBNYWdpY3MuVGltZTIwMG1zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbS5zY3JvbGxUb3AoMCk7XG5cdFx0XHR9XG5cblx0XHRcdHdpbmRvd1Jlc2l6ZSgpO1xuXHRcdH1cblx0fVxuXG5cdHNjcm9sbE1lc3NhZ2VUb0xlZnQoKSB7XG5cdFx0aWYgKHRoaXMub01lc3NhZ2VTY3JvbGxlckRvbSkge1xuXHRcdFx0dGhpcy5vTWVzc2FnZVNjcm9sbGVyRG9tLnNjcm9sbExlZnQoMCk7XG5cdFx0XHR3aW5kb3dSZXNpemUoKTtcblx0XHR9XG5cdH1cblxuXHRnZXRBdHRhY2htZW50c0hhc2hlcygpIHtcblx0XHRjb25zdCBhdHRzID0gdGhpcy5tZXNzYWdlKCkgPyB0aGlzLm1lc3NhZ2UoKS5hdHRhY2htZW50cygpIDogW107XG5cdFx0cmV0dXJuIF8uY29tcGFjdChfLm1hcChhdHRzLCAoaXRlbSkgPT4gKGl0ZW0gJiYgIWl0ZW0uaXNMaW5rZWQgJiYgaXRlbS5jaGVja2VkKCkgPyBpdGVtLmRvd25sb2FkIDogJycpKSk7XG5cdH1cblxuXHRkb3dubG9hZEFzWmlwKCkge1xuXHRcdGNvbnN0IGhhc2hlcyA9IHRoaXMuZ2V0QXR0YWNobWVudHNIYXNoZXMoKTtcblx0XHRpZiAoMCA8IGhhc2hlcy5sZW5ndGgpIHtcblx0XHRcdFByb21pc2VzLmF0dGFjaG1lbnRzQWN0aW9ucygnWmlwJywgaGFzaGVzLCB0aGlzLmRvd25sb2FkQXNaaXBMb2FkaW5nKVxuXHRcdFx0XHQudGhlbigocmVzdWx0KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHJlc3VsdCAmJiByZXN1bHQuUmVzdWx0ICYmIHJlc3VsdC5SZXN1bHQuRmlsZXMgJiYgcmVzdWx0LlJlc3VsdC5GaWxlc1swXSAmJiByZXN1bHQuUmVzdWx0LkZpbGVzWzBdLkhhc2gpIHtcblx0XHRcdFx0XHRcdGdldEFwcCgpLmRvd25sb2FkKGF0dGFjaG1lbnREb3dubG9hZChyZXN1bHQuUmVzdWx0LkZpbGVzWzBdLkhhc2gpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5kb3dubG9hZEFzWmlwRXJyb3IodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZG93bmxvYWRBc1ppcEVycm9yKHRydWUpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5oaWdobGlnaHRVbnNlbGVjdGVkQXR0YWNobWVudHModHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0c2F2ZVRvT3duQ2xvdWQoKSB7XG5cdFx0Y29uc3QgaGFzaGVzID0gdGhpcy5nZXRBdHRhY2htZW50c0hhc2hlcygpO1xuXHRcdGlmICgwIDwgaGFzaGVzLmxlbmd0aCkge1xuXHRcdFx0UHJvbWlzZXMuYXR0YWNobWVudHNBY3Rpb25zKCdPd25DbG91ZCcsIGhhc2hlcywgdGhpcy5zYXZlVG9Pd25DbG91ZExvYWRpbmcpXG5cdFx0XHRcdC50aGVuKChyZXN1bHQpID0+IHtcblx0XHRcdFx0XHRpZiAocmVzdWx0ICYmIHJlc3VsdC5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRTdWNjZXNzKHRydWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVUb093bkNsb3VkRXJyb3IodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuc2F2ZVRvT3duQ2xvdWRFcnJvcih0cnVlKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaGlnaGxpZ2h0VW5zZWxlY3RlZEF0dGFjaG1lbnRzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdHNhdmVUb0Ryb3Bib3goKSB7XG5cdFx0Y29uc3QgZmlsZXMgPSBbXSxcblx0XHRcdGhhc2hlcyA9IHRoaXMuZ2V0QXR0YWNobWVudHNIYXNoZXMoKTtcblxuXHRcdGlmICgwIDwgaGFzaGVzLmxlbmd0aCkge1xuXHRcdFx0aWYgKHdpbmRvdy5Ecm9wYm94KSB7XG5cdFx0XHRcdFByb21pc2VzLmF0dGFjaG1lbnRzQWN0aW9ucygnRHJvcGJveCcsIGhhc2hlcywgdGhpcy5zYXZlVG9Ecm9wYm94TG9hZGluZylcblx0XHRcdFx0XHQudGhlbigocmVzdWx0KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAocmVzdWx0ICYmIHJlc3VsdC5SZXN1bHQgJiYgcmVzdWx0LlJlc3VsdC5VcmwgJiYgcmVzdWx0LlJlc3VsdC5TaG9ydExpZmUgJiYgcmVzdWx0LlJlc3VsdC5GaWxlcykge1xuXHRcdFx0XHRcdFx0XHRpZiAod2luZG93LkRyb3Bib3ggJiYgaXNBcnJheShyZXN1bHQuUmVzdWx0LkZpbGVzKSkge1xuXHRcdFx0XHRcdFx0XHRcdF8uZWFjaChyZXN1bHQuUmVzdWx0LkZpbGVzLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlsZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVybDogcmVzdWx0LlJlc3VsdC5VcmwgKyBhdHRhY2htZW50RG93bmxvYWQoaXRlbS5IYXNoLCByZXN1bHQuUmVzdWx0LlNob3J0TGlmZSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpbGVuYW1lOiBpdGVtLkZpbGVOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5Ecm9wYm94LnNhdmUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlsZXM6IGZpbGVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvZ3Jlc3M6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94TG9hZGluZyh0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94RXJyb3IoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hTdWNjZXNzKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRjYW5jZWw6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94U3VjY2VzcyhmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2F2ZVRvRHJvcGJveEVycm9yKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94TG9hZGluZyhmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0c3VjY2VzczogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hTdWNjZXNzKHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hMb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hFcnJvcih0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94TG9hZGluZyhmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zYXZlVG9Ecm9wYm94RXJyb3IodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVUb0Ryb3Bib3hFcnJvcih0cnVlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5oaWdobGlnaHRVbnNlbGVjdGVkQXR0YWNobWVudHModHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7TWVzc2FnZU1vZGVsfSBvTWVzc2FnZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHNob3dJbWFnZXMobWVzc2FnZSkge1xuXHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2Uuc2hvd0V4dGVybmFsSW1hZ2VzKSB7XG5cdFx0XHRtZXNzYWdlLnNob3dFeHRlcm5hbEltYWdlcyh0cnVlKTtcblx0XHR9XG5cblx0XHR0aGlzLmNoZWNrSGVhZGVySGVpZ2h0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHByaW50YWJsZUNoZWNrZWRNZXNzYWdlQ291bnQoKSB7XG5cdFx0Y29uc3QgY250ID0gdGhpcy5tZXNzYWdlTGlzdENoZWNrZWRPclNlbGVjdGVkVWlkc1dpdGhTdWJNYWlscygpLmxlbmd0aDtcblx0XHRyZXR1cm4gMCA8IGNudCA/ICgxMDAgPiBjbnQgPyBjbnQgOiAnOTkrJykgOiAnJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1tYWdpYy1udW1iZXJzXG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtNZXNzYWdlTW9kZWx9IG9NZXNzYWdlXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0cmVhZFJlY2VpcHQob01lc3NhZ2UpIHtcblx0XHRpZiAob01lc3NhZ2UgJiYgJycgIT09IG9NZXNzYWdlLnJlYWRSZWNlaXB0KCkpIHtcblx0XHRcdFJlbW90ZS5zZW5kUmVhZFJlY2VpcHRNZXNzYWdlKFxuXHRcdFx0XHRub29wLFxuXHRcdFx0XHRvTWVzc2FnZS5mb2xkZXJGdWxsTmFtZVJhdyxcblx0XHRcdFx0b01lc3NhZ2UudWlkLFxuXHRcdFx0XHRvTWVzc2FnZS5yZWFkUmVjZWlwdCgpLFxuXHRcdFx0XHRpMThuKCdSRUFEX1JFQ0VJUFQvU1VCSkVDVCcsIHsgJ1NVQkpFQ1QnOiBvTWVzc2FnZS5zdWJqZWN0KCkgfSksXG5cdFx0XHRcdGkxOG4oJ1JFQURfUkVDRUlQVC9CT0RZJywgeyAnUkVBRC1SRUNFSVBUJzogQWNjb3VudFN0b3JlLmVtYWlsKCkgfSlcblx0XHRcdCk7XG5cblx0XHRcdG9NZXNzYWdlLmlzUmVhZFJlY2VpcHQodHJ1ZSk7XG5cblx0XHRcdHN0b3JlTWVzc2FnZUZsYWdzVG9DYWNoZShvTWVzc2FnZSk7XG5cblx0XHRcdGdldEFwcCgpLnJlbG9hZEZsYWdzQ3VycmVudE1lc3NhZ2VMaXN0QW5kTWVzc2FnZUZyb21DYWNoZSgpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2hlY2tIZWFkZXJIZWlnaHQoKTtcblx0fVxufVxuXG5leHBvcnQgeyBNZXNzYWdlVmlld01haWxCb3hVc2VyVmlldywgTWVzc2FnZVZpZXdNYWlsQm94VXNlclZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgQ2FwYSwgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsga2V5U2NvcGUsIGxlZnRQYW5lbFR5cGUsIGxlZnRQYW5lbERpc2FibGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyB9IGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcbmltcG9ydCB7IGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlLCBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQXBwJztcbmltcG9ydCBBY2NvdW50U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQWNjb3VudCc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IHsgYWRkU2V0dGluZ3NWaWV3TW9kZWwgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmltcG9ydCB7IEFic3RyYWN0U2V0dGluZ3NTY3JlZW4gfSBmcm9tICdTY3JlZW4vQWJzdHJhY3RTZXR0aW5ncyc7XG5cbmltcG9ydCB7IEdlbmVyYWxVc2VyU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9Vc2VyL0dlbmVyYWwnO1xuaW1wb3J0IHsgQ29udGFjdHNVc2VyU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9Vc2VyL0NvbnRhY3RzJztcbmltcG9ydCB7IEFjY291bnRzVXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9BY2NvdW50cyc7XG5pbXBvcnQgeyBGaWx0ZXJzVXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9GaWx0ZXJzJztcbmltcG9ydCB7IFNlY3VyaXR5VXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9TZWN1cml0eSc7XG5pbXBvcnQgeyBTb2NpYWxVc2VyU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9Vc2VyL1NvY2lhbCc7XG5pbXBvcnQgeyBDaGFuZ2VQYXNzd29yZFVzZXJTZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL1VzZXIvQ2hhbmdlUGFzc3dvcmQnO1xuaW1wb3J0IHsgVGVtcGxhdGVzVXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9UZW1wbGF0ZXMnO1xuaW1wb3J0IHsgRm9sZGVyc1VzZXJTZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL1VzZXIvRm9sZGVycyc7XG5pbXBvcnQgeyBUaGVtZXNVc2VyU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9Vc2VyL1RoZW1lcyc7XG5pbXBvcnQgeyBPcGVuUGdwVXNlclNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvVXNlci9PcGVuUGdwJztcblxuaW1wb3J0IHsgU3lzdGVtRHJvcERvd25TZXR0aW5nc1VzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL1NldHRpbmdzL1N5c3RlbURyb3BEb3duJztcbmltcG9ydCB7IE1lbnVTZXR0aW5nc1VzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL1NldHRpbmdzL01lbnUnO1xuaW1wb3J0IHsgUGFuZVNldHRpbmdzVXNlclZpZXcgfSBmcm9tICdWaWV3L1VzZXIvU2V0dGluZ3MvUGFuZSc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5jbGFzcyBTZXR0aW5nc1VzZXJTY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoW1N5c3RlbURyb3BEb3duU2V0dGluZ3NVc2VyVmlldywgTWVudVNldHRpbmdzVXNlclZpZXcsIFBhbmVTZXR0aW5nc1VzZXJWaWV3XSk7XG5cblx0XHRpbml0T25TdGFydE9yTGFuZ0NoYW5nZShcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5zU2V0dGluZ3NUaXRsZSA9IGkxOG4oJ1RJVExFUy9TRVRUSU5HUycpO1xuXHRcdFx0fSxcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5zZXRTZXR0aW5nc1RpdGxlKCk7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZkNhbGxiYWNrXG5cdCAqL1xuXHRzZXR1cFNldHRpbmdzKGZDYWxsYmFjayA9IG51bGwpIHtcblx0XHRpZiAoIVNldHRpbmdzLmNhcGEoQ2FwYS5TZXR0aW5ncykpIHtcblx0XHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdFx0ZkNhbGxiYWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChHZW5lcmFsVXNlclNldHRpbmdzLCAnU2V0dGluZ3NHZW5lcmFsJywgJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9HRU5FUkFMX05BTUUnLCAnZ2VuZXJhbCcsIHRydWUpO1xuXG5cdFx0aWYgKEFwcFN0b3JlLmNvbnRhY3RzSXNBbGxvd2VkKCkpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKENvbnRhY3RzVXNlclNldHRpbmdzLCAnU2V0dGluZ3NDb250YWN0cycsICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfQ09OVEFDVFNfTkFNRScsICdjb250YWN0cycpO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQWRkaXRpb25hbEFjY291bnRzKSB8fCBTZXR0aW5ncy5jYXBhKENhcGEuSWRlbnRpdGllcykpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFxuXHRcdFx0XHRBY2NvdW50c1VzZXJTZXR0aW5ncyxcblx0XHRcdFx0J1NldHRpbmdzQWNjb3VudHMnLFxuXHRcdFx0XHRTZXR0aW5ncy5jYXBhKENhcGEuQWRkaXRpb25hbEFjY291bnRzKVxuXHRcdFx0XHRcdD8gJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9BQ0NPVU5UU19OQU1FJ1xuXHRcdFx0XHRcdDogJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9JREVOVElUSUVTX05BTUUnLFxuXHRcdFx0XHQnYWNjb3VudHMnXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuU2lldmUpKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChGaWx0ZXJzVXNlclNldHRpbmdzLCAnU2V0dGluZ3NGaWx0ZXJzJywgJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9GSUxURVJTX05BTUUnLCAnZmlsdGVycycpO1xuXHRcdH1cblxuXHRcdGlmIChTZXR0aW5ncy5jYXBhKENhcGEuQXV0b0xvZ291dCkgfHwgU2V0dGluZ3MuY2FwYShDYXBhLlR3b0ZhY3RvcikpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFNlY3VyaXR5VXNlclNldHRpbmdzLCAnU2V0dGluZ3NTZWN1cml0eScsICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfU0VDVVJJVFlfTkFNRScsICdzZWN1cml0eScpO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdEFjY291bnRTdG9yZS5pc1Jvb3RBY2NvdW50KCkgJiZcblx0XHRcdCgoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsJykgJiYgU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsQXV0aCcpKSB8fFxuXHRcdFx0XHRTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dGYWNlYm9va1NvY2lhbCcpIHx8XG5cdFx0XHRcdFNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd1R3aXR0ZXJTb2NpYWwnKSlcblx0XHQpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFNvY2lhbFVzZXJTZXR0aW5ncywgJ1NldHRpbmdzU29jaWFsJywgJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9TT0NJQUxfTkFNRScsICdzb2NpYWwnKTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NoYW5nZVBhc3N3b3JkSXNBbGxvd2VkJykpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFxuXHRcdFx0XHRDaGFuZ2VQYXNzd29yZFVzZXJTZXR0aW5ncyxcblx0XHRcdFx0J1NldHRpbmdzQ2hhbmdlUGFzc3dvcmQnLFxuXHRcdFx0XHQnU0VUVElOR1NfTEFCRUxTL0xBQkVMX0NIQU5HRV9QQVNTV09SRF9OQU1FJyxcblx0XHRcdFx0J2NoYW5nZS1wYXNzd29yZCdcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5UZW1wbGF0ZXMpKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChcblx0XHRcdFx0VGVtcGxhdGVzVXNlclNldHRpbmdzLFxuXHRcdFx0XHQnU2V0dGluZ3NUZW1wbGF0ZXMnLFxuXHRcdFx0XHQnU0VUVElOR1NfTEFCRUxTL0xBQkVMX1RFTVBMQVRFU19OQU1FJyxcblx0XHRcdFx0J3RlbXBsYXRlcydcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKFNldHRpbmdzLmNhcGEoQ2FwYS5Gb2xkZXJzKSkge1xuXHRcdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoRm9sZGVyc1VzZXJTZXR0aW5ncywgJ1NldHRpbmdzRm9sZGVycycsICdTRVRUSU5HU19MQUJFTFMvTEFCRUxfRk9MREVSU19OQU1FJywgJ2ZvbGRlcnMnKTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLlRoZW1lcykpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFRoZW1lc1VzZXJTZXR0aW5ncywgJ1NldHRpbmdzVGhlbWVzJywgJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9USEVNRVNfTkFNRScsICd0aGVtZXMnKTtcblx0XHR9XG5cblx0XHRpZiAoU2V0dGluZ3MuY2FwYShDYXBhLk9wZW5QR1ApKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChPcGVuUGdwVXNlclNldHRpbmdzLCAnU2V0dGluZ3NPcGVuUEdQJywgJ1NFVFRJTkdTX0xBQkVMUy9MQUJFTF9PUEVOX1BHUF9OQU1FJywgJ29wZW5wZ3AnKTtcblx0XHR9XG5cblx0XHRydW5TZXR0aW5nc1ZpZXdNb2RlbEhvb2tzKGZhbHNlKTtcblxuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjaygpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMuc2V0U2V0dGluZ3NUaXRsZSgpO1xuXHRcdGtleVNjb3BlKEtleVN0YXRlLlNldHRpbmdzKTtcblx0XHRsZWZ0UGFuZWxUeXBlKCcnKTtcblxuXHRcdGlmIChTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJykpIHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdHNldFNldHRpbmdzVGl0bGUoKSB7XG5cdFx0Y29uc3Qgc0VtYWlsID0gQWNjb3VudFN0b3JlLmVtYWlsKCk7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoKCcnID09PSBzRW1haWwgPyAnJyA6IHNFbWFpbCArICcgLSAnKSArIHRoaXMuc1NldHRpbmdzVGl0bGUpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNldHRpbmdzVXNlclNjcmVlbiwgU2V0dGluZ3NVc2VyU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgTUVTU0FHRVNfUEVSX1BBR0VfVkFMVUVTIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBiQW5pbWF0aW9uU3VwcG9ydGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MsIEVkaXRvckRlZmF1bHRUeXBlLCBMYXlvdXQgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgY29udmVydExhbmdOYW1lLCBpc0FycmF5LCB0aW1lT3V0QWN0aW9uLCBib29sVG9BamF4IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgaTE4biwgdHJpZ2dlciBhcyB0cmFuc2xhdG9yVHJpZ2dlciwgcmVsb2FkIGFzIHRyYW5zbGF0b3JSZWxvYWQgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL0FwcCc7XG5pbXBvcnQgTGFuZ3VhZ2VTdG9yZSBmcm9tICdTdG9yZXMvTGFuZ3VhZ2UnO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvU2V0dGluZ3MnO1xuaW1wb3J0IElkZW50aXR5U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvSWRlbnRpdHknO1xuaW1wb3J0IE5vdGlmaWNhdGlvblN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL05vdGlmaWNhdGlvbic7XG5pbXBvcnQgTWVzc2FnZVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL01lc3NhZ2UnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5jbGFzcyBHZW5lcmFsVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5sYW5ndWFnZSA9IExhbmd1YWdlU3RvcmUubGFuZ3VhZ2U7XG5cdFx0dGhpcy5sYW5ndWFnZXMgPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlcztcblx0XHR0aGlzLm1lc3NhZ2VzUGVyUGFnZSA9IFNldHRpbmdzU3RvcmUubWVzc2FnZXNQZXJQYWdlO1xuXHRcdHRoaXMubWVzc2FnZXNQZXJQYWdlQXJyYXkgPSBNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVM7XG5cblx0XHR0aGlzLmVkaXRvckRlZmF1bHRUeXBlID0gU2V0dGluZ3NTdG9yZS5lZGl0b3JEZWZhdWx0VHlwZTtcblx0XHR0aGlzLmxheW91dCA9IFNldHRpbmdzU3RvcmUubGF5b3V0O1xuXHRcdHRoaXMudXNlUHJldmlld1BhbmUgPSBTZXR0aW5nc1N0b3JlLnVzZVByZXZpZXdQYW5lO1xuXG5cdFx0dGhpcy5zb3VuZE5vdGlmaWNhdGlvbklzU3VwcG9ydGVkID0gTm90aWZpY2F0aW9uU3RvcmUuc291bmROb3RpZmljYXRpb25Jc1N1cHBvcnRlZDtcblx0XHR0aGlzLmVuYWJsZVNvdW5kTm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uU3RvcmUuZW5hYmxlU291bmROb3RpZmljYXRpb247XG5cblx0XHR0aGlzLmVuYWJsZURlc2t0b3BOb3RpZmljYXRpb24gPSBOb3RpZmljYXRpb25TdG9yZS5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uO1xuXHRcdHRoaXMuaXNEZXNrdG9wTm90aWZpY2F0aW9uU3VwcG9ydGVkID0gTm90aWZpY2F0aW9uU3RvcmUuaXNEZXNrdG9wTm90aWZpY2F0aW9uU3VwcG9ydGVkO1xuXHRcdHRoaXMuaXNEZXNrdG9wTm90aWZpY2F0aW9uRGVuaWVkID0gTm90aWZpY2F0aW9uU3RvcmUuaXNEZXNrdG9wTm90aWZpY2F0aW9uRGVuaWVkO1xuXG5cdFx0dGhpcy5zaG93SW1hZ2VzID0gU2V0dGluZ3NTdG9yZS5zaG93SW1hZ2VzO1xuXHRcdHRoaXMudXNlQ2hlY2tib3hlc0luTGlzdCA9IFNldHRpbmdzU3RvcmUudXNlQ2hlY2tib3hlc0luTGlzdDtcblx0XHR0aGlzLnRocmVhZHNBbGxvd2VkID0gQXBwU3RvcmUudGhyZWFkc0FsbG93ZWQ7XG5cdFx0dGhpcy51c2VUaHJlYWRzID0gU2V0dGluZ3NTdG9yZS51c2VUaHJlYWRzO1xuXHRcdHRoaXMucmVwbHlTYW1lRm9sZGVyID0gU2V0dGluZ3NTdG9yZS5yZXBseVNhbWVGb2xkZXI7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MgPSBBcHBTdG9yZS5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3M7XG5cblx0XHR0aGlzLmxhbmd1YWdlRnVsbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiBjb252ZXJ0TGFuZ05hbWUodGhpcy5sYW5ndWFnZSgpKSk7XG5cdFx0dGhpcy5sYW5ndWFnZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IE1hZ2ljcy5UaW1lMTAwbXMgfSk7XG5cblx0XHR0aGlzLm1wcFRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5lZGl0b3JEZWZhdWx0VHlwZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5sYXlvdXRUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXG5cdFx0dGhpcy5pc0FuaW1hdGlvblN1cHBvcnRlZCA9IGJBbmltYXRpb25TdXBwb3J0ZWQ7XG5cblx0XHR0aGlzLmlkZW50aXRpZXMgPSBJZGVudGl0eVN0b3JlLmlkZW50aXRpZXM7XG5cblx0XHR0aGlzLmlkZW50aXR5TWFpbiA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGxpc3QgPSB0aGlzLmlkZW50aXRpZXMoKTtcblx0XHRcdHJldHVybiBpc0FycmF5KGxpc3QpID8gXy5maW5kKGxpc3QsIChpdGVtKSA9PiBpdGVtICYmICcnID09PSBpdGVtLmlkKCkpIDogbnVsbDtcblx0XHR9KTtcblxuXHRcdHRoaXMuaWRlbnRpdHlNYWluRGVzYyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGlkZW50aXR5ID0gdGhpcy5pZGVudGl0eU1haW4oKTtcblx0XHRcdHJldHVybiBpZGVudGl0eSA/IGlkZW50aXR5LmZvcm1hdHRlZE5hbWUoKSA6ICctLS0nO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5lZGl0b3JEZWZhdWx0VHlwZXMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0eyAnaWQnOiBFZGl0b3JEZWZhdWx0VHlwZS5IdG1sLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX0dFTkVSQUwvTEFCRUxfRURJVE9SX0hUTUwnKSB9LFxuXHRcdFx0XHR7ICdpZCc6IEVkaXRvckRlZmF1bHRUeXBlLlBsYWluLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX0dFTkVSQUwvTEFCRUxfRURJVE9SX1BMQUlOJykgfSxcblx0XHRcdFx0eyAnaWQnOiBFZGl0b3JEZWZhdWx0VHlwZS5IdG1sRm9yY2VkLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX0dFTkVSQUwvTEFCRUxfRURJVE9SX0hUTUxfRk9SQ0VEJykgfSxcblx0XHRcdFx0eyAnaWQnOiBFZGl0b3JEZWZhdWx0VHlwZS5QbGFpbkZvcmNlZCwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19HRU5FUkFML0xBQkVMX0VESVRPUl9QTEFJTl9GT1JDRUQnKSB9XG5cdFx0XHRdO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5sYXlvdXRUeXBlcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHR7ICdpZCc6IExheW91dC5Ob1ByZXZpZXcsICduYW1lJzogaTE4bignU0VUVElOR1NfR0VORVJBTC9MQUJFTF9MQVlPVVRfTk9fU1BMSVQnKSB9LFxuXHRcdFx0XHR7ICdpZCc6IExheW91dC5TaWRlUHJldmlldywgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19HRU5FUkFML0xBQkVMX0xBWU9VVF9WRVJUSUNBTF9TUExJVCcpIH0sXG5cdFx0XHRcdHsgJ2lkJzogTGF5b3V0LkJvdHRvbVByZXZpZXcsICduYW1lJzogaTE4bignU0VUVElOR1NfR0VORVJBTC9MQUJFTF9MQVlPVVRfSE9SSVpPTlRBTF9TUExJVCcpIH1cblx0XHRcdF07XG5cdFx0fSk7XG5cdH1cblxuXHRlZGl0TWFpbklkZW50aXR5KCkge1xuXHRcdGNvbnN0IGlkZW50aXR5ID0gdGhpcy5pZGVudGl0eU1haW4oKTtcblx0XHRpZiAoaWRlbnRpdHkpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0lkZW50aXR5JyksIFtpZGVudGl0eV0pO1xuXHRcdH1cblx0fVxuXG5cdHRlc3RTb3VuZE5vdGlmaWNhdGlvbigpIHtcblx0XHROb3RpZmljYXRpb25TdG9yZS5wbGF5U291bmROb3RpZmljYXRpb24odHJ1ZSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjAgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmVkaXRvckRlZmF1bHRUeXBlVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5tcHBUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmxheW91dFRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIgPSAoc2F2ZVNldHRpbmdzU3RlcCkgPT4gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubGFuZ3VhZ2VUcmlnZ2VyKHNhdmVTZXR0aW5nc1N0ZXApO1xuXHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5sYW5ndWFnZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKSwgTWFnaWNzLlRpbWUxcyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdHRoaXMubGFuZ3VhZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHR0aGlzLmxhbmd1YWdlVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGUpO1xuXHRcdFx0XHR0cmFuc2xhdG9yUmVsb2FkKGZhbHNlLCB2YWx1ZSlcblx0XHRcdFx0XHQudGhlbihmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIoU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0KSwgZlJlbG9hZExhbmd1YWdlSGVscGVyKFNhdmVTZXR0aW5nc1N0ZXAuRmFsc2VSZXN1bHQpKVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdFJlbW90ZS5zYXZlU2V0dGluZ3MobnVsbCwge1xuXHRcdFx0XHRcdFx0XHQnTGFuZ3VhZ2UnOiB2YWx1ZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5lZGl0b3JEZWZhdWx0VHlwZS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVTZXR0aW5nc0hlbHBlcignRWRpdG9yRGVmYXVsdFR5cGUnLCBudWxsLCBmMCkpO1xuXHRcdFx0dGhpcy5tZXNzYWdlc1BlclBhZ2Uuc3Vic2NyaWJlKFJlbW90ZS5zYXZlU2V0dGluZ3NIZWxwZXIoJ01QUCcsIG51bGwsIGYxKSk7XG5cdFx0XHR0aGlzLnNob3dJbWFnZXMuc3Vic2NyaWJlKFJlbW90ZS5zYXZlU2V0dGluZ3NIZWxwZXIoJ1Nob3dJbWFnZXMnLCBib29sVG9BamF4KSk7XG5cblx0XHRcdHRoaXMudXNlQ2hlY2tib3hlc0luTGlzdC5zdWJzY3JpYmUoUmVtb3RlLnNhdmVTZXR0aW5nc0hlbHBlcignVXNlQ2hlY2tib3hlc0luTGlzdCcsIGJvb2xUb0FqYXgpKTtcblxuXHRcdFx0dGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0dGltZU91dEFjdGlvbihcblx0XHRcdFx0XHQnU2F2ZURlc2t0b3BOb3RpZmljYXRpb25zJyxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRSZW1vdGUuc2F2ZVNldHRpbmdzKG51bGwsIHtcblx0XHRcdFx0XHRcdFx0J0Rlc2t0b3BOb3RpZmljYXRpb25zJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0TWFnaWNzLlRpbWUzc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZW5hYmxlU291bmROb3RpZmljYXRpb24uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHR0aW1lT3V0QWN0aW9uKFxuXHRcdFx0XHRcdCdTYXZlU291bmROb3RpZmljYXRpb24nLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdFJlbW90ZS5zYXZlU2V0dGluZ3MobnVsbCwge1xuXHRcdFx0XHRcdFx0XHQnU291bmROb3RpZmljYXRpb24nOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRNYWdpY3MuVGltZTNzXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5yZXBseVNhbWVGb2xkZXIuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHR0aW1lT3V0QWN0aW9uKFxuXHRcdFx0XHRcdCdTYXZlUmVwbHlTYW1lRm9sZGVyJyxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRSZW1vdGUuc2F2ZVNldHRpbmdzKG51bGwsIHtcblx0XHRcdFx0XHRcdFx0J1JlcGx5U2FtZUZvbGRlcic6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdE1hZ2ljcy5UaW1lM3Ncblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnVzZVRocmVhZHMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3QoW10pO1xuXHRcdFx0XHRSZW1vdGUuc2F2ZVNldHRpbmdzKG51bGwsIHtcblx0XHRcdFx0XHQnVXNlVGhyZWFkcyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubGF5b3V0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2VMaXN0KFtdKTtcblx0XHRcdFx0UmVtb3RlLnNhdmVTZXR0aW5ncyhmMiwge1xuXHRcdFx0XHRcdCdMYXlvdXQnOiB2YWx1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy5lbmFibGVEZXNrdG9wTm90aWZpY2F0aW9uLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHR9XG5cblx0c2VsZWN0TGFuZ3VhZ2UoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzJyksIFt0aGlzLmxhbmd1YWdlLCB0aGlzLmxhbmd1YWdlcygpLCBMYW5ndWFnZVN0b3JlLnVzZXJMYW5ndWFnZSgpXSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgR2VuZXJhbFVzZXJTZXR0aW5ncywgR2VuZXJhbFVzZXJTZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9BcHAnO1xuaW1wb3J0IENvbnRhY3RTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Db250YWN0JztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmNsYXNzIENvbnRhY3RzVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jb250YWN0c0F1dG9zYXZlID0gQXBwU3RvcmUuY29udGFjdHNBdXRvc2F2ZTtcblxuXHRcdHRoaXMuYWxsb3dDb250YWN0c1N5bmMgPSBDb250YWN0U3RvcmUuYWxsb3dDb250YWN0c1N5bmM7XG5cdFx0dGhpcy5lbmFibGVDb250YWN0c1N5bmMgPSBDb250YWN0U3RvcmUuZW5hYmxlQ29udGFjdHNTeW5jO1xuXHRcdHRoaXMuY29udGFjdHNTeW5jVXJsID0gQ29udGFjdFN0b3JlLmNvbnRhY3RzU3luY1VybDtcblx0XHR0aGlzLmNvbnRhY3RzU3luY1VzZXIgPSBDb250YWN0U3RvcmUuY29udGFjdHNTeW5jVXNlcjtcblx0XHR0aGlzLmNvbnRhY3RzU3luY1Bhc3MgPSBDb250YWN0U3RvcmUuY29udGFjdHNTeW5jUGFzcztcblxuXHRcdHRoaXMuc2F2ZVRyaWdnZXIgPSBrb1xuXHRcdFx0LmNvbXB1dGVkKCgpID0+XG5cdFx0XHRcdFtcblx0XHRcdFx0XHR0aGlzLmVuYWJsZUNvbnRhY3RzU3luYygpID8gJzEnIDogJzAnLFxuXHRcdFx0XHRcdHRoaXMuY29udGFjdHNTeW5jVXJsKCksXG5cdFx0XHRcdFx0dGhpcy5jb250YWN0c1N5bmNVc2VyKCksXG5cdFx0XHRcdFx0dGhpcy5jb250YWN0c1N5bmNQYXNzKClcblx0XHRcdFx0XS5qb2luKCd8Jylcblx0XHRcdClcblx0XHRcdC5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWU1MDBtcyB9KTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0dGhpcy5jb250YWN0c0F1dG9zYXZlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlU2V0dGluZ3MobnVsbCwge1xuXHRcdFx0XHQnQ29udGFjdHNBdXRvc2F2ZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZVRyaWdnZXIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQ29udGFjdHNTeW5jRGF0YShcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0dGhpcy5lbmFibGVDb250YWN0c1N5bmMoKSxcblx0XHRcdFx0dGhpcy5jb250YWN0c1N5bmNVcmwoKSxcblx0XHRcdFx0dGhpcy5jb250YWN0c1N5bmNVc2VyKCksXG5cdFx0XHRcdHRoaXMuY29udGFjdHNTeW5jUGFzcygpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IENvbnRhY3RzVXNlclNldHRpbmdzLCBDb250YWN0c1VzZXJTZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IENhcGEsIFN0b3JhZ2VSZXN1bHRUeXBlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHJvb3QgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5pbXBvcnQgeyBjYXBhIH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBBY2NvdW50U3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvQWNjb3VudCc7XG5pbXBvcnQgSWRlbnRpdHlTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9JZGVudGl0eSc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwLCByb3V0ZU9mZiwgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgQWNjb3VudHNVc2VyU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmFsbG93QWRkaXRpb25hbEFjY291bnQgPSBjYXBhKENhcGEuQWRkaXRpb25hbEFjY291bnRzKTtcblx0XHR0aGlzLmFsbG93SWRlbnRpdGllcyA9IGNhcGEoQ2FwYS5JZGVudGl0aWVzKTtcblxuXHRcdHRoaXMuYWNjb3VudHMgPSBBY2NvdW50U3RvcmUuYWNjb3VudHM7XG5cdFx0dGhpcy5pZGVudGl0aWVzID0gSWRlbnRpdHlTdG9yZS5pZGVudGl0aWVzO1xuXG5cdFx0dGhpcy5hY2NvdW50Rm9yRGVsZXRpb24gPSBrby5vYnNlcnZhYmxlKG51bGwpLmRlbGV0ZUFjY2Vzc0hlbHBlcigpO1xuXHRcdHRoaXMuaWRlbnRpdHlGb3JEZWxldGlvbiA9IGtvLm9ic2VydmFibGUobnVsbCkuZGVsZXRlQWNjZXNzSGVscGVyKCk7XG5cdH1cblxuXHRzY3JvbGxhYmxlT3B0aW9ucyh3cmFwcGVyKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGhhbmRsZTogJy5kcmFnLWhhbmRsZScsXG5cdFx0XHRjb250YWlubWVudDogd3JhcHBlciB8fCAncGFyZW50Jyxcblx0XHRcdGF4aXM6ICd5J1xuXHRcdH07XG5cdH1cblxuXHRhZGROZXdBY2NvdW50KCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0FjY291bnQnKSk7XG5cdH1cblxuXHRlZGl0QWNjb3VudChhY2NvdW50KSB7XG5cdFx0aWYgKGFjY291bnQgJiYgYWNjb3VudC5jYW5CZUVkaXQoKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQWNjb3VudCcpLCBbYWNjb3VudF0pO1xuXHRcdH1cblx0fVxuXG5cdGFkZE5ld0lkZW50aXR5KCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0lkZW50aXR5JykpO1xuXHR9XG5cblx0ZWRpdElkZW50aXR5KGlkZW50aXR5KSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvSWRlbnRpdHknKSwgW2lkZW50aXR5XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBY2NvdW50TW9kZWx9IGFjY291bnRUb1JlbW92ZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGRlbGV0ZUFjY291bnQoYWNjb3VudFRvUmVtb3ZlKSB7XG5cdFx0aWYgKGFjY291bnRUb1JlbW92ZSAmJiBhY2NvdW50VG9SZW1vdmUuZGVsZXRlQWNjZXNzKCkpIHtcblx0XHRcdHRoaXMuYWNjb3VudEZvckRlbGV0aW9uKG51bGwpO1xuXHRcdFx0aWYgKGFjY291bnRUb1JlbW92ZSkge1xuXHRcdFx0XHR0aGlzLmFjY291bnRzLnJlbW92ZSgoYWNjb3VudCkgPT4gYWNjb3VudFRvUmVtb3ZlID09PSBhY2NvdW50KTtcblxuXHRcdFx0XHRSZW1vdGUuYWNjb3VudERlbGV0ZSgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVsb2FkKSB7XG5cdFx0XHRcdFx0XHRyb3V0ZU9mZigpO1xuXHRcdFx0XHRcdFx0c2V0SGFzaChyb290KCksIHRydWUpO1xuXHRcdFx0XHRcdFx0cm91dGVPZmYoKTtcblxuXHRcdFx0XHRcdFx0Xy5kZWZlcigoKSA9PiB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS5hY2NvdW50c0FuZElkZW50aXRpZXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIGFjY291bnRUb1JlbW92ZS5lbWFpbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7SWRlbnRpdHlNb2RlbH0gaWRlbnRpdHlUb1JlbW92ZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGRlbGV0ZUlkZW50aXR5KGlkZW50aXR5VG9SZW1vdmUpIHtcblx0XHRpZiAoaWRlbnRpdHlUb1JlbW92ZSAmJiBpZGVudGl0eVRvUmVtb3ZlLmRlbGV0ZUFjY2VzcygpKSB7XG5cdFx0XHR0aGlzLmlkZW50aXR5Rm9yRGVsZXRpb24obnVsbCk7XG5cblx0XHRcdGlmIChpZGVudGl0eVRvUmVtb3ZlKSB7XG5cdFx0XHRcdElkZW50aXR5U3RvcmUuaWRlbnRpdGllcy5yZW1vdmUoKG9JZGVudGl0eSkgPT4gaWRlbnRpdHlUb1JlbW92ZSA9PT0gb0lkZW50aXR5KTtcblxuXHRcdFx0XHRSZW1vdGUuaWRlbnRpdHlEZWxldGUoKCkgPT4ge1xuXHRcdFx0XHRcdGdldEFwcCgpLmFjY291bnRzQW5kSWRlbnRpdGllcygpO1xuXHRcdFx0XHR9LCBpZGVudGl0eVRvUmVtb3ZlLmlkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhY2NvdW50c0FuZElkZW50aXRpZXNBZnRlck1vdmUoKSB7XG5cdFx0UmVtb3RlLmFjY291bnRzQW5kSWRlbnRpdGllc1NvcnRPcmRlcihudWxsLCBBY2NvdW50U3RvcmUuYWNjb3VudHNFbWFpbHMucGVlaygpLCBJZGVudGl0eVN0b3JlLmlkZW50aXRpZXNJRFMucGVlaygpKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0b0RvbVxuXHRcdFx0Lm9uKCdjbGljaycsICcuYWNjb3VudHMtbGlzdCAuYWNjb3VudC1pdGVtIC5lLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBhY2NvdW50ID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0aWYgKGFjY291bnQpIHtcblx0XHRcdFx0XHRzZWxmLmVkaXRBY2NvdW50KGFjY291bnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdjbGljaycsICcuaWRlbnRpdGllcy1saXN0IC5pZGVudGl0eS1pdGVtIC5lLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBpZGVudGl0eSA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChpZGVudGl0eSkge1xuXHRcdFx0XHRcdHNlbGYuZWRpdElkZW50aXR5KGlkZW50aXR5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQWNjb3VudHNVc2VyU2V0dGluZ3MsIEFjY291bnRzVXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgd2luZG93UmVzaXplQ2FsbGJhY2ssIGlzQXJyYXksIHRyaW0sIGRlbGVnYXRlUnVuT25EZXN0cm95IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBOb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgRmlsdGVyU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvRmlsdGVyJztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IEZpbHRlck1vZGVsIH0gZnJvbSAnTW9kZWwvRmlsdGVyJztcblxuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBGaWx0ZXJzVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5tb2R1bGVzID0gRmlsdGVyU3RvcmUubW9kdWxlcztcblx0XHR0aGlzLmZpbHRlcnMgPSBGaWx0ZXJTdG9yZS5maWx0ZXJzO1xuXG5cdFx0dGhpcy5pbml0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNlcnZlckVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zZXJ2ZXJFcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmhhdmVDaGFuZ2VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNhdmVFcnJvclRleHQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZmlsdGVycy5zdWJzY3JpYmUod2luZG93UmVzaXplQ2FsbGJhY2spO1xuXG5cdFx0dGhpcy5zZXJ2ZXJFcnJvci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuc2VydmVyRXJyb3JEZXNjKCcnKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzKTtcblxuXHRcdHRoaXMuZmlsdGVyUmF3ID0gRmlsdGVyU3RvcmUucmF3O1xuXHRcdHRoaXMuZmlsdGVyUmF3LmNhcGEgPSBGaWx0ZXJTdG9yZS5jYXBhO1xuXHRcdHRoaXMuZmlsdGVyUmF3LmFjdGl2ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZmlsdGVyUmF3LmFsbG93ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5maWx0ZXJSYXcuZXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZmlsdGVyRm9yRGVsZXRpb24gPSBrby5vYnNlcnZhYmxlKG51bGwpLmRlbGV0ZUFjY2Vzc0hlbHBlcigpO1xuXG5cdFx0dGhpcy5maWx0ZXJzLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmhhdmVDaGFuZ2VzKHRydWUpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5maWx0ZXJSYXcuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuaGF2ZUNoYW5nZXModHJ1ZSk7XG5cdFx0XHR0aGlzLmZpbHRlclJhdy5lcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmhhdmVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnNhdmVFcnJvclRleHQoJycpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5maWx0ZXJSYXcuYWN0aXZlLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmhhdmVDaGFuZ2VzKHRydWUpO1xuXHRcdFx0dGhpcy5maWx0ZXJSYXcuZXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuaGF2ZUNoYW5nZXMoKSlcblx0c2F2ZUNoYW5nZXNDb21tYW5kKCkge1xuXHRcdGlmICghdGhpcy5maWx0ZXJzLnNhdmluZygpKSB7XG5cdFx0XHRpZiAodGhpcy5maWx0ZXJSYXcuYWN0aXZlKCkgJiYgJycgPT09IHRyaW0odGhpcy5maWx0ZXJSYXcoKSkpIHtcblx0XHRcdFx0dGhpcy5maWx0ZXJSYXcuZXJyb3IodHJ1ZSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5maWx0ZXJzLnNhdmluZyh0cnVlKTtcblx0XHRcdHRoaXMuc2F2ZUVycm9yVGV4dCgnJyk7XG5cblx0XHRcdFJlbW90ZS5maWx0ZXJzU2F2ZShcblx0XHRcdFx0KHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVycy5zYXZpbmcoZmFsc2UpO1xuXG5cdFx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLmhhdmVDaGFuZ2VzKGZhbHNlKTtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlTGlzdCgpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlRXJyb3JUZXh0KGRhdGEuRXJyb3JNZXNzYWdlQWRkaXRpb25hbCB8fCBnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlRXJyb3JUZXh0KGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uQ2FudFNhdmVGaWx0ZXJzKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmZpbHRlcnMoKSxcblx0XHRcdFx0dGhpcy5maWx0ZXJSYXcoKSxcblx0XHRcdFx0dGhpcy5maWx0ZXJSYXcuYWN0aXZlKClcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRzY3JvbGxhYmxlT3B0aW9ucyh3cmFwcGVyKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGhhbmRsZTogJy5kcmFnLWhhbmRsZScsXG5cdFx0XHRjb250YWlubWVudDogd3JhcHBlciB8fCAncGFyZW50Jyxcblx0XHRcdGF4aXM6ICd5J1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGVMaXN0KCkge1xuXHRcdGlmICghdGhpcy5maWx0ZXJzLmxvYWRpbmcoKSkge1xuXHRcdFx0dGhpcy5maWx0ZXJzLmxvYWRpbmcodHJ1ZSk7XG5cblx0XHRcdFJlbW90ZS5maWx0ZXJzR2V0KChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFx0dGhpcy5maWx0ZXJzLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHR0aGlzLnNlcnZlckVycm9yKGZhbHNlKTtcblxuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQgJiYgaXNBcnJheShkYXRhLlJlc3VsdC5GaWx0ZXJzKSkge1xuXHRcdFx0XHRcdHRoaXMuaW5pdGVkKHRydWUpO1xuXHRcdFx0XHRcdHRoaXMuc2VydmVyRXJyb3IoZmFsc2UpO1xuXG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJzKFxuXHRcdFx0XHRcdFx0Xy5jb21wYWN0KFxuXHRcdFx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdC5GaWx0ZXJzLCAoYUl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyTW9kZWwoKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmlsdGVyICYmIGZpbHRlci5wYXJzZShhSXRlbSkgPyBmaWx0ZXIgOiBudWxsO1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR0aGlzLm1vZHVsZXMoZGF0YS5SZXN1bHQuTW9kdWxlcyA/IGRhdGEuUmVzdWx0Lk1vZHVsZXMgOiB7fSk7XG5cblx0XHRcdFx0XHR0aGlzLmZpbHRlclJhdyhkYXRhLlJlc3VsdC5SYXcgfHwgJycpO1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyUmF3LmNhcGEoaXNBcnJheShkYXRhLlJlc3VsdC5DYXBhKSA/IGRhdGEuUmVzdWx0LkNhcGEuam9pbignICcpIDogJycpO1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyUmF3LmFjdGl2ZSghIWRhdGEuUmVzdWx0LlJhd0lzQWN0aXZlKTtcblx0XHRcdFx0XHR0aGlzLmZpbHRlclJhdy5hbGxvdyghIWRhdGEuUmVzdWx0LlJhd0lzQWxsb3cpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVycyhbXSk7XG5cdFx0XHRcdFx0dGhpcy5tb2R1bGVzKHt9KTtcblx0XHRcdFx0XHR0aGlzLmZpbHRlclJhdygnJyk7XG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJSYXcuY2FwYSh7fSk7XG5cblx0XHRcdFx0XHR0aGlzLnNlcnZlckVycm9yKHRydWUpO1xuXHRcdFx0XHRcdHRoaXMuc2VydmVyRXJyb3JEZXNjKFxuXHRcdFx0XHRcdFx0ZGF0YSAmJiBkYXRhLkVycm9yQ29kZSA/IGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkgOiBnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLkNhbnRHZXRGaWx0ZXJzKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmhhdmVDaGFuZ2VzKGZhbHNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGRlbGV0ZUZpbHRlcihmaWx0ZXIpIHtcblx0XHR0aGlzLmZpbHRlcnMucmVtb3ZlKGZpbHRlcik7XG5cdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3koZmlsdGVyKTtcblx0fVxuXG5cdGFkZEZpbHRlcigpIHtcblx0XHRjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyTW9kZWwoKTtcblxuXHRcdGZpbHRlci5nZW5lcmF0ZUlEKCk7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRmlsdGVyJyksIFtcblx0XHRcdGZpbHRlcixcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5maWx0ZXJzLnB1c2goZmlsdGVyKTtcblx0XHRcdFx0dGhpcy5maWx0ZXJSYXcuYWN0aXZlKGZhbHNlKTtcblx0XHRcdH0sXG5cdFx0XHRmYWxzZVxuXHRcdF0pO1xuXHR9XG5cblx0ZWRpdEZpbHRlcihmaWx0ZXIpIHtcblx0XHRjb25zdCBjbG9uZWRGaWx0ZXIgPSBmaWx0ZXIuY2xvbmVTZWxmKCk7XG5cblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9GaWx0ZXInKSwgW1xuXHRcdFx0Y2xvbmVkRmlsdGVyLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJzID0gdGhpcy5maWx0ZXJzKCksXG5cdFx0XHRcdFx0aW5kZXggPSBmaWx0ZXJzLmluZGV4T2YoZmlsdGVyKTtcblxuXHRcdFx0XHRpZiAoLTEgPCBpbmRleCAmJiBmaWx0ZXJzW2luZGV4XSkge1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGZpbHRlcnNbaW5kZXhdKTtcblx0XHRcdFx0XHRmaWx0ZXJzW2luZGV4XSA9IGNsb25lZEZpbHRlcjtcblxuXHRcdFx0XHRcdHRoaXMuZmlsdGVycyhmaWx0ZXJzKTtcblx0XHRcdFx0XHR0aGlzLmhhdmVDaGFuZ2VzKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdF0pO1xuXHR9XG5cblx0b25CdWlsZChvRG9tKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHRvRG9tLm9uKCdjbGljaycsICcuZmlsdGVyLWl0ZW0gLmUtYWN0aW9uJywgZnVuY3Rpb24oKSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0Y29uc3QgZmlsdGVyID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0c2VsZi5lZGl0RmlsdGVyKGZpbHRlcik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy51cGRhdGVMaXN0KCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgRmlsdGVyc1VzZXJTZXR0aW5ncywgRmlsdGVyc1VzZXJTZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IHBJbnQsIHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IENhcGEsIFNhdmVTZXR0aW5nc1N0ZXAgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgaTE4biwgdHJpZ2dlciBhcyB0cmFuc2xhdG9yVHJpZ2dlciB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgY2FwYSB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgeyBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmltcG9ydCBTZXR0aW5zU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvU2V0dGluZ3MnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5jbGFzcyBTZWN1cml0eVVzZXJTZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuY2FwYUF1dG9Mb2dvdXQgPSBjYXBhKENhcGEuQXV0b0xvZ291dCk7XG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yID0gY2FwYShDYXBhLlR3b0ZhY3Rvcik7XG5cblx0XHR0aGlzLmF1dG9Mb2dvdXQgPSBTZXR0aW5zU3RvcmUuYXV0b0xvZ291dDtcblx0XHR0aGlzLmF1dG9Mb2dvdXQudHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMuYXV0b0xvZ291dE9wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0eyAnaWQnOiAwLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX1NFQ1VSSVRZL0FVVE9MT0dJTl9ORVZFUl9PUFRJT05fTkFNRScpIH0sXG5cdFx0XHRcdHsgJ2lkJzogNSwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19TRUNVUklUWS9BVVRPTE9HSU5fTUlOVVRFU19PUFRJT05fTkFNRScsIHsgJ01JTlVURVMnOiA1IH0pIH0sXG5cdFx0XHRcdHsgJ2lkJzogMTAsICduYW1lJzogaTE4bignU0VUVElOR1NfU0VDVVJJVFkvQVVUT0xPR0lOX01JTlVURVNfT1BUSU9OX05BTUUnLCB7ICdNSU5VVEVTJzogMTAgfSkgfSxcblx0XHRcdFx0eyAnaWQnOiAzMCwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19TRUNVUklUWS9BVVRPTE9HSU5fTUlOVVRFU19PUFRJT05fTkFNRScsIHsgJ01JTlVURVMnOiAzMCB9KSB9LFxuXHRcdFx0XHR7ICdpZCc6IDYwLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX1NFQ1VSSVRZL0FVVE9MT0dJTl9NSU5VVEVTX09QVElPTl9OQU1FJywgeyAnTUlOVVRFUyc6IDYwIH0pIH0sXG5cdFx0XHRcdHsgJ2lkJzogNjAgKiAyLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX1NFQ1VSSVRZL0FVVE9MT0dJTl9IT1VSU19PUFRJT05fTkFNRScsIHsgJ0hPVVJTJzogMiB9KSB9LFxuXHRcdFx0XHR7ICdpZCc6IDYwICogNSwgJ25hbWUnOiBpMThuKCdTRVRUSU5HU19TRUNVUklUWS9BVVRPTE9HSU5fSE9VUlNfT1BUSU9OX05BTUUnLCB7ICdIT1VSUyc6IDUgfSkgfSxcblx0XHRcdFx0eyAnaWQnOiA2MCAqIDEwLCAnbmFtZSc6IGkxOG4oJ1NFVFRJTkdTX1NFQ1VSSVRZL0FVVE9MT0dJTl9IT1VSU19PUFRJT05fTkFNRScsIHsgJ0hPVVJTJzogMTAgfSkgfVxuXHRcdFx0XTtcblx0XHR9KTtcblx0fVxuXG5cdGNvbmZpZ3VyZVR3b0ZhY3RvcigpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Ud29GYWN0b3JDb25maWd1cmF0aW9uJykpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRpZiAodGhpcy5jYXBhQXV0b0xvZ291dCkge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGYwID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5hdXRvTG9nb3V0LnRyaWdnZXIsIHRoaXMpO1xuXG5cdFx0XHRcdHRoaXMuYXV0b0xvZ291dC5zdWJzY3JpYmUoUmVtb3RlLnNhdmVTZXR0aW5nc0hlbHBlcignQXV0b0xvZ291dCcsIHBJbnQsIGYwKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgU2VjdXJpdHlVc2VyU2V0dGluZ3MsIFNlY3VyaXR5VXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBTb2NpYWxTdG9yZSBmcm9tICdTdG9yZXMvU29jaWFsJztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmNsYXNzIFNvY2lhbFVzZXJTZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlID0gU29jaWFsU3RvcmUuZ29vZ2xlLmVuYWJsZWQ7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNhcGEuYXV0aDtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZUF1dGhHbWFpbCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmF1dGhHbWFpbDtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZURyaXZlID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNhcGEuZHJpdmU7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVQcmV2aWV3ID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNhcGEucHJldmlldztcblxuXHRcdHRoaXMuZ29vZ2xlQWN0aW9ucyA9IFNvY2lhbFN0b3JlLmdvb2dsZS5sb2FkaW5nO1xuXHRcdHRoaXMuZ29vZ2xlTG9nZ2luZWQgPSBTb2NpYWxTdG9yZS5nb29nbGUubG9nZ2luZWQ7XG5cdFx0dGhpcy5nb29nbGVVc2VyTmFtZSA9IFNvY2lhbFN0b3JlLmdvb2dsZS51c2VyTmFtZTtcblxuXHRcdHRoaXMuZmFjZWJvb2tFbmFibGUgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5lbmFibGVkO1xuXG5cdFx0dGhpcy5mYWNlYm9va0FjdGlvbnMgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5sb2FkaW5nO1xuXHRcdHRoaXMuZmFjZWJvb2tMb2dnaW5lZCA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLmxvZ2dpbmVkO1xuXHRcdHRoaXMuZmFjZWJvb2tVc2VyTmFtZSA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLnVzZXJOYW1lO1xuXG5cdFx0dGhpcy50d2l0dGVyRW5hYmxlID0gU29jaWFsU3RvcmUudHdpdHRlci5lbmFibGVkO1xuXG5cdFx0dGhpcy50d2l0dGVyQWN0aW9ucyA9IFNvY2lhbFN0b3JlLnR3aXR0ZXIubG9hZGluZztcblx0XHR0aGlzLnR3aXR0ZXJMb2dnaW5lZCA9IFNvY2lhbFN0b3JlLnR3aXR0ZXIubG9nZ2luZWQ7XG5cdFx0dGhpcy50d2l0dGVyVXNlck5hbWUgPSBTb2NpYWxTdG9yZS50d2l0dGVyLnVzZXJOYW1lO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLmdvb2dsZUxvZ2dpbmVkKCkgJiYgIXNlbGYuZ29vZ2xlQWN0aW9ucygpKVxuXHRjb25uZWN0R29vZ2xlQ29tbWFuZCgpIHtcblx0XHRpZiAoIXRoaXMuZ29vZ2xlTG9nZ2luZWQoKSkge1xuXHRcdFx0Z2V0QXBwKCkuZ29vZ2xlQ29ubmVjdCgpO1xuXHRcdH1cblx0fVxuXG5cdEBjb21tYW5kKClcblx0ZGlzY29ubmVjdEdvb2dsZUNvbW1hbmQoKSB7XG5cdFx0Z2V0QXBwKCkuZ29vZ2xlRGlzY29ubmVjdCgpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICFzZWxmLmZhY2Vib29rTG9nZ2luZWQoKSAmJiAhc2VsZi5mYWNlYm9va0FjdGlvbnMoKSlcblx0Y29ubmVjdEZhY2Vib29rQ29tbWFuZCgpIHtcblx0XHRpZiAoIXRoaXMuZmFjZWJvb2tMb2dnaW5lZCgpKSB7XG5cdFx0XHRnZXRBcHAoKS5mYWNlYm9va0Nvbm5lY3QoKTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGRpc2Nvbm5lY3RGYWNlYm9va0NvbW1hbmQoKSB7XG5cdFx0Z2V0QXBwKCkuZmFjZWJvb2tEaXNjb25uZWN0KCk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gIXNlbGYudHdpdHRlckxvZ2dpbmVkKCkgJiYgIXNlbGYudHdpdHRlckFjdGlvbnMoKSlcblx0Y29ubmVjdFR3aXR0ZXJDb21tYW5kKCkge1xuXHRcdGlmICghdGhpcy50d2l0dGVyTG9nZ2luZWQoKSkge1xuXHRcdFx0Z2V0QXBwKCkudHdpdHRlckNvbm5lY3QoKTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGRpc2Nvbm5lY3RUd2l0dGVyQ29tbWFuZCgpIHtcblx0XHRnZXRBcHAoKS50d2l0dGVyRGlzY29ubmVjdCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNvY2lhbFVzZXJTZXR0aW5ncywgU29jaWFsVXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb25Gcm9tUmVzcG9uc2UsIGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuaW1wb3J0IHsgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgQ2hhbmdlUGFzc3dvcmRVc2VyU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNoYW5nZVByb2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZXJyb3JEZXNjcmlwdGlvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucGFzc3dvcmRNaXNtYXRjaCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRVcGRhdGVFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRVcGRhdGVTdWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY3VycmVudFBhc3N3b3JkLmVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5uZXdQYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubmV3UGFzc3dvcmQyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5wYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMucGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMuY3VycmVudFBhc3N3b3JkLmVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubmV3UGFzc3dvcmQuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlU3VjY2VzcyhmYWxzZSk7XG5cdFx0XHR0aGlzLnBhc3N3b3JkTWlzbWF0Y2goZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5uZXdQYXNzd29yZDIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlU3VjY2VzcyhmYWxzZSk7XG5cdFx0XHR0aGlzLnBhc3N3b3JkTWlzbWF0Y2goZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5vbkNoYW5nZVBhc3N3b3JkUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vbkNoYW5nZVBhc3N3b3JkUmVzcG9uc2UsIHRoaXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoXG5cdFx0KHNlbGYpID0+XG5cdFx0XHQhc2VsZi5jaGFuZ2VQcm9jZXNzKCkgJiYgJycgIT09IHNlbGYuY3VycmVudFBhc3N3b3JkKCkgJiYgJycgIT09IHNlbGYubmV3UGFzc3dvcmQoKSAmJiAnJyAhPT0gc2VsZi5uZXdQYXNzd29yZDIoKVxuXHQpXG5cdHNhdmVOZXdQYXNzd29yZENvbW1hbmQoKSB7XG5cdFx0aWYgKHRoaXMubmV3UGFzc3dvcmQoKSAhPT0gdGhpcy5uZXdQYXNzd29yZDIoKSkge1xuXHRcdFx0dGhpcy5wYXNzd29yZE1pc21hdGNoKHRydWUpO1xuXHRcdFx0dGhpcy5lcnJvckRlc2NyaXB0aW9uKGkxOG4oJ1NFVFRJTkdTX0NIQU5HRV9QQVNTV09SRC9FUlJPUl9QQVNTV09SRF9NSVNNQVRDSCcpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jaGFuZ2VQcm9jZXNzKHRydWUpO1xuXG5cdFx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5wYXNzd29yZFVwZGF0ZVN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0dGhpcy5jdXJyZW50UGFzc3dvcmQuZXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5wYXNzd29yZE1pc21hdGNoKGZhbHNlKTtcblx0XHRcdHRoaXMuZXJyb3JEZXNjcmlwdGlvbignJyk7XG5cblx0XHRcdFJlbW90ZS5jaGFuZ2VQYXNzd29yZCh0aGlzLm9uQ2hhbmdlUGFzc3dvcmRSZXNwb25zZSwgdGhpcy5jdXJyZW50UGFzc3dvcmQoKSwgdGhpcy5uZXdQYXNzd29yZCgpKTtcblx0XHR9XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0dGhpcy5jaGFuZ2VQcm9jZXNzKGZhbHNlKTtcblx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZCgnJyk7XG5cdFx0dGhpcy5uZXdQYXNzd29yZCgnJyk7XG5cdFx0dGhpcy5uZXdQYXNzd29yZDIoJycpO1xuXHRcdHRoaXMuZXJyb3JEZXNjcmlwdGlvbignJyk7XG5cdFx0dGhpcy5wYXNzd29yZE1pc21hdGNoKGZhbHNlKTtcblx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZC5lcnJvcihmYWxzZSk7XG5cdH1cblxuXHRvbkNoYW5nZVBhc3N3b3JkUmVzcG9uc2UocmVzdWx0LCBkYXRhKSB7XG5cdFx0dGhpcy5jaGFuZ2VQcm9jZXNzKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkTWlzbWF0Y2goZmFsc2UpO1xuXHRcdHRoaXMuZXJyb3JEZXNjcmlwdGlvbignJyk7XG5cdFx0dGhpcy5jdXJyZW50UGFzc3dvcmQuZXJyb3IoZmFsc2UpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZCgnJyk7XG5cdFx0XHR0aGlzLm5ld1Bhc3N3b3JkKCcnKTtcblx0XHRcdHRoaXMubmV3UGFzc3dvcmQyKCcnKTtcblxuXHRcdFx0dGhpcy5wYXNzd29yZFVwZGF0ZVN1Y2Nlc3ModHJ1ZSk7XG5cdFx0XHR0aGlzLmN1cnJlbnRQYXNzd29yZC5lcnJvcihmYWxzZSk7XG5cblx0XHRcdGdldEFwcCgpLnNldENsaWVudFNpZGVUb2tlbihkYXRhLlJlc3VsdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChkYXRhICYmIE5vdGlmaWNhdGlvbi5DdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QgPT09IGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuY3VycmVudFBhc3N3b3JkLmVycm9yKHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnBhc3N3b3JkVXBkYXRlRXJyb3IodHJ1ZSk7XG5cdFx0XHR0aGlzLmVycm9yRGVzY3JpcHRpb24oZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlKGRhdGEsIE5vdGlmaWNhdGlvbi5Db3VsZE5vdFNhdmVOZXdQYXNzd29yZCkpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBDaGFuZ2VQYXNzd29yZFVzZXJTZXR0aW5ncywgQ2hhbmdlUGFzc3dvcmRVc2VyU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFRlbXBsYXRlU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvVGVtcGxhdGUnO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvVXNlci9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvVXNlcic7XG5cbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgVGVtcGxhdGVzVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy50ZW1wbGF0ZXMgPSBUZW1wbGF0ZVN0b3JlLnRlbXBsYXRlcztcblxuXHRcdHRoaXMucHJvY2Vzc1RleHQgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0VGVtcGxhdGVTdG9yZS50ZW1wbGF0ZXMubG9hZGluZygpID8gaTE4bignU0VUVElOR1NfVEVNUExFVFMvTE9BRElOR19QUk9DRVNTJykgOiAnJ1xuXHRcdCk7XG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKCcnID09PSB0aGlzLnByb2Nlc3NUZXh0KCkgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJykpO1xuXG5cdFx0dGhpcy50ZW1wbGF0ZUZvckRlbGV0aW9uID0ga28ub2JzZXJ2YWJsZShudWxsKS5kZWxldGVBY2Nlc3NIZWxwZXIoKTtcblx0fVxuXG5cdHNjcm9sbGFibGVPcHRpb25zKHNXcmFwcGVyKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGhhbmRsZTogJy5kcmFnLWhhbmRsZScsXG5cdFx0XHRjb250YWlubWVudDogc1dyYXBwZXIgfHwgJ3BhcmVudCcsXG5cdFx0XHRheGlzOiAneSdcblx0XHR9O1xuXHR9XG5cblx0YWRkTmV3VGVtcGxhdGUoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvVGVtcGxhdGUnKSk7XG5cdH1cblxuXHRlZGl0VGVtcGxhdGUob1RlbXBsYXRlSXRlbSkge1xuXHRcdGlmIChvVGVtcGxhdGVJdGVtKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9UZW1wbGF0ZScpLCBbb1RlbXBsYXRlSXRlbV0pO1xuXHRcdH1cblx0fVxuXG5cdGRlbGV0ZVRlbXBsYXRlKHRlbXBsYXRlVG9SZW1vdmUpIHtcblx0XHRpZiAodGVtcGxhdGVUb1JlbW92ZSAmJiB0ZW1wbGF0ZVRvUmVtb3ZlLmRlbGV0ZUFjY2VzcygpKSB7XG5cdFx0XHR0aGlzLnRlbXBsYXRlRm9yRGVsZXRpb24obnVsbCk7XG5cblx0XHRcdGlmICh0ZW1wbGF0ZVRvUmVtb3ZlKSB7XG5cdFx0XHRcdHRoaXMudGVtcGxhdGVzLnJlbW92ZSgodGVtcGxhdGUpID0+IHRlbXBsYXRlVG9SZW1vdmUgPT09IHRlbXBsYXRlKTtcblxuXHRcdFx0XHRSZW1vdGUudGVtcGxhdGVEZWxldGUoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucmVsb2FkVGVtcGxhdGVzKCk7XG5cdFx0XHRcdH0sIHRlbXBsYXRlVG9SZW1vdmUuaWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJlbG9hZFRlbXBsYXRlcygpIHtcblx0XHRnZXRBcHAoKS50ZW1wbGF0ZXMoKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0b0RvbS5vbignY2xpY2snLCAnLnRlbXBsYXRlcy1saXN0IC50ZW1wbGF0ZS1pdGVtIC5lLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdGNvbnN0IHRlbXBsYXRlID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdGlmICh0ZW1wbGF0ZSkge1xuXHRcdFx0XHRzZWxmLmVkaXRUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnJlbG9hZFRlbXBsYXRlcygpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFRlbXBsYXRlc1VzZXJTZXR0aW5ncywgVGVtcGxhdGVzVXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IENsaWVudFNpZGVLZXlOYW1lLCBOb3RpZmljYXRpb24sIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyB0cmltLCBub29wIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiwgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgcmVtb3ZlRm9sZGVyRnJvbUNhY2hlTGlzdCB9IGZyb20gJ0NvbW1vbi9DYWNoZSc7XG5cbmltcG9ydCB7IGFwcFNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBMb2NhbCBmcm9tICdTdG9yYWdlL0NsaWVudCc7XG5cbmltcG9ydCBGb2xkZXJTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9Gb2xkZXInO1xuXG5pbXBvcnQgUHJvbWlzZXMgZnJvbSAnUHJvbWlzZXMvVXNlci9BamF4JztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmNsYXNzIEZvbGRlcnNVc2VyU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRpc3BsYXlTcGVjU2V0dGluZyA9IEZvbGRlclN0b3JlLmRpc3BsYXlTcGVjU2V0dGluZztcblx0XHR0aGlzLmZvbGRlckxpc3QgPSBGb2xkZXJTdG9yZS5mb2xkZXJMaXN0O1xuXG5cdFx0dGhpcy5mb2xkZXJMaXN0SGVscCA9IGtvLm9ic2VydmFibGUoJycpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTEwMG1zIH0pO1xuXG5cdFx0dGhpcy5sb2FkaW5nID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbG9hZGluZyA9IEZvbGRlclN0b3JlLmZvbGRlcnNMb2FkaW5nKCksXG5cdFx0XHRcdGNyZWF0aW5nID0gRm9sZGVyU3RvcmUuZm9sZGVyc0NyZWF0aW5nKCksXG5cdFx0XHRcdGRlbGV0aW5nID0gRm9sZGVyU3RvcmUuZm9sZGVyc0RlbGV0aW5nKCksXG5cdFx0XHRcdHJlbmFtaW5nID0gRm9sZGVyU3RvcmUuZm9sZGVyc1JlbmFtaW5nKCk7XG5cblx0XHRcdHJldHVybiBsb2FkaW5nIHx8IGNyZWF0aW5nIHx8IGRlbGV0aW5nIHx8IHJlbmFtaW5nO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5mb2xkZXJGb3JEZWxldGlvbiA9IGtvLm9ic2VydmFibGUobnVsbCkuZGVsZXRlQWNjZXNzSGVscGVyKCk7XG5cblx0XHR0aGlzLmZvbGRlckZvckVkaXQgPSBrby5vYnNlcnZhYmxlKG51bGwpLmV4dGVuZCh7IHRvZ2dsZVN1YnNjcmliZVByb3BlcnR5OiBbdGhpcywgJ2VkaXRlZCddIH0pO1xuXG5cdFx0dGhpcy51c2VJbWFwU3Vic2NyaWJlID0gISFhcHBTZXR0aW5nc0dldCgndXNlSW1hcFN1YnNjcmliZScpO1xuXHR9XG5cblx0Zm9sZGVyRWRpdE9uRW50ZXIoZm9sZGVyKSB7XG5cdFx0Y29uc3QgbmFtZVRvRWRpdCA9IGZvbGRlciA/IHRyaW0oZm9sZGVyLm5hbWVGb3JFZGl0KCkpIDogJyc7XG5cblx0XHRpZiAoJycgIT09IG5hbWVUb0VkaXQgJiYgZm9sZGVyLm5hbWUoKSAhPT0gbmFtZVRvRWRpdCkge1xuXHRcdFx0TG9jYWwuc2V0KENsaWVudFNpZGVLZXlOYW1lLkZvbGRlcnNMYXNoSGFzaCwgJycpO1xuXG5cdFx0XHRnZXRBcHAoKS5mb2xkZXJzUHJvbWlzZXNBY3Rpb25IZWxwZXIoXG5cdFx0XHRcdFByb21pc2VzLmZvbGRlclJlbmFtZShmb2xkZXIuZnVsbE5hbWVSYXcsIG5hbWVUb0VkaXQsIEZvbGRlclN0b3JlLmZvbGRlcnNSZW5hbWluZyksXG5cdFx0XHRcdE5vdGlmaWNhdGlvbi5DYW50UmVuYW1lRm9sZGVyXG5cdFx0XHQpO1xuXG5cdFx0XHRyZW1vdmVGb2xkZXJGcm9tQ2FjaGVMaXN0KGZvbGRlci5mdWxsTmFtZVJhdyk7XG5cblx0XHRcdGZvbGRlci5uYW1lKG5hbWVUb0VkaXQpO1xuXHRcdH1cblxuXHRcdGZvbGRlci5lZGl0ZWQoZmFsc2UpO1xuXHR9XG5cblx0Zm9sZGVyRWRpdE9uRXNjKGZvbGRlcikge1xuXHRcdGlmIChmb2xkZXIpIHtcblx0XHRcdGZvbGRlci5lZGl0ZWQoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHRGb2xkZXJTdG9yZS5mb2xkZXJMaXN0LmVycm9yKCcnKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdG9Eb21cblx0XHRcdC5vbignbW91c2VvdmVyJywgJy5kZWxldGUtZm9sZGVyLXBhcmVudCcsICgpID0+IHtcblx0XHRcdFx0dGhpcy5mb2xkZXJMaXN0SGVscChpMThuKCdTRVRUSU5HU19GT0xERVJTL0hFTFBfREVMRVRFX0ZPTERFUicpKTtcblx0XHRcdH0pXG5cdFx0XHQub24oJ21vdXNlb3ZlcicsICcuc3Vic2NyaWJlLWZvbGRlci1wYXJlbnQnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZm9sZGVyTGlzdEhlbHAoaTE4bignU0VUVElOR1NfRk9MREVSUy9IRUxQX1NIT1dfSElERV9GT0xERVInKSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdtb3VzZW92ZXInLCAnLmNoZWNrLWZvbGRlci1wYXJlbnQnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZm9sZGVyTGlzdEhlbHAoaTE4bignU0VUVElOR1NfRk9MREVSUy9IRUxQX0NIRUNLX0ZPUl9ORVdfTUVTU0FHRVMnKSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdtb3VzZW91dCcsICcuc3Vic2NyaWJlLWZvbGRlci1wYXJlbnQsIC5jaGVjay1mb2xkZXItcGFyZW50LCAuZGVsZXRlLWZvbGRlci1wYXJlbnQnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZm9sZGVyTGlzdEhlbHAoJycpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRjcmVhdGVGb2xkZXIoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRm9sZGVyQ3JlYXRlJykpO1xuXHR9XG5cblx0c3lzdGVtRm9sZGVyKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0ZvbGRlclN5c3RlbScpKTtcblx0fVxuXG5cdGRlbGV0ZUZvbGRlcihmb2xkZXJUb1JlbW92ZSkge1xuXHRcdGlmIChcblx0XHRcdGZvbGRlclRvUmVtb3ZlICYmXG5cdFx0XHRmb2xkZXJUb1JlbW92ZS5jYW5CZURlbGV0ZWQoKSAmJlxuXHRcdFx0Zm9sZGVyVG9SZW1vdmUuZGVsZXRlQWNjZXNzKCkgJiZcblx0XHRcdDAgPT09IGZvbGRlclRvUmVtb3ZlLnByaXZhdGVNZXNzYWdlQ291bnRBbGwoKVxuXHRcdCkge1xuXHRcdFx0dGhpcy5mb2xkZXJGb3JEZWxldGlvbihudWxsKTtcblxuXHRcdFx0aWYgKGZvbGRlclRvUmVtb3ZlKSB7XG5cdFx0XHRcdGNvbnN0IGZSZW1vdmVGb2xkZXIgPSBmdW5jdGlvbihmb2xkZXIpIHtcblx0XHRcdFx0XHRpZiAoZm9sZGVyVG9SZW1vdmUgPT09IGZvbGRlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZvbGRlci5zdWJGb2xkZXJzLnJlbW92ZShmUmVtb3ZlRm9sZGVyKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0TG9jYWwuc2V0KENsaWVudFNpZGVLZXlOYW1lLkZvbGRlcnNMYXNoSGFzaCwgJycpO1xuXG5cdFx0XHRcdEZvbGRlclN0b3JlLmZvbGRlckxpc3QucmVtb3ZlKGZSZW1vdmVGb2xkZXIpO1xuXG5cdFx0XHRcdGdldEFwcCgpLmZvbGRlcnNQcm9taXNlc0FjdGlvbkhlbHBlcihcblx0XHRcdFx0XHRQcm9taXNlcy5mb2xkZXJEZWxldGUoZm9sZGVyVG9SZW1vdmUuZnVsbE5hbWVSYXcsIEZvbGRlclN0b3JlLmZvbGRlcnNEZWxldGluZyksXG5cdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkNhbnREZWxldGVGb2xkZXJcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZW1vdmVGb2xkZXJGcm9tQ2FjaGVMaXN0KGZvbGRlclRvUmVtb3ZlLmZ1bGxOYW1lUmF3KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKDAgPCBmb2xkZXJUb1JlbW92ZS5wcml2YXRlTWVzc2FnZUNvdW50QWxsKCkpIHtcblx0XHRcdEZvbGRlclN0b3JlLmZvbGRlckxpc3QuZXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5DYW50RGVsZXRlTm9uRW1wdHlGb2xkZXIpKTtcblx0XHR9XG5cdH1cblxuXHRzdWJzY3JpYmVGb2xkZXIoZm9sZGVyKSB7XG5cdFx0TG9jYWwuc2V0KENsaWVudFNpZGVLZXlOYW1lLkZvbGRlcnNMYXNoSGFzaCwgJycpO1xuXHRcdFJlbW90ZS5mb2xkZXJTZXRTdWJzY3JpYmUobm9vcCwgZm9sZGVyLmZ1bGxOYW1lUmF3LCB0cnVlKTtcblx0XHRmb2xkZXIuc3ViU2NyaWJlZCh0cnVlKTtcblx0fVxuXG5cdHVuU3Vic2NyaWJlRm9sZGVyKGZvbGRlcikge1xuXHRcdExvY2FsLnNldChDbGllbnRTaWRlS2V5TmFtZS5Gb2xkZXJzTGFzaEhhc2gsICcnKTtcblx0XHRSZW1vdGUuZm9sZGVyU2V0U3Vic2NyaWJlKG5vb3AsIGZvbGRlci5mdWxsTmFtZVJhdywgZmFsc2UpO1xuXHRcdGZvbGRlci5zdWJTY3JpYmVkKGZhbHNlKTtcblx0fVxuXG5cdGNoZWNrYWJsZVRydWVGb2xkZXIoZm9sZGVyKSB7XG5cdFx0UmVtb3RlLmZvbGRlclNldENoZWNrYWJsZShub29wLCBmb2xkZXIuZnVsbE5hbWVSYXcsIHRydWUpO1xuXHRcdGZvbGRlci5jaGVja2FibGUodHJ1ZSk7XG5cdH1cblxuXHRjaGVja2FibGVGYWxzZUZvbGRlcihmb2xkZXIpIHtcblx0XHRSZW1vdGUuZm9sZGVyU2V0Q2hlY2thYmxlKG5vb3AsIGZvbGRlci5mdWxsTmFtZVJhdywgZmFsc2UpO1xuXHRcdGZvbGRlci5jaGVja2FibGUoZmFsc2UpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEZvbGRlcnNVc2VyU2V0dGluZ3MsIEZvbGRlcnNVc2VyU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCBKdWEgZnJvbSAnSnVhJztcblxuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCwgVXBsb2FkRXJyb3JDb2RlLCBDYXBhLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgY2hhbmdlVGhlbWUsIGNvbnZlcnRUaGVtZU5hbWUgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgdXNlckJhY2tncm91bmQsIHRoZW1lUHJldmlld0xpbmssIHVwbG9hZEJhY2tncm91bmQgfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgY2FwYSB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgVGhlbWVTdG9yZSBmcm9tICdTdG9yZXMvVGhlbWUnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5jbGFzcyBUaGVtZXNVc2VyU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnRoZW1lID0gVGhlbWVTdG9yZS50aGVtZTtcblx0XHR0aGlzLnRoZW1lcyA9IFRoZW1lU3RvcmUudGhlbWVzO1xuXHRcdHRoaXMudGhlbWVzT2JqZWN0cyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmJhY2tncm91bmQgPSB7fTtcblx0XHR0aGlzLmJhY2tncm91bmQubmFtZSA9IFRoZW1lU3RvcmUudGhlbWVCYWNrZ3JvdW5kTmFtZTtcblx0XHR0aGlzLmJhY2tncm91bmQuaGFzaCA9IFRoZW1lU3RvcmUudGhlbWVCYWNrZ3JvdW5kSGFzaDtcblx0XHR0aGlzLmJhY2tncm91bmQudXBsb2FkZXJCdXR0b24gPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuYmFja2dyb3VuZC5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5iYWNrZ3JvdW5kLmVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNhcGFVc2VyQmFja2dyb3VuZCA9IGtvLm9ic2VydmFibGUoY2FwYShDYXBhLlVzZXJCYWNrZ3JvdW5kKSk7XG5cblx0XHR0aGlzLnRoZW1lVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWUxMDBtcyB9KTtcblxuXHRcdHRoaXMuaVRpbWVyID0gMDtcblx0XHR0aGlzLm9UaGVtZUFqYXhSZXF1ZXN0ID0gbnVsbDtcblxuXHRcdHRoaXMudGhlbWUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0Xy5lYWNoKHRoaXMudGhlbWVzT2JqZWN0cygpLCAodGhlbWUpID0+IHtcblx0XHRcdFx0dGhlbWUuc2VsZWN0ZWQodmFsdWUgPT09IHRoZW1lLm5hbWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGNoYW5nZVRoZW1lKHZhbHVlLCB0aGlzLnRoZW1lVHJpZ2dlcik7XG5cblx0XHRcdFJlbW90ZS5zYXZlU2V0dGluZ3MobnVsbCwge1xuXHRcdFx0XHQnVGhlbWUnOiB2YWx1ZVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmJhY2tncm91bmQuaGFzaC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRjb25zdCAkYmcgPSAkKCcjcmwtYmcnKTtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0aWYgKCRiZy5kYXRhKCdiYWNrc3RyZXRjaCcpKSB7XG5cdFx0XHRcdFx0JGJnLmJhY2tzdHJldGNoKCdkZXN0cm95JykuYXR0cignc3R5bGUnLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCRiZ1xuXHRcdFx0XHRcdC5hdHRyKCdzdHlsZScsICdiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7Jylcblx0XHRcdFx0XHQuYmFja3N0cmV0Y2godXNlckJhY2tncm91bmQodmFsdWUpLCB7XG5cdFx0XHRcdFx0XHRmYWRlOiBNYWdpY3MuVGltZTFzLFxuXHRcdFx0XHRcdFx0Y2VudGVyZWRYOiB0cnVlLFxuXHRcdFx0XHRcdFx0Y2VudGVyZWRZOiB0cnVlXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQucmVtb3ZlQXR0cignc3R5bGUnKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Y29uc3QgY3VycmVudFRoZW1lID0gdGhpcy50aGVtZSgpO1xuXG5cdFx0dGhpcy50aGVtZXNPYmplY3RzKFxuXHRcdFx0Xy5tYXAodGhpcy50aGVtZXMoKSwgKHRoZW1lKSA9PiAoe1xuXHRcdFx0XHRuYW1lOiB0aGVtZSxcblx0XHRcdFx0bmFtZURpc3BsYXk6IGNvbnZlcnRUaGVtZU5hbWUodGhlbWUpLFxuXHRcdFx0XHRzZWxlY3RlZDoga28ub2JzZXJ2YWJsZSh0aGVtZSA9PT0gY3VycmVudFRoZW1lKSxcblx0XHRcdFx0dGhlbWVQcmV2aWV3U3JjOiB0aGVtZVByZXZpZXdMaW5rKHRoZW1lKVxuXHRcdFx0fSkpXG5cdFx0KTtcblxuXHRcdHRoaXMuaW5pdFVwbG9hZGVyKCk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy5iYWNrZ3JvdW5kLmVycm9yKCcnKTtcblx0fVxuXG5cdGNsZWFyQmFja2dyb3VuZCgpIHtcblx0XHRpZiAodGhpcy5jYXBhVXNlckJhY2tncm91bmQoKSkge1xuXHRcdFx0UmVtb3RlLmNsZWFyVXNlckJhY2tncm91bmQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmJhY2tncm91bmQubmFtZSgnJyk7XG5cdFx0XHRcdHRoaXMuYmFja2dyb3VuZC5oYXNoKCcnKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGluaXRVcGxvYWRlcigpIHtcblx0XHRpZiAodGhpcy5iYWNrZ3JvdW5kLnVwbG9hZGVyQnV0dG9uKCkgJiYgdGhpcy5jYXBhVXNlckJhY2tncm91bmQoKSkge1xuXHRcdFx0Y29uc3Qgb0p1YSA9IG5ldyBKdWEoe1xuXHRcdFx0XHQnYWN0aW9uJzogdXBsb2FkQmFja2dyb3VuZCgpLFxuXHRcdFx0XHQnbmFtZSc6ICd1cGxvYWRlcicsXG5cdFx0XHRcdCdxdWV1ZVNpemUnOiAxLFxuXHRcdFx0XHQnbXVsdGlwbGVTaXplTGltaXQnOiAxLFxuXHRcdFx0XHQnZGlzYWJsZURyYWdBbmREcm9wJzogdHJ1ZSxcblx0XHRcdFx0J2Rpc2FibGVNdWx0aXBsZSc6IHRydWUsXG5cdFx0XHRcdCdjbGlja0VsZW1lbnQnOiB0aGlzLmJhY2tncm91bmQudXBsb2FkZXJCdXR0b24oKVxuXHRcdFx0fSk7XG5cblx0XHRcdG9KdWFcblx0XHRcdFx0Lm9uKCdvblN0YXJ0JywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmFja2dyb3VuZC5sb2FkaW5nKHRydWUpO1xuXHRcdFx0XHRcdHRoaXMuYmFja2dyb3VuZC5lcnJvcignJyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbignb25Db21wbGV0ZScsIChpZCwgcmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kLmxvYWRpbmcoZmFsc2UpO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3VsdCAmJiBpZCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0Lk5hbWUgJiYgZGF0YS5SZXN1bHQuSGFzaCkge1xuXHRcdFx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kLm5hbWUoZGF0YS5SZXN1bHQuTmFtZSk7XG5cdFx0XHRcdFx0XHR0aGlzLmJhY2tncm91bmQuaGFzaChkYXRhLlJlc3VsdC5IYXNoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kLm5hbWUoJycpO1xuXHRcdFx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kLmhhc2goJycpO1xuXG5cdFx0XHRcdFx0XHRsZXQgZXJyb3JNc2cgPSAnJztcblx0XHRcdFx0XHRcdGlmIChkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZUlzVG9vQmlnOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JNc2cgPSBpMThuKCdTRVRUSU5HU19USEVNRVMvRVJST1JfRklMRV9JU19UT09fQklHJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlVHlwZTpcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yTXNnID0gaTE4bignU0VUVElOR1NfVEhFTUVTL0VSUk9SX0ZJTEVfVFlQRV9FUlJPUicpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICghZXJyb3JNc2cgJiYgZGF0YS5FcnJvck1lc3NhZ2UpIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3JNc2cgPSBkYXRhLkVycm9yTWVzc2FnZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5iYWNrZ3JvdW5kLmVycm9yKGVycm9yTXNnIHx8IGkxOG4oJ1NFVFRJTkdTX1RIRU1FUy9FUlJPUl9VTktOT1dOJykpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgVGhlbWVzVXNlclNldHRpbmdzLCBUaGVtZXNVc2VyU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBkZWxlZ2F0ZVJ1bk9uRGVzdHJveSwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgYklzSHR0cHMgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCBQZ3BTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9QZ3AnO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSAnU3RvcmVzL1VzZXIvU2V0dGluZ3MnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBPcGVuUGdwVXNlclNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5vcGVucGdwa2V5cyA9IFBncFN0b3JlLm9wZW5wZ3BrZXlzO1xuXHRcdHRoaXMub3BlbnBncGtleXNQdWJsaWMgPSBQZ3BTdG9yZS5vcGVucGdwa2V5c1B1YmxpYztcblx0XHR0aGlzLm9wZW5wZ3BrZXlzUHJpdmF0ZSA9IFBncFN0b3JlLm9wZW5wZ3BrZXlzUHJpdmF0ZTtcblxuXHRcdHRoaXMub3BlblBncEtleUZvckRlbGV0aW9uID0ga28ub2JzZXJ2YWJsZShudWxsKS5kZWxldGVBY2Nlc3NIZWxwZXIoKTtcblxuXHRcdHRoaXMuYWxsb3dEcmFmdEF1dG9zYXZlID0gU2V0dGluZ3NTdG9yZS5hbGxvd0RyYWZ0QXV0b3NhdmU7XG5cblx0XHR0aGlzLmlzSHR0cHMgPSBiSXNIdHRwcztcblx0fVxuXG5cdGFkZE9wZW5QZ3BLZXkoKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQWRkT3BlblBncEtleScpKTtcblx0fVxuXG5cdGdlbmVyYXRlT3BlblBncEtleSgpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9OZXdPcGVuUGdwS2V5JykpO1xuXHR9XG5cblx0dmlld09wZW5QZ3BLZXkob3BlblBncEtleSkge1xuXHRcdGlmIChvcGVuUGdwS2V5KSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9WaWV3T3BlblBncEtleScpLCBbb3BlblBncEtleV0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09wZW5QZ3BLZXlNb2RlbH0gb3BlblBncEtleVRvUmVtb3ZlXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0ZGVsZXRlT3BlblBncEtleShvcGVuUGdwS2V5VG9SZW1vdmUpIHtcblx0XHRpZiAob3BlblBncEtleVRvUmVtb3ZlICYmIG9wZW5QZ3BLZXlUb1JlbW92ZS5kZWxldGVBY2Nlc3MoKSkge1xuXHRcdFx0dGhpcy5vcGVuUGdwS2V5Rm9yRGVsZXRpb24obnVsbCk7XG5cblx0XHRcdGlmIChvcGVuUGdwS2V5VG9SZW1vdmUgJiYgUGdwU3RvcmUub3BlbnBncEtleXJpbmcpIHtcblx0XHRcdFx0Y29uc3QgZmluZGVkSXRlbSA9IF8uZmluZChQZ3BTdG9yZS5vcGVucGdwa2V5cygpLCAoa2V5KSA9PiBvcGVuUGdwS2V5VG9SZW1vdmUgPT09IGtleSk7XG5cdFx0XHRcdGlmIChmaW5kZWRJdGVtKSB7XG5cdFx0XHRcdFx0UGdwU3RvcmUub3BlbnBncGtleXMucmVtb3ZlKGZpbmRlZEl0ZW0pO1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGZpbmRlZEl0ZW0pO1xuXG5cdFx0XHRcdFx0UGdwU3RvcmUub3BlbnBncEtleXJpbmdbZmluZGVkSXRlbS5pc1ByaXZhdGUgPyAncHJpdmF0ZUtleXMnIDogJ3B1YmxpY0tleXMnXS5yZW1vdmVGb3JJZChmaW5kZWRJdGVtLmd1aWQpO1xuXG5cdFx0XHRcdFx0UGdwU3RvcmUub3BlbnBncEtleXJpbmcuc3RvcmUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdldEFwcCgpLnJlbG9hZE9wZW5QZ3BLZXlzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHRoaXMuYWxsb3dEcmFmdEF1dG9zYXZlLnN1YnNjcmliZShSZW1vdGUuc2F2ZVNldHRpbmdzSGVscGVyKCdBbGxvd0RyYWZ0QXV0b3NhdmUnLCBib29sVG9BamF4KSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxufVxuXG5leHBvcnQgeyBPcGVuUGdwVXNlclNldHRpbmdzLCBPcGVuUGdwVXNlclNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IHZpZXcsIFZpZXdUeXBlIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RTeXN0ZW1Ecm9wRG93blVzZXJWaWV3IH0gZnJvbSAnVmlldy9Vc2VyL0Fic3RyYWN0U3lzdGVtRHJvcERvd24nO1xuXG5Admlldyh7XG5cdG5hbWU6ICdWaWV3L1VzZXIvU2V0dGluZ3MvU3lzdGVtRHJvcERvd24nLFxuXHR0eXBlOiBWaWV3VHlwZS5SaWdodCxcblx0dGVtcGxhdGVJRDogJ1N5c3RlbURyb3BEb3duJ1xufSlcbmNsYXNzIFN5c3RlbURyb3BEb3duU2V0dGluZ3NVc2VyVmlldyBleHRlbmRzIEFic3RyYWN0U3lzdGVtRHJvcERvd25Vc2VyVmlldyB7fVxuXG5leHBvcnQgeyBTeXN0ZW1Ecm9wRG93blNldHRpbmdzVXNlclZpZXcsIFN5c3RlbURyb3BEb3duU2V0dGluZ3NVc2VyVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgbGVmdFBhbmVsRGlzYWJsZWQgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBzZXR0aW5ncywgaW5ib3ggfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgZ2V0Rm9sZGVySW5ib3hOYW1lIH0gZnJvbSAnQ29tbW9uL0NhY2hlJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCB7IHZpZXcsIFZpZXdUeXBlLCBzZXRIYXNoLCBzZXR0aW5nc01lbnVLZXlzSGFuZGxlciB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9Vc2VyL1NldHRpbmdzL01lbnUnLFxuXHR0eXBlOiBWaWV3VHlwZS5MZWZ0LFxuXHR0ZW1wbGF0ZUlEOiAnU2V0dGluZ3NNZW51J1xufSlcbmNsYXNzIE1lbnVTZXR0aW5nc1VzZXJWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gc2NyZWVuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihzY3JlZW4pIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5sZWZ0UGFuZWxEaXNhYmxlZCA9IGxlZnRQYW5lbERpc2FibGVkO1xuXG5cdFx0dGhpcy5tb2JpbGUgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHR0aGlzLm1lbnUgPSBzY3JlZW4ubWVudTtcblx0fVxuXG5cdG9uQnVpbGQoZG9tKSB7XG5cdFx0aWYgKHRoaXMubW9iaWxlKSB7XG5cdFx0XHRkb20ub24oJ2NsaWNrJywgJy5iLXNldHRpbmdzLW1lbnUgLmUtaXRlbS5zZWxlY3RhYmxlJywgKCkgPT4ge1xuXHRcdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGtleSgndXAsIGRvd24nLCBLZXlTdGF0ZS5TZXR0aW5ncywgc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIoJCgnLmItc2V0dGluZ3MtbWVudSAuZS1pdGVtJywgZG9tKSkpO1xuXHR9XG5cblx0bGluayhyb3V0ZSkge1xuXHRcdHJldHVybiBzZXR0aW5ncyhyb3V0ZSk7XG5cdH1cblxuXHRiYWNrVG9NYWlsQm94Q2xpY2soKSB7XG5cdFx0c2V0SGFzaChpbmJveChnZXRGb2xkZXJJbmJveE5hbWUoKSkpO1xuXHR9XG59XG5cbmV4cG9ydCB7IE1lbnVTZXR0aW5nc1VzZXJWaWV3LCBNZW51U2V0dGluZ3NVc2VyVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgeyBpbmJveCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBnZXRGb2xkZXJJbmJveE5hbWUgfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuaW1wb3J0IHsgbGVmdFBhbmVsRGlzYWJsZWQgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgTWVzc2FnZVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL01lc3NhZ2UnO1xuXG5pbXBvcnQgeyB2aWV3LCBWaWV3VHlwZSwgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9Vc2VyL1NldHRpbmdzL1BhbmUnLFxuXHR0eXBlOiBWaWV3VHlwZS5SaWdodCxcblx0dGVtcGxhdGVJRDogJ1NldHRpbmdzUGFuZSdcbn0pXG5jbGFzcyBQYW5lU2V0dGluZ3NVc2VyVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5tb2JpbGUgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHR0aGlzLmxlZnRQYW5lbERpc2FibGVkID0gbGVmdFBhbmVsRGlzYWJsZWQ7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2UobnVsbCk7XG5cdH1cblxuXHRoaWRlTGVmdChpdGVtLCBldmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0fVxuXG5cdHNob3dMZWZ0KGl0ZW0sIGV2ZW50KSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuXHRcdGxlZnRQYW5lbERpc2FibGVkKGZhbHNlKTtcblx0fVxuXG5cdG9uQnVpbGQoZG9tKSB7XG5cdFx0aWYgKHRoaXMubW9iaWxlKSB7XG5cdFx0XHRkb20ub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0XHRsZWZ0UGFuZWxEaXNhYmxlZCh0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGJhY2tUb01haWxCb3hDbGljaygpIHtcblx0XHRzZXRIYXNoKGluYm94KGdldEZvbGRlckluYm94TmFtZSgpKSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgUGFuZVNldHRpbmdzVXNlclZpZXcsIFBhbmVTZXR0aW5nc1VzZXJWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBib290c3RyYXAgZnJvbSAnYm9vdHN0cmFwJztcbmltcG9ydCBBcHAgZnJvbSAnQXBwL1VzZXInO1xuXG5ib290c3RyYXAoQXBwKTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcbmltcG9ydCAkIGZyb20gJyQnO1xuXG5pbXBvcnQgeyBwU3RyaW5nLCBsb2cgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgS2V5U3RhdGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9NZXNzYWdlT3BlblBncCcsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNNZXNzYWdlT3BlblBncCdcbn0pXG5jbGFzcyBNZXNzYWdlT3BlblBncFBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5ub3RpZmljYXRpb24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuc2VsZWN0ZWRLZXkgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMucHJpdmF0ZUtleXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5wYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucGFzc3dvcmQuZm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmJ1dHRvbkZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnJlc3VsdENhbGxiYWNrID0gbnVsbDtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuUG9wdXBNZXNzYWdlT3BlblBHUDtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdGRvQ29tbWFuZCgpIHtcblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QodHJ1ZSk7XG5cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGxldCBwcml2YXRlS2V5ID0gbnVsbDtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKHRoaXMucmVzdWx0Q2FsbGJhY2sgJiYgdGhpcy5zZWxlY3RlZEtleSgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJpdmF0ZUtleXMgPSB0aGlzLnNlbGVjdGVkS2V5KCkuZ2V0TmF0aXZlS2V5cygpO1xuXHRcdFx0XHRcdHByaXZhdGVLZXkgPSBwcml2YXRlS2V5cyAmJiBwcml2YXRlS2V5c1swXSA/IHByaXZhdGVLZXlzWzBdIDogbnVsbDtcblxuXHRcdFx0XHRcdGlmIChwcml2YXRlS2V5KSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXByaXZhdGVLZXkuZGVjcnlwdChwU3RyaW5nKHRoaXMucGFzc3dvcmQoKSkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9nKCdFcnJvcjogUHJpdmF0ZSBrZXkgY2Fubm90IGJlIGRlY3J5cHRlZCcpO1xuXHRcdFx0XHRcdFx0XHRcdHByaXZhdGVLZXkgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdGxvZyhlKTtcblx0XHRcdFx0XHRcdFx0cHJpdmF0ZUtleSA9IG51bGw7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGxvZygnRXJyb3I6IFByaXZhdGUga2V5IGNhbm5vdCBiZSBmb3VuZCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRsb2coZSk7XG5cdFx0XHRcdHByaXZhdGVLZXkgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXG5cdFx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0XHRcdHRoaXMucmVzdWx0Q2FsbGJhY2socHJpdmF0ZUtleSk7XG5cdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdH1cblxuXHRjbGVhclBvcHVwKCkge1xuXHRcdHRoaXMubm90aWZpY2F0aW9uKCcnKTtcblxuXHRcdHRoaXMucGFzc3dvcmQoJycpO1xuXHRcdHRoaXMucGFzc3dvcmQuZm9jdXMoZmFsc2UpO1xuXHRcdHRoaXMuYnV0dG9uRm9jdXMoZmFsc2UpO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEtleShmYWxzZSk7XG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblxuXHRcdHRoaXMucmVzdWx0Q2FsbGJhY2sgPSBudWxsO1xuXHRcdHRoaXMucHJpdmF0ZUtleXMoW10pO1xuXHR9XG5cblx0b25CdWlsZChvRG9tKSB7XG5cdFx0a2V5KCd0YWIsc2hpZnQrdGFiJywgS2V5U3RhdGUuUG9wdXBNZXNzYWdlT3BlblBHUCwgKCkgPT4ge1xuXHRcdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRcdGNhc2UgdGhpcy5wYXNzd29yZC5mb2N1cygpOlxuXHRcdFx0XHRcdHRoaXMuYnV0dG9uRm9jdXModHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgdGhpcy5idXR0b25Gb2N1cygpOlxuXHRcdFx0XHRcdHRoaXMucGFzc3dvcmQuZm9jdXModHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0XHRvRG9tLm9uKCdjbGljaycsICcua2V5LWxpc3RfX2l0ZW0nLCBmdW5jdGlvbigpIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cblx0XHRcdG9Eb21cblx0XHRcdFx0LmZpbmQoJy5rZXktbGlzdF9faXRlbSAua2V5LWxpc3RfX2l0ZW1fX3JhZGlvJylcblx0XHRcdFx0LmFkZENsYXNzKCdpY29uLXJhZGlvLXVuY2hlY2tlZCcpXG5cdFx0XHRcdC5yZW1vdmVDbGFzcygnaWNvbi1yYWRpby1jaGVja2VkJyk7XG5cblx0XHRcdCQodGhpcylcblx0XHRcdFx0LmZpbmQoJy5rZXktbGlzdF9faXRlbV9fcmFkaW8nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ2ljb24tcmFkaW8tdW5jaGVja2VkJylcblx0XHRcdFx0LmFkZENsYXNzKCdpY29uLXJhZGlvLWNoZWNrZWQnKTtcblxuXHRcdFx0c2VsZi5zZWxlY3RlZEtleShrby5kYXRhRm9yKHRoaXMpKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblxuXHRcdFx0c2VsZi5wYXNzd29yZC5mb2N1cyh0cnVlKTtcblx0XHR9KTtcblx0fVxuXG5cdG9uSGlkZVdpdGhEZWxheSgpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHR0aGlzLnBhc3N3b3JkLmZvY3VzKHRydWUpO1xuXHRcdC8vXHRcdHRoaXMuYnV0dG9uRm9jdXModHJ1ZSk7XG5cdH1cblxuXHRvblNob3coZkNhbGxiYWNrLCBwcml2YXRlS2V5cykge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXG5cdFx0dGhpcy5yZXN1bHRDYWxsYmFjayA9IGZDYWxsYmFjaztcblx0XHR0aGlzLnByaXZhdGVLZXlzKHByaXZhdGVLZXlzKTtcblxuXHRcdGlmICh0aGlzLnZpZXdNb2RlbERvbSkge1xuXHRcdFx0dGhpcy52aWV3TW9kZWxEb21cblx0XHRcdFx0LmZpbmQoJy5rZXktbGlzdF9faXRlbScpXG5cdFx0XHRcdC5maXJzdCgpXG5cdFx0XHRcdC5jbGljaygpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBNZXNzYWdlT3BlblBncFBvcHVwVmlldywgTWVzc2FnZU9wZW5QZ3BQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIga2V5cyA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwva2V5cycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQua2V5cztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmtleXMpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyBrZXlzIDogb3duO1xufTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5Jykua2V5cztcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBpbkFycmF5LCBwU3RyaW5nLCBsb2csIGlzVW5kLCB0cmltLCBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBNYWdpY3MsIEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCBQZ3BTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9QZ3AnO1xuXG5pbXBvcnQgeyBFbWFpbE1vZGVsIH0gZnJvbSAnTW9kZWwvRW1haWwnO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuY29uc3QgS0VZX05BTUVfU1VCU1RSID0gLTg7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0NvbXBvc2VPcGVuUGdwJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0NvbXBvc2VPcGVuUGdwJ1xufSlcbmNsYXNzIENvbXBvc2VPcGVuUGdwUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnB1YmxpY0tleXNPcHRpb25zQ2FwdGlvbiA9IGkxOG4oJ1BHUF9OT1RJRklDQVRJT05TL0FERF9BX1BVQkxJQ0tfS0VZJyk7XG5cdFx0dGhpcy5wcml2YXRlS2V5c09wdGlvbnNDYXB0aW9uID0gaTE4bignUEdQX05PVElGSUNBVElPTlMvU0VMRUNUX0FfUFJJVkFURV9LRVknKTtcblxuXHRcdHRoaXMubm90aWZpY2F0aW9uID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnNpZ24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmVuY3J5cHQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMucGFzc3dvcmQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkLmZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5idXR0b25Gb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy50ZXh0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zZWxlY3RlZFByaXZhdGVLZXkgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXHRcdHRoaXMuc2VsZWN0ZWRQdWJsaWNLZXkgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXG5cdFx0dGhpcy5zaWduS2V5ID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblx0XHR0aGlzLmVuY3J5cHRLZXlzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMuZW5jcnlwdEtleXNWaWV3ID0ga28uY29tcHV0ZWQoKCkgPT4gXy5jb21wYWN0KF8ubWFwKHRoaXMuZW5jcnlwdEtleXMoKSwgKG9LZXkpID0+IChvS2V5ID8gb0tleS5rZXkgOiBudWxsKSkpKTtcblxuXHRcdHRoaXMucHJpdmF0ZUtleXNPcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3Qgb3B0cyA9IF8ubWFwKFBncFN0b3JlLm9wZW5wZ3BrZXlzUHJpdmF0ZSgpLCAob0tleSwgaUluZGV4KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLnNpZ25LZXkoKSAmJiB0aGlzLnNpZ25LZXkoKS5rZXkuaWQgPT09IG9LZXkuaWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gXy5tYXAob0tleS51c2VycywgKHVzZXIpID0+ICh7XG5cdFx0XHRcdFx0J2lkJzogb0tleS5ndWlkLFxuXHRcdFx0XHRcdCduYW1lJzogJygnICsgb0tleS5pZC5zdWJzdHIoS0VZX05BTUVfU1VCU1RSKS50b1VwcGVyQ2FzZSgpICsgJykgJyArIHVzZXIsXG5cdFx0XHRcdFx0J2tleSc6IG9LZXksXG5cdFx0XHRcdFx0J2NsYXNzJzogaUluZGV4ICUgMiA/ICdvZGQnIDogJ2V2ZW4nXG5cdFx0XHRcdH0pKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gXy5jb21wYWN0KF8uZmxhdHRlbihvcHRzLCB0cnVlKSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnB1YmxpY0tleXNPcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3Qgb3B0cyA9IF8ubWFwKFBncFN0b3JlLm9wZW5wZ3BrZXlzUHVibGljKCksIChvS2V5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRpZiAoLTEgPCBpbkFycmF5KG9LZXksIHRoaXMuZW5jcnlwdEtleXNWaWV3KCkpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIF8ubWFwKG9LZXkudXNlcnMsICh1c2VyKSA9PiAoe1xuXHRcdFx0XHRcdCdpZCc6IG9LZXkuZ3VpZCxcblx0XHRcdFx0XHQnbmFtZSc6ICcoJyArIG9LZXkuaWQuc3Vic3RyKEtFWV9OQU1FX1NVQlNUUikudG9VcHBlckNhc2UoKSArICcpICcgKyB1c2VyLFxuXHRcdFx0XHRcdCdrZXknOiBvS2V5LFxuXHRcdFx0XHRcdCdjbGFzcyc6IGluZGV4ICUgMiA/ICdvZGQnIDogJ2V2ZW4nXG5cdFx0XHRcdH0pKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIF8uY29tcGFjdChfLmZsYXR0ZW4ob3B0cywgdHJ1ZSkpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnJlc3VsdENhbGxiYWNrID0gbnVsbDtcblxuXHRcdHRoaXMuc2VsZWN0ZWRQcml2YXRlS2V5LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdENvbW1hbmQoKTtcblx0XHRcdFx0dGhpcy51cGRhdGVDb21tYW5kKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNlbGVjdGVkUHVibGljS2V5LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLmFkZENvbW1hbmQoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLlBvcHVwQ29tcG9zZU9wZW5QR1A7XG5cblx0XHR0aGlzLmRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciA9IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcjtcblxuXHRcdHRoaXMuYWRkT3B0aW9uQ2xhc3MgPSAoZG9tT3B0aW9uLCBpdGVtKSA9PiB7XG5cdFx0XHR0aGlzLmRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcihkb21PcHRpb24sIGl0ZW0pO1xuXG5cdFx0XHRpZiAoaXRlbSAmJiAhaXNVbmQoaXRlbS5jbGFzcykgJiYgZG9tT3B0aW9uKSB7XG5cdFx0XHRcdCQoZG9tT3B0aW9uKS5hZGRDbGFzcyhpdGVtLmNsYXNzKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhpcy5kZWxldGVQdWJsaWNrS2V5ID0gXy5iaW5kKHRoaXMuZGVsZXRlUHVibGlja0tleSwgdGhpcyk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gIXNlbGYuc3VibWl0UmVxdWVzdCgpICYmIChzZWxmLnNpZ24oKSB8fCBzZWxmLmVuY3J5cHQoKSkpXG5cdGRvQ29tbWFuZCgpIHtcblx0XHRsZXQgcmVzdWx0ID0gdHJ1ZSxcblx0XHRcdHByaXZhdGVLZXkgPSBudWxsLFxuXHRcdFx0YVB1YmxpY0tleXMgPSBbXTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCh0cnVlKTtcblxuXHRcdGlmIChyZXN1bHQgJiYgdGhpcy5zaWduKCkpIHtcblx0XHRcdGlmICghdGhpcy5zaWduS2V5KCkpIHtcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb24oaTE4bignUEdQX05PVElGSUNBVElPTlMvTk9fUFJJVkFURV9LRVlfRk9VTkQnKSk7XG5cdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICghdGhpcy5zaWduS2V5KCkua2V5KSB7XG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uKFxuXHRcdFx0XHRcdGkxOG4oJ1BHUF9OT1RJRklDQVRJT05TL05PX1BSSVZBVEVfS0VZX0ZPVU5EX0ZPUicsIHtcblx0XHRcdFx0XHRcdCdFTUFJTCc6IHRoaXMuc2lnbktleSgpLmVtYWlsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0XHRjb25zdCBwcml2YXRlS2V5cyA9IHRoaXMuc2lnbktleSgpLmtleS5nZXROYXRpdmVLZXlzKCk7XG5cdFx0XHRcdHByaXZhdGVLZXkgPSBwcml2YXRlS2V5c1swXSB8fCBudWxsO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aWYgKHByaXZhdGVLZXkpIHtcblx0XHRcdFx0XHRcdHByaXZhdGVLZXkuZGVjcnlwdChwU3RyaW5nKHRoaXMucGFzc3dvcmQoKSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHByaXZhdGVLZXkgPSBudWxsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFwcml2YXRlS2V5KSB7XG5cdFx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb24oaTE4bignUEdQX05PVElGSUNBVElPTlMvTk9fUFJJVkFURV9LRVlfRk9VTkQnKSk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocmVzdWx0ICYmIHRoaXMuZW5jcnlwdCgpKSB7XG5cdFx0XHRpZiAoMCA9PT0gdGhpcy5lbmNyeXB0S2V5cygpLmxlbmd0aCkge1xuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbihpMThuKCdQR1BfTk9USUZJQ0FUSU9OUy9OT19QVUJMSUNfS0VZU19GT1VORCcpKTtcblx0XHRcdFx0cmVzdWx0ID0gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuZW5jcnlwdEtleXMoKSkge1xuXHRcdFx0XHRhUHVibGljS2V5cyA9IFtdO1xuXG5cdFx0XHRcdF8uZWFjaCh0aGlzLmVuY3J5cHRLZXlzKCksIChvS2V5KSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9LZXkgJiYgb0tleS5rZXkpIHtcblx0XHRcdFx0XHRcdGFQdWJsaWNLZXlzID0gYVB1YmxpY0tleXMuY29uY2F0KF8uY29tcGFjdChfLmZsYXR0ZW4ob0tleS5rZXkuZ2V0TmF0aXZlS2V5cygpKSkpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAob0tleSAmJiBvS2V5LmVtYWlsKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbihcblx0XHRcdFx0XHRcdFx0aTE4bignUEdQX05PVElGSUNBVElPTlMvTk9fUFVCTElDX0tFWVNfRk9VTkRfRk9SJywge1xuXHRcdFx0XHRcdFx0XHRcdCdFTUFJTCc6IG9LZXkuZW1haWxcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKHJlc3VsdCAmJiAoMCA9PT0gYVB1YmxpY0tleXMubGVuZ3RoIHx8IHRoaXMuZW5jcnlwdEtleXMoKS5sZW5ndGggIT09IGFQdWJsaWNLZXlzLmxlbmd0aCkpIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyZXN1bHQgJiYgdGhpcy5yZXN1bHRDYWxsYmFjaykge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdGxldCBwZ3BQcm9taXNlID0gbnVsbDtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGlmIChwcml2YXRlS2V5ICYmIDAgPT09IGFQdWJsaWNLZXlzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0cGdwUHJvbWlzZSA9IFBncFN0b3JlLm9wZW5wZ3Auc2lnbih7XG5cdFx0XHRcdFx0XHRcdGRhdGE6IHRoaXMudGV4dCgpLFxuXHRcdFx0XHRcdFx0XHRwcml2YXRlS2V5czogW3ByaXZhdGVLZXldXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHByaXZhdGVLZXkgJiYgMCA8IGFQdWJsaWNLZXlzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0cGdwUHJvbWlzZSA9IFBncFN0b3JlLm9wZW5wZ3AuZW5jcnlwdCh7XG5cdFx0XHRcdFx0XHRcdGRhdGE6IHRoaXMudGV4dCgpLFxuXHRcdFx0XHRcdFx0XHRwdWJsaWNLZXlzOiBhUHVibGljS2V5cyxcblx0XHRcdFx0XHRcdFx0cHJpdmF0ZUtleXM6IFtwcml2YXRlS2V5XVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghcHJpdmF0ZUtleSAmJiAwIDwgYVB1YmxpY0tleXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRwZ3BQcm9taXNlID0gUGdwU3RvcmUub3BlbnBncC5lbmNyeXB0KHtcblx0XHRcdFx0XHRcdFx0ZGF0YTogdGhpcy50ZXh0KCksXG5cdFx0XHRcdFx0XHRcdHB1YmxpY0tleXM6IGFQdWJsaWNLZXlzXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRsb2coZSk7XG5cblx0XHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbihcblx0XHRcdFx0XHRcdGkxOG4oJ1BHUF9OT1RJRklDQVRJT05TL1BHUF9FUlJPUicsIHtcblx0XHRcdFx0XHRcdFx0J0VSUk9SJzogJycgKyBlXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocGdwUHJvbWlzZSkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRwZ3BQcm9taXNlXG5cdFx0XHRcdFx0XHRcdC50aGVuKChtRGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucmVzdWx0Q2FsbGJhY2sobURhdGEuZGF0YSk7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0aTE4bignUEdQX05PVElGSUNBVElPTlMvUEdQX0VSUk9SJywge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQnRVJST1InOiAnJyArIGVcblx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb24oXG5cdFx0XHRcdFx0XHRcdGkxOG4oJ1BHUF9OT1RJRklDQVRJT05TL1BHUF9FUlJPUicsIHtcblx0XHRcdFx0XHRcdFx0XHQnRVJST1InOiAnJyArIGVcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lMjBtcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0c2VsZWN0Q29tbWFuZCgpIHtcblx0XHRjb25zdCBrZXlJZCA9IHRoaXMuc2VsZWN0ZWRQcml2YXRlS2V5KCksXG5cdFx0XHRvcHRpb24gPSBrZXlJZCA/IF8uZmluZCh0aGlzLnByaXZhdGVLZXlzT3B0aW9ucygpLCAoaXRlbSkgPT4gaXRlbSAmJiBrZXlJZCA9PT0gaXRlbS5pZCkgOiBudWxsO1xuXG5cdFx0aWYgKG9wdGlvbikge1xuXHRcdFx0dGhpcy5zaWduS2V5KHtcblx0XHRcdFx0J2VtcHR5JzogIW9wdGlvbi5rZXksXG5cdFx0XHRcdCdzZWxlY3RlZCc6IGtvLm9ic2VydmFibGUoISFvcHRpb24ua2V5KSxcblx0XHRcdFx0J3VzZXJzJzogb3B0aW9uLmtleS51c2Vycyxcblx0XHRcdFx0J2hhc2gnOiBvcHRpb24ua2V5LmlkLnN1YnN0cihLRVlfTkFNRV9TVUJTVFIpLnRvVXBwZXJDYXNlKCksXG5cdFx0XHRcdCdrZXknOiBvcHRpb24ua2V5XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGFkZENvbW1hbmQoKSB7XG5cdFx0Y29uc3Qga2V5SWQgPSB0aGlzLnNlbGVjdGVkUHVibGljS2V5KCksXG5cdFx0XHRrZXlzID0gdGhpcy5lbmNyeXB0S2V5cygpLFxuXHRcdFx0b3B0aW9uID0ga2V5SWQgPyBfLmZpbmQodGhpcy5wdWJsaWNLZXlzT3B0aW9ucygpLCAoaXRlbSkgPT4gaXRlbSAmJiBrZXlJZCA9PT0gaXRlbS5pZCkgOiBudWxsO1xuXG5cdFx0aWYgKG9wdGlvbikge1xuXHRcdFx0a2V5cy5wdXNoKHtcblx0XHRcdFx0J2VtcHR5JzogIW9wdGlvbi5rZXksXG5cdFx0XHRcdCdzZWxlY3RlZCc6IGtvLm9ic2VydmFibGUoISFvcHRpb24ua2V5KSxcblx0XHRcdFx0J3JlbW92YWJsZSc6IGtvLm9ic2VydmFibGUoIXRoaXMuc2lnbigpIHx8ICF0aGlzLnNpZ25LZXkoKSB8fCB0aGlzLnNpZ25LZXkoKS5rZXkuaWQgIT09IG9wdGlvbi5rZXkuaWQpLFxuXHRcdFx0XHQndXNlcnMnOiBvcHRpb24ua2V5LnVzZXJzLFxuXHRcdFx0XHQnaGFzaCc6IG9wdGlvbi5rZXkuaWQuc3Vic3RyKEtFWV9OQU1FX1NVQlNUUikudG9VcHBlckNhc2UoKSxcblx0XHRcdFx0J2tleSc6IG9wdGlvbi5rZXlcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmVuY3J5cHRLZXlzKGtleXMpO1xuXHRcdH1cblx0fVxuXG5cdEBjb21tYW5kKClcblx0dXBkYXRlQ29tbWFuZCgpIHtcblx0XHRfLmVhY2godGhpcy5lbmNyeXB0S2V5cygpLCAob0tleSkgPT4ge1xuXHRcdFx0b0tleS5yZW1vdmFibGUoIXRoaXMuc2lnbigpIHx8ICF0aGlzLnNpZ25LZXkoKSB8fCB0aGlzLnNpZ25LZXkoKS5rZXkuaWQgIT09IG9LZXkua2V5LmlkKTtcblx0XHR9KTtcblx0fVxuXG5cdGRlbGV0ZVB1YmxpY2tLZXkocHVibGljS2V5KSB7XG5cdFx0dGhpcy5lbmNyeXB0S2V5cy5yZW1vdmUocHVibGljS2V5KTtcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5ub3RpZmljYXRpb24oJycpO1xuXG5cdFx0dGhpcy5zaWduKGZhbHNlKTtcblx0XHR0aGlzLmVuY3J5cHQoZmFsc2UpO1xuXG5cdFx0dGhpcy5wYXNzd29yZCgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZC5mb2N1cyhmYWxzZSk7XG5cdFx0dGhpcy5idXR0b25Gb2N1cyhmYWxzZSk7XG5cblx0XHR0aGlzLnNpZ25LZXkobnVsbCk7XG5cdFx0dGhpcy5lbmNyeXB0S2V5cyhbXSk7XG5cdFx0dGhpcy50ZXh0KCcnKTtcblxuXHRcdHRoaXMucmVzdWx0Q2FsbGJhY2sgPSBudWxsO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRrZXkoJ3RhYixzaGlmdCt0YWInLCBLZXlTdGF0ZS5Qb3B1cENvbXBvc2VPcGVuUEdQLCAoKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0Y2FzZSB0aGlzLnBhc3N3b3JkLmZvY3VzKCk6XG5cdFx0XHRcdFx0dGhpcy5idXR0b25Gb2N1cyh0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSB0aGlzLmJ1dHRvbkZvY3VzKCk6XG5cdFx0XHRcdFx0dGhpcy5wYXNzd29yZC5mb2N1cyh0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cblx0b25IaWRlV2l0aERlbGF5KCkge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdGlmICh0aGlzLnNpZ24oKSkge1xuXHRcdFx0dGhpcy5wYXNzd29yZC5mb2N1cyh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5idXR0b25Gb2N1cyh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3coZkNhbGxiYWNrLCBzVGV4dCwgaWRlbnRpdHksIHNUbywgc0NjLCBzQmNjKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cblx0XHRsZXQgcmVjID0gW10sXG5cdFx0XHRlbWFpbExpbmUgPSAnJztcblxuXHRcdGNvbnN0IGVtYWlsID0gbmV3IEVtYWlsTW9kZWwoKTtcblxuXHRcdHRoaXMucmVzdWx0Q2FsbGJhY2sgPSBmQ2FsbGJhY2s7XG5cblx0XHRpZiAoJycgIT09IHNUbykge1xuXHRcdFx0cmVjLnB1c2goc1RvKTtcblx0XHR9XG5cblx0XHRpZiAoJycgIT09IHNDYykge1xuXHRcdFx0cmVjLnB1c2goc0NjKTtcblx0XHR9XG5cblx0XHRpZiAoJycgIT09IHNCY2MpIHtcblx0XHRcdHJlYy5wdXNoKHNCY2MpO1xuXHRcdH1cblxuXHRcdHJlYyA9IHJlYy5qb2luKCcsICcpLnNwbGl0KCcsJyk7XG5cdFx0cmVjID0gXy5jb21wYWN0KFxuXHRcdFx0Xy5tYXAocmVjLCAodmFsdWUpID0+IHtcblx0XHRcdFx0ZW1haWwuY2xlYXIoKTtcblx0XHRcdFx0ZW1haWwucGFyc2UodHJpbSh2YWx1ZSkpO1xuXHRcdFx0XHRyZXR1cm4gJycgPT09IGVtYWlsLmVtYWlsID8gZmFsc2UgOiBlbWFpbC5lbWFpbDtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGlmIChpZGVudGl0eSAmJiBpZGVudGl0eS5lbWFpbCgpKSB7XG5cdFx0XHRlbWFpbExpbmUgPSBpZGVudGl0eS5lbWFpbCgpO1xuXHRcdFx0cmVjLnVuc2hpZnQoZW1haWxMaW5lKTtcblxuXHRcdFx0Y29uc3Qga2V5cyA9IFBncFN0b3JlLmZpbmRBbGxQcml2YXRlS2V5c0J5RW1haWxOb3ROYXRpdmUoZW1haWxMaW5lKTtcblx0XHRcdGlmIChrZXlzICYmIGtleXNbMF0pIHtcblx0XHRcdFx0dGhpcy5zaWduS2V5KHtcblx0XHRcdFx0XHQndXNlcnMnOiBrZXlzWzBdLnVzZXJzIHx8IFtlbWFpbExpbmVdLFxuXHRcdFx0XHRcdCdoYXNoJzoga2V5c1swXS5pZC5zdWJzdHIoS0VZX05BTUVfU1VCU1RSKS50b1VwcGVyQ2FzZSgpLFxuXHRcdFx0XHRcdCdrZXknOiBrZXlzWzBdXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNpZ25LZXkoKSkge1xuXHRcdFx0dGhpcy5zaWduKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmIChyZWMgJiYgMCA8IHJlYy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuZW5jcnlwdEtleXMoXG5cdFx0XHRcdF8udW5pcShcblx0XHRcdFx0XHRfLmNvbXBhY3QoXG5cdFx0XHRcdFx0XHRfLmZsYXR0ZW4oXG5cdFx0XHRcdFx0XHRcdF8ubWFwKHJlYywgKHJlY0VtYWlsKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IFBncFN0b3JlLmZpbmRBbGxQdWJsaWNLZXlzQnlFbWFpbE5vdE5hdGl2ZShyZWNFbWFpbCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleXNcblx0XHRcdFx0XHRcdFx0XHRcdD8gXy5tYXAoa2V5cywgKHB1YmxpY0tleSkgPT4gKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZW1wdHknOiAhcHVibGljS2V5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdzZWxlY3RlZCc6IGtvLm9ic2VydmFibGUoISFwdWJsaWNLZXkpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyZW1vdmFibGUnOiBrby5vYnNlcnZhYmxlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IXRoaXMuc2lnbigpIHx8ICF0aGlzLnNpZ25LZXkoKSB8fCB0aGlzLnNpZ25LZXkoKS5rZXkuaWQgIT09IHB1YmxpY0tleS5pZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3VzZXJzJzogcHVibGljS2V5ID8gcHVibGljS2V5LnVzZXJzIHx8IFtyZWNFbWFpbF0gOiBbcmVjRW1haWxdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdoYXNoJzogcHVibGljS2V5ID8gcHVibGljS2V5LmlkLnN1YnN0cihLRVlfTkFNRV9TVUJTVFIpLnRvVXBwZXJDYXNlKCkgOiAnJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQna2V5JzogcHVibGljS2V5XG5cdFx0XHRcdFx0XHRcdFx0XHQgIH0pKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBbXTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdChlbmNyeXB0S2V5KSA9PiBlbmNyeXB0S2V5Lmhhc2hcblx0XHRcdFx0KVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKDAgPCB0aGlzLmVuY3J5cHRLZXlzKCkubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuZW5jcnlwdCh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnRleHQoc1RleHQpO1xuXHR9XG59XG5cbmV4cG9ydCB7IENvbXBvc2VPcGVuUGdwUG9wdXBWaWV3LCBDb21wb3NlT3BlblBncFBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGkxOG4sIGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IHNldEZvbGRlckhhc2ggfSBmcm9tICdDb21tb24vQ2FjaGUnO1xuXG5pbXBvcnQgTWVzc2FnZVN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL01lc3NhZ2UnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9Vc2VyL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9Vc2VyJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0ZvbGRlckNsZWFyJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0ZvbGRlckNsZWFyJ1xufSlcbmNsYXNzIEZvbGRlckNsZWFyUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnNlbGVjdGVkRm9sZGVyID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblx0XHR0aGlzLmNsZWFyaW5nUHJvY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY2xlYXJpbmdFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5mb2xkZXJGdWxsTmFtZUZvckNsZWFyID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZm9sZGVyID0gdGhpcy5zZWxlY3RlZEZvbGRlcigpO1xuXHRcdFx0cmV0dXJuIGZvbGRlciA/IGZvbGRlci5wcmludGFibGVGdWxsTmFtZSgpIDogJyc7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmZvbGRlck5hbWVGb3JDbGVhciA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IGZvbGRlciA9IHRoaXMuc2VsZWN0ZWRGb2xkZXIoKTtcblx0XHRcdHJldHVybiBmb2xkZXIgPyBmb2xkZXIubG9jYWxOYW1lKCkgOiAnJztcblx0XHR9KTtcblxuXHRcdHRoaXMuZGFuZ2VyRGVzY0h0bWwgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0aTE4bignUE9QVVBTX0NMRUFSX0ZPTERFUi9EQU5HRVJfREVTQ19IVE1MXzEnLCB7ICdGT0xERVInOiB0aGlzLmZvbGRlck5hbWVGb3JDbGVhcigpIH0pXG5cdFx0KTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiB7XG5cdFx0Y29uc3QgZm9sZGVyID0gc2VsZi5zZWxlY3RlZEZvbGRlcigpLFxuXHRcdFx0aXNDbGVhcmluZyA9IHNlbGYuY2xlYXJpbmdQcm9jZXNzKCk7XG5cblx0XHRyZXR1cm4gIWlzQ2xlYXJpbmcgJiYgbnVsbCAhPT0gZm9sZGVyO1xuXHR9KVxuXHRjbGVhckNvbW1hbmQoKSB7XG5cdFx0Y29uc3QgZm9sZGVyVG9DbGVhciA9IHRoaXMuc2VsZWN0ZWRGb2xkZXIoKTtcblx0XHRpZiAoZm9sZGVyVG9DbGVhcikge1xuXHRcdFx0TWVzc2FnZVN0b3JlLm1lc3NhZ2UobnVsbCk7XG5cdFx0XHRNZXNzYWdlU3RvcmUubWVzc2FnZUxpc3QoW10pO1xuXG5cdFx0XHR0aGlzLmNsZWFyaW5nUHJvY2Vzcyh0cnVlKTtcblxuXHRcdFx0Zm9sZGVyVG9DbGVhci5tZXNzYWdlQ291bnRBbGwoMCk7XG5cdFx0XHRmb2xkZXJUb0NsZWFyLm1lc3NhZ2VDb3VudFVucmVhZCgwKTtcblxuXHRcdFx0c2V0Rm9sZGVySGFzaChmb2xkZXJUb0NsZWFyLmZ1bGxOYW1lUmF3LCAnJyk7XG5cblx0XHRcdFJlbW90ZS5mb2xkZXJDbGVhcigocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRcdHRoaXMuY2xlYXJpbmdQcm9jZXNzKGZhbHNlKTtcblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0Z2V0QXBwKCkucmVsb2FkTWVzc2FnZUxpc3QodHJ1ZSk7XG5cdFx0XHRcdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuY2xlYXJpbmdFcnJvcihnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5jbGVhcmluZ0Vycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uTWFpbFNlcnZlckVycm9yKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LCBmb2xkZXJUb0NsZWFyLmZ1bGxOYW1lUmF3KTtcblx0XHR9XG5cdH1cblxuXHRjbGVhclBvcHVwKCkge1xuXHRcdHRoaXMuY2xlYXJpbmdQcm9jZXNzKGZhbHNlKTtcblx0XHR0aGlzLnNlbGVjdGVkRm9sZGVyKG51bGwpO1xuXHR9XG5cblx0b25TaG93KGZvbGRlcikge1xuXHRcdHRoaXMuY2xlYXJQb3B1cCgpO1xuXHRcdGlmIChmb2xkZXIpIHtcblx0XHRcdHRoaXMuc2VsZWN0ZWRGb2xkZXIoZm9sZGVyKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgRm9sZGVyQ2xlYXJQb3B1cFZpZXcsIEZvbGRlckNsZWFyUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgdHJpbSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgc2VhcmNoU3VidHJhY3RGb3JtYXREYXRlSGVscGVyIH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcblxuaW1wb3J0IE1lc3NhZ2VTdG9yZSBmcm9tICdTdG9yZXMvVXNlci9NZXNzYWdlJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0FkdmFuY2VkU2VhcmNoJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0FkdmFuY2VkU2VhcmNoJ1xufSlcbmNsYXNzIEFkdmFuY2VkU2VhcmNoUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmZyb21Gb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mcm9tID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50byA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc3ViamVjdCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudGV4dCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUgPSBrby5vYnNlcnZhYmxlKC0xKTtcblxuXHRcdHRoaXMuaGFzQXR0YWNobWVudCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3RhcnJlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudW5zZWVuID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnNlbGVjdGVkRGF0ZXMgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0eyBpZDogLTEsIG5hbWU6IGkxOG4oJ1NFQVJDSC9MQUJFTF9BRFZfREFURV9BTEwnKSB9LFxuXHRcdFx0XHR7IGlkOiAzLCBuYW1lOiBpMThuKCdTRUFSQ0gvTEFCRUxfQURWX0RBVEVfM19EQVlTJykgfSxcblx0XHRcdFx0eyBpZDogNywgbmFtZTogaTE4bignU0VBUkNIL0xBQkVMX0FEVl9EQVRFXzdfREFZUycpIH0sXG5cdFx0XHRcdHsgaWQ6IDMwLCBuYW1lOiBpMThuKCdTRUFSQ0gvTEFCRUxfQURWX0RBVEVfTU9OVEgnKSB9LFxuXHRcdFx0XHR7IGlkOiA5MCwgbmFtZTogaTE4bignU0VBUkNIL0xBQkVMX0FEVl9EQVRFXzNfTU9OVEhTJykgfSxcblx0XHRcdFx0eyBpZDogMTgwLCBuYW1lOiBpMThuKCdTRUFSQ0gvTEFCRUxfQURWX0RBVEVfNl9NT05USFMnKSB9LFxuXHRcdFx0XHR7IGlkOiAzNjUsIG5hbWU6IGkxOG4oJ1NFQVJDSC9MQUJFTF9BRFZfREFURV9ZRUFSJykgfVxuXHRcdFx0XTtcblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0c2VhcmNoQ29tbWFuZCgpIHtcblx0XHRjb25zdCBzZWFyY2ggPSB0aGlzLmJ1aWxkU2VhcmNoU3RyaW5nKCk7XG5cdFx0aWYgKCcnICE9PSBzZWFyY2gpIHtcblx0XHRcdE1lc3NhZ2VTdG9yZS5tYWluTWVzc2FnZUxpc3RTZWFyY2goc2VhcmNoKTtcblx0XHR9XG5cblx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0fVxuXG5cdHBhcnNlU2VhcmNoU3RyaW5nVmFsdWUoc2VhcmNoKSB7XG5cdFx0Y29uc3QgcGFydHMgPSAoc2VhcmNoIHx8ICcnKS5zcGxpdCgvW1xcc10rL2cpO1xuXHRcdF8uZWFjaChwYXJ0cywgKHBhcnQpID0+IHtcblx0XHRcdHN3aXRjaCAocGFydCkge1xuXHRcdFx0XHRjYXNlICdoYXM6YXR0YWNobWVudCc6XG5cdFx0XHRcdFx0dGhpcy5oYXNBdHRhY2htZW50KHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdpczp1bnNlZW4sZmxhZ2dlZCc6XG5cdFx0XHRcdFx0dGhpcy5zdGFycmVkKHRydWUpO1xuXHRcdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRcdGNhc2UgJ2lzOnVuc2Vlbic6XG5cdFx0XHRcdFx0dGhpcy51bnNlZW4odHJ1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGJ1aWxkU2VhcmNoU3RyaW5nVmFsdWUodmFsdWUpIHtcblx0XHRpZiAoLTEgPCB2YWx1ZS5pbmRleE9mKCcgJykpIHtcblx0XHRcdHZhbHVlID0gJ1wiJyArIHZhbHVlICsgJ1wiJztcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0YnVpbGRTZWFyY2hTdHJpbmcoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW10sXG5cdFx0XHRmcm9tXyA9IHRyaW0odGhpcy5mcm9tKCkpLFxuXHRcdFx0dG8gPSB0cmltKHRoaXMudG8oKSksXG5cdFx0XHRzdWJqZWN0ID0gdHJpbSh0aGlzLnN1YmplY3QoKSksXG5cdFx0XHR0ZXh0ID0gdHJpbSh0aGlzLnRleHQoKSksXG5cdFx0XHRpc1BhcnQgPSBbXSxcblx0XHRcdGhhc1BhcnQgPSBbXTtcblxuXHRcdGlmIChmcm9tXyAmJiAnJyAhPT0gZnJvbV8pIHtcblx0XHRcdHJlc3VsdC5wdXNoKCdmcm9tOicgKyB0aGlzLmJ1aWxkU2VhcmNoU3RyaW5nVmFsdWUoZnJvbV8pKTtcblx0XHR9XG5cblx0XHRpZiAodG8gJiYgJycgIT09IHRvKSB7XG5cdFx0XHRyZXN1bHQucHVzaCgndG86JyArIHRoaXMuYnVpbGRTZWFyY2hTdHJpbmdWYWx1ZSh0bykpO1xuXHRcdH1cblxuXHRcdGlmIChzdWJqZWN0ICYmICcnICE9PSBzdWJqZWN0KSB7XG5cdFx0XHRyZXN1bHQucHVzaCgnc3ViamVjdDonICsgdGhpcy5idWlsZFNlYXJjaFN0cmluZ1ZhbHVlKHN1YmplY3QpKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5oYXNBdHRhY2htZW50KCkpIHtcblx0XHRcdGhhc1BhcnQucHVzaCgnYXR0YWNobWVudCcpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnVuc2VlbigpKSB7XG5cdFx0XHRpc1BhcnQucHVzaCgndW5zZWVuJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc3RhcnJlZCgpKSB7XG5cdFx0XHRpc1BhcnQucHVzaCgnZmxhZ2dlZCcpO1xuXHRcdH1cblxuXHRcdGlmICgwIDwgaGFzUGFydC5sZW5ndGgpIHtcblx0XHRcdHJlc3VsdC5wdXNoKCdoYXM6JyArIGhhc1BhcnQuam9pbignLCcpKTtcblx0XHR9XG5cblx0XHRpZiAoMCA8IGlzUGFydC5sZW5ndGgpIHtcblx0XHRcdHJlc3VsdC5wdXNoKCdpczonICsgaXNQYXJ0LmpvaW4oJywnKSk7XG5cdFx0fVxuXG5cdFx0aWYgKC0xIDwgdGhpcy5zZWxlY3RlZERhdGVWYWx1ZSgpKSB7XG5cdFx0XHRyZXN1bHQucHVzaCgnZGF0ZTonICsgc2VhcmNoU3VidHJhY3RGb3JtYXREYXRlSGVscGVyKHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUoKSkgKyAnLycpO1xuXHRcdH1cblxuXHRcdGlmICh0ZXh0ICYmICcnICE9PSB0ZXh0KSB7XG5cdFx0XHRyZXN1bHQucHVzaCgndGV4dDonICsgdGhpcy5idWlsZFNlYXJjaFN0cmluZ1ZhbHVlKHRleHQpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJpbShyZXN1bHQuam9pbignICcpKTtcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5mcm9tKCcnKTtcblx0XHR0aGlzLnRvKCcnKTtcblx0XHR0aGlzLnN1YmplY3QoJycpO1xuXHRcdHRoaXMudGV4dCgnJyk7XG5cblx0XHR0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlKC0xKTtcblx0XHR0aGlzLmhhc0F0dGFjaG1lbnQoZmFsc2UpO1xuXHRcdHRoaXMuc3RhcnJlZChmYWxzZSk7XG5cdFx0dGhpcy51bnNlZW4oZmFsc2UpO1xuXG5cdFx0dGhpcy5mcm9tRm9jdXModHJ1ZSk7XG5cdH1cblxuXHRvblNob3coc2VhcmNoKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cdFx0dGhpcy5wYXJzZVNlYXJjaFN0cmluZ1ZhbHVlKHNlYXJjaCk7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0dGhpcy5mcm9tRm9jdXModHJ1ZSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQWR2YW5jZWRTZWFyY2hQb3B1cFZpZXcsIEFkdmFuY2VkU2VhcmNoUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Ud29GYWN0b3JUZXN0Jyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc1R3b0ZhY3RvclRlc3QnXG59KVxuY2xhc3MgVHdvRmFjdG9yVGVzdFBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5jb2RlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jb2RlLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmNvZGUuc3RhdHVzID0ga28ub2JzZXJ2YWJsZShudWxsKTtcblxuXHRcdHRoaXMua29UZXN0ZWRUcmlnZ2VyID0gbnVsbDtcblxuXHRcdHRoaXMudGVzdGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+ICcnICE9PSBzZWxmLmNvZGUoKSAmJiAhc2VsZi50ZXN0aW5nKCkpXG5cdHRlc3RDb2RlQ29tbWFuZCgpIHtcblx0XHR0aGlzLnRlc3RpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLnRlc3RUd29GYWN0b3IoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblx0XHRcdHRoaXMuY29kZS5zdGF0dXMoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgISFkYXRhLlJlc3VsdCk7XG5cblx0XHRcdGlmICh0aGlzLmtvVGVzdGVkVHJpZ2dlciAmJiB0aGlzLmNvZGUuc3RhdHVzKCkpIHtcblx0XHRcdFx0dGhpcy5rb1Rlc3RlZFRyaWdnZXIodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcy5jb2RlKCkpO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmNvZGUoJycpO1xuXHRcdHRoaXMuY29kZS5mb2N1c2VkKGZhbHNlKTtcblx0XHR0aGlzLmNvZGUuc3RhdHVzKG51bGwpO1xuXHRcdHRoaXMudGVzdGluZyhmYWxzZSk7XG5cblx0XHR0aGlzLmtvVGVzdGVkVHJpZ2dlciA9IG51bGw7XG5cdH1cblxuXHRvblNob3coa29UZXN0ZWRUcmlnZ2VyKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cblx0XHR0aGlzLmtvVGVzdGVkVHJpZ2dlciA9IGtvVGVzdGVkVHJpZ2dlcjtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHRpZiAoIWJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdHRoaXMuY29kZS5mb2N1c2VkKHRydWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBUd29GYWN0b3JUZXN0UG9wdXBWaWV3LCBUd29GYWN0b3JUZXN0UG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyB0cmltLCBkZWxlZ2F0ZVJ1biwgbG9nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IFBncFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1BncCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvQWRkT3BlblBncEtleScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNBZGRPcGVuUGdwS2V5J1xufSlcbmNsYXNzIEFkZE9wZW5QZ3BLZXlQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMua2V5ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5rZXkuZm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmtleS5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMua2V5LmVycm9yTWVzc2FnZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5rZXkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMua2V5LmVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMua2V5LmVycm9yTWVzc2FnZSgnJyk7XG5cdFx0fSk7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGFkZE9wZW5QZ3BLZXlDb21tYW5kKCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG5cdFx0Y29uc3QgcmVnID0gL1stXXszLDZ9QkVHSU5bXFxzXVBHUFtcXHNdKFBSSVZBVEV8UFVCTElDKVtcXHNdS0VZW1xcc11CTE9DS1stXXszLDZ9W1xcc1xcU10rP1stXXszLDZ9RU5EW1xcc11QR1BbXFxzXShQUklWQVRFfFBVQkxJQylbXFxzXUtFWVtcXHNdQkxPQ0tbLV17Myw2fS9naSxcblx0XHRcdG9wZW5wZ3BLZXlyaW5nID0gUGdwU3RvcmUub3BlbnBncEtleXJpbmc7XG5cblx0XHRsZXQga2V5VHJpbW1lZCA9IHRyaW0odGhpcy5rZXkoKSk7XG5cblx0XHRpZiAoL1tcXG5dLy50ZXN0KGtleVRyaW1tZWQpKSB7XG5cdFx0XHRrZXlUcmltbWVkID0ga2V5VHJpbW1lZC5yZXBsYWNlKC9bXFxyXSsvZywgJycpLnJlcGxhY2UoL1tcXG5dezIsfS9nLCAnXFxuXFxuJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5rZXkuZXJyb3IoJycgPT09IGtleVRyaW1tZWQpO1xuXHRcdHRoaXMua2V5LmVycm9yTWVzc2FnZSgnJyk7XG5cblx0XHRpZiAoIW9wZW5wZ3BLZXlyaW5nIHx8IHRoaXMua2V5LmVycm9yKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRsZXQgbWF0Y2ggPSBudWxsLFxuXHRcdFx0Y291bnQgPSAzMCxcblx0XHRcdGRvbmUgPSBmYWxzZTtcblxuXHRcdGRvIHtcblx0XHRcdG1hdGNoID0gcmVnLmV4ZWMoa2V5VHJpbW1lZCk7XG5cdFx0XHRpZiAobWF0Y2ggJiYgMCA8IGNvdW50KSB7XG5cdFx0XHRcdGlmIChtYXRjaFswXSAmJiBtYXRjaFsxXSAmJiBtYXRjaFsyXSAmJiBtYXRjaFsxXSA9PT0gbWF0Y2hbMl0pIHtcblx0XHRcdFx0XHRsZXQgZXJyID0gbnVsbDtcblx0XHRcdFx0XHRpZiAoJ1BSSVZBVEUnID09PSBtYXRjaFsxXSkge1xuXHRcdFx0XHRcdFx0ZXJyID0gb3BlbnBncEtleXJpbmcucHJpdmF0ZUtleXMuaW1wb3J0S2V5KG1hdGNoWzBdKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCdQVUJMSUMnID09PSBtYXRjaFsxXSkge1xuXHRcdFx0XHRcdFx0ZXJyID0gb3BlbnBncEtleXJpbmcucHVibGljS2V5cy5pbXBvcnRLZXkobWF0Y2hbMF0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRcdHRoaXMua2V5LmVycm9yKHRydWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5rZXkuZXJyb3JNZXNzYWdlKGVyciAmJiBlcnJbMF0gPyAnJyArIGVyclswXSA6ICcnKTtcblx0XHRcdFx0XHRcdGxvZyhlcnIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvdW50IC09IDE7XG5cdFx0XHRcdGRvbmUgPSBmYWxzZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRvbmUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gd2hpbGUgKCFkb25lKTtcblxuXHRcdG9wZW5wZ3BLZXlyaW5nLnN0b3JlKCk7XG5cblx0XHRnZXRBcHAoKS5yZWxvYWRPcGVuUGdwS2V5cygpO1xuXG5cdFx0aWYgKHRoaXMua2V5LmVycm9yKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRkZWxlZ2F0ZVJ1bih0aGlzLCAnY2FuY2VsQ29tbWFuZCcpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmtleSgnJyk7XG5cdFx0dGhpcy5rZXkuZXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMua2V5LmVycm9yTWVzc2FnZSgnJyk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0dGhpcy5rZXkuZm9jdXModHJ1ZSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQWRkT3BlblBncEtleVBvcHVwVmlldywgQWRkT3BlblBncEtleVBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyB0cmltLCBsb2csIGRlbGVnYXRlUnVuLCBwSW50IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IFBncFN0b3JlIGZyb20gJ1N0b3Jlcy9Vc2VyL1BncCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL1VzZXInO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvTmV3T3BlblBncEtleScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNOZXdPcGVuUGdwS2V5J1xufSlcbmNsYXNzIE5ld09wZW5QZ3BLZXlQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZW1haWwgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmVtYWlsLmZvY3VzID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5lbWFpbC5lcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMua2V5Qml0TGVuZ3RoID0ga28ub2JzZXJ2YWJsZShNYWdpY3MuQml0TGVuZ3RoMjA0OCk7XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnN1Ym1pdEVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmVtYWlsLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmVtYWlsLmVycm9yKGZhbHNlKTtcblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0Z2VuZXJhdGVPcGVuUGdwS2V5Q29tbWFuZCgpIHtcblx0XHRjb25zdCB1c2VySWQgPSB7fSxcblx0XHRcdG9wZW5wZ3BLZXlyaW5nID0gUGdwU3RvcmUub3BlbnBncEtleXJpbmc7XG5cblx0XHR0aGlzLmVtYWlsLmVycm9yKCcnID09PSB0cmltKHRoaXMuZW1haWwoKSkpO1xuXHRcdGlmICghb3BlbnBncEtleXJpbmcgfHwgdGhpcy5lbWFpbC5lcnJvcigpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dXNlcklkLmVtYWlsID0gdGhpcy5lbWFpbCgpO1xuXHRcdGlmICgnJyAhPT0gdGhpcy5uYW1lKCkpIHtcblx0XHRcdHVzZXJJZC5uYW1lID0gdGhpcy5uYW1lKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KHRydWUpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IoJycpO1xuXG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRQZ3BTdG9yZS5vcGVucGdwXG5cdFx0XHRcdFx0LmdlbmVyYXRlS2V5KHtcblx0XHRcdFx0XHRcdHVzZXJJZHM6IFt1c2VySWRdLFxuXHRcdFx0XHRcdFx0bnVtQml0czogcEludCh0aGlzLmtleUJpdExlbmd0aCgpKSxcblx0XHRcdFx0XHRcdHBhc3NwaHJhc2U6IHRyaW0odGhpcy5wYXNzd29yZCgpKVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnRoZW4oKGtleVBhaXIpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cblx0XHRcdFx0XHRcdGlmIChrZXlQYWlyICYmIGtleVBhaXIucHJpdmF0ZUtleUFybW9yZWQpIHtcblx0XHRcdFx0XHRcdFx0b3BlbnBncEtleXJpbmcucHJpdmF0ZUtleXMuaW1wb3J0S2V5KGtleVBhaXIucHJpdmF0ZUtleUFybW9yZWQpO1xuXHRcdFx0XHRcdFx0XHRvcGVucGdwS2V5cmluZy5wdWJsaWNLZXlzLmltcG9ydEtleShrZXlQYWlyLnB1YmxpY0tleUFybW9yZWQpO1xuXG5cdFx0XHRcdFx0XHRcdG9wZW5wZ3BLZXlyaW5nLnN0b3JlKCk7XG5cblx0XHRcdFx0XHRcdFx0Z2V0QXBwKCkucmVsb2FkT3BlblBncEtleXMoKTtcblx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2NhbmNlbENvbW1hbmQnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHRcdFx0XHRcdHRoaXMuc2hvd0Vycm9yKGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHR0aGlzLnNob3dFcnJvcihlKTtcblx0XHRcdH1cblx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0c2hvd0Vycm9yKGUpIHtcblx0XHRsb2coZSk7XG5cdFx0aWYgKGUgJiYgZS5tZXNzYWdlKSB7XG5cdFx0XHR0aGlzLnN1Ym1pdEVycm9yKGUubWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLm5hbWUoJycpO1xuXHRcdHRoaXMucGFzc3dvcmQoJycpO1xuXG5cdFx0dGhpcy5lbWFpbCgnJyk7XG5cdFx0dGhpcy5lbWFpbC5lcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5rZXlCaXRMZW5ndGgoTWFnaWNzLkJpdExlbmd0aDIwNDgpO1xuXG5cdFx0dGhpcy5zdWJtaXRFcnJvcignJyk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0dGhpcy5lbWFpbC5mb2N1cyh0cnVlKTtcblx0fVxufVxuXG5leHBvcnQgeyBOZXdPcGVuUGdwS2V5UG9wdXBWaWV3LCBOZXdPcGVuUGdwS2V5UG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCB7IEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHNlbGVjdEVsZW1lbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBwb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvVmlld09wZW5QZ3BLZXknLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzVmlld09wZW5QZ3BLZXknXG59KVxuY2xhc3MgVmlld09wZW5QZ3BLZXlQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMua2V5ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5rZXlEb20gPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuXG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuUG9wdXBWaWV3T3BlblBHUDtcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy5rZXkoJycpO1xuXHR9XG5cblx0c2VsZWN0S2V5KCkge1xuXHRcdGNvbnN0IGVsID0gdGhpcy5rZXlEb20oKTtcblx0XHRpZiAoZWwpIHtcblx0XHRcdHNlbGVjdEVsZW1lbnQoZWwpO1xuXHRcdH1cblx0fVxuXG5cdG9uU2hvdyhvcGVuUGdwS2V5KSB7XG5cdFx0dGhpcy5jbGVhclBvcHVwKCk7XG5cblx0XHRpZiAob3BlblBncEtleSkge1xuXHRcdFx0dGhpcy5rZXkob3BlblBncEtleS5hcm1vcik7XG5cdFx0fVxuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRrZXkoJ2N0cmwrYSwgY29tbWFuZCthJywgS2V5U3RhdGUuUG9wdXBWaWV3T3BlblBHUCwgKCkgPT4ge1xuXHRcdFx0dGhpcy5zZWxlY3RLZXkoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBWaWV3T3BlblBncEtleVBvcHVwVmlldywgVmlld09wZW5QZ3BLZXlQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IFByb21pc2VzIGZyb20gJ1Byb21pc2VzL1VzZXIvQWpheCc7XG5cbmltcG9ydCB7IHBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9XZWxjb21lUGFnZScsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNXZWxjb21lUGFnZSdcbn0pXG5jbGFzcyBXZWxjb21lUGFnZVBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy53ZWxjb21lUGFnZVVSTCA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5jbG9zZUZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0fVxuXG5cdGNsZWFyUG9wdXAoKSB7XG5cdFx0dGhpcy53ZWxjb21lUGFnZVVSTCgnJyk7XG5cdFx0dGhpcy5jbG9zZUZvY3VzZWQoZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVXJsXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0b25TaG93KHNVcmwpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdHRoaXMud2VsY29tZVBhZ2VVUkwoc1VybCk7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0dGhpcy5jbG9zZUZvY3VzZWQodHJ1ZSk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0UHJvbWlzZXMud2VsY29tZUNsb3NlKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgV2VsY29tZVBhZ2VQb3B1cFZpZXcsIFdlbGNvbWVQYWdlUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiJdLCJzb3VyY2VSb290IjoiIn0=

bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net