survey-react-ui 1.9.12 → 1.9.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * surveyjs - Survey JavaScript library v1.9.12
2
+ * surveyjs - Survey JavaScript library v1.9.13
3
3
  * Copyright (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
@@ -101,11 +101,11 @@ return /******/ (function(modules) { // webpackBootstrap
101
101
  /************************************************************************/
102
102
  /******/ ({
103
103
 
104
- /***/ "./src/entries/react-ui.ts":
105
- /*!*********************************!*\
106
- !*** ./src/entries/react-ui.ts ***!
107
- \*********************************/
108
- /*! exports provided: Survey, attachKey2click, Model, WindowModel, SurveyNavigationBase, SurveyTimerPanel, SurveyNavigation, SurveyPage, SurveyRow, SurveyPanel, SurveyFlowPanel, SurveyQuestion, SurveyElementErrors, SurveyQuestionAndErrorsCell, SurveyElementBase, SurveyQuestionElementBase, SurveyQuestionCommentItem, SurveyQuestionComment, SurveyQuestionCheckbox, SurveyQuestionCheckboxItem, SurveyQuestionRanking, SurveyQuestionRankingItem, SurveyQuestionDropdown, SurveyQuestionMatrix, SurveyQuestionMatrixRow, SurveyQuestionHtml, SurveyQuestionFile, SurveyQuestionMultipleText, SurveyQuestionRadiogroup, SurveyQuestionText, SurveyQuestionBoolean, SurveyQuestionBooleanCheckbox, SurveyQuestionEmpty, SurveyQuestionMatrixDropdownCell, SurveyQuestionMatrixDropdown, SurveyQuestionMatrixDynamic, SurveyQuestionPanelDynamic, SurveyProgress, SurveyProgressButtons, SurveyQuestionRating, SurveyQuestionExpression, SurveyWindow, ReactQuestionFactory, ReactElementFactory, SurveyQuestionImagePicker, SurveyQuestionImage, SurveyQuestionSignaturePad, SurveyQuestionButtonGroup, SurveyQuestionCustom, SurveyQuestionComposite, DefaultTitle, Popup, List, TitleActions, TitleElement, SurveyActionBar, LogoImage, SurveyHeader, SvgIcon, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon, MatrixRow, Skeleton, SurveyLocStringViewer, SurveyLocStringEditor, ResponsivityManager, VerticalResponsivityManager, unwrap */
104
+ /***/ "./src/entries/react-ui-model.ts":
105
+ /*!***************************************!*\
106
+ !*** ./src/entries/react-ui-model.ts ***!
107
+ \***************************************/
108
+ /*! exports provided: Survey, attachKey2click, ReactSurveyElementsWrapper, SurveyNavigationBase, SurveyTimerPanel, SurveyNavigation, SurveyPage, SurveyRow, SurveyPanel, SurveyFlowPanel, SurveyQuestion, SurveyElementErrors, SurveyQuestionAndErrorsCell, SurveyElementBase, SurveyQuestionElementBase, SurveyQuestionCommentItem, SurveyQuestionComment, SurveyQuestionCheckbox, SurveyQuestionCheckboxItem, SurveyQuestionRanking, SurveyQuestionRankingItem, SurveyQuestionDropdown, SurveyQuestionMatrix, SurveyQuestionMatrixRow, SurveyQuestionHtml, SurveyQuestionFile, SurveyQuestionMultipleText, SurveyQuestionRadiogroup, SurveyQuestionText, SurveyQuestionBoolean, SurveyQuestionBooleanCheckbox, SurveyQuestionEmpty, SurveyQuestionMatrixDropdownCell, SurveyQuestionMatrixDropdown, SurveyQuestionMatrixDynamic, SurveyQuestionPanelDynamic, SurveyProgress, SurveyProgressButtons, SurveyQuestionRating, SurveyQuestionExpression, SurveyWindow, ReactQuestionFactory, ReactElementFactory, SurveyQuestionImagePicker, SurveyQuestionImage, SurveyQuestionSignaturePad, SurveyQuestionButtonGroup, SurveyQuestionCustom, SurveyQuestionComposite, DefaultTitle, Popup, List, TitleActions, TitleElement, SurveyActionBar, LogoImage, SurveyHeader, SvgIcon, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon, MatrixRow, Skeleton, SurveyLocStringViewer, SurveyLocStringEditor, ResponsivityManager, VerticalResponsivityManager, unwrap */
109
109
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
110
110
 
111
111
  "use strict";
@@ -116,9 +116,7 @@ __webpack_require__.r(__webpack_exports__);
116
116
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "attachKey2click", function() { return _react_reactSurvey__WEBPACK_IMPORTED_MODULE_0__["attachKey2click"]; });
117
117
 
118
118
  /* harmony import */ var _react_reactsurveymodel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../react/reactsurveymodel */ "./src/react/reactsurveymodel.tsx");
119
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Model", function() { return _react_reactsurveymodel__WEBPACK_IMPORTED_MODULE_1__["ReactSurveyModel"]; });
120
-
121
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "WindowModel", function() { return _react_reactsurveymodel__WEBPACK_IMPORTED_MODULE_1__["ReactWindowModel"]; });
119
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReactSurveyElementsWrapper", function() { return _react_reactsurveymodel__WEBPACK_IMPORTED_MODULE_1__["ReactSurveyElementsWrapper"]; });
122
120
 
123
121
  /* harmony import */ var _react_reactSurveyNavigationBase__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../react/reactSurveyNavigationBase */ "./src/react/reactSurveyNavigationBase.tsx");
124
122
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyNavigationBase", function() { return _react_reactSurveyNavigationBase__WEBPACK_IMPORTED_MODULE_2__["SurveyNavigationBase"]; });
@@ -362,8 +360,6 @@ __webpack_require__.r(__webpack_exports__);
362
360
 
363
361
 
364
362
 
365
-
366
-
367
363
 
368
364
 
369
365
 
@@ -371,6 +367,158 @@ __webpack_require__.r(__webpack_exports__);
371
367
  //export {default as SurveyQuestionDate} from "../plugins/react/reactquestiondate";
372
368
 
373
369
 
370
+ /***/ }),
371
+
372
+ /***/ "./src/entries/react-ui.ts":
373
+ /*!*********************************!*\
374
+ !*** ./src/entries/react-ui.ts ***!
375
+ \*********************************/
376
+ /*! exports provided: Survey, attachKey2click, ReactSurveyElementsWrapper, SurveyNavigationBase, SurveyTimerPanel, SurveyNavigation, SurveyPage, SurveyRow, SurveyPanel, SurveyFlowPanel, SurveyQuestion, SurveyElementErrors, SurveyQuestionAndErrorsCell, SurveyElementBase, SurveyQuestionElementBase, SurveyQuestionCommentItem, SurveyQuestionComment, SurveyQuestionCheckbox, SurveyQuestionCheckboxItem, SurveyQuestionRanking, SurveyQuestionRankingItem, SurveyQuestionDropdown, SurveyQuestionMatrix, SurveyQuestionMatrixRow, SurveyQuestionHtml, SurveyQuestionFile, SurveyQuestionMultipleText, SurveyQuestionRadiogroup, SurveyQuestionText, SurveyQuestionBoolean, SurveyQuestionBooleanCheckbox, SurveyQuestionEmpty, SurveyQuestionMatrixDropdownCell, SurveyQuestionMatrixDropdown, SurveyQuestionMatrixDynamic, SurveyQuestionPanelDynamic, SurveyProgress, SurveyProgressButtons, SurveyQuestionRating, SurveyQuestionExpression, SurveyWindow, ReactQuestionFactory, ReactElementFactory, SurveyQuestionImagePicker, SurveyQuestionImage, SurveyQuestionSignaturePad, SurveyQuestionButtonGroup, SurveyQuestionCustom, SurveyQuestionComposite, DefaultTitle, Popup, List, TitleActions, TitleElement, SurveyActionBar, LogoImage, SurveyHeader, SvgIcon, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon, MatrixRow, Skeleton, SurveyLocStringViewer, SurveyLocStringEditor, ResponsivityManager, VerticalResponsivityManager, unwrap */
377
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
378
+
379
+ "use strict";
380
+ __webpack_require__.r(__webpack_exports__);
381
+ /* harmony import */ var _react_ui_model__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./react-ui-model */ "./src/entries/react-ui-model.ts");
382
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Survey", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["Survey"]; });
383
+
384
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "attachKey2click", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["attachKey2click"]; });
385
+
386
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReactSurveyElementsWrapper", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["ReactSurveyElementsWrapper"]; });
387
+
388
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyNavigationBase", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyNavigationBase"]; });
389
+
390
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyTimerPanel", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyTimerPanel"]; });
391
+
392
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyNavigation", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyNavigation"]; });
393
+
394
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyPage", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyPage"]; });
395
+
396
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyRow", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyRow"]; });
397
+
398
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyPanel", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyPanel"]; });
399
+
400
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyFlowPanel", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyFlowPanel"]; });
401
+
402
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestion", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestion"]; });
403
+
404
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyElementErrors", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyElementErrors"]; });
405
+
406
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionAndErrorsCell", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionAndErrorsCell"]; });
407
+
408
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyElementBase", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyElementBase"]; });
409
+
410
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionElementBase", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionElementBase"]; });
411
+
412
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCommentItem", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionCommentItem"]; });
413
+
414
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionComment", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionComment"]; });
415
+
416
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCheckbox", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionCheckbox"]; });
417
+
418
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCheckboxItem", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionCheckboxItem"]; });
419
+
420
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionRanking", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionRanking"]; });
421
+
422
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionRankingItem", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionRankingItem"]; });
423
+
424
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionDropdown", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionDropdown"]; });
425
+
426
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrix", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionMatrix"]; });
427
+
428
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixRow", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionMatrixRow"]; });
429
+
430
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionHtml", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionHtml"]; });
431
+
432
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionFile", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionFile"]; });
433
+
434
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMultipleText", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionMultipleText"]; });
435
+
436
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionRadiogroup", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionRadiogroup"]; });
437
+
438
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionText", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionText"]; });
439
+
440
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionBoolean", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionBoolean"]; });
441
+
442
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionBooleanCheckbox", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionBooleanCheckbox"]; });
443
+
444
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEmpty", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionEmpty"]; });
445
+
446
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDropdownCell", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionMatrixDropdownCell"]; });
447
+
448
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDropdown", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionMatrixDropdown"]; });
449
+
450
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDynamic", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionMatrixDynamic"]; });
451
+
452
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionPanelDynamic", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionPanelDynamic"]; });
453
+
454
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyProgress", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyProgress"]; });
455
+
456
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyProgressButtons", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyProgressButtons"]; });
457
+
458
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionRating", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionRating"]; });
459
+
460
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionExpression", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionExpression"]; });
461
+
462
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyWindow", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyWindow"]; });
463
+
464
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReactQuestionFactory", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["ReactQuestionFactory"]; });
465
+
466
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReactElementFactory", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["ReactElementFactory"]; });
467
+
468
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionImagePicker", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionImagePicker"]; });
469
+
470
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionImage", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionImage"]; });
471
+
472
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionSignaturePad", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionSignaturePad"]; });
473
+
474
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionButtonGroup", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionButtonGroup"]; });
475
+
476
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionCustom", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionCustom"]; });
477
+
478
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionComposite", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionComposite"]; });
479
+
480
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DefaultTitle", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["DefaultTitle"]; });
481
+
482
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Popup", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["Popup"]; });
483
+
484
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "List", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["List"]; });
485
+
486
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TitleActions", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["TitleActions"]; });
487
+
488
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TitleElement", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["TitleElement"]; });
489
+
490
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyActionBar", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyActionBar"]; });
491
+
492
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LogoImage", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["LogoImage"]; });
493
+
494
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyHeader", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyHeader"]; });
495
+
496
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SvgIcon", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SvgIcon"]; });
497
+
498
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDynamicRemoveButton", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionMatrixDynamicRemoveButton"]; });
499
+
500
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDetailButton", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionMatrixDetailButton"]; });
501
+
502
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionMatrixDynamicDragDropIcon", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionMatrixDynamicDragDropIcon"]; });
503
+
504
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "MatrixRow", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["MatrixRow"]; });
505
+
506
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Skeleton", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["Skeleton"]; });
507
+
508
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyLocStringViewer", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyLocStringViewer"]; });
509
+
510
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyLocStringEditor", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyLocStringEditor"]; });
511
+
512
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ResponsivityManager", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["ResponsivityManager"]; });
513
+
514
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VerticalResponsivityManager", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["VerticalResponsivityManager"]; });
515
+
516
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unwrap", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["unwrap"]; });
517
+
518
+
519
+ //export * from "./core-export";
520
+
521
+
374
522
  /***/ }),
375
523
 
376
524
  /***/ "./src/react/boolean-checkbox.tsx":
@@ -2558,6 +2706,7 @@ __webpack_require__.r(__webpack_exports__);
2558
2706
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2559
2707
  /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
2560
2708
  /* harmony import */ var _reactquestion_factory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactquestion_factory */ "./src/react/reactquestion_factory.tsx");
2709
+ /* harmony import */ var _reactsurveymodel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactsurveymodel */ "./src/react/reactsurveymodel.tsx");
2561
2710
  var __extends = (undefined && undefined.__extends) || (function () {
2562
2711
  var extendStatics = function (d, b) {
2563
2712
  extendStatics = Object.setPrototypeOf ||
@@ -2576,6 +2725,7 @@ var __extends = (undefined && undefined.__extends) || (function () {
2576
2725
 
2577
2726
 
2578
2727
 
2728
+
2579
2729
  var SurveyQuestionImagePicker = /** @class */ (function (_super) {
2580
2730
  __extends(SurveyQuestionImagePicker, _super);
2581
2731
  function SurveyQuestionImagePicker(props) {
@@ -2652,7 +2802,7 @@ var SurveyQuestionImagePicker = /** @class */ (function (_super) {
2652
2802
  var survey = this.question.survey;
2653
2803
  var wrappedItem = null;
2654
2804
  if (!!survey) {
2655
- wrappedItem = survey.wrapItemValue(renderedItem, this.question, item);
2805
+ wrappedItem = _reactsurveymodel__WEBPACK_IMPORTED_MODULE_3__["ReactSurveyElementsWrapper"].wrapItemValue(survey, renderedItem, this.question, item);
2656
2806
  }
2657
2807
  return wrappedItem !== null && wrappedItem !== void 0 ? wrappedItem : renderedItem;
2658
2808
  };
@@ -2900,8 +3050,9 @@ __webpack_require__.r(__webpack_exports__);
2900
3050
  /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
2901
3051
  /* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./element-factory */ "./src/react/element-factory.tsx");
2902
3052
  /* harmony import */ var _panel_base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./panel-base */ "./src/react/panel-base.tsx");
2903
- /* harmony import */ var _components_action_bar_action_bar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/action-bar/action-bar */ "./src/react/components/action-bar/action-bar.tsx");
2904
- /* harmony import */ var _components_title_title_element__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/title/title-element */ "./src/react/components/title/title-element.tsx");
3053
+ /* harmony import */ var _reactsurveymodel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./reactsurveymodel */ "./src/react/reactsurveymodel.tsx");
3054
+ /* harmony import */ var _components_action_bar_action_bar__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/action-bar/action-bar */ "./src/react/components/action-bar/action-bar.tsx");
3055
+ /* harmony import */ var _components_title_title_element__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/title/title-element */ "./src/react/components/title/title-element.tsx");
2905
3056
  var __extends = (undefined && undefined.__extends) || (function () {
2906
3057
  var extendStatics = function (d, b) {
2907
3058
  extendStatics = Object.setPrototypeOf ||
@@ -2924,6 +3075,7 @@ var __extends = (undefined && undefined.__extends) || (function () {
2924
3075
 
2925
3076
 
2926
3077
 
3078
+
2927
3079
  var SurveyPanel = /** @class */ (function (_super) {
2928
3080
  __extends(SurveyPanel, _super);
2929
3081
  function SurveyPanel(props) {
@@ -2971,7 +3123,7 @@ var SurveyPanel = /** @class */ (function (_super) {
2971
3123
  var survey = this.panel.survey;
2972
3124
  var wrapper;
2973
3125
  if (survey) {
2974
- wrapper = survey.wrapElement(element, this.panel);
3126
+ wrapper = _reactsurveymodel__WEBPACK_IMPORTED_MODULE_5__["ReactSurveyElementsWrapper"].wrapElement(survey, element, this.panel);
2975
3127
  }
2976
3128
  return wrapper !== null && wrapper !== void 0 ? wrapper : element;
2977
3129
  };
@@ -2984,7 +3136,7 @@ var SurveyPanel = /** @class */ (function (_super) {
2984
3136
  SurveyPanel.prototype.renderTitle = function () {
2985
3137
  if (!this.panelBase.title)
2986
3138
  return null;
2987
- return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_title_title_element__WEBPACK_IMPORTED_MODULE_6__["TitleElement"], { element: this.panelBase });
3139
+ return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_title_title_element__WEBPACK_IMPORTED_MODULE_7__["TitleElement"], { element: this.panelBase });
2988
3140
  };
2989
3141
  SurveyPanel.prototype.renderDescription = function () {
2990
3142
  if (!this.panelBase.description)
@@ -2996,7 +3148,7 @@ var SurveyPanel = /** @class */ (function (_super) {
2996
3148
  var footerToolbar = this.panel.getFooterToolbar();
2997
3149
  if (!footerToolbar.hasActions)
2998
3150
  return null;
2999
- return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_action_bar_action_bar__WEBPACK_IMPORTED_MODULE_5__["SurveyActionBar"], { model: footerToolbar });
3151
+ return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_action_bar_action_bar__WEBPACK_IMPORTED_MODULE_6__["SurveyActionBar"], { model: footerToolbar });
3000
3152
  };
3001
3153
  return SurveyPanel;
3002
3154
  }(_panel_base__WEBPACK_IMPORTED_MODULE_4__["SurveyPanelBase"]));
@@ -3023,16 +3175,15 @@ __webpack_require__.r(__webpack_exports__);
3023
3175
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3024
3176
  /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! survey-core */ "survey-core");
3025
3177
  /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_1__);
3026
- /* harmony import */ var _reactsurveymodel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactsurveymodel */ "./src/react/reactsurveymodel.tsx");
3027
- /* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./page */ "./src/react/page.tsx");
3028
- /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
3029
- /* harmony import */ var _string_viewer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./string-viewer */ "./src/react/string-viewer.tsx");
3030
- /* harmony import */ var _components_survey_header_survey_header__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/survey-header/survey-header */ "./src/react/components/survey-header/survey-header.tsx");
3031
- /* harmony import */ var _reacttimerpanel__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./reacttimerpanel */ "./src/react/reacttimerpanel.tsx");
3032
- /* harmony import */ var _reactSurveyNavigation__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./reactSurveyNavigation */ "./src/react/reactSurveyNavigation.tsx");
3033
- /* harmony import */ var _reactquestion_factory__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactquestion_factory */ "./src/react/reactquestion_factory.tsx");
3034
- /* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./element-factory */ "./src/react/element-factory.tsx");
3035
- /* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/utils */ "./src/utils/utils.ts");
3178
+ /* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./page */ "./src/react/page.tsx");
3179
+ /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
3180
+ /* harmony import */ var _string_viewer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./string-viewer */ "./src/react/string-viewer.tsx");
3181
+ /* harmony import */ var _components_survey_header_survey_header__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/survey-header/survey-header */ "./src/react/components/survey-header/survey-header.tsx");
3182
+ /* harmony import */ var _reacttimerpanel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./reacttimerpanel */ "./src/react/reacttimerpanel.tsx");
3183
+ /* harmony import */ var _reactSurveyNavigation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./reactSurveyNavigation */ "./src/react/reactSurveyNavigation.tsx");
3184
+ /* harmony import */ var _reactquestion_factory__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./reactquestion_factory */ "./src/react/reactquestion_factory.tsx");
3185
+ /* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./element-factory */ "./src/react/element-factory.tsx");
3186
+ /* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/utils */ "./src/utils/utils.ts");
3036
3187
  var __extends = (undefined && undefined.__extends) || (function () {
3037
3188
  var extendStatics = function (d, b) {
3038
3189
  extendStatics = Object.setPrototypeOf ||
@@ -3059,7 +3210,6 @@ var __extends = (undefined && undefined.__extends) || (function () {
3059
3210
 
3060
3211
 
3061
3212
 
3062
-
3063
3213
  var Survey = /** @class */ (function (_super) {
3064
3214
  __extends(Survey, _super);
3065
3215
  function Survey(props) {
@@ -3068,8 +3218,6 @@ var Survey = /** @class */ (function (_super) {
3068
3218
  _this.handleTryAgainClick = _this.handleTryAgainClick.bind(_this);
3069
3219
  _this.createSurvey(props);
3070
3220
  _this.updateSurvey(props, {});
3071
- //set the first page
3072
- var dummy = _this.survey.currentPage;
3073
3221
  _this.rootRef = react__WEBPACK_IMPORTED_MODULE_0__["createRef"]();
3074
3222
  _this.rootNodeId = props.id || null;
3075
3223
  _this.rootNodeClassName = props.className || "";
@@ -3103,7 +3251,7 @@ var Survey = /** @class */ (function (_super) {
3103
3251
  _super.prototype.componentDidMount.call(this);
3104
3252
  var el = this.rootRef.current;
3105
3253
  if (el && this.survey)
3106
- this.survey.doAfterRenderSurvey(el);
3254
+ this.survey.afterRenderSurvey(el);
3107
3255
  if (this.survey) {
3108
3256
  this.survey.startTimerFromUI();
3109
3257
  }
@@ -3126,13 +3274,10 @@ var Survey = /** @class */ (function (_super) {
3126
3274
  else if (this.survey.state == "loading") {
3127
3275
  renderResult = this.renderLoading();
3128
3276
  }
3129
- else if (this.survey.state == "starting") {
3130
- renderResult = this.renderStartPage();
3131
- }
3132
3277
  else {
3133
3278
  renderResult = this.renderSurvey();
3134
3279
  }
3135
- var header = react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_survey_header_survey_header__WEBPACK_IMPORTED_MODULE_6__["SurveyHeader"], { survey: this.survey });
3280
+ var header = react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_survey_header_survey_header__WEBPACK_IMPORTED_MODULE_5__["SurveyHeader"], { survey: this.survey });
3136
3281
  var onSubmit = function (event) {
3137
3282
  event.preventDefault();
3138
3283
  };
@@ -3193,54 +3338,46 @@ var Survey = /** @class */ (function (_super) {
3193
3338
  var htmlValue = { __html: this.survey.processedLoadingHtml };
3194
3339
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { dangerouslySetInnerHTML: htmlValue, className: this.css.body }));
3195
3340
  };
3196
- Survey.prototype.renderStartPage = function () {
3197
- var startedPage = this.survey.startedPage
3198
- ? this.renderPage(this.survey.startedPage)
3199
- : null;
3200
- var pageId = this.survey.startedPage ? this.survey.startedPage.id : "";
3201
- return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"](react__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null,
3202
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { id: pageId, className: this.css.body },
3203
- this.renderNavigation("top"),
3204
- startedPage,
3205
- this.renderNavigation("bottom"))));
3206
- };
3207
3341
  Survey.prototype.renderSurvey = function () {
3208
- var currentPage = this.survey.currentPage
3209
- ? this.renderPage(this.survey.currentPage)
3342
+ var activePage = this.survey.activePage
3343
+ ? this.renderPage(this.survey.activePage)
3210
3344
  : null;
3211
- var pageId = this.survey.currentPage ? this.survey.currentPage.id : "";
3212
- var topProgress = this.survey.isShowProgressBarOnTop
3345
+ var isStaring = this.survey.isShowStartingPage;
3346
+ var pageId = this.survey.activePage ? this.survey.activePage.id : "";
3347
+ var topProgress = this.survey.isShowProgressBarOnTop && !isStaring
3213
3348
  ? this.renderProgress(true)
3214
3349
  : null;
3215
- var bottomProgress = this.survey.isShowProgressBarOnBottom
3350
+ var bottomProgress = this.survey.isShowProgressBarOnBottom && !isStaring
3216
3351
  ? this.renderProgress(false)
3217
3352
  : null;
3218
3353
  var className = this.survey.bodyCss;
3219
- if (!currentPage) {
3354
+ if (!activePage) {
3220
3355
  className = this.css.bodyEmpty;
3221
- currentPage = this.renderEmptySurvey();
3356
+ activePage = this.renderEmptySurvey();
3222
3357
  }
3223
3358
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { id: pageId, className: className },
3224
3359
  topProgress,
3225
3360
  this.renderTimerPanel("top"),
3226
3361
  this.renderNavigation("top"),
3227
- currentPage,
3362
+ activePage,
3228
3363
  this.renderTimerPanel("bottom"),
3229
3364
  bottomProgress,
3230
3365
  this.renderNavigation("bottom")));
3231
3366
  };
3232
3367
  Survey.prototype.renderTimerPanel = function (location) {
3368
+ if (this.survey.isShowStartingPage)
3369
+ return null;
3233
3370
  if (location === "top" && !this.survey.isTimerPanelShowingOnTop)
3234
3371
  return null;
3235
3372
  if (location === "bottom" && !this.survey.isTimerPanelShowingOnBottom)
3236
3373
  return null;
3237
- return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_reacttimerpanel__WEBPACK_IMPORTED_MODULE_7__["SurveyTimerPanel"], { survey: this.survey });
3374
+ return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_reacttimerpanel__WEBPACK_IMPORTED_MODULE_6__["SurveyTimerPanel"], { timerModel: this.survey.timerModel });
3238
3375
  };
3239
3376
  Survey.prototype.renderPage = function (page) {
3240
- return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_page__WEBPACK_IMPORTED_MODULE_3__["SurveyPage"], { survey: this.survey, page: page, css: this.css, creator: this }));
3377
+ return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_page__WEBPACK_IMPORTED_MODULE_2__["SurveyPage"], { survey: this.survey, page: page, css: this.css, creator: this }));
3241
3378
  };
3242
3379
  Survey.prototype.renderProgress = function (isTop) {
3243
- return _element_factory__WEBPACK_IMPORTED_MODULE_10__["ReactElementFactory"].Instance.createElement("sv-progress-" + this.survey.progressBarType.toLowerCase(), { survey: this.survey, css: this.css, isTop: isTop });
3380
+ return _element_factory__WEBPACK_IMPORTED_MODULE_9__["ReactElementFactory"].Instance.createElement("sv-progress-" + this.survey.progressBarType.toLowerCase(), { survey: this.survey, css: this.css, isTop: isTop });
3244
3381
  };
3245
3382
  Survey.prototype.renderNavigation = function (navPosition) {
3246
3383
  if (this.survey.isNavigationButtonsShowing !== "both" &&
@@ -3248,7 +3385,7 @@ var Survey = /** @class */ (function (_super) {
3248
3385
  this.survey.isNavigationButtonsShowing !== navPosition)) {
3249
3386
  return null;
3250
3387
  }
3251
- return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_reactSurveyNavigation__WEBPACK_IMPORTED_MODULE_8__["SurveyNavigation"], { survey: this.survey, css: this.css });
3388
+ return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_reactSurveyNavigation__WEBPACK_IMPORTED_MODULE_7__["SurveyNavigation"], { survey: this.survey, css: this.css });
3252
3389
  };
3253
3390
  Survey.prototype.renderEmptySurvey = function () {
3254
3391
  return react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", null, this.survey.emptySurveyText);
@@ -3264,15 +3401,15 @@ var Survey = /** @class */ (function (_super) {
3264
3401
  else {
3265
3402
  if (newProps.json) {
3266
3403
  this.previousJSON = newProps.json;
3267
- this.survey = new _reactsurveymodel__WEBPACK_IMPORTED_MODULE_2__["ReactSurveyModel"](newProps.json);
3404
+ this.survey = new survey_core__WEBPACK_IMPORTED_MODULE_1__["SurveyModel"](newProps.json);
3268
3405
  }
3269
3406
  }
3270
3407
  }
3271
3408
  else {
3272
- this.survey = new _reactsurveymodel__WEBPACK_IMPORTED_MODULE_2__["ReactSurveyModel"]();
3409
+ this.survey = new survey_core__WEBPACK_IMPORTED_MODULE_1__["SurveyModel"]();
3273
3410
  }
3274
3411
  if (!!newProps.css) {
3275
- this.survey.mergeCss(newProps.css, this.css);
3412
+ this.survey.css = this.css;
3276
3413
  }
3277
3414
  this.setSurveyEvents();
3278
3415
  };
@@ -3325,7 +3462,7 @@ var Survey = /** @class */ (function (_super) {
3325
3462
  };
3326
3463
  //ISurveyCreator
3327
3464
  Survey.prototype.createQuestionElement = function (question) {
3328
- return _reactquestion_factory__WEBPACK_IMPORTED_MODULE_9__["ReactQuestionFactory"].Instance.createQuestion(!question.isDefaultRendering || question.isDefaultRendering()
3465
+ return _reactquestion_factory__WEBPACK_IMPORTED_MODULE_8__["ReactQuestionFactory"].Instance.createQuestion(!question.isDefaultRendering || question.isDefaultRendering()
3329
3466
  ? question.getTemplate()
3330
3467
  : question.getComponentName(), {
3331
3468
  question: question,
@@ -3337,7 +3474,7 @@ var Survey = /** @class */ (function (_super) {
3337
3474
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { key: key },
3338
3475
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: cssClasses.error.icon, "aria-hidden": "true" }),
3339
3476
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: cssClasses.error.item },
3340
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_string_viewer__WEBPACK_IMPORTED_MODULE_5__["SurveyLocStringViewer"], { locStr: error.locText }))));
3477
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_string_viewer__WEBPACK_IMPORTED_MODULE_4__["SurveyLocStringViewer"], { locStr: error.locText }))));
3341
3478
  };
3342
3479
  Survey.prototype.questionTitleLocation = function () {
3343
3480
  return this.survey.questionTitleLocation;
@@ -3346,9 +3483,9 @@ var Survey = /** @class */ (function (_super) {
3346
3483
  return this.survey.questionErrorLocation;
3347
3484
  };
3348
3485
  return Survey;
3349
- }(_reactquestion_element__WEBPACK_IMPORTED_MODULE_4__["SurveyElementBase"]));
3486
+ }(_reactquestion_element__WEBPACK_IMPORTED_MODULE_3__["SurveyElementBase"]));
3350
3487
 
3351
- _element_factory__WEBPACK_IMPORTED_MODULE_10__["ReactElementFactory"].Instance.registerElement("survey", function (props) {
3488
+ _element_factory__WEBPACK_IMPORTED_MODULE_9__["ReactElementFactory"].Instance.registerElement("survey", function (props) {
3352
3489
  return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](Survey, props);
3353
3490
  });
3354
3491
  function attachKey2click(element, viewModel, options) {
@@ -3364,7 +3501,7 @@ function attachKey2click(element, viewModel, options) {
3364
3501
  Object(survey_core__WEBPACK_IMPORTED_MODULE_1__["doKey2ClickUp"])(evt, options);
3365
3502
  return false;
3366
3503
  },
3367
- onKeyDown: function (evt) { return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_11__["doKey2ClickDown"])(evt, options); }
3504
+ onKeyDown: function (evt) { return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_10__["doKey2ClickDown"])(evt, options); }
3368
3505
  });
3369
3506
  }
3370
3507
 
@@ -3405,7 +3542,6 @@ var SurveyNavigation = /** @class */ (function (_super) {
3405
3542
  __extends(SurveyNavigation, _super);
3406
3543
  function SurveyNavigation(props) {
3407
3544
  var _this = _super.call(this, props) || this;
3408
- _this.mouseDownPage = null;
3409
3545
  _this.handlePrevClick = _this.handlePrevClick.bind(_this);
3410
3546
  _this.handleNextClick = _this.handleNextClick.bind(_this);
3411
3547
  _this.handleNextMouseDown = _this.handleNextMouseDown.bind(_this);
@@ -3419,14 +3555,10 @@ var SurveyNavigation = /** @class */ (function (_super) {
3419
3555
  this.survey.prevPage();
3420
3556
  };
3421
3557
  SurveyNavigation.prototype.handleNextClick = function (event) {
3422
- if (!!this.mouseDownPage && this.mouseDownPage !== this.survey.currentPage)
3423
- return;
3424
- this.mouseDownPage = null;
3425
- this.survey.nextPage();
3558
+ this.survey.nextPageUIClick();
3426
3559
  };
3427
3560
  SurveyNavigation.prototype.handleNextMouseDown = function (event) {
3428
- this.mouseDownPage = this.survey.currentPage;
3429
- return this.survey.navigationMouseDown();
3561
+ return this.survey.nextPageMouseDown();
3430
3562
  };
3431
3563
  SurveyNavigation.prototype.handleMouseDown = function (event) {
3432
3564
  return this.survey.navigationMouseDown();
@@ -3443,7 +3575,6 @@ var SurveyNavigation = /** @class */ (function (_super) {
3443
3575
  SurveyNavigation.prototype.render = function () {
3444
3576
  if (!this.survey || this.survey.isNavigationButtonsShowing === "none")
3445
3577
  return null;
3446
- var isStartedPage = this.survey.state === "starting";
3447
3578
  var prevButton = this.survey.isShowPrevButton
3448
3579
  ? this.renderButton(this.handlePrevClick, this.handleMouseDown, this.survey.pagePrevText, this.survey.cssNavigationPrev)
3449
3580
  : null;
@@ -3453,12 +3584,10 @@ var SurveyNavigation = /** @class */ (function (_super) {
3453
3584
  var completeButton = this.survey.isCompleteButtonVisible
3454
3585
  ? this.renderButton(this.handleCompleteClick, this.handleMouseDown, this.survey.completeText, this.survey.cssNavigationComplete)
3455
3586
  : null;
3456
- var previewButton = !isStartedPage &&
3457
- this.survey.isLastPage &&
3458
- this.survey.isPreviewButtonVisible
3587
+ var previewButton = this.survey.isPreviewButtonVisible
3459
3588
  ? this.renderButton(this.handlePreviewClick, this.handleMouseDown, this.survey.previewText, this.survey.cssNavigationPreview)
3460
3589
  : null;
3461
- var startButton = isStartedPage
3590
+ var startButton = this.survey.isShowStartingPage
3462
3591
  ? this.renderButton(this.handleStartClick, null, this.survey.startSurveyText, this.survey.cssNavigationStart)
3463
3592
  : null;
3464
3593
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.css.footer },
@@ -3767,8 +3896,9 @@ __webpack_require__.r(__webpack_exports__);
3767
3896
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
3768
3897
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3769
3898
  /* harmony import */ var _reactSurvey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reactSurvey */ "./src/react/reactSurvey.tsx");
3770
- /* harmony import */ var _reactsurveymodel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactsurveymodel */ "./src/react/reactsurveymodel.tsx");
3771
- /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
3899
+ /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
3900
+ /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! survey-core */ "survey-core");
3901
+ /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_3__);
3772
3902
  var __extends = (undefined && undefined.__extends) || (function () {
3773
3903
  var extendStatics = function (d, b) {
3774
3904
  extendStatics = Object.setPrototypeOf ||
@@ -3799,7 +3929,7 @@ var SurveyWindow = /** @class */ (function (_super) {
3799
3929
  return [this.window, this.window.survey];
3800
3930
  };
3801
3931
  SurveyWindow.prototype.handleOnExpanded = function (event) {
3802
- this.window.isExpanded = !this.window.isExpanded;
3932
+ this.window.changeExpandCollapse();
3803
3933
  };
3804
3934
  SurveyWindow.prototype.canRender = function () {
3805
3935
  return _super.prototype.canRender.call(this) && this.window.isShowing;
@@ -3813,43 +3943,37 @@ var SurveyWindow = /** @class */ (function (_super) {
3813
3943
  right: 10,
3814
3944
  maxWidth: "60%",
3815
3945
  };
3816
- return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.css.window.root, style: style },
3946
+ return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.window.cssRoot, style: style },
3817
3947
  header,
3818
3948
  body));
3819
3949
  };
3820
3950
  SurveyWindow.prototype.renderWindowHeader = function () {
3821
3951
  var styleA = { width: "100%", cursor: "pointer" };
3822
3952
  var styleTitle = { paddingRight: "10px" };
3823
- var glyphClassName = this.window.isExpanded
3824
- ? this.css.window.header.buttonCollapsed
3825
- : this.css.window.header.buttonExpanded;
3953
+ var glyphClassName = this.window.cssButton;
3826
3954
  glyphClassName = "glyphicon pull-right " + glyphClassName;
3827
- var title = _reactquestion_element__WEBPACK_IMPORTED_MODULE_3__["SurveyElementBase"].renderLocString(this.survey.locTitle);
3828
- return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.css.window.header.root },
3955
+ var title = _reactquestion_element__WEBPACK_IMPORTED_MODULE_2__["SurveyElementBase"].renderLocString(this.survey.locTitle);
3956
+ return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.window.cssHeaderRoot },
3829
3957
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { onClick: this.handleOnExpanded, style: styleA },
3830
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.css.window.header.title, style: styleTitle }, title),
3958
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.window.cssHeaderTitle, style: styleTitle }, title),
3831
3959
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: glyphClassName, "aria-hidden": "true" })),
3832
3960
  this.window.isExpanded ? (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { onClick: this.handleOnExpanded, style: { float: "right", cursor: "pointer" } },
3833
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.css.window.header.title, style: styleTitle }, "X"))) : null));
3961
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.window.cssHeaderTitle, style: styleTitle }, "X"))) : null));
3834
3962
  };
3835
3963
  SurveyWindow.prototype.renderBody = function () {
3836
- return react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.css.window.body }, this.doRender());
3964
+ return react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.window.cssBody }, this.doRender());
3837
3965
  };
3838
3966
  SurveyWindow.prototype.createSurvey = function (newProps) {
3839
3967
  if (!newProps)
3840
3968
  newProps = {};
3841
3969
  _super.prototype.createSurvey.call(this, newProps);
3842
- this.window = new _reactsurveymodel__WEBPACK_IMPORTED_MODULE_2__["ReactWindowModel"](null, this.survey);
3970
+ this.window = new survey_core__WEBPACK_IMPORTED_MODULE_3__["SurveyWindowModel"](null, this.survey);
3843
3971
  if (newProps.closeOnCompleteTimeout) {
3844
3972
  this.window.closeOnCompleteTimeout = newProps.closeOnCompleteTimeout;
3845
3973
  }
3846
3974
  this.window.isShowing = true;
3847
3975
  if (!this.window.isExpanded && (newProps.expanded || newProps.isExpanded))
3848
3976
  this.window.expand();
3849
- var self = this;
3850
- this.window.closeWindowOnCompleteCallback = function () {
3851
- self.window.hide();
3852
- };
3853
3977
  };
3854
3978
  return SurveyWindow;
3855
3979
  }(_reactSurvey__WEBPACK_IMPORTED_MODULE_1__["Survey"]));
@@ -3875,11 +3999,12 @@ __webpack_require__.r(__webpack_exports__);
3875
3999
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3876
4000
  /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! survey-core */ "survey-core");
3877
4001
  /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_1__);
3878
- /* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element-factory */ "./src/react/element-factory.tsx");
3879
- /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
3880
- /* harmony import */ var _reactquestion_comment__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./reactquestion_comment */ "./src/react/reactquestion_comment.tsx");
3881
- /* harmony import */ var _custom_widget__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./custom-widget */ "./src/react/custom-widget.tsx");
3882
- /* harmony import */ var _components_title_title_element__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/title/title-element */ "./src/react/components/title/title-element.tsx");
4002
+ /* harmony import */ var _reactsurveymodel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactsurveymodel */ "./src/react/reactsurveymodel.tsx");
4003
+ /* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./element-factory */ "./src/react/element-factory.tsx");
4004
+ /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
4005
+ /* harmony import */ var _reactquestion_comment__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./reactquestion_comment */ "./src/react/reactquestion_comment.tsx");
4006
+ /* harmony import */ var _custom_widget__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./custom-widget */ "./src/react/custom-widget.tsx");
4007
+ /* harmony import */ var _components_title_title_element__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/title/title-element */ "./src/react/components/title/title-element.tsx");
3883
4008
  var __extends = (undefined && undefined.__extends) || (function () {
3884
4009
  var extendStatics = function (d, b) {
3885
4010
  extendStatics = Object.setPrototypeOf ||
@@ -3902,6 +4027,7 @@ var __extends = (undefined && undefined.__extends) || (function () {
3902
4027
 
3903
4028
 
3904
4029
 
4030
+
3905
4031
  var SurveyQuestion = /** @class */ (function (_super) {
3906
4032
  __extends(SurveyQuestion, _super);
3907
4033
  function SurveyQuestion(props) {
@@ -3917,7 +4043,7 @@ var SurveyQuestion = /** @class */ (function (_super) {
3917
4043
  if (!customWidget) {
3918
4044
  return creator.createQuestionElement(question);
3919
4045
  }
3920
- return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_custom_widget__WEBPACK_IMPORTED_MODULE_5__["SurveyCustomWidget"], { creator: creator, question: question });
4046
+ return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_custom_widget__WEBPACK_IMPORTED_MODULE_6__["SurveyCustomWidget"], { creator: creator, question: question });
3921
4047
  };
3922
4048
  SurveyQuestion.prototype.getStateElement = function () {
3923
4049
  return this.question;
@@ -4031,7 +4157,7 @@ var SurveyQuestion = /** @class */ (function (_super) {
4031
4157
  var survey = this.question.survey;
4032
4158
  var wrapper;
4033
4159
  if (survey) {
4034
- wrapper = survey.wrapElement(element, this.question);
4160
+ wrapper = _reactsurveymodel__WEBPACK_IMPORTED_MODULE_2__["ReactSurveyElementsWrapper"].wrapElement(survey, element, this.question);
4035
4161
  }
4036
4162
  return wrapper !== null && wrapper !== void 0 ? wrapper : element;
4037
4163
  };
@@ -4040,21 +4166,21 @@ var SurveyQuestion = /** @class */ (function (_super) {
4040
4166
  };
4041
4167
  SurveyQuestion.prototype.renderDescription = function (cssClasses, isUnderInput) {
4042
4168
  if (isUnderInput === void 0) { isUnderInput = false; }
4043
- var descriptionText = _reactquestion_element__WEBPACK_IMPORTED_MODULE_3__["SurveyElementBase"].renderLocString(this.question.locDescription);
4169
+ var descriptionText = _reactquestion_element__WEBPACK_IMPORTED_MODULE_4__["SurveyElementBase"].renderLocString(this.question.locDescription);
4044
4170
  var className = isUnderInput
4045
4171
  ? cssClasses.descriptionUnderInput
4046
4172
  : cssClasses.description;
4047
4173
  return react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: className }, descriptionText);
4048
4174
  };
4049
4175
  SurveyQuestion.prototype.renderComment = function (cssClasses) {
4050
- var commentText = _reactquestion_element__WEBPACK_IMPORTED_MODULE_3__["SurveyElementBase"].renderLocString(this.question.locCommentText);
4176
+ var commentText = _reactquestion_element__WEBPACK_IMPORTED_MODULE_4__["SurveyElementBase"].renderLocString(this.question.locCommentText);
4051
4177
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.question.cssClasses.formGroup },
4052
4178
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", null, commentText),
4053
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_reactquestion_comment__WEBPACK_IMPORTED_MODULE_4__["SurveyQuestionCommentItem"], { question: this.question, cssClasses: cssClasses, otherCss: cssClasses.other, isDisplayMode: this.question.isInputReadOnly })));
4179
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_reactquestion_comment__WEBPACK_IMPORTED_MODULE_5__["SurveyQuestionCommentItem"], { question: this.question, cssClasses: cssClasses, otherCss: cssClasses.other, isDisplayMode: this.question.isInputReadOnly })));
4054
4180
  };
4055
4181
  SurveyQuestion.prototype.renderHeader = function (question) {
4056
4182
  var cssClasses = question.cssClasses;
4057
- var title = question.hasTitle ? (react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_title_title_element__WEBPACK_IMPORTED_MODULE_6__["TitleElement"], { element: question })) : null;
4183
+ var title = question.hasTitle ? (react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_title_title_element__WEBPACK_IMPORTED_MODULE_7__["TitleElement"], { element: question })) : null;
4058
4184
  var description = question.hasDescriptionUnderTitle
4059
4185
  ? this.renderDescription(cssClasses)
4060
4186
  : null;
@@ -4066,9 +4192,9 @@ var SurveyQuestion = /** @class */ (function (_super) {
4066
4192
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"](SurveyElementErrors, { element: this.question, cssClasses: cssClasses, creator: this.creator, location: location, id: this.question.id + "_errors" }));
4067
4193
  };
4068
4194
  return SurveyQuestion;
4069
- }(_reactquestion_element__WEBPACK_IMPORTED_MODULE_3__["SurveyElementBase"]));
4195
+ }(_reactquestion_element__WEBPACK_IMPORTED_MODULE_4__["SurveyElementBase"]));
4070
4196
 
4071
- _element_factory__WEBPACK_IMPORTED_MODULE_2__["ReactElementFactory"].Instance.registerElement("question", function (props) {
4197
+ _element_factory__WEBPACK_IMPORTED_MODULE_3__["ReactElementFactory"].Instance.registerElement("question", function (props) {
4072
4198
  return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](SurveyQuestion, props);
4073
4199
  });
4074
4200
  var SurveyElementErrors = /** @class */ (function (_super) {
@@ -4143,7 +4269,7 @@ var SurveyElementErrors = /** @class */ (function (_super) {
4143
4269
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { role: "alert", "aria-live": "polite", className: this.element.cssError, id: this.id, ref: this.tooltipRef }, errors));
4144
4270
  };
4145
4271
  return SurveyElementErrors;
4146
- }(_reactquestion_element__WEBPACK_IMPORTED_MODULE_3__["ReactSurveyElement"]));
4272
+ }(_reactquestion_element__WEBPACK_IMPORTED_MODULE_4__["ReactSurveyElement"]));
4147
4273
 
4148
4274
  var SurveyQuestionAndErrorsWrapped = /** @class */ (function (_super) {
4149
4275
  __extends(SurveyQuestionAndErrorsWrapped, _super);
@@ -4214,7 +4340,7 @@ var SurveyQuestionAndErrorsWrapped = /** @class */ (function (_super) {
4214
4340
  return SurveyQuestion.renderQuestionBody(this.creator, this.question);
4215
4341
  };
4216
4342
  return SurveyQuestionAndErrorsWrapped;
4217
- }(_reactquestion_element__WEBPACK_IMPORTED_MODULE_3__["ReactSurveyElement"]));
4343
+ }(_reactquestion_element__WEBPACK_IMPORTED_MODULE_4__["ReactSurveyElement"]));
4218
4344
 
4219
4345
  var SurveyQuestionAndErrorsCell = /** @class */ (function (_super) {
4220
4346
  __extends(SurveyQuestionAndErrorsCell, _super);
@@ -4254,7 +4380,7 @@ var SurveyQuestionAndErrorsCell = /** @class */ (function (_super) {
4254
4380
  var survey = this.question.survey;
4255
4381
  var wrapper;
4256
4382
  if (survey) {
4257
- wrapper = survey.wrapMatrixCell(element, cell);
4383
+ wrapper = _reactsurveymodel__WEBPACK_IMPORTED_MODULE_2__["ReactSurveyElementsWrapper"].wrapMatrixCell(survey, element, cell);
4258
4384
  }
4259
4385
  return wrapper !== null && wrapper !== void 0 ? wrapper : element;
4260
4386
  };
@@ -4415,6 +4541,7 @@ __webpack_require__.r(__webpack_exports__);
4415
4541
  /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
4416
4542
  /* harmony import */ var _reactquestion_comment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactquestion_comment */ "./src/react/reactquestion_comment.tsx");
4417
4543
  /* harmony import */ var _reactquestion_factory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactquestion_factory */ "./src/react/reactquestion_factory.tsx");
4544
+ /* harmony import */ var _reactsurveymodel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./reactsurveymodel */ "./src/react/reactsurveymodel.tsx");
4418
4545
  var __extends = (undefined && undefined.__extends) || (function () {
4419
4546
  var extendStatics = function (d, b) {
4420
4547
  extendStatics = Object.setPrototypeOf ||
@@ -4434,6 +4561,7 @@ var __extends = (undefined && undefined.__extends) || (function () {
4434
4561
 
4435
4562
 
4436
4563
 
4564
+
4437
4565
  var SurveyQuestionCheckbox = /** @class */ (function (_super) {
4438
4566
  __extends(SurveyQuestionCheckbox, _super);
4439
4567
  function SurveyQuestionCheckbox(props) {
@@ -4486,7 +4614,7 @@ var SurveyQuestionCheckbox = /** @class */ (function (_super) {
4486
4614
  var survey = this.question.survey;
4487
4615
  var wrappedItem = null;
4488
4616
  if (!!survey) {
4489
- wrappedItem = survey.wrapItemValue(renderedItem, this.question, item);
4617
+ wrappedItem = _reactsurveymodel__WEBPACK_IMPORTED_MODULE_4__["ReactSurveyElementsWrapper"].wrapItemValue(survey, renderedItem, this.question, item);
4490
4618
  }
4491
4619
  return wrappedItem !== null && wrappedItem !== void 0 ? wrappedItem : renderedItem;
4492
4620
  };
@@ -4911,6 +5039,7 @@ __webpack_require__.r(__webpack_exports__);
4911
5039
  /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! survey-core */ "survey-core");
4912
5040
  /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_1__);
4913
5041
  /* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element-factory */ "./src/react/element-factory.tsx");
5042
+ /* harmony import */ var _reactsurveymodel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactsurveymodel */ "./src/react/reactsurveymodel.tsx");
4914
5043
  var __extends = (undefined && undefined.__extends) || (function () {
4915
5044
  var extendStatics = function (d, b) {
4916
5045
  extendStatics = Object.setPrototypeOf ||
@@ -4929,6 +5058,7 @@ var __extends = (undefined && undefined.__extends) || (function () {
4929
5058
 
4930
5059
 
4931
5060
 
5061
+
4932
5062
  var SurveyElementBase = /** @class */ (function (_super) {
4933
5063
  __extends(SurveyElementBase, _super);
4934
5064
  function SurveyElementBase(props) {
@@ -5170,7 +5300,7 @@ var SurveyQuestionElementBase = /** @class */ (function (_super) {
5170
5300
  .survey;
5171
5301
  var wrapper;
5172
5302
  if (survey) {
5173
- wrapper = survey.wrapMatrixCell(element, cell, reason);
5303
+ wrapper = _reactsurveymodel__WEBPACK_IMPORTED_MODULE_3__["ReactSurveyElementsWrapper"].wrapMatrixCell(survey, element, cell, reason);
5174
5304
  }
5175
5305
  return wrapper !== null && wrapper !== void 0 ? wrapper : element;
5176
5306
  };
@@ -5591,6 +5721,7 @@ __webpack_require__.r(__webpack_exports__);
5591
5721
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
5592
5722
  /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
5593
5723
  /* harmony import */ var _reactquestion_factory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactquestion_factory */ "./src/react/reactquestion_factory.tsx");
5724
+ /* harmony import */ var _reactsurveymodel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactsurveymodel */ "./src/react/reactsurveymodel.tsx");
5594
5725
  var __extends = (undefined && undefined.__extends) || (function () {
5595
5726
  var extendStatics = function (d, b) {
5596
5727
  extendStatics = Object.setPrototypeOf ||
@@ -5609,6 +5740,7 @@ var __extends = (undefined && undefined.__extends) || (function () {
5609
5740
 
5610
5741
 
5611
5742
 
5743
+
5612
5744
  var SurveyQuestionMatrix = /** @class */ (function (_super) {
5613
5745
  __extends(SurveyQuestionMatrix, _super);
5614
5746
  function SurveyQuestionMatrix(props) {
@@ -5702,7 +5834,7 @@ var SurveyQuestionMatrixRow = /** @class */ (function (_super) {
5702
5834
  var survey = this.question.survey;
5703
5835
  var wrapper;
5704
5836
  if (survey) {
5705
- wrapper = survey.wrapMatrixCell(element, cell, reason);
5837
+ wrapper = _reactsurveymodel__WEBPACK_IMPORTED_MODULE_3__["ReactSurveyElementsWrapper"].wrapMatrixCell(survey, element, cell, reason);
5706
5838
  }
5707
5839
  return wrapper !== null && wrapper !== void 0 ? wrapper : element;
5708
5840
  };
@@ -6600,7 +6732,8 @@ __webpack_require__.r(__webpack_exports__);
6600
6732
  /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
6601
6733
  /* harmony import */ var _reactquestion_comment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactquestion_comment */ "./src/react/reactquestion_comment.tsx");
6602
6734
  /* harmony import */ var _reactquestion_factory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactquestion_factory */ "./src/react/reactquestion_factory.tsx");
6603
- /* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./element-factory */ "./src/react/element-factory.tsx");
6735
+ /* harmony import */ var _reactsurveymodel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./reactsurveymodel */ "./src/react/reactsurveymodel.tsx");
6736
+ /* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./element-factory */ "./src/react/element-factory.tsx");
6604
6737
  var __extends = (undefined && undefined.__extends) || (function () {
6605
6738
  var extendStatics = function (d, b) {
6606
6739
  extendStatics = Object.setPrototypeOf ||
@@ -6621,6 +6754,7 @@ var __extends = (undefined && undefined.__extends) || (function () {
6621
6754
 
6622
6755
 
6623
6756
 
6757
+
6624
6758
  var SurveyQuestionRadiogroup = /** @class */ (function (_super) {
6625
6759
  __extends(SurveyQuestionRadiogroup, _super);
6626
6760
  function SurveyQuestionRadiogroup(props) {
@@ -6680,7 +6814,7 @@ var SurveyQuestionRadiogroup = /** @class */ (function (_super) {
6680
6814
  var survey = this.question.survey;
6681
6815
  var wrappedItem = null;
6682
6816
  if (!!survey) {
6683
- wrappedItem = survey.wrapItemValue(renderedItem, this.question, item);
6817
+ wrappedItem = _reactsurveymodel__WEBPACK_IMPORTED_MODULE_4__["ReactSurveyElementsWrapper"].wrapItemValue(survey, renderedItem, this.question, item);
6684
6818
  }
6685
6819
  return wrappedItem !== null && wrappedItem !== void 0 ? wrappedItem : renderedItem;
6686
6820
  };
@@ -6784,7 +6918,7 @@ var SurveyQuestionRadioItem = /** @class */ (function (_super) {
6784
6918
  return SurveyQuestionRadioItem;
6785
6919
  }(_reactquestion_element__WEBPACK_IMPORTED_MODULE_1__["ReactSurveyElement"]));
6786
6920
 
6787
- _element_factory__WEBPACK_IMPORTED_MODULE_4__["ReactElementFactory"].Instance.registerElement("survey-radiogroup-item", function (props) {
6921
+ _element_factory__WEBPACK_IMPORTED_MODULE_5__["ReactElementFactory"].Instance.registerElement("survey-radiogroup-item", function (props) {
6788
6922
  return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](SurveyQuestionRadioItem, props);
6789
6923
  });
6790
6924
  _reactquestion_factory__WEBPACK_IMPORTED_MODULE_3__["ReactQuestionFactory"].Instance.registerQuestion("radiogroup", function (props) {
@@ -6809,6 +6943,7 @@ __webpack_require__.r(__webpack_exports__);
6809
6943
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
6810
6944
  /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
6811
6945
  /* harmony import */ var _reactquestion_factory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactquestion_factory */ "./src/react/reactquestion_factory.tsx");
6946
+ /* harmony import */ var _reactsurveymodel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactsurveymodel */ "./src/react/reactsurveymodel.tsx");
6812
6947
  var __extends = (undefined && undefined.__extends) || (function () {
6813
6948
  var extendStatics = function (d, b) {
6814
6949
  extendStatics = Object.setPrototypeOf ||
@@ -6827,6 +6962,7 @@ var __extends = (undefined && undefined.__extends) || (function () {
6827
6962
 
6828
6963
 
6829
6964
 
6965
+
6830
6966
  var SurveyQuestionRanking = /** @class */ (function (_super) {
6831
6967
  __extends(SurveyQuestionRanking, _super);
6832
6968
  function SurveyQuestionRanking() {
@@ -6872,7 +7008,7 @@ var SurveyQuestionRanking = /** @class */ (function (_super) {
6872
7008
  var survey = this.question.survey;
6873
7009
  var wrappedItem = null;
6874
7010
  if (!!survey) {
6875
- wrappedItem = survey.wrapItemValue(renderedItem, this.question, item);
7011
+ wrappedItem = _reactsurveymodel__WEBPACK_IMPORTED_MODULE_3__["ReactSurveyElementsWrapper"].wrapItemValue(survey, renderedItem, this.question, item);
6876
7012
  }
6877
7013
  return wrappedItem !== null && wrappedItem !== void 0 ? wrappedItem : renderedItem;
6878
7014
  };
@@ -7175,111 +7311,41 @@ _reactquestion_factory__WEBPACK_IMPORTED_MODULE_2__["ReactQuestionFactory"].Inst
7175
7311
  /*!****************************************!*\
7176
7312
  !*** ./src/react/reactsurveymodel.tsx ***!
7177
7313
  \****************************************/
7178
- /*! exports provided: ReactSurveyModel, ReactSurveyElementsWrapper, ReactWindowModel */
7314
+ /*! exports provided: ReactSurveyElementsWrapper */
7179
7315
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
7180
7316
 
7181
7317
  "use strict";
7182
7318
  __webpack_require__.r(__webpack_exports__);
7183
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReactSurveyModel", function() { return ReactSurveyModel; });
7184
7319
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReactSurveyElementsWrapper", function() { return ReactSurveyElementsWrapper; });
7185
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReactWindowModel", function() { return ReactWindowModel; });
7186
7320
  /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! survey-core */ "survey-core");
7187
7321
  /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_0__);
7188
7322
  /* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element-factory */ "./src/react/element-factory.tsx");
7189
- var __extends = (undefined && undefined.__extends) || (function () {
7190
- var extendStatics = function (d, b) {
7191
- extendStatics = Object.setPrototypeOf ||
7192
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
7193
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7194
- return extendStatics(d, b);
7195
- };
7196
- return function (d, b) {
7197
- if (typeof b !== "function" && b !== null)
7198
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
7199
- extendStatics(d, b);
7200
- function __() { this.constructor = d; }
7201
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
7202
- };
7203
- })();
7204
7323
 
7205
7324
 
7206
- var ReactSurveyModel = /** @class */ (function (_super) {
7207
- __extends(ReactSurveyModel, _super);
7208
- function ReactSurveyModel(jsonObj) {
7209
- if (jsonObj === void 0) { jsonObj = null; }
7210
- return _super.call(this, jsonObj) || this;
7211
- }
7212
- ReactSurveyModel.prototype.render = function () {
7213
- if (this.renderCallback) {
7214
- this.renderCallback();
7215
- }
7216
- };
7217
- ReactSurveyModel.prototype.mergeCss = function (src, dest) {
7218
- this.mergeValues(src, dest);
7219
- };
7220
- ReactSurveyModel.prototype.doAfterRenderSurvey = function (el) {
7221
- this.afterRenderSurvey(el);
7222
- };
7223
- ReactSurveyModel.prototype.onLoadSurveyFromService = function () {
7224
- if (!!this.currentPage) {
7225
- this.currentPage.setWasShown(false);
7226
- this.currentPage.onFirstRendering();
7227
- }
7228
- this.render();
7229
- };
7230
- ReactSurveyModel.prototype.onLoadingSurveyFromService = function () {
7231
- this.render();
7232
- };
7233
- ReactSurveyModel.prototype.setCompletedState = function (value, text) {
7234
- _super.prototype.setCompletedState.call(this, value, text);
7235
- this.render();
7236
- };
7237
- ReactSurveyModel.prototype.start = function () {
7238
- var res = _super.prototype.start.call(this);
7239
- this.render();
7240
- return res;
7241
- };
7242
- ReactSurveyModel.prototype.wrapRow = function (element, row) {
7243
- return new ReactSurveyElementsWrapper(this).wrapRow(element, row);
7244
- };
7245
- ReactSurveyModel.prototype.wrapElement = function (element, question) {
7246
- return new ReactSurveyElementsWrapper(this).wrapElement(element, question);
7247
- };
7248
- ReactSurveyModel.prototype.wrapItemValue = function (element, question, item) {
7249
- return new ReactSurveyElementsWrapper(this).wrapItemValue(element, question, item);
7250
- };
7251
- ReactSurveyModel.prototype.wrapMatrixCell = function (element, cell, reason) {
7252
- if (reason === void 0) { reason = "cell"; }
7253
- return new ReactSurveyElementsWrapper(this).wrapMatrixCell(element, cell, reason);
7254
- };
7255
- return ReactSurveyModel;
7256
- }(survey_core__WEBPACK_IMPORTED_MODULE_0__["SurveyModel"]));
7257
-
7258
7325
  var ReactSurveyElementsWrapper = /** @class */ (function () {
7259
- function ReactSurveyElementsWrapper(survey) {
7260
- this.survey = survey;
7326
+ function ReactSurveyElementsWrapper() {
7261
7327
  }
7262
- ReactSurveyElementsWrapper.prototype.wrapRow = function (element, row) {
7263
- var componentName = this.survey.getRowWrapperComponentName(row);
7264
- var componentData = this.survey.getRowWrapperComponentData(row);
7328
+ ReactSurveyElementsWrapper.wrapRow = function (survey, element, row) {
7329
+ var componentName = survey.getRowWrapperComponentName(row);
7330
+ var componentData = survey.getRowWrapperComponentData(row);
7265
7331
  return _element_factory__WEBPACK_IMPORTED_MODULE_1__["ReactElementFactory"].Instance.createElement(componentName, {
7266
7332
  element: element,
7267
7333
  row: row,
7268
7334
  componentData: componentData,
7269
7335
  });
7270
7336
  };
7271
- ReactSurveyElementsWrapper.prototype.wrapElement = function (element, question) {
7272
- var componentName = this.survey.getElementWrapperComponentName(question);
7273
- var componentData = this.survey.getElementWrapperComponentData(question);
7337
+ ReactSurveyElementsWrapper.wrapElement = function (survey, element, question) {
7338
+ var componentName = survey.getElementWrapperComponentName(question);
7339
+ var componentData = survey.getElementWrapperComponentData(question);
7274
7340
  return _element_factory__WEBPACK_IMPORTED_MODULE_1__["ReactElementFactory"].Instance.createElement(componentName, {
7275
7341
  element: element,
7276
7342
  question: question,
7277
7343
  componentData: componentData,
7278
7344
  });
7279
7345
  };
7280
- ReactSurveyElementsWrapper.prototype.wrapItemValue = function (element, question, item) {
7281
- var componentName = this.survey.getItemValueWrapperComponentName(item, question);
7282
- var componentData = this.survey.getItemValueWrapperComponentData(item, question);
7346
+ ReactSurveyElementsWrapper.wrapItemValue = function (survey, element, question, item) {
7347
+ var componentName = survey.getItemValueWrapperComponentName(item, question);
7348
+ var componentData = survey.getItemValueWrapperComponentData(item, question);
7283
7349
  return _element_factory__WEBPACK_IMPORTED_MODULE_1__["ReactElementFactory"].Instance.createElement(componentName, {
7284
7350
  key: element.key,
7285
7351
  element: element,
@@ -7288,10 +7354,10 @@ var ReactSurveyElementsWrapper = /** @class */ (function () {
7288
7354
  componentData: componentData,
7289
7355
  });
7290
7356
  };
7291
- ReactSurveyElementsWrapper.prototype.wrapMatrixCell = function (element, cell, reason) {
7357
+ ReactSurveyElementsWrapper.wrapMatrixCell = function (survey, element, cell, reason) {
7292
7358
  if (reason === void 0) { reason = "cell"; }
7293
- var componentName = this.survey.getElementWrapperComponentName(cell, reason);
7294
- var componentData = this.survey.getElementWrapperComponentData(cell, reason);
7359
+ var componentName = survey.getElementWrapperComponentName(cell, reason);
7360
+ var componentData = survey.getElementWrapperComponentData(cell, reason);
7295
7361
  return _element_factory__WEBPACK_IMPORTED_MODULE_1__["ReactElementFactory"].Instance.createElement(componentName, {
7296
7362
  element: element,
7297
7363
  cell: cell,
@@ -7301,29 +7367,6 @@ var ReactSurveyElementsWrapper = /** @class */ (function () {
7301
7367
  return ReactSurveyElementsWrapper;
7302
7368
  }());
7303
7369
 
7304
- var ReactWindowModel = /** @class */ (function (_super) {
7305
- __extends(ReactWindowModel, _super);
7306
- function ReactWindowModel(jsonObj, model) {
7307
- if (jsonObj === void 0) { jsonObj = null; }
7308
- if (model === void 0) { model = null; }
7309
- return _super.call(this, jsonObj, model) || this;
7310
- }
7311
- ReactWindowModel.prototype.createSurvey = function (jsonObj) {
7312
- return new ReactSurveyModel(jsonObj);
7313
- };
7314
- Object.defineProperty(ReactWindowModel.prototype, "renderCallback", {
7315
- get: function () {
7316
- return this.survey.renderCallback;
7317
- },
7318
- set: function (val) {
7319
- this.survey.renderCallback = val;
7320
- },
7321
- enumerable: false,
7322
- configurable: true
7323
- });
7324
- return ReactWindowModel;
7325
- }(survey_core__WEBPACK_IMPORTED_MODULE_0__["SurveyWindowModel"]));
7326
-
7327
7370
  survey_core__WEBPACK_IMPORTED_MODULE_0__["SurveyModel"].platform = "react";
7328
7371
 
7329
7372
 
@@ -7360,27 +7403,17 @@ var __extends = (undefined && undefined.__extends) || (function () {
7360
7403
  var SurveyTimerPanel = /** @class */ (function (_super) {
7361
7404
  __extends(SurveyTimerPanel, _super);
7362
7405
  function SurveyTimerPanel(props) {
7363
- var _this = _super.call(this, props) || this;
7364
- _this.update = function () {
7365
- _this.setState({ timeSpent: _this.survey.timeSpent });
7366
- };
7367
- return _this;
7406
+ return _super.call(this, props) || this;
7368
7407
  }
7369
7408
  Object.defineProperty(SurveyTimerPanel.prototype, "survey", {
7370
7409
  get: function () {
7371
- return this.props.survey;
7410
+ return this.props.timerModel;
7372
7411
  },
7373
7412
  enumerable: false,
7374
7413
  configurable: true
7375
7414
  });
7376
- SurveyTimerPanel.prototype.componentDidMount = function () {
7377
- this.survey.onTimer.add(this.update);
7378
- };
7379
- SurveyTimerPanel.prototype.componentWillUnmount = function () {
7380
- this.survey.onTimer.remove(this.update);
7381
- };
7382
7415
  SurveyTimerPanel.prototype.render = function () {
7383
- return react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", null, this.survey.timerInfoText);
7416
+ return react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", null, this.survey.text);
7384
7417
  };
7385
7418
  return SurveyTimerPanel;
7386
7419
  }(react__WEBPACK_IMPORTED_MODULE_0__["Component"]));
@@ -7403,6 +7436,7 @@ __webpack_require__.r(__webpack_exports__);
7403
7436
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
7404
7437
  /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
7405
7438
  /* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element-factory */ "./src/react/element-factory.tsx");
7439
+ /* harmony import */ var _reactsurveymodel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./reactsurveymodel */ "./src/react/reactsurveymodel.tsx");
7406
7440
  var __extends = (undefined && undefined.__extends) || (function () {
7407
7441
  var extendStatics = function (d, b) {
7408
7442
  extendStatics = Object.setPrototypeOf ||
@@ -7421,6 +7455,7 @@ var __extends = (undefined && undefined.__extends) || (function () {
7421
7455
 
7422
7456
 
7423
7457
 
7458
+
7424
7459
  var SurveyRow = /** @class */ (function (_super) {
7425
7460
  __extends(SurveyRow, _super);
7426
7461
  function SurveyRow(props) {
@@ -7479,7 +7514,7 @@ var SurveyRow = /** @class */ (function (_super) {
7479
7514
  SurveyRow.prototype.renderElement = function () {
7480
7515
  var survey = this.survey;
7481
7516
  var content = this.renderElementContent();
7482
- var wrapper = survey.wrapRow(content, this.row);
7517
+ var wrapper = _reactsurveymodel__WEBPACK_IMPORTED_MODULE_3__["ReactSurveyElementsWrapper"].wrapRow(survey, content, this.row);
7483
7518
  return wrapper || content;
7484
7519
  };
7485
7520
  SurveyRow.prototype.componentDidMount = function () {
@@ -8410,4 +8445,4 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_survey_core__;
8410
8445
 
8411
8446
  /******/ });
8412
8447
  });
8413
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvZW50cmllcy9yZWFjdC11aS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9ib29sZWFuLWNoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9ib29sZWFuLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1zZXBhcmF0b3IudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC9yb3cudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc2tlbGV0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9sb2dvLWltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvc3VydmV5LWhlYWRlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS9kZWZhdWx0LXRpdGxlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jdXN0b20td2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9lbGVtZW50LWZhY3RvcnkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2Zsb3ctcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2ltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9pbWFnZXBpY2tlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwtYmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3MudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3NCdXR0b25zLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleVdpbmRvdy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9idXR0b25ncm91cC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9jaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9jb21tZW50LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2N1c3RvbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9lbGVtZW50LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VtcHR5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2V4cHJlc3Npb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmFjdG9yeS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9maWxlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2h0bWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkeW5hbWljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX211bHRpcGxldGV4dC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9wYW5lbGR5bmFtaWMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFkaW9ncm91cC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9yYW5raW5nLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhdGluZy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl90ZXh0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHN1cnZleW1vZGVsLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHRpbWVycGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3Jvdy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvc2lnbmF0dXJlcGFkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9zdHJpbmctZWRpdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9zdHJpbmctdmlld2VyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9zZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy91dGlscy9yZXNwb25zaXZpdHktbWFuYWdlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy91dGlscy91dGlscy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleVJlYWN0L2V4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1jb3JlXCIsXCJjb21tb25qc1wiOlwic3VydmV5LWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNvcmVcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBUTtBQUN1RDtBQUNn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QUcsSUFBSSxDQUFDO0FBQ2hJLENBQUM7QUFDRCxTQUFTLGdCQUFnQixDQUFDLEtBQVU7SUFDbEMsT0FBTyxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQztBQUN0QyxDQUFDO0FBQ0QsU0FBUyxlQUFlLENBQUMsS0FBVTtJQUNqQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQzFCLENBQUM7QUFtQkM7Ozs7Ozs7Ozs7OztBQzNPRixtRDs7Ozs7Ozs7Ozs7QUNBQSx1RDs7Ozs7Ozs7Ozs7QUNBQSx5RCIsImZpbGUiOiJzdXJ2ZXktcmVhY3QtdWkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwic3VydmV5LXJlYWN0LXVpXCIsIFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCIsIFwic3VydmV5LWNvcmVcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wic3VydmV5LXJlYWN0LXVpXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU3VydmV5UmVhY3RcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdLCByb290W1wiU3VydmV5XCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cmllcy9yZWFjdC11aS50c1wiKTtcbiIsIi8vIHJlYWN0XG5leHBvcnQgeyBTdXJ2ZXksIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlNb2RlbCwgUmVhY3RXaW5kb3dNb2RlbCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHN1cnZleW1vZGVsXCI7XG5leHBvcnQgeyBSZWFjdFN1cnZleU1vZGVsIGFzIE1vZGVsIH07XG5leHBvcnQgeyBSZWFjdFdpbmRvd01vZGVsIGFzIFdpbmRvd01vZGVsIH07XG5leHBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlXCI7XG5leHBvcnQgeyBTdXJ2ZXlUaW1lclBhbmVsIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0dGltZXJwYW5lbFwiO1xuZXhwb3J0IHsgU3VydmV5TmF2aWdhdGlvbiB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb25cIjtcbmV4cG9ydCB7IFN1cnZleVBhZ2UgfSBmcm9tIFwiLi4vcmVhY3QvcGFnZVwiO1xuZXhwb3J0IHsgU3VydmV5Um93IH0gZnJvbSBcIi4uL3JlYWN0L3Jvd1wiO1xuZXhwb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi4vcmVhY3QvcGFuZWxcIjtcbmV4cG9ydCB7IFN1cnZleUZsb3dQYW5lbCB9IGZyb20gXCIuLi9yZWFjdC9mbG93LXBhbmVsXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvbixcbiAgU3VydmV5RWxlbWVudEVycm9ycyxcbiAgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsLFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvblwiO1xuZXhwb3J0IHtcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0sXG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudCxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveCxcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvblJhbmtpbmcsXG4gIFN1cnZleVF1ZXN0aW9uUmFua2luZ0l0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhbmtpbmdcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9kcm9wZG93blwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25NYXRyaXgsXG4gIFN1cnZleVF1ZXN0aW9uTWF0cml4Um93LFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uSHRtbCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2h0bWxcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRmlsZSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZpbGVcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbXVsdGlwbGV0ZXh0XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9yYWRpb2dyb3VwXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblRleHQgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl90ZXh0XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4gfSBmcm9tIFwiLi4vcmVhY3QvYm9vbGVhblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuQ2hlY2tib3ggfSBmcm9tIFwiLi4vcmVhY3QvYm9vbGVhbi1jaGVja2JveFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25FbXB0eSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VtcHR5XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQ2VsbCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWMgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3BhbmVsZHluYW1pY1wiO1xuZXhwb3J0IHsgU3VydmV5UHJvZ3Jlc3MgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc1wiO1xuZXhwb3J0IHsgU3VydmV5UHJvZ3Jlc3NCdXR0b25zIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3NCdXR0b25zXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhdGluZyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhdGluZ1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgU3VydmV5V2luZG93IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5V2luZG93XCI7XG5leHBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmV4cG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vcmVhY3QvZWxlbWVudC1mYWN0b3J5XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyIH0gZnJvbSBcIi4uL3JlYWN0L2ltYWdlcGlja2VyXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkltYWdlIH0gZnJvbSBcIi4uL3JlYWN0L2ltYWdlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblNpZ25hdHVyZVBhZCB9IGZyb20gXCIuLi9yZWFjdC9zaWduYXR1cmVwYWRcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9idXR0b25ncm91cFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25DdXN0b20sIFN1cnZleVF1ZXN0aW9uQ29tcG9zaXRlIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY3VzdG9tXCI7XG5cbmV4cG9ydCB7IERlZmF1bHRUaXRsZSB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3RpdGxlL2RlZmF1bHQtdGl0bGVcIjtcbmV4cG9ydCB7IFBvcHVwIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcG9wdXAvcG9wdXBcIjtcbmV4cG9ydCB7IExpc3QgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9saXN0L2xpc3RcIjtcbmV4cG9ydCB7IFRpdGxlQWN0aW9ucyB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnNcIjtcbmV4cG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnRcIjtcbmV4cG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuZXhwb3J0IHsgTG9nb0ltYWdlIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9sb2dvLWltYWdlXCI7XG5leHBvcnQgeyBTdXJ2ZXlIZWFkZXIgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL3N1cnZleS1oZWFkZXJcIjtcbmV4cG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb25cIjtcbmV4cG9ydCB7IE1hdHJpeFJvdyB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL21hdHJpeC9yb3dcIjtcbmV4cG9ydCB7IFNrZWxldG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc2tlbGV0b25cIjtcblxuZXhwb3J0IHsgU3VydmV5TG9jU3RyaW5nVmlld2VyIH0gZnJvbSBcIi4uL3JlYWN0L3N0cmluZy12aWV3ZXJcIjtcbmV4cG9ydCB7IFN1cnZleUxvY1N0cmluZ0VkaXRvciB9IGZyb20gXCIuLi9yZWFjdC9zdHJpbmctZWRpdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdXRpbHMvcmVzcG9uc2l2aXR5LW1hbmFnZXJcIjtcbmV4cG9ydCB7IHVud3JhcCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG4vL1VuY29tbWVudCB0byBpbmNsdWRlIHRoZSBcImRhdGVcIiBxdWVzdGlvbiB0eXBlLlxuLy9leHBvcnQge2RlZmF1bHQgYXMgU3VydmV5UXVlc3Rpb25EYXRlfSBmcm9tIFwiLi4vcGx1Z2lucy9yZWFjdC9yZWFjdHF1ZXN0aW9uZGF0ZVwiO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4gfSBmcm9tIFwiLi9ib29sZWFuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5DaGVja2JveCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgY29uc3QgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ3NzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9PlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25DbGlja30+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e3RoaXMuY2hlY2tSZWZ9XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgIDogdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY29udHJvbH1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICBjaGVja2VkPXt0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSB8fCBmYWxzZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yfT5cbiAgICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5zdmdJY29uID9cbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uc3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgIDwvc3ZnPjpcbiAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9PlxuICAgICAgICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMudW5jaGVja2VkUGF0aH1cbiAgICAgICAgICAgICAgICAgIHg9XCI1XCJcbiAgICAgICAgICAgICAgICAgIHk9XCIxMFwiXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjE0XCJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb25cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jaGVja2VkUGF0aH1cbiAgICAgICAgICAgICAgICAgIHBvaW50cz1cIjE5LDEwIDE0LDEwIDE0LDUgMTAsNSAxMCwxMCA1LDEwIDUsMTQgMTAsMTQgMTAsMTkgMTQsMTkgMTQsMTQgMTksMTQgXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaW5kZXRlcm1pbmF0ZVBhdGh9XG4gICAgICAgICAgICAgICAgICBkPVwiTTIyLDBIMkMwLjksMCwwLDAuOSwwLDJ2MjBjMCwxLjEsMC45LDIsMiwyaDIwYzEuMSwwLDItMC45LDItMlYyQzI0LDAuOSwyMy4xLDAsMjIsMHogTTIxLDE4TDYsM2gxNVYxOHogTTMsNmwxNSwxNUgzVjZ6XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNoZWNrXCIgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge3RoaXMucXVlc3Rpb24udGl0bGVMb2NhdGlvbiA9PT0gXCJoaWRkZW5cIiAmJiAoXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0TGFiZWxDc3MoZmFsc2UpfT5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jRGlzcGxheUxhYmVsKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LWJvb2xlYW4tY2hlY2tib3hcIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Cb29sZWFuQ2hlY2tib3gsIHByb3BzKTtcbiAgfVxuKTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwiYm9vbGVhblwiLFxuICBcImNoZWNrYm94XCIsXG4gIFwic3YtYm9vbGVhbi1jaGVja2JveFwiXG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCwgQ3NzQ2xhc3NCdWlsZGVyLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Cb29sZWFuIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByb3RlY3RlZCBjaGVja1JlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrID0gdGhpcy5oYW5kbGVPbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2sgPSB0aGlzLmhhbmRsZU9uTGFiZWxDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlT25Td2l0Y2hDbGljayA9IHRoaXMuaGFuZGxlT25Td2l0Y2hDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY2hlY2tSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25Cb29sZWFuTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkJvb2xlYW5Nb2RlbDtcbiAgfVxuICAvKlxuICBwcml2YXRlIGdldCBhbGxvd0NsaWNrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZSAmJiAhdGhpcy5pc0Rpc3BsYXlNb2RlO1xuICB9XG4gICovXG4gIHByaXZhdGUgZG9DaGVjayh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZG9DaGVjayhldmVudC50YXJnZXQuY2hlY2tlZCk7XG4gIH1cbiAgaGFuZGxlT25DbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vbkxhYmVsQ2xpY2soZXZlbnQsIHRydWUpO1xuICB9XG4gIGhhbmRsZU9uU3dpdGNoQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25Td2l0Y2hDbGlja01vZGVsKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfVxuICBoYW5kbGVPbkxhYmVsQ2xpY2soZXZlbnQ6IGFueSwgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uTGFiZWxDbGljayhldmVudCwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSB0aGlzLmNoZWNrUmVmLmN1cnJlbnQ7XG4gICAgaWYgKGVsKSB7XG4gICAgICBlbC5pbmRldGVybWluYXRlID0gdGhpcy5xdWVzdGlvbi5pc0luZGV0ZXJtaW5hdGU7XG4gICAgfVxuICAgIHRoaXMuY29udHJvbCA9IGVsO1xuICAgIHN1cGVyLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICBjb25zdCBpdGVtQ2xhc3M6IHN0cmluZyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNzcygpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17aXRlbUNsYXNzfSBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uQ2xpY2t9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXt0aGlzLmNoZWNrUmVmfVxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICAgIHZhbHVlPXtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWUgPT09IG51bGxcbiAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICA6IHRoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNvbnRyb2x9XG4gICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWUgfHwgZmFsc2V9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0TGFiZWxDc3MoZmFsc2UpfVxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB0aGlzLmhhbmRsZU9uTGFiZWxDbGljayhldmVudCwgZmFsc2UpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsRmFsc2UpfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zd2l0Y2h9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25Td2l0Y2hDbGlja30+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuc2xpZGVyfT5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uaXNEZXRlcm1pbmF0ZWQgJiYgY3NzQ2xhc3Nlcy5zbGlkZXJUZXh0ID9cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zbGlkZXJUZXh0fT57IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24uZ2V0Q2hlY2tlZExhYmVsKCkpIH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0TGFiZWxDc3ModHJ1ZSl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMuaGFuZGxlT25MYWJlbENsaWNrKGV2ZW50LCB0cnVlKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NMYWJlbFRydWUpfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImJvb2xlYW5cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQm9vbGVhbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFBvcHVwIH0gZnJvbSBcIi4uL3BvcHVwL3BvcHVwXCI7XHJcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhckl0ZW0gfSBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW1cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb25CYXJJdGVtRHJvcGRvd24gZXh0ZW5kcyBTdXJ2ZXlBY3Rpb25CYXJJdGVtIHtcclxuICByZW5kZXJCdXR0b25Db250ZW50KCkge1xyXG4gICAgY29uc3QgYnV0dG9uQ29udGVudCA9IHN1cGVyLnJlbmRlckJ1dHRvbkNvbnRlbnQoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAge2J1dHRvbkNvbnRlbnR9XHJcbiAgICAgICAgPFBvcHVwIG1vZGVsPXt0aGlzLml0ZW0ucG9wdXBNb2RlbH0+PC9Qb3B1cD5cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd25cIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5QWN0aW9uQmFySXRlbURyb3Bkb3duLCBwcm9wcyk7XHJcbn0pO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IEJhc2UsIEFjdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcclxuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcIi4uLy4uL3JlYWN0U3VydmV5XCI7XHJcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcclxuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yIH0gZnJvbSBcIi4vYWN0aW9uLWJhci1zZXBhcmF0b3JcIjtcclxuXHJcbmludGVyZmFjZSBJQWN0aW9uQmFySXRlbVByb3BzIHtcclxuICBpdGVtOiBBY3Rpb247XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJQWN0aW9uQmFySXRlbVByb3BzLCBhbnk+IHtcclxuICBnZXQgaXRlbSgpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyRWxlbWVudCgpIHtcclxuICAgIC8vcmVmYWN0b3JcclxuICAgIGNvbnN0IGl0ZW1DbGFzcyA9IHRoaXMuaXRlbS5nZXRBY3Rpb25Sb290Q3NzKCk7XHJcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB0aGlzLml0ZW0ubmVlZFNlcGFyYXRvciA/IChcclxuICAgICAgPFN1cnZleUFjdGlvbkJhclNlcGFyYXRvcj48L1N1cnZleUFjdGlvbkJhclNlcGFyYXRvcj5cclxuICAgICkgOiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGl0ZW1Db21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgIHRoaXMuaXRlbS5jb21wb25lbnQgfHwgXCJzdi1hY3Rpb24tYmFyLWl0ZW1cIixcclxuICAgICAge1xyXG4gICAgICAgIGl0ZW06IHRoaXMuaXRlbSxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17aXRlbUNsYXNzfSBpZD17dGhpcy5pdGVtLmlkfT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWFjdGlvbl9fY29udGVudFwiPlxyXG4gICAgICAgICAge3NlcGFyYXRvcn1cclxuICAgICAgICAgIHtpdGVtQ29tcG9uZW50fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhckl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcclxuICBJQWN0aW9uQmFySXRlbVByb3BzLFxyXG4gIGFueVxyXG4+IHtcclxuICBnZXQgaXRlbSgpOiBBY3Rpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG5cclxuICByZW5kZXJFbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIDw+e3RoaXMucmVuZGVySW5uZXJCdXR0b24oKX08Lz47XHJcbiAgfVxyXG5cclxuICByZW5kZXJUZXh0KCkge1xyXG4gICAgaWYgKCF0aGlzLml0ZW0uaGFzVGl0bGUpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdGl0bGVDbGFzcyA9IHRoaXMuaXRlbS5nZXRBY3Rpb25CYXJJdGVtVGl0bGVDc3MoKTtcclxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9e3RpdGxlQ2xhc3N9PiB7dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj47XHJcbiAgfVxyXG5cclxuICByZW5kZXJCdXR0b25Db250ZW50KCkge1xyXG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyVGV4dCgpO1xyXG4gICAgY29uc3Qgc3ZnSWNvbiA9ICEhdGhpcy5pdGVtLmljb25OYW1lID8gKFxyXG4gICAgICA8U3ZnSWNvblxyXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5pdGVtLmNzc0NsYXNzZXMuaXRlbUljb259XHJcbiAgICAgICAgc2l6ZT17dGhpcy5pdGVtLmljb25TaXplfVxyXG4gICAgICAgIGljb25OYW1lPXt0aGlzLml0ZW0uaWNvbk5hbWV9XHJcbiAgICAgID48L1N2Z0ljb24+XHJcbiAgICApIDogbnVsbDtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAge3N2Z0ljb259XHJcbiAgICAgICAge3RleHR9XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcklubmVyQnV0dG9uKCkge1xyXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5pdGVtLmdldEFjdGlvbkJhckl0ZW1Dc3MoKTtcclxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5pdGVtLnRvb2x0aXAgfHwgdGhpcy5pdGVtLnRpdGxlO1xyXG4gICAgY29uc3QgYnV0dG9uQ29udGVudCA9IHRoaXMucmVuZGVyQnV0dG9uQ29udGVudCgpO1xyXG4gICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLml0ZW0uZGlzYWJsZVRhYlN0b3AgPyAtMSA6IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IGF0dGFjaEtleTJjbGljayhcclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGRpc2FibGVkPXt0aGlzLml0ZW0uZGlzYWJsZWR9XHJcbiAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5pdGVtLmFjdGlvbih0aGlzLml0ZW0pfVxyXG4gICAgICAgIHRpdGxlPXt0aXRsZX1cclxuICAgICAgICB0YWJJbmRleD17dGFiSW5kZXh9XHJcbiAgICAgID5cclxuICAgICAgICB7YnV0dG9uQ29udGVudH1cclxuICAgICAgPC9idXR0b24+LCBudWxsLCB7IHByb2Nlc3NFc2M6IGZhbHNlIH0pO1xyXG5cclxuICAgIHJldHVybiBidXR0b247XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWFjdGlvbi1iYXItaXRlbVwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlBY3Rpb25CYXJJdGVtLCBwcm9wcyk7XHJcbn0pO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIHZhciBjbGFzc05hbWUgPSBgc3YtYWN0aW9uLWJhci1zZXBhcmF0b3IgJHt0aGlzLnByb3BzLmNzc0NsYXNzZXN9YDtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+PC9kaXY+O1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1hY3Rpb24tYmFyLXNlcGFyYXRvclwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEJhc2UsXG4gIEFjdGlvbixcbiAgQWN0aW9uQ29udGFpbmVyXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQWRhcHRpdmVBY3Rpb25Db250YWluZXIgfSBmcm9tIFwiLi4vLi4vLi4vYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXJcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbiB9IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbVwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItc2VwYXJhdG9yXCI7XG5cbmludGVyZmFjZSBJQWN0aW9uQmFyUHJvcHMge1xuICBtb2RlbDogQWN0aW9uQ29udGFpbmVyPEFjdGlvbj47XG4gIGhhbmRsZUNsaWNrPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElBY3Rpb25CYXJQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSUFjdGlvbkJhclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFuZGxlQ2xpY2soKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGFuZGxlQ2xpY2sgIT09IHVuZGVmaW5lZCA/IHRoaXMucHJvcHMuaGFuZGxlQ2xpY2sgOiB0cnVlO1xuICB9XG5cbiAgZ2V0IG1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoIXRoaXMubW9kZWwuaGFzQWN0aW9ucykgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICB0aGlzLm1vZGVsLmluaXRSZXNwb25zaXZpdHlNYW5hZ2VyKGNvbnRhaW5lcik7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLnJlc2V0UmVzcG9uc2l2aXR5TWFuYWdlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogYW55IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnJlbmRlckl0ZW1zKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5nZXRSb290Q3NzKCl9XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2sgPyBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9IDogdW5kZWZpbmVkfVxuICAgICAgPlxuICAgICAgICB7aXRlbXN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwucmVuZGVyZWRBY3Rpb25zLm1hcChcbiAgICAgIChpdGVtOiBBY3Rpb24sIGl0ZW1JbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFN1cnZleUFjdGlvbiBpdGVtPXtpdGVtfSBrZXk9e1wiaXRlbVwiICsgaXRlbUluZGV4fT48L1N1cnZleUFjdGlvbj5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtYWN0aW9uLWJhclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgU3VydmV5QWN0aW9uQmFyLFxuICAgIChwcm9wcyBhcyBhbnkpIGFzIElBY3Rpb25CYXJQcm9wc1xuICApO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IExpc3RNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcclxuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcIi4uLy4uL3JlYWN0U3VydmV5XCI7XHJcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcclxuXHJcbmludGVyZmFjZSBJTGlzdEl0ZW1Qcm9wcyB7XHJcbiAgbW9kZWw6IExpc3RNb2RlbDtcclxuICBpdGVtOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElMaXN0SXRlbVByb3BzLCBhbnk+IHtcclxuICBnZXQgbW9kZWwoKTogTGlzdE1vZGVsIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xyXG4gIH1cclxuICBnZXQgaXRlbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLm1vZGVsLm9uS2V5RG93bihldmVudCk7XHJcbiAgfTtcclxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xyXG4gIH1cclxuICByZW5kZXIoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXRlbSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0eWxlID0ge1xyXG4gICAgICBwYWRkaW5nTGVmdDogdGhpcy5tb2RlbC5nZXRJdGVtSW5kZW50KHRoaXMuaXRlbSksXHJcbiAgICAgIGRpc3BsYXk6IHRoaXMuaXRlbS52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgdGhpcy5pdGVtLnZpc2libGUgPyBudWxsIDogXCJub25lXCIsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5tb2RlbC5nZXRJdGVtQ2xhc3ModGhpcy5pdGVtKTtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBbXTtcclxuICAgIGlmICghdGhpcy5pdGVtLmNvbXBvbmVudCkge1xyXG4gICAgICBjb25zdCBpY29uID0gdGhpcy5pdGVtLmljb25OYW1lID8gKFxyXG4gICAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgICBrZXk9ezF9XHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1saXN0X19pdGVtLWljb25cIlxyXG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMuaXRlbS5pY29uTmFtZX1cclxuICAgICAgICAgIHNpemU9ezI0fVxyXG4gICAgICAgID48L1N2Z0ljb24+XHJcbiAgICAgICkgOiBudWxsO1xyXG4gICAgICBjb250ZW50LnB1c2goaWNvbik7XHJcbiAgICAgIGNvbnRlbnQucHVzaCg8c3BhbiBrZXk9ezJ9Pnt0aGlzLml0ZW0udGl0bGV9PC9zcGFuPik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb250ZW50LnB1c2goUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRoaXMuaXRlbS5jb21wb25lbnQsIHsgaXRlbTogdGhpcy5pdGVtIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKFxyXG4gICAgICA8bGlcclxuICAgICAgICBzdHlsZT17c3R5bGV9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XHJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RJdGVtKHRoaXMuaXRlbSk7XHJcbiAgICAgICAgfX1cclxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50LCB0aGlzLml0ZW0pfVxyXG4gICAgICA+XHJcbiAgICAgICAge2NvbnRlbnR9XHJcbiAgICAgIDwvbGk+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtbGlzdC1pdGVtXCIsIChwcm9wcykgPT4ge1xyXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExpc3RJdGVtLCBwcm9wcyk7XHJcbn0pO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IElBY3Rpb24sIExpc3RNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcclxuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xyXG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gXCIuL2xpc3QtaXRlbVwiO1xyXG5cclxuaW50ZXJmYWNlIElMaXN0UHJvcHMge1xyXG4gIG1vZGVsOiBMaXN0TW9kZWw7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUxpc3RQcm9wcywgYW55PiB7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgZmlsdGVyZWRUZXh0OiB0aGlzLm1vZGVsLmZpbHRlcmVkVGV4dCB8fCBcIlwiXHJcbiAgICB9O1xyXG4gIH1cclxuICBnZXQgbW9kZWwoKTogTGlzdE1vZGVsIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xyXG4gIH1cclxuICBoYW5kbGVLZXlkb3duID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRoaXMubW9kZWwub25LZXlEb3duKGV2ZW50KTtcclxuICB9O1xyXG4gIGdldFN0YXRlRWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsO1xyXG4gIH1cclxuICByZW5kZXJFbGVtZW50KCkge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnJlbmRlckl0ZW1zKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWxpc3RfX2NvbnRhaW5lclwiPlxyXG4gICAgICAgIHt0aGlzLnNlYXJjaEVsZW1lbnRDb250ZW50KCl9XHJcbiAgICAgICAgPHVsXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1saXN0XCJcclxuICAgICAgICAgIG9uTW91c2VEb3duPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleWRvd259XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge2l0ZW1zfVxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVuZGVySXRlbXMoKSB7XHJcbiAgICBpZiAoIXRoaXMubW9kZWwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMubW9kZWwucmVuZGVyZWRBY3Rpb25zO1xyXG4gICAgaWYgKCFpdGVtcykge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IElBY3Rpb24sIGl0ZW1JbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPExpc3RJdGVtIG1vZGVsPXt0aGlzLm1vZGVsfSBpdGVtPXtpdGVtfSBrZXk9e1wiaXRlbVwiICsgaXRlbUluZGV4fT48L0xpc3RJdGVtPlxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hFbGVtZW50Q29udGVudCgpIHtcclxuICAgIGlmICghdGhpcy5tb2RlbC5uZWVkRmlsdGVyKSByZXR1cm4gbnVsbDtcclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zdCBvbkNoYW5nZSA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZS50YXJnZXQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgIHRoaXMubW9kZWwuZmlsdGVyZWRUZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtbGlzdF9fZmlsdGVyXCI+XHJcbiAgICAgICAgICA8U3ZnSWNvblxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e1wic3YtbGlzdF9fZmlsdGVyLWljb25cIn1cclxuICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1zZWFyY2hcIn1cclxuICAgICAgICAgICAgc2l6ZT17XCJhdXRvXCJ9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L1N2Z0ljb24+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdi1saXN0X19pbnB1dFwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLm1vZGVsLmZpbHRlcmVkVGV4dFBsYWNlaG9sZGVyfVxyXG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5maWx0ZXJlZFRleHR9XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cclxuICAgICAgICAgID48L2lucHV0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1saXN0XCIsIChwcm9wcykgPT4ge1xyXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExpc3QsIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiwgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uLy4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPblNob3dIaWRlQ2xpY2sgPSB0aGlzLmhhbmRsZU9uU2hvd0hpZGVDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBnZXQgaXRlbSgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnJvdztcbiAgfVxuICBoYW5kbGVPblNob3dIaWRlQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucm93LnNob3dIaWRlRGV0YWlsUGFuZWxDbGljaygpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXNFeHBhbmRlZCA9IHRoaXMucm93LmlzRGV0YWlsUGFuZWxTaG93aW5nO1xuICAgIHZhciBhcmlhRXhwYW5kZWQgPSBpc0V4cGFuZGVkO1xuICAgIHZhciBhcmlhQ29udHJvbHMgPSBpc0V4cGFuZGVkID8gdGhpcy5yb3cuZGV0YWlsUGFuZWxJZCA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25TaG93SGlkZUNsaWNrfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0RGV0YWlsUGFuZWxCdXR0b25Dc3ModGhpcy5yb3cpfVxuICAgICAgICBhcmlhLWV4cGFuZGVkPXthcmlhRXhwYW5kZWR9XG4gICAgICAgIGFyaWEtY29udHJvbHM9e2FyaWFDb250cm9sc31cbiAgICAgID5cbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0RGV0YWlsUGFuZWxJY29uQ3NzKHRoaXMucm93KX1cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEljb25JZCh0aGlzLnJvdyl9XG4gICAgICAgICAgc2l6ZT17XCJhdXRvXCJ9XG4gICAgICAgID5cbiAgICAgICAgPC9TdmdJY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXgtZGV0YWlsLWJ1dHRvblwiLFxuICBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25EcmFnfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1kcmFnLWRyb3AtaWNvblwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGljayA9IHRoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCByb3coKTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5yb3c7XG4gIH1cbiAgaGFuZGxlT25Sb3dSZW1vdmVDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVSb3dVSSh0aGlzLnJvdyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciByZW1vdmVSb3dUZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NSZW1vdmVSb3dUZXh0KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UmVtb3ZlUm93QnV0dG9uQ3NzKCl9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uUm93UmVtb3ZlQ2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgID5cbiAgICAgICAge3JlbW92ZVJvd1RleHR9XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25SZW1vdmV9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1yZW1vdmUtYnV0dG9uXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdywgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSU1BdHJpeFJvd1Byb3BzIHtcbiAgbW9kZWw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdztcbiAgcGFyZW50TWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Um93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SU1BdHJpeFJvd1Byb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElNQXRyaXhSb3dQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBnZXQgbW9kZWwoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBnZXQgcGFyZW50TWF0cml4KCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBhcmVudE1hdHJpeDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBvblBvaW50ZXJEb3duSGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5wYXJlbnRNYXRyaXgub25Qb2ludGVyRG93bihldmVudC5uYXRpdmVFdmVudCwgdGhpcy5tb2RlbC5yb3cpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbDtcbiAgICByZXR1cm4gKFxuICAgICAgPHRyXG4gICAgICAgIGNsYXNzTmFtZT17bW9kZWwuY2xhc3NOYW1lfVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LW1hdHJpeC1yb3c9e21vZGVsLnJvdyAmJiBtb2RlbC5yb3cuaWR9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm9uUG9pbnRlckRvd25IYW5kbGVyKGV2ZW50KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LXJvd1wiLFxuICAocHJvcHM6IElNQXRyaXhSb3dQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE1hdHJpeFJvdywgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFBvcHVwTW9kZWwsIFBvcHVwQmFzZVZpZXdNb2RlbCwgY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbCwgQ3NzQ2xhc3NCdWlsZGVyLCBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVBvcHVwUHJvcHMge1xuICBtb2RlbDogUG9wdXBNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFBvcHVwIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVBvcHVwUHJvcHMsIGFueT4ge1xuICBwcml2YXRlIHBvcHVwOiBQb3B1cEJhc2VWaWV3TW9kZWw7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVBvcHVwUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLnBvcHVwID0gbmV3IFBvcHVwQmFzZVZpZXdNb2RlbCh0aGlzLnByb3BzLm1vZGVsKTtcbiAgICB0aGlzLnBvcHVwLmNyZWF0ZVBvcHVwQ29udGFpbmVyKCk7XG4gIH1cbiAgZ2V0IG1vZGVsKCk6IFBvcHVwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnBvcHVwLm1vdW50UG9wdXBDb250YWluZXIoKTtcbiAgICB0aGlzLnBvcHVwLnRhcmdldEVsZW1lbnQgPSB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5wb3B1cC5kZXN0cm95UG9wdXBDb250YWluZXIoKTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBJUG9wdXBQcm9wcykge1xuICAgIHJldHVybiBuZXh0UHJvcHMubW9kZWwgIT09IHRoaXMucG9wdXAubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMucG9wdXAubW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgIGNvbnN0IHBvcHVwQ29udGFpbmVyID0gUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFBvcHVwQ29udGFpbmVyIG1vZGVsPXt0aGlzLnBvcHVwfT48L1BvcHVwQ29udGFpbmVyPixcbiAgICAgIHRoaXMucG9wdXAuY29udGFpbmVyXG4gICAgKTtcbiAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMuY29udGFpbmVyUmVmfT57cG9wdXBDb250YWluZXJ9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBvcHVwXCIsXG4gIChwcm9wczogSVBvcHVwUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChQb3B1cCwgcHJvcHMpO1xuICB9XG4pO1xuXG5leHBvcnQgY2xhc3MgUG9wdXBDb250YWluZXIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwdWJsaWMgcHJldklzVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMubW9kZWwub25LZXlEb3duKGV2ZW50KTtcbiAgfTtcbiAgZ2V0IG1vZGVsKCk6IFBvcHVwQmFzZVZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjbGlja0luc2lkZSA9IChldjogYW55KSA9PiB7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH07XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGlmICghdGhpcy5wcmV2SXNWaXNpYmxlICYmIHRoaXMubW9kZWwuaXNWaXNpYmxlKSB7XG4gICAgICB0aGlzLm1vZGVsLnVwZGF0ZU9uU2hvd2luZygpO1xuICAgIH1cbiAgICB0aGlzLnByZXZJc1Zpc2libGUgPSB0aGlzLm1vZGVsLmlzVmlzaWJsZTtcbiAgfVxuICByZW5kZXJDb250YWluZXIoKSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMubW9kZWwuc2hvd1BvaW50ZXIgPyB0aGlzLnJlbmRlclBvaW50ZXIoKSA6IG51bGw7XG4gICAgY29uc3QgaGVhZGVyID0gISF0aGlzLm1vZGVsLnRpdGxlID8gdGhpcy5yZW5kZXJIZWFkZXIoKSA6IG51bGw7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVuZGVyQ29udGVudCgpO1xuICAgIGNvbnN0IGZvb3RlciA9IHRoaXMubW9kZWwuc2hvd0Zvb3RlciA/IHRoaXMucmVuZGVyRm9vdGVyKCkgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19jb250YWluZXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGxlZnQ6IHRoaXMubW9kZWwubGVmdCxcbiAgICAgICAgICB0b3A6IHRoaXMubW9kZWwudG9wLFxuICAgICAgICAgIGhlaWdodDogdGhpcy5tb2RlbC5oZWlnaHQsXG4gICAgICAgIH19XG4gICAgICAgIG9uQ2xpY2s9eyhldjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGlja0luc2lkZShldik7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfc2hhZG93XCI+XG4gICAgICAgICAge3BvaW50ZXJ9XG4gICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LXBvcHVwX19zY3JvbGxpbmctY29udGVudFwiPlxuICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2Zvb3Rlcn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlclBvaW50ZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgbGVmdDogdGhpcy5tb2RlbC5wb2ludGVyVGFyZ2V0LmxlZnQsXG4gICAgICAgICAgdG9wOiB0aGlzLm1vZGVsLnBvaW50ZXJUYXJnZXQudG9wLFxuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9XCJzdi1wb3B1cF9fcG9pbnRlclwiXG4gICAgICA+PC9zcGFuPlxuICAgICk7XG4gIH1cbiAgcmVuZGVySGVhZGVyKCkge1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInN2LXBvcHVwX19oZWFkZXJcIj57dGhpcy5tb2RlbC50aXRsZX08L2Rpdj47XG4gIH1cbiAgcmVuZGVyQ29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50Q29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgdGhpcy5tb2RlbC5jb250ZW50Q29tcG9uZW50TmFtZSxcbiAgICAgIHRoaXMubW9kZWwuY29udGVudENvbXBvbmVudERhdGFcbiAgICApO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInN2LXBvcHVwX19jb250ZW50XCI+e2NvbnRlbnRDb21wb25lbnR9PC9kaXY+O1xuICB9XG4gIHJlbmRlckNhbmNlbEJ1dHRvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2Zvb3Rlci1pdGVtIHN2LXBvcHVwX19idXR0b24gc3YtcG9wdXBfX2J1dHRvbi0tY2FuY2VsXCJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuY2FuY2VsKCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLm1vZGVsLmNhbmNlbEJ1dHRvblRleHR9XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG4gIHJlbmRlckFwcGx5QnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9XCJzdi1wb3B1cF9fZm9vdGVyLWl0ZW0gc3YtcG9wdXBfX2J1dHRvbiBzdi1wb3B1cF9fYnV0dG9uLS1hcHBseVwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICB0aGlzLm1vZGVsLmFwcGx5KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLm1vZGVsLmFwcGx5QnV0dG9uVGV4dH1cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRm9vdGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LXBvcHVwX19mb290ZXJcIj5cbiAgICAgICAge3RoaXMucmVuZGVyQ2FuY2VsQnV0dG9uKCl9XG4gICAgICAgIHt0aGlzLm1vZGVsLmlzTW9kYWwgPyB0aGlzLnJlbmRlckFwcGx5QnV0dG9uKCkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5yZW5kZXJDb250YWluZXIoKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQoXCJzdi1wb3B1cFwiKS5hcHBlbmQodGhpcy5tb2RlbC5zdHlsZUNsYXNzKS50b1N0cmluZygpO1xuICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgZGlzcGxheTogdGhpcy5tb2RlbC5pc1Zpc2libGUgPyBcIlwiIDogXCJub25lXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIG9uQ2xpY2s9eyhlOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLm1vZGVsLmNsaWNrT3V0c2lkZSgpO1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH19XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlkb3dufVxuICAgICAgPlxuICAgICAgICB7Y29udGFpbmVyfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvd01vZGFsKFxuICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gIGRhdGE6IGFueSxcbiAgb25BcHBseTogKCkgPT4gYm9vbGVhbixcbiAgb25DYW5jZWw/OiAoKSA9PiB2b2lkLFxuICBjc3NDbGFzcz86IHN0cmluZyxcbiAgdGl0bGU/OiBzdHJpbmcsXG4gIGRpc3BsYXlNb2RlOiBcInBvcHVwXCIgfCBcIm92ZXJsYXlcIiA9IFwicG9wdXBcIlxuKSB7XG4gIGNvbnN0IHBvcHVwVmlld01vZGVsOiBQb3B1cEJhc2VWaWV3TW9kZWwgPSBjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsKFxuICAgIGNvbXBvbmVudE5hbWUsXG4gICAgZGF0YSxcbiAgICBvbkFwcGx5LFxuICAgIG9uQ2FuY2VsLFxuICAgICgpID0+IHtcbiAgICAgIFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUocG9wdXBWaWV3TW9kZWwuY29udGFpbmVyKTtcbiAgICAgIHBvcHVwVmlld01vZGVsLmRlc3Ryb3lQb3B1cENvbnRhaW5lcigpO1xuICAgIH0sXG4gICAgdW5kZWZpbmVkLFxuICAgIGNzc0NsYXNzLFxuICAgIHRpdGxlLFxuICAgIGRpc3BsYXlNb2RlXG4gICk7XG4gIFJlYWN0RE9NLnJlbmRlcig8UG9wdXBDb250YWluZXIgbW9kZWw9e3BvcHVwVmlld01vZGVsfSAvPiwgcG9wdXBWaWV3TW9kZWwuY29udGFpbmVyKTtcblxuICBwb3B1cFZpZXdNb2RlbC5tb2RlbC5pc1Zpc2libGUgPSB0cnVlO1xufVxuXG5zZXR0aW5ncy5zaG93TW9kYWwgPSBzaG93TW9kYWw7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU2tlbGV0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LXNrZWxldG9uLWVsZW1lbnRcIj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1za2VsZXRvblwiLCAocHJvcHM6IGFueSkgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTa2VsZXRvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuaW50ZXJmYWNlIElMb2dvSW1hZ2VQcm9wcyB7XG4gIGRhdGE6IFN1cnZleU1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgTG9nb0ltYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PElMb2dvSW1hZ2VQcm9wcywgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJTG9nb0ltYWdlUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgY29uc3QgY29udGVudDogSlNYLkVsZW1lbnRbXSA9IFtdO1xuICAgIGNvbnRlbnQucHVzaChcbiAgICAgIDxkaXYga2V5PXtcImxvZ28taW1hZ2VcIn0gY2xhc3NOYW1lPXt0aGlzLnN1cnZleS5sb2dvQ2xhc3NOYW1lc30+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuc3VydmV5LmNzcy5sb2dvSW1hZ2V9XG4gICAgICAgICAgc3JjPXt0aGlzLnN1cnZleS5sb2NMb2dvLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICBhbHQ9e3RoaXMuc3VydmV5LmxvY1RpdGxlLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICB3aWR0aD17dGhpcy5zdXJ2ZXkubG9nb1dpZHRoID8gdGhpcy5zdXJ2ZXkubG9nb1dpZHRoIDogdW5kZWZpbmVkfVxuICAgICAgICAgIGhlaWdodD17dGhpcy5zdXJ2ZXkubG9nb0hlaWdodCA/IHRoaXMuc3VydmV5LmxvZ29IZWlnaHQgOiB1bmRlZmluZWR9XG4gICAgICAgICAgc3R5bGU9e3sgb2JqZWN0Rml0OiB0aGlzLnN1cnZleS5sb2dvRml0IGFzIGFueSB9fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgICByZXR1cm4gPD57Y29udGVudH08Lz47XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1sb2dvLWltYWdlXCIsIChwcm9wczogSUxvZ29JbWFnZVByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvZ29JbWFnZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4uL3RpdGxlL3RpdGxlLWVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlIZWFkZXJQcm9wcyB7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlIZWFkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SVN1cnZleUhlYWRlclByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlIZWFkZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBjaGFuZ2VkOiAwIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgfVxuICBwcml2YXRlIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuY3NzO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qgc2VsZjogU3VydmV5SGVhZGVyID0gdGhpcztcbiAgICB0aGlzLnN1cnZleS5sb2NMb2dvLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuc2V0U3RhdGUoeyBjaGFuZ2VkOiBzZWxmLnN0YXRlLmNoYW5nZWQgKyAxIH0pO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5zdXJ2ZXkubG9jTG9nby5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7IH07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclRpdGxlKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnJlbmRlcmVkSGFzVGl0bGUpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKFxuICAgICAgdGhpcy5zdXJ2ZXkubG9jRGVzY3JpcHRpb25cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MuaGVhZGVyVGV4dH1cbiAgICAgICAgc3R5bGU9e3sgbWF4V2lkdGg6IHRoaXMuc3VydmV5LnRpdGxlTWF4V2lkdGggfX1cbiAgICAgID5cbiAgICAgICAgPFRpdGxlRWxlbWVudCBlbGVtZW50PXt0aGlzLnN1cnZleX0+PC9UaXRsZUVsZW1lbnQ+XG4gICAgICAgIDxoNSBjbGFzc05hbWU9e3RoaXMuY3NzLmRlc2NyaXB0aW9ufT57ZGVzY3JpcHRpb259PC9oNT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckxvZ29JbWFnZShpc1JlbmRlcjogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIWlzUmVuZGVyKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBjb21wb25lbnROYW1lOiBzdHJpbmcgPSB0aGlzLnN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoXG4gICAgICB0aGlzLnN1cnZleSxcbiAgICAgIFwibG9nby1pbWFnZVwiXG4gICAgKTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhOiBhbnkgPSB0aGlzLnN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEoXG4gICAgICB0aGlzLnN1cnZleSxcbiAgICAgIFwibG9nby1pbWFnZVwiXG4gICAgKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGRhdGE6IGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnN1cnZleS5yZW5kZXJlZEhhc0hlYWRlcikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5oZWFkZXJ9PlxuICAgICAgICB7dGhpcy5yZW5kZXJMb2dvSW1hZ2UodGhpcy5zdXJ2ZXkuaXNMb2dvQmVmb3JlKX1cbiAgICAgICAge3RoaXMucmVuZGVyVGl0bGUoKX1cbiAgICAgICAge3RoaXMucmVuZGVyTG9nb0ltYWdlKHRoaXMuc3VydmV5LmlzTG9nb0FmdGVyKX1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmhlYWRlckNsb3NlfT48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3VydmV5LWhlYWRlclwiLFxuICAocHJvcHM6IElTdXJ2ZXlIZWFkZXJQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUhlYWRlciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IGNyZWF0ZVN2ZyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3ZnSWNvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBwcml2YXRlIHN2Z0ljb25SZWY6IGFueTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN2Z0ljb25SZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHVwZGF0ZVN2ZygpIHtcbiAgICBpZih0aGlzLnByb3BzLmljb25OYW1lKVxuICAgICAgY3JlYXRlU3ZnKFxuICAgICAgICB0aGlzLnByb3BzLnNpemUsXG4gICAgICAgIHRoaXMucHJvcHMud2lkdGgsXG4gICAgICAgIHRoaXMucHJvcHMuaGVpZ2h0LFxuICAgICAgICB0aGlzLnByb3BzLmljb25OYW1lLFxuICAgICAgICB0aGlzLnN2Z0ljb25SZWYuY3VycmVudFxuICAgICAgKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgdGhpcy51cGRhdGVTdmcoKTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWV9IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLnByb3BzLmljb25OYW1lID9cbiAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPXtcInN2LXN2Zy1pY29uXCJ9IHJlZj17dGhpcy5zdmdJY29uUmVmfSByb2xlPVwiaW1nXCI+PHVzZT48L3VzZT48L3N2Zz5cbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVN2ZygpO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3Ytc3ZnLWljb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN2Z0ljb24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24sIERlZmF1bHRUaXRsZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgVGl0bGVDb250ZW50IH0gZnJvbSBcIi4vdGl0bGUtY29udGVudFwiO1xuXG5leHBvcnQgY2xhc3MgRGVmYXVsdFRpdGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHByaXZhdGUgaXNOZWVkRm9jdXMgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgZ2V0IGNzc0NsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGVsZW1lbnQoKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdmFyIGV4cGFuZENvbGxhcHNlID0gbnVsbDtcbiAgICBpZiAodGhpcy5lbGVtZW50LmlzQ29sbGFwc2VkIHx8IHRoaXMuZWxlbWVudC5pc0V4cGFuZGVkKSB7XG4gICAgICBjb25zdCBpY29uQ3NzOiBzdHJpbmcgPSBEZWZhdWx0VGl0bGVNb2RlbC5nZXRJY29uQ3NzKFxuICAgICAgICB0aGlzLmNzc0NsYXNzZXMsIHRoaXMuZWxlbWVudC5pc0NvbGxhcHNlZCk7XG5cbiAgICAgIHZhciBjaGFuZ2VFeHBhbmRlZCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICAgIGxldCBxdWVzdGlvbiA9IHRoaXMuZWxlbWVudDtcblxuICAgICAgICBpZiAoIXF1ZXN0aW9uLmlzRXhwYW5kZWQgJiYgIXF1ZXN0aW9uLmlzQ29sbGFwc2VkKSByZXR1cm47XG5cbiAgICAgICAgcXVlc3Rpb24udG9nZ2xlU3RhdGUoKTtcbiAgICAgICAgdGhpcy5pc05lZWRGb2N1cyA9IHF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuICAgICAgfTtcbiAgICAgIHZhciBwcmVzc0V4cGFuZCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykgY2hhbmdlRXhwYW5kZWQoZXZlbnQpO1xuICAgICAgfTtcbiAgICAgIHZhciBhcmlhRXhwYW5kZWQgPSB0aGlzLmVsZW1lbnQuaXNFeHBhbmRlZDtcbiAgICAgIHZhciBhcmlhQ29udHJvbHMgPSB0aGlzLmVsZW1lbnQuaXNFeHBhbmRlZFxuICAgICAgICA/IHRoaXMuZWxlbWVudC5jb250ZW50SWRcbiAgICAgICAgOiBudWxsO1xuICAgICAgZXhwYW5kQ29sbGFwc2UgPSAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXtpY29uQ3NzfVxuICAgICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICAgIG9uS2V5VXA9e3ByZXNzRXhwYW5kfVxuICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9e2FyaWFFeHBhbmRlZH1cbiAgICAgICAgICBhcmlhLWNvbnRyb2xzPXthcmlhQ29udHJvbHN9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFRpdGxlQ29udGVudFxuICAgICAgICAgIGVsZW1lbnQ9e3RoaXMuZWxlbWVudH1cbiAgICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLmNzc0NsYXNzZXN9XG4gICAgICAgID48L1RpdGxlQ29udGVudD5cbiAgICAgICAge2V4cGFuZENvbGxhcHNlfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb0FmdGVyUmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmlzTmVlZEZvY3VzKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuY2xpY2tUaXRsZUZ1bmN0aW9uKCk7XG4gICAgICB0aGlzLmlzTmVlZEZvY3VzID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtZGVmYXVsdC10aXRsZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGVmYXVsdFRpdGxlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnQsIFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuLi9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFRpdGxlQ29udGVudCB9IGZyb20gXCIuL3RpdGxlLWNvbnRlbnRcIjtcblxuZXhwb3J0IGNsYXNzIFRpdGxlQWN0aW9ucyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBwcm90ZWN0ZWQgZ2V0IGNzc0NsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGVsZW1lbnQoKTogU3VydmV5RWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGl0bGVDb250ZW50OiBKU1guRWxlbWVudCA9IDxUaXRsZUNvbnRlbnQgZWxlbWVudD17dGhpcy5lbGVtZW50fSBjc3NDbGFzc2VzPXt0aGlzLmNzc0NsYXNzZXN9PjwvVGl0bGVDb250ZW50PjtcbiAgICBpZighdGhpcy5lbGVtZW50Lmhhc1RpdGxlQWN0aW9ucykgcmV0dXJuIHRpdGxlQ29udGVudDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi10aXRsZS1hY3Rpb25zXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2LXRpdGxlLWFjdGlvbnNfX3RpdGxlXCI+e3RpdGxlQ29udGVudH08L3NwYW4+XG4gICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMuZWxlbWVudC5nZXRUaXRsZVRvb2xiYXIoKX0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcImVsZW1lbnRcIixcbiAgXCJ0aXRsZS1hY3Rpb25zXCIsXG4gIFwic3YtdGl0bGUtYWN0aW9uc1wiXG4pO1xuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXRpdGxlLWFjdGlvbnNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRpdGxlQWN0aW9ucywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50Q29yZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBJVGl0bGVPd25lciB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVGl0bGVDb250ZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjc3NDbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cblxuICBwcml2YXRlIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnRDb3JlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGl0bGVPd25lciA9IHRoaXMuZWxlbWVudC5nZXRUaXRsZU93bmVyKCk7XG4gICAgaWYoIXRpdGxlT3duZXIpXG4gICAgICByZXR1cm4gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKHRoaXMuZWxlbWVudC5sb2NUaXRsZSk7XG4gICAgdmFyIHNwYW5zID0gdGhpcy5yZW5kZXJUaXRsZVNwYW5zKHRpdGxlT3duZXIsIHRoaXMuY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIDw+e3NwYW5zfTwvPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGVTcGFucyhlbGVtZW50OiBJVGl0bGVPd25lciwgY3NzQ2xhc3NlczogYW55KTogQXJyYXk8SlNYLkVsZW1lbnQ+IHtcbiAgICB2YXIgZ2V0U3BhY2VTcGFuID0gKGtleTogYW55KSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBkYXRhLWtleT17a2V5fSBrZXk9e2tleX0+XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfTtcbiAgICB2YXIgc3BhbnMgPSBbXTtcbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0T25TdGFydCkge1xuICAgICAgc3BhbnMucHVzaCh0aGlzLnJlbmRlclJlcXVpcmVUZXh0KGVsZW1lbnQsIGNzc0NsYXNzZXMpKTtcbiAgICAgIHNwYW5zLnB1c2goZ2V0U3BhY2VTcGFuKFwicmVxLXNwXCIpKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uTnVtYmVyID0gZWxlbWVudC5ubztcbiAgICBpZiAocXVlc3Rpb25OdW1iZXIpIHtcbiAgICAgIHNwYW5zLnB1c2goXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgZGF0YS1rZXk9e1wicV9udW1cIn1cbiAgICAgICAgICBrZXk9e1wicV9udW1cIn1cbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubnVtYmVyfVxuICAgICAgICAgIHN0eWxlPXt7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH19XG4gICAgICAgICAgYXJpYS1oaWRkZW49e3RydWV9XG4gICAgICAgID5cbiAgICAgICAgICB7cXVlc3Rpb25OdW1iZXJ9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcIm51bS1zcFwiKSk7XG4gICAgfVxuICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZVRleHRCZWZvcmVUaXRsZSkge1xuICAgICAgc3BhbnMucHVzaCh0aGlzLnJlbmRlclJlcXVpcmVUZXh0KGVsZW1lbnQsIGNzc0NsYXNzZXMpKTtcbiAgICAgIHNwYW5zLnB1c2goZ2V0U3BhY2VTcGFuKFwicmVxLXNwXCIpKTtcbiAgICB9XG4gICAgc3BhbnMucHVzaChcbiAgICAgIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhlbGVtZW50LmxvY1RpdGxlLCBudWxsLCBcInFfdGl0bGVcIilcbiAgICApO1xuICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZVRleHRBZnRlclRpdGxlKSB7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgICBzcGFucy5wdXNoKHRoaXMucmVuZGVyUmVxdWlyZVRleHQoZWxlbWVudCwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gc3BhbnM7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclJlcXVpcmVUZXh0KFxuICAgIGVsZW1lbnQ6IElUaXRsZU93bmVyLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuXG4gICAgICAgIGRhdGEta2V5PXtcInJlcS10ZXh0XCJ9XG4gICAgICAgIGtleT17XCJyZXEtdGV4dFwifVxuICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucmVxdWlyZWRUZXh0IHx8IGNzc0NsYXNzZXMucGFuZWwucmVxdWlyZWRUZXh0fVxuICAgICAgICBhcmlhLWhpZGRlbj17dHJ1ZX1cbiAgICAgID5cbiAgICAgICAge2VsZW1lbnQucmVxdWlyZWRUZXh0fVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRDb3JlLCBkb0tleTJDbGlja1VwIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBUaXRsZUFjdGlvbnMgfSBmcm9tIFwiLi90aXRsZS1hY3Rpb25zXCI7XG5cbmV4cG9ydCBjbGFzcyBUaXRsZUVsZW1lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnRDb3JlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuaGFzVGl0bGUpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHRpdGxlQ29udGVudCA9IChcbiAgICAgIDxUaXRsZUFjdGlvbnNcbiAgICAgICAgZWxlbWVudD17ZWxlbWVudH1cbiAgICAgICAgY3NzQ2xhc3Nlcz17ZWxlbWVudC5jc3NDbGFzc2VzfVxuICAgICAgPjwvVGl0bGVBY3Rpb25zPlxuICAgICk7XG4gICAgbGV0IG9uQ2xpY2sgPSBudWxsO1xuICAgIGxldCBvbktleVVwID0gbnVsbDtcbiAgICBpZiAoZWxlbWVudC5oYXNUaXRsZUV2ZW50cykge1xuICAgICAgb25DbGljayA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQudG9nZ2xlU3RhdGUoKTtcbiAgICAgIH07XG4gICAgICBvbktleVVwID0gKGV2dDogYW55KSA9PiB7XG4gICAgICAgIGRvS2V5MkNsaWNrVXAoZXZ0Lm5hdGl2ZUV2ZW50KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgQ3VzdG9tVGFnID0gZWxlbWVudC50aXRsZVRhZ05hbWUgYXMga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuICAgIHJldHVybiAoXG4gICAgICA8Q3VzdG9tVGFnXG4gICAgICAgIGNsYXNzTmFtZT17ZWxlbWVudC5jc3NUaXRsZX1cbiAgICAgICAgaWQ9e2VsZW1lbnQuYXJpYVRpdGxlSWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e1xuICAgICAgICAgIGVsZW1lbnQuZ2V0VHlwZSgpID09PSBcInJhZGlvZ3JvdXBcIlxuICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICA6IGVsZW1lbnQubG9jVGl0bGUucmVuZGVyZWRIdG1sXG4gICAgICAgIH1cbiAgICAgICAgdGFiSW5kZXg9e2VsZW1lbnQudGl0bGVUYWJJbmRleH1cbiAgICAgICAgYXJpYS1leHBhbmRlZD17ZWxlbWVudC50aXRsZUFyaWFFeHBhbmRlZH1cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgb25LZXlVcD17b25LZXlVcH1cbiAgICAgID5cbiAgICAgICAge3RpdGxlQ29udGVudH1cbiAgICAgIDwvQ3VzdG9tVGFnPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5Q3VzdG9tV2lkZ2V0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByaXZhdGUgd2lkZ2V0UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMud2lkZ2V0UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJpdmF0ZSBfYWZ0ZXJSZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldCkge1xuICAgICAgbGV0IGVsID0gdGhpcy53aWRnZXRSZWYuY3VycmVudDtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC5hZnRlclJlbmRlcih0aGlzLnF1ZXN0aW9uQmFzZSwgZWwpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXREYXRhLmlzTmVlZFJlbmRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZSkge1xuICAgICAgdGhpcy5fYWZ0ZXJSZW5kZXIoKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdmFyIGlzRGVmYXVsdFJlbmRlciA9XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldCAmJlxuICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LmlzRGVmYXVsdFJlbmRlcjtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UgJiYgIWlzRGVmYXVsdFJlbmRlcikge1xuICAgICAgdGhpcy5fYWZ0ZXJSZW5kZXIoKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICBsZXQgZWwgPSB0aGlzLndpZGdldFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LndpbGxVbm1vdW50KHRoaXMucXVlc3Rpb25CYXNlLCBlbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmIHRoaXMucXVlc3Rpb25CYXNlLnZpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjdXN0b21XaWRnZXQgPSB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQ7XG5cbiAgICBpZiAoY3VzdG9tV2lkZ2V0LmlzRGVmYXVsdFJlbmRlcikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiByZWY9e3RoaXMud2lkZ2V0UmVmfT5cbiAgICAgICAgICB7dGhpcy5jcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudCh0aGlzLnF1ZXN0aW9uQmFzZSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgd2lkZ2V0ID0gbnVsbDtcbiAgICBpZiAoY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyKSB7XG4gICAgICB3aWRnZXQgPSBjdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXIodGhpcy5xdWVzdGlvbkJhc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3VzdG9tV2lkZ2V0Lmh0bWxUZW1wbGF0ZSkge1xuICAgICAgICBsZXQgaHRtbFZhbHVlID0geyBfX2h0bWw6IGN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUgfTtcbiAgICAgICAgcmV0dXJuIDxkaXYgcmVmPXt0aGlzLndpZGdldFJlZn0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX0gLz47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiA8ZGl2IHJlZj17dGhpcy53aWRnZXRSZWZ9Pnt3aWRnZXR9PC9kaXY+O1xuICB9XG59XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0RWxlbWVudEZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBSZWFjdEVsZW1lbnRGYWN0b3J5ID0gbmV3IFJlYWN0RWxlbWVudEZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50PiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlckVsZW1lbnQoXG4gICAgZWxlbWVudFR5cGU6IHN0cmluZyxcbiAgICBlbGVtZW50Q3JlYXRvcjogKHByb3BzOiBhbnkpID0+IEpTWC5FbGVtZW50XG4gICkge1xuICAgIHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdID0gZWxlbWVudENyZWF0b3I7XG4gIH1cbiAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNyZWF0b3JIYXNoKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LnNvcnQoKTtcbiAgfVxuICBwdWJsaWMgaXNFbGVtZW50UmVnaXN0ZXJlZChlbGVtZW50VHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuICEhdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gIH1cbiAgcHVibGljIGNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcbiAgICBpZiAoY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRvcihwYXJhbXMpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZsb3dQYW5lbE1vZGVsLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlGbG93UGFuZWwgZXh0ZW5kcyBTdXJ2ZXlQYW5lbCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHVibGljIGdldCBmbG93UGFuZWwoKTogRmxvd1BhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsIGFzIEZsb3dQYW5lbE1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5mbG93UGFuZWwpIHtcbiAgICAgIHRoaXMuZmxvd1BhbmVsLm9uQ3VzdG9tSHRtbFByb2R1Y2luZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH07XG4gICAgICB0aGlzLmZsb3dQYW5lbC5vbkdldEh0bWxGb3JRdWVzdGlvbiA9IHRoaXMucmVuZGVyUXVlc3Rpb247XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5mbG93UGFuZWwpIHtcbiAgICAgIHRoaXMuZmxvd1BhbmVsLm9uQ3VzdG9tSHRtbFByb2R1Y2luZyA9IG51bGw7XG4gICAgICB0aGlzLmZsb3dQYW5lbC5vbkdldEh0bWxGb3JRdWVzdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRRdWVzdGlvbihuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd1BhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjxxdWVzdGlvbj5cIiArIHF1ZXN0aW9uLm5hbWUgKyBcIjwvcXVlc3Rpb24+XCI7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclJvd3MoKTogQXJyYXk8SlNYLkVsZW1lbnQ+IHtcbiAgICByZXR1cm4gW3RoaXMucmVuZGVySHRtbCgpXTtcbiAgfVxuICBwcml2YXRlIHJlbmRlcmVkSW5kZXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBnZXROb2RlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZEluZGV4Kys7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckh0bWwoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5mbG93UGFuZWwpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGh0bWwgPSBcIjxzcGFuPlwiICsgdGhpcy5mbG93UGFuZWwucHJvZHVjZUh0bWwoKSArIFwiPC9zcGFuPlwiO1xuICAgIGlmICghRE9NUGFyc2VyKSB7XG4gICAgICBjb25zdCBodG1sVmFsdWUgPSB7IF9faHRtbDogaHRtbCB9O1xuICAgICAgcmV0dXJuIDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX0gLz47XG4gICAgfVxuICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgXCJ0ZXh0L3htbFwiKTtcbiAgICB0aGlzLnJlbmRlcmVkSW5kZXggPSAwO1xuICAgIHJldHVybiB0aGlzLnJlbmRlclBhcmVudE5vZGUoZG9jKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTm9kZXMoZG9tTm9kZXM6IEFycmF5PE5vZGU+KTogQXJyYXk8SlNYLkVsZW1lbnQ+IHtcbiAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGVzLnB1c2godGhpcy5yZW5kZXJOb2RlKGRvbU5vZGVzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBub2RlcztcbiAgfVxuICBwcml2YXRlIGdldFN0eWxlKG5vZGVUeXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdHlsZTogYW55ID0ge307XG4gICAgaWYgKG5vZGVUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiYlwiKSB7XG4gICAgICBzdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgfVxuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImlcIikge1xuICAgICAgc3R5bGUuZm9udFN0eWxlID0gXCJpdGFsaWNcIjtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidVwiKSB7XG4gICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvbiA9IFwidW5kZXJsaW5lXCI7XG4gICAgfVxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGFyZW50Tm9kZShub2RlOiBOb2RlKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IG5vZGVUeXBlID0gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5yZW5kZXJOb2Rlcyh0aGlzLmdldENoaWxkRG9tTm9kZXMobm9kZSkpO1xuICAgIGlmIChub2RlVHlwZSA9PT0gXCJkaXZcIilcbiAgICAgIHJldHVybiA8ZGl2IGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0+e2NoaWxkcmVufTwvZGl2PjtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4ga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfSBzdHlsZT17dGhpcy5nZXRTdHlsZShub2RlVHlwZSl9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTm9kZShub2RlOiBOb2RlKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5oYXNUZXh0Q2hpbGROb2Rlc09ubHkobm9kZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlclBhcmVudE5vZGUobm9kZSk7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVUeXBlID0gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChub2RlVHlwZSA9PT0gXCJxdWVzdGlvblwiKSB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuZmxvd1BhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKG5vZGUudGV4dENvbnRlbnQpO1xuICAgICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBxdWVzdGlvbkJvZHkgPSAoXG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvblxuICAgICAgICAgIGtleT17cXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICBlbGVtZW50PXtxdWVzdGlvbn1cbiAgICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgICAgY3NzPXt0aGlzLmNzc31cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgICByZXR1cm4gPHNwYW4ga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfT57cXVlc3Rpb25Cb2R5fTwvc3Bhbj47XG4gICAgfVxuICAgIGlmIChub2RlVHlwZSA9PT0gXCJkaXZcIikge1xuICAgICAgcmV0dXJuIDxkaXYga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfT57bm9kZS50ZXh0Q29udGVudH08L2Rpdj47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9IHN0eWxlPXt0aGlzLmdldFN0eWxlKG5vZGVUeXBlKX0+XG4gICAgICAgIHtub2RlLnRleHRDb250ZW50fVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDaGlsZERvbU5vZGVzKG5vZGU6IE5vZGUpOiBBcnJheTxOb2RlPiB7XG4gICAgY29uc3QgZG9tTm9kZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZG9tTm9kZXMucHVzaChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gZG9tTm9kZXM7XG4gIH1cbiAgcHJpdmF0ZSBoYXNUZXh0Q2hpbGROb2Rlc09ubHkobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGVzID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChub2Rlc1tpXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIiN0ZXh0XCIpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoc3R5bGU6IGFueSwgcm93czogSlNYLkVsZW1lbnRbXSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImYtcGFuZWxcIiwgeyBzdHlsZTogc3R5bGUgfSwgcm93cyk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJmbG93cGFuZWxcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlGbG93UGFuZWwsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkltYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkltYWdlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0ltYWdlTGluay5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSW1hZ2VMaW5rLm9uQ2hhbmdlZCA9ICgpID0+IHsgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25JbWFnZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25JbWFnZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmICEhdGhpcy5xdWVzdGlvbi5pbWFnZUxpbms7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBzdHlsZTogYW55ID0geyBvYmplY3RGaXQ6IHRoaXMucXVlc3Rpb24uaW1hZ2VGaXQgfTtcbiAgICB2YXIgY29udHJvbCA9IG51bGw7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyZWRNb2RlID09PSBcImltYWdlXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxpbWdcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaW1hZ2V9XG4gICAgICAgICAgc3JjPXt0aGlzLnF1ZXN0aW9uLmxvY0ltYWdlTGluay5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgYWx0PXt0aGlzLnF1ZXN0aW9uLnRleHQgfHwgdGhpcy5xdWVzdGlvbi50aXRsZX1cbiAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFdpZHRofVxuICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZEhlaWdodH1cbiAgICAgICAgICAvL2FsdD17aXRlbS50ZXh0IHx8IGl0ZW0udmFsdWV9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyZWRNb2RlID09PSBcInZpZGVvXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDx2aWRlbyBjb250cm9sc1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbWFnZX1cbiAgICAgICAgICBzcmM9e3RoaXMucXVlc3Rpb24uaW1hZ2VMaW5rfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgPjwvdmlkZW8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1vZGUgPT09IFwieW91dHViZVwiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8aWZyYW1lXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmltYWdlfVxuICAgICAgICAgIHNyYz17dGhpcy5xdWVzdGlvbi5pbWFnZUxpbmt9XG4gICAgICAgICAgd2lkdGg9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRXaWR0aH1cbiAgICAgICAgICBoZWlnaHQ9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRIZWlnaHR9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICA+PC9pZnJhbWU+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290fT57Y29udHJvbH08L2Rpdj47XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImltYWdlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkltYWdlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UsIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXIgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5tdWx0aVNlbGVjdCkge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSB0aGlzLnF1ZXN0aW9uLnZhbHVlLmNvbmNhdChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGN1cnJWYWx1ZSA9IHRoaXMucXVlc3Rpb24udmFsdWU7XG4gICAgICAgIGN1cnJWYWx1ZS5zcGxpY2UodGhpcy5xdWVzdGlvbi52YWx1ZS5pbmRleE9mKGV2ZW50LnRhcmdldC52YWx1ZSksIDEpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gY3VyclZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXQgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9PlxuICAgICAgICA8bGVnZW5kXG4gICAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbH0gLz5cbiAgICAgICAge3RoaXMuZ2V0SXRlbXMoY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IHRoaXMucXVlc3Rpb24ubmFtZSArIFwiLVwiICsgaXRlbS52YWx1ZTtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5yZW5kZXJJdGVtKGtleSwgaXRlbSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4geyBtYXJnaW5MZWZ0OiBcIjNweFwiLCBkaXNwbGF5OiBcImlubGluZVwiLCBwb3NpdGlvbjogXCJzdGF0aWNcIiB9O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICAgIHZhciBpdGVtQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKTtcbiAgICB2YXIgdGV4dCA9IG51bGw7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uc2hvd0xhYmVsKSB7XG4gICAgICB0ZXh0ID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1UZXh0fVxuICAgICAgICA+XG4gICAgICAgICAge2l0ZW0udGV4dCA/IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhpdGVtLmxvY1RleHQpIDogaXRlbS52YWx1ZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgc3R5bGU6IGFueSA9IHsgb2JqZWN0Rml0OiB0aGlzLnF1ZXN0aW9uLmltYWdlRml0IH07XG5cbiAgICB2YXIgY29udHJvbCA9IG51bGw7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwiaW1hZ2VcIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbWFnZX1cbiAgICAgICAgICBzcmM9e2l0ZW1bXCJpbWFnZUxpbmtcIl19XG4gICAgICAgICAgd2lkdGg9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCB9XG4gICAgICAgICAgaGVpZ2h0PXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlSGVpZ2h0IH1cbiAgICAgICAgICBhbHQ9e2l0ZW0ubG9jVGV4dC5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwidmlkZW9cIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHZpZGVvIGNvbnRyb2xzXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmltYWdlfVxuICAgICAgICAgIHNyYz17aXRlbVtcImltYWdlTGlua1wiXX1cbiAgICAgICAgICB3aWR0aD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZVdpZHRoIH1cbiAgICAgICAgICBoZWlnaHQ9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgPjwvdmlkZW8+XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxkaXYga2V5PXtrZXl9IGNsYXNzTmFtZT17aXRlbUNsYXNzfT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5sYWJlbH0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiBcIm5vbmVcIiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKGl0ZW0pfVxuICAgICAgICAgICAgdHlwZT17dGhpcy5xdWVzdGlvbi5pbnB1dFR5cGV9XG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uTmFtZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIHZhbHVlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKGl0ZW0pfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZUNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgIHtjb250cm9sfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGV4dH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgUmVhY3RTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlZEl0ZW0gPSBudWxsO1xuICAgIGlmKCEhc3VydmV5KSB7XG4gICAgICB3cmFwcGVkSXRlbSA9IHN1cnZleS53cmFwSXRlbVZhbHVlKHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImltYWdlcGlja2VyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsQmFzZSB9IGZyb20gXCIuL3BhbmVsLWJhc2VcIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFnZSBleHRlbmRzIFN1cnZleVBhbmVsQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFBhbmVsQmFzZSgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucGFnZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhZ2UoKTogUGFnZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEJhc2UgYXMgUGFnZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgdGl0bGUgPSB0aGlzLnJlbmRlclRpdGxlKCk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbigpO1xuICAgIHZhciByb3dzID0gdGhpcy5yZW5kZXJSb3dzKHRoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFnZS5yb290fT5cbiAgICAgICAge3RpdGxlfVxuICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICAgIHtyb3dzfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMucGFnZX0+PC9UaXRsZUVsZW1lbnQ+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnBhZ2UuX3Nob3dEZXNjcmlwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5wYWdlLmxvY0Rlc2NyaXB0aW9uKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFnZS5kZXNjcmlwdGlvbn0+e3RleHR9PC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJvd01vZGVsLCBQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVJvdyB9IGZyb20gXCIuL3Jvd1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFuZWxCYXNlIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJvdGVjdGVkIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEJhc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblVzZVByb3BJblN0YXRlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGtleSAhPT0gXCJlbGVtZW50c1wiICYmIHN1cGVyLmNhblVzZVByb3BJblN0YXRlKGtleSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldFN1cnZleSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldENzcygpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYW5lbEJhc2UoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50IHx8IHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcHMuc3VydmV5IHx8ICghIXRoaXMucGFuZWxCYXNlID8gdGhpcy5wYW5lbEJhc2Uuc3VydmV5IDogbnVsbClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZiAoXG4gICAgICAhIXByZXZQcm9wcy5wYWdlICYmXG4gICAgICAhIXRoaXMuc3VydmV5ICYmXG4gICAgICAhIXRoaXMuc3VydmV5LmN1cnJlbnRQYWdlICYmXG4gICAgICBwcmV2UHJvcHMucGFnZS5uYW1lID09PSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZS5uYW1lXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIHByaXZhdGUgZG9BZnRlclJlbmRlcigpIHtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIGlmICh0aGlzLnBhbmVsQmFzZS5pc1BhbmVsKSB7XG4gICAgICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwodGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbCwgZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnN1cnZleSAmJiAhIXRoaXMucGFuZWxCYXNlXG4gICAgICAmJiB0aGlzLnBhbmVsQmFzZS5pc1Zpc2libGUgJiYgISF0aGlzLnBhbmVsQmFzZS5zdXJ2ZXlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyZWRSb3dzQ2FjaGU6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgcmVuZGVyUm93cyhjc3M6IGFueSk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgaWYgKHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWUgIT09IFwicm93c1wiKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkUm93c0NhY2hlID0ge307XG4gICAgfVxuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIHF1ZXN0aW9uUm93cyA9IHRoaXMucGFuZWxCYXNlLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvblJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLnJlbmRlcmVkUm93c0NhY2hlW3F1ZXN0aW9uUm93c1tpXS5pZF07XG4gICAgICBpZiAoIXJvdykge1xuICAgICAgICByb3cgPSB0aGlzLmNyZWF0ZVJvdyhxdWVzdGlvblJvd3NbaV0sIGNzcyk7XG4gICAgICAgIHRoaXMucmVuZGVyZWRSb3dzQ2FjaGVbcXVlc3Rpb25Sb3dzW2ldLmlkXSA9IHJvdztcbiAgICAgIH1cbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cbiAgICByZXR1cm4gcm93cztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUm93KHJvdzogUXVlc3Rpb25Sb3dNb2RlbCwgY3NzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlSb3dcbiAgICAgICAga2V5PXtyb3cuaWR9XG4gICAgICAgIHJvdz17cm93fVxuICAgICAgICBzdXJ2ZXk9e3RoaXMuc3VydmV5fVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGNzcz17Y3NzfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRFcnJvcnMgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbEJhc2UgfSBmcm9tIFwiLi9wYW5lbC1iYXNlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsLCBkb0tleTJDbGlja1VwIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFuZWwgZXh0ZW5kcyBTdXJ2ZXlQYW5lbEJhc2Uge1xuICBwcml2YXRlIGhhc0JlZW5FeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxCYXNlIGFzIFBhbmVsTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKCk7XG4gICAgY29uc3QgZXJyb3JzID0gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5wYW5lbEJhc2V9XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXN9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgIHBhZGRpbmdMZWZ0OiB0aGlzLnBhbmVsLmlubmVyUGFkZGluZ0xlZnQsXG4gICAgICBkaXNwbGF5OiAhdGhpcy5wYW5lbC5pc0NvbGxhcHNlZCA/IHVuZGVmaW5lZCA6IFwibm9uZVwiLFxuICAgIH07XG4gICAgbGV0IGNvbnRlbnQ6IEpTWC5FbGVtZW50ID0gbnVsbDtcbiAgICBpZiAoIXRoaXMucGFuZWwuaXNDb2xsYXBzZWQgfHwgdGhpcy5oYXNCZWVuRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuaGFzQmVlbkV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJvd3M6IEpTWC5FbGVtZW50W10gPSB0aGlzLnJlbmRlclJvd3ModGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcyk7XG4gICAgICBjb25zdCBjbGFzc05hbWU6IHN0cmluZyA9IHRoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFuZWwuY29udGVudDtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnJlbmRlckNvbnRlbnQoc3R5bGUsIHJvd3MsIGNsYXNzTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9eyh0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsKS5nZXRDb250YWluZXJDc3MoKX1cbiAgICAgICAgb25Gb2N1cz17KHRoaXMucGFuZWxCYXNlIGFzIFBhbmVsTW9kZWwpLmZvY3VzSW59XG4gICAgICA+XG4gICAgICAgIHtoZWFkZXJ9XG4gICAgICAgIHtlcnJvcnN9XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCkge1xuICAgIGlmICghdGhpcy5wYW5lbEJhc2UuaGFzVGl0bGUgJiYgIXRoaXMucGFuZWxCYXNlLmhhc0Rlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgdGl0bGU6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJUaXRsZSgpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uOiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyRGVzY3JpcHRpb24oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFuZWwuaGVhZGVyfT5cbiAgICAgICAge3RpdGxlfVxuICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwRWxlbWVudChlbGVtZW50OiBKU1guRWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFJlYWN0U3VydmV5TW9kZWwgPSB0aGlzLnBhbmVsLnN1cnZleSBhcyBSZWFjdFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gc3VydmV5LndyYXBFbGVtZW50KGVsZW1lbnQsIHRoaXMucGFuZWwpO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KHN0eWxlOiBhbnksIHJvd3M6IEpTWC5FbGVtZW50W10sIGNsYXNzTmFtZTogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJvdHRvbTogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckJvdHRvbSgpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXtzdHlsZX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IGlkPXt0aGlzLnBhbmVsLmNvbnRlbnRJZH0+XG4gICAgICAgIHtyb3dzfVxuICAgICAgICB7Ym90dG9tfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5wYW5lbEJhc2UudGl0bGUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMucGFuZWxCYXNlfT48L1RpdGxlRWxlbWVudD47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckRlc2NyaXB0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucGFuZWxCYXNlLmRlc2NyaXB0aW9uKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnBhbmVsQmFzZS5sb2NEZXNjcmlwdGlvbik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnBhbmVsLmNzc0NsYXNzZXMucGFuZWwuZGVzY3JpcHRpb259Pnt0ZXh0fTwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckJvdHRvbSgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZm9vdGVyVG9vbGJhciA9IHRoaXMucGFuZWwuZ2V0Rm9vdGVyVG9vbGJhcigpO1xuICAgIGlmICghZm9vdGVyVG9vbGJhci5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFN1cnZleUFjdGlvbkJhciBtb2RlbD17Zm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwicGFuZWxcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVBhbmVsLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24sIFBhZ2VNb2RlbCwgU3VydmV5RXJyb3IsIFN0eWxlc01hbmFnZXIsIHN1cnZleUNzcywgSGVscGVycywgZG9LZXkyQ2xpY2tVcCwgU3ZnUmVnaXN0cnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5TW9kZWwgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYWdlIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5TG9jU3RyaW5nVmlld2VyIH0gZnJvbSBcIi4vc3RyaW5nLXZpZXdlclwiO1xuaW1wb3J0IHsgU3VydmV5SGVhZGVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL3N1cnZleS1oZWFkZXJcIjtcbmltcG9ydCB7IFN1cnZleVRpbWVyUGFuZWwgfSBmcm9tIFwiLi9yZWFjdHRpbWVycGFuZWxcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb24gfSBmcm9tIFwiLi9yZWFjdFN1cnZleU5hdmlnYXRpb25cIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBkb0tleTJDbGlja0Rvd24gfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PlxuICBpbXBsZW1lbnRzIElTdXJ2ZXlDcmVhdG9yIHtcbiAgcHJpdmF0ZSBwcmV2aW91c0pTT04gPSB7fTtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBwdWJsaWMgc3RhdGljIGdldCBjc3NUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUNzcy5jdXJyZW50VHlwZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBjc3NUeXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBTdHlsZXNNYW5hZ2VyLmFwcGx5VGhlbWUodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBzdXJ2ZXk6IFJlYWN0U3VydmV5TW9kZWw7XG5cbiAgcHJpdmF0ZSByb290Tm9kZUlkOiBzdHJpbmc7IC8vIHJvb3QgZG9tIG5vZGUgSUQgYXR0clxuICBwcml2YXRlIHJvb3ROb2RlQ2xhc3NOYW1lOiBzdHJpbmc7IC8vIHJvb3QgZG9tIG5vZGUgY2xhc3NcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlVHJ5QWdhaW5DbGljayA9IHRoaXMuaGFuZGxlVHJ5QWdhaW5DbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlU3VydmV5KHByb3BzKTtcbiAgICB0aGlzLnVwZGF0ZVN1cnZleShwcm9wcywge30pO1xuICAgIC8vc2V0IHRoZSBmaXJzdCBwYWdlXG4gICAgY29uc3QgZHVtbXkgPSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLnJvb3ROb2RlSWQgPSBwcm9wcy5pZCB8fCBudWxsO1xuICAgIHRoaXMucm9vdE5vZGVDbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgfHwgXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnN1cnZleTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNNb2RlbEpTT05DaGFuZ2VkKG5leHRQcm9wcykpIHtcbiAgICAgIHRoaXMuY3JlYXRlU3VydmV5KG5leHRQcm9wcyk7XG4gICAgICB0aGlzLnVwZGF0ZVN1cnZleShuZXh0UHJvcHMsIHt9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy51cGRhdGVTdXJ2ZXkodGhpcy5wcm9wcywgcHJldlByb3BzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuZG9BZnRlclJlbmRlclN1cnZleShlbCk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zdGFydFRpbWVyRnJvbVVJKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zdG9wVGltZXIoKTtcbiAgICB9XG4gIH1cbiAgZG9SZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIFN2Z1JlZ2lzdHJ5LnJlbmRlckljb25zKCk7XG4gICAgbGV0IHJlbmRlclJlc3VsdDogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuc3VydmV5LnN0YXRlID09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgIHJlbmRlclJlc3VsdCA9IHRoaXMucmVuZGVyQ29tcGxldGVkKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN1cnZleS5zdGF0ZSA9PSBcImNvbXBsZXRlZGJlZm9yZVwiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckNvbXBsZXRlZEJlZm9yZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgIHJlbmRlclJlc3VsdCA9IHRoaXMucmVuZGVyTG9hZGluZygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJzdGFydGluZ1wiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlclN0YXJ0UGFnZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlclN1cnZleSgpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXI6IEpTWC5FbGVtZW50ID0gPFN1cnZleUhlYWRlciBzdXJ2ZXk9e3RoaXMuc3VydmV5fT48L1N1cnZleUhlYWRlcj47XG4gICAgY29uc3Qgb25TdWJtaXQgPSBmdW5jdGlvbiAoZXZlbnQ6IFJlYWN0LkZvcm1FdmVudDxIVE1MRm9ybUVsZW1lbnQ+KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG4gICAgbGV0IGN1c3RvbUhlYWRlcjogSlNYLkVsZW1lbnQgPSA8ZGl2IGNsYXNzTmFtZT1cInN2X2N1c3RvbV9oZWFkZXJcIiAvPjtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuaGFzTG9nbykge1xuICAgICAgY3VzdG9tSGVhZGVyID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucm9vdE5vZGVDbGFzc05hbWUgPyB0aGlzLnJvb3ROb2RlQ2xhc3NOYW1lICsgXCIgXCIgKyB0aGlzLmNzcy5yb290IDogdGhpcy5jc3Mucm9vdDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGlkPXt0aGlzLnJvb3ROb2RlSWR9IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2Nzc0NsYXNzZXN9PlxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17b25TdWJtaXR9PlxuICAgICAgICAgIHtjdXN0b21IZWFkZXJ9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAge3JlbmRlclJlc3VsdH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZG9SZW5kZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5jc3M7XG4gIH1cbiAgcHVibGljIHNldCBjc3ModmFsdWU6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmNzcyA9IHZhbHVlO1xuICB9XG4gIGhhbmRsZVRyeUFnYWluQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmRvQ29tcGxldGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29tcGxldGVkKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnNob3dDb21wbGV0ZWRQYWdlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY29tcGxldGVkU3RhdGUgPSBudWxsO1xuICAgIGlmICh0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSkge1xuICAgICAgdmFyIHRyeUFnYWluQnV0dG9uID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgdmFyIGJ0blRleHQgPSB0aGlzLnN1cnZleS5nZXRMb2NTdHJpbmcoXCJzYXZlQWdhaW5CdXR0b25cIik7XG4gICAgICAgIHRyeUFnYWluQnV0dG9uID0gKFxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT17XCJidXR0b25cIn1cbiAgICAgICAgICAgIHZhbHVlPXtidG5UZXh0fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5zYXZlRGF0YS5zYXZlQWdhaW5CdXR0b259XG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZVRyeUFnYWluQ2xpY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZhciBjc3MgPSB0aGlzLmNzcy5zYXZlRGF0YVt0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZV07XG4gICAgICBjb21wbGV0ZWRTdGF0ZSA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnNhdmVEYXRhLnJvb3R9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3N9PlxuICAgICAgICAgICAgPHNwYW4+e3RoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlVGV4dH08L3NwYW4+XG4gICAgICAgICAgICB7dHJ5QWdhaW5CdXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnN1cnZleS5jb21wbGV0ZWRDc3N9XG4gICAgICAgIC8+XG4gICAgICAgIHtjb21wbGV0ZWRTdGF0ZX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29tcGxldGVkQmVmb3JlKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuc3VydmV5LnByb2Nlc3NlZENvbXBsZXRlZEJlZm9yZUh0bWwgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSBjbGFzc05hbWU9e3RoaXMuY3NzLmJvZHl9IC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTG9hZGluZygpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRMb2FkaW5nSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IGNsYXNzTmFtZT17dGhpcy5jc3MuYm9keX0gLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJTdGFydFBhZ2UoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdGFydGVkUGFnZSA9IHRoaXMuc3VydmV5LnN0YXJ0ZWRQYWdlXG4gICAgICA/IHRoaXMucmVuZGVyUGFnZSh0aGlzLnN1cnZleS5zdGFydGVkUGFnZSlcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgcGFnZUlkID0gdGhpcy5zdXJ2ZXkuc3RhcnRlZFBhZ2UgPyB0aGlzLnN1cnZleS5zdGFydGVkUGFnZS5pZCA6IFwiXCI7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdiBpZD17cGFnZUlkfSBjbGFzc05hbWU9e3RoaXMuY3NzLmJvZHl9PlxuICAgICAgICAgIHt0aGlzLnJlbmRlck5hdmlnYXRpb24oXCJ0b3BcIil9XG4gICAgICAgICAge3N0YXJ0ZWRQYWdlfVxuICAgICAgICAgIHt0aGlzLnJlbmRlck5hdmlnYXRpb24oXCJib3R0b21cIil9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJTdXJ2ZXkoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjdXJyZW50UGFnZSA9IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlXG4gICAgICA/IHRoaXMucmVuZGVyUGFnZSh0aGlzLnN1cnZleS5jdXJyZW50UGFnZSlcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgcGFnZUlkID0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UgPyB0aGlzLnN1cnZleS5jdXJyZW50UGFnZS5pZCA6IFwiXCI7XG4gICAgdmFyIHRvcFByb2dyZXNzID0gdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPblRvcFxuICAgICAgPyB0aGlzLnJlbmRlclByb2dyZXNzKHRydWUpXG4gICAgICA6IG51bGw7XG4gICAgdmFyIGJvdHRvbVByb2dyZXNzID0gdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbVxuICAgICAgPyB0aGlzLnJlbmRlclByb2dyZXNzKGZhbHNlKVxuICAgICAgOiBudWxsO1xuICAgIGxldCBjbGFzc05hbWUgPSB0aGlzLnN1cnZleS5ib2R5Q3NzO1xuICAgIGlmICghY3VycmVudFBhZ2UpIHtcbiAgICAgIGNsYXNzTmFtZSA9IHRoaXMuY3NzLmJvZHlFbXB0eTtcbiAgICAgIGN1cnJlbnRQYWdlID0gdGhpcy5yZW5kZXJFbXB0eVN1cnZleSgpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBpZD17cGFnZUlkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgID5cbiAgICAgICAge3RvcFByb2dyZXNzfVxuICAgICAgICB7dGhpcy5yZW5kZXJUaW1lclBhbmVsKFwidG9wXCIpfVxuICAgICAgICB7dGhpcy5yZW5kZXJOYXZpZ2F0aW9uKFwidG9wXCIpfVxuICAgICAgICB7Y3VycmVudFBhZ2V9XG4gICAgICAgIHt0aGlzLnJlbmRlclRpbWVyUGFuZWwoXCJib3R0b21cIil9XG4gICAgICAgIHtib3R0b21Qcm9ncmVzc31cbiAgICAgICAge3RoaXMucmVuZGVyTmF2aWdhdGlvbihcImJvdHRvbVwiKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpbWVyUGFuZWwobG9jYXRpb246IHN0cmluZykge1xuICAgIGlmIChsb2NhdGlvbiA9PT0gXCJ0b3BcIiAmJiAhdGhpcy5zdXJ2ZXkuaXNUaW1lclBhbmVsU2hvd2luZ09uVG9wKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgaWYgKGxvY2F0aW9uID09PSBcImJvdHRvbVwiICYmICF0aGlzLnN1cnZleS5pc1RpbWVyUGFuZWxTaG93aW5nT25Cb3R0b20pXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFN1cnZleVRpbWVyUGFuZWwgc3VydmV5PXt0aGlzLnN1cnZleX0gLz47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhZ2UocGFnZTogUGFnZU1vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UGFnZVxuICAgICAgICBzdXJ2ZXk9e3RoaXMuc3VydmV5fVxuICAgICAgICBwYWdlPXtwYWdlfVxuICAgICAgICBjc3M9e3RoaXMuY3NzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQcm9ncmVzcyhpc1RvcDogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJzdi1wcm9ncmVzcy1cIiArIHRoaXMuc3VydmV5LnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgeyBzdXJ2ZXk6IHRoaXMuc3VydmV5LCBjc3M6IHRoaXMuY3NzLCBpc1RvcDogaXNUb3AgfVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5hdmlnYXRpb24obmF2UG9zaXRpb246IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZyAhPT0gXCJib3RoXCIgJiZcbiAgICAgICh0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZyA9PT0gXCJub25lXCIgfHxcbiAgICAgICAgdGhpcy5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgIT09IG5hdlBvc2l0aW9uKVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiA8U3VydmV5TmF2aWdhdGlvbiBzdXJ2ZXk9e3RoaXMuc3VydmV5fSBjc3M9e3RoaXMuY3NzfSAvPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRW1wdHlTdXJ2ZXkoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8c3Bhbj57dGhpcy5zdXJ2ZXkuZW1wdHlTdXJ2ZXlUZXh0fTwvc3Bhbj47XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVN1cnZleShuZXdQcm9wczogYW55KSB7XG4gICAgaWYgKCFuZXdQcm9wcykgbmV3UHJvcHMgPSB7fTtcbiAgICB0aGlzLnByZXZpb3VzSlNPTiA9IHt9O1xuICAgIGlmIChuZXdQcm9wcykge1xuICAgICAgaWYgKG5ld1Byb3BzLm1vZGVsKSB7XG4gICAgICAgIHRoaXMuc3VydmV5ID0gbmV3UHJvcHMubW9kZWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV3UHJvcHMuanNvbikge1xuICAgICAgICAgIHRoaXMucHJldmlvdXNKU09OID0gbmV3UHJvcHMuanNvbjtcbiAgICAgICAgICB0aGlzLnN1cnZleSA9IG5ldyBSZWFjdFN1cnZleU1vZGVsKG5ld1Byb3BzLmpzb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFJlYWN0U3VydmV5TW9kZWwoKTtcbiAgICB9XG4gICAgaWYgKCEhbmV3UHJvcHMuY3NzKSB7XG4gICAgICB0aGlzLnN1cnZleS5tZXJnZUNzcyhuZXdQcm9wcy5jc3MsIHRoaXMuY3NzKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdXJ2ZXlFdmVudHMoKTtcbiAgfVxuICBwcml2YXRlIGlzTW9kZWxKU09OQ2hhbmdlZChuZXdQcm9wczogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCEhbmV3UHJvcHNbXCJtb2RlbFwiXSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ICE9PSBuZXdQcm9wc1tcIm1vZGVsXCJdO1xuICAgIH1cbiAgICBpZiAoISFuZXdQcm9wc1tcImpzb25cIl0pIHtcbiAgICAgIHJldHVybiAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1Byb3BzW1wianNvblwiXSwgdGhpcy5wcmV2aW91c0pTT04pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVN1cnZleShuZXdQcm9wczogYW55LCBvbGRQcm9wcz86IGFueSkge1xuICAgIGlmICghbmV3UHJvcHMpIHJldHVybjtcbiAgICBvbGRQcm9wcyA9IG9sZFByb3BzIHx8IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBuZXdQcm9wcykge1xuICAgICAgaWYgKGtleSA9PSBcIm1vZGVsXCIgfHwga2V5ID09IFwiY2hpbGRyZW5cIiB8fCBrZXkgPT0gXCJqc29uXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09IFwiY3NzXCIpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkubWVyZ2VWYWx1ZXMobmV3UHJvcHMuY3NzLCB0aGlzLnN1cnZleS5nZXRDc3MoKSk7XG4gICAgICAgIHRoaXMuc3VydmV5W1widXBkYXRlRWxlbWVudENzc1wiXSgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChuZXdQcm9wc1trZXldID09PSBvbGRQcm9wc1trZXldKSBjb250aW51ZTtcbiAgICAgIGlmIChrZXkuaW5kZXhPZihcIm9uXCIpID09IDAgJiYgdGhpcy5zdXJ2ZXlba2V5XSAmJiB0aGlzLnN1cnZleVtrZXldLmFkZCkge1xuICAgICAgICBpZiAoISFvbGRQcm9wc1trZXldKSB7XG4gICAgICAgICAgdGhpcy5zdXJ2ZXlba2V5XS5yZW1vdmUob2xkUHJvcHNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdXJ2ZXlba2V5XS5hZGQobmV3UHJvcHNba2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cnZleVtrZXldID0gbmV3UHJvcHNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHNldFN1cnZleUV2ZW50cygpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLnN1cnZleS5yZW5kZXJDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjb3VudGVyID1cbiAgICAgICAgISFzZWxmLnN0YXRlICYmICEhc2VsZi5zdGF0ZS5tb2RlbENoYW5nZWQgPyBzZWxmLnN0YXRlLm1vZGVsQ2hhbmdlZCA6IDA7XG4gICAgICBzZWxmLnNldFN0YXRlKHsgbW9kZWxDaGFuZ2VkOiBjb3VudGVyICsgMSB9KTtcbiAgICB9O1xuICAgIHRoaXMuc3VydmV5Lm9uUGFydGlhbFNlbmQuYWRkKChzZW5kZXIpID0+IHtcbiAgICAgIGlmICghIXNlbGYuc3RhdGUpIHtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZShzZWxmLnN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vSVN1cnZleUNyZWF0b3JcbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgIXF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZyB8fCBxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICA/IHF1ZXN0aW9uLmdldFRlbXBsYXRlKClcbiAgICAgICAgOiBxdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgaXNEaXNwbGF5TW9kZTogcXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICBjcmVhdG9yOiB0aGlzLFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIHJlbmRlckVycm9yKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGVycm9yOiBTdXJ2ZXlFcnJvcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGtleT17a2V5fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVycm9yLmljb259IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pdGVtfT5cbiAgICAgICAgICA8U3VydmV5TG9jU3RyaW5nVmlld2VyIGxvY1N0cj17ZXJyb3IubG9jVGV4dH0gLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbjtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN1cnZleVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5LCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEtleTJjbGljayhlbGVtZW50OiBKU1guRWxlbWVudCwgdmlld01vZGVsPzogYW55LCBvcHRpb25zID0geyBwcm9jZXNzRXNjOiB0cnVlIH0pOiBKU1guRWxlbWVudCB7XG4gIGlmICghIXZpZXdNb2RlbCAmJiB2aWV3TW9kZWwuZGlzYWJsZVRhYlN0b3ApIHtcbiAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGVsZW1lbnQsIHsgdGFiSW5kZXg6IC0xIH0pO1xuICB9XG4gIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoXG4gICAgZWxlbWVudCxcbiAgICB7XG4gICAgICB0YWJJbmRleDogMCxcbiAgICAgIG9uS2V5VXA6IChldnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZG9LZXkyQ2xpY2tVcChldnQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgb25LZXlEb3duOiAoZXZ0OiBhbnkpID0+IGRvS2V5MkNsaWNrRG93bihldnQsIG9wdGlvbnMpXG4gICAgfVxuICApO1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5TmF2aWdhdGlvbkJhc2UgfSBmcm9tIFwiLi9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xuICBwcml2YXRlIG1vdXNlRG93blBhZ2U6IGFueSA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVQcmV2Q2xpY2sgPSB0aGlzLmhhbmRsZVByZXZDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlTmV4dENsaWNrID0gdGhpcy5oYW5kbGVOZXh0Q2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZU5leHRNb3VzZURvd24gPSB0aGlzLmhhbmRsZU5leHRNb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZU1vdXNlRG93biA9IHRoaXMuaGFuZGxlTW91c2VEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDb21wbGV0ZUNsaWNrID0gdGhpcy5oYW5kbGVDb21wbGV0ZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVQcmV2aWV3Q2xpY2sgPSB0aGlzLmhhbmRsZVByZXZpZXdDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlU3RhcnRDbGljayA9IHRoaXMuaGFuZGxlU3RhcnRDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIGhhbmRsZVByZXZDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkucHJldlBhZ2UoKTtcbiAgfVxuICBoYW5kbGVOZXh0Q2xpY2soZXZlbnQ6IGFueSkge1xuICAgIGlmICghIXRoaXMubW91c2VEb3duUGFnZSAmJiB0aGlzLm1vdXNlRG93blBhZ2UgIT09IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMubW91c2VEb3duUGFnZSA9IG51bGw7XG4gICAgdGhpcy5zdXJ2ZXkubmV4dFBhZ2UoKTtcbiAgfVxuICBoYW5kbGVOZXh0TW91c2VEb3duKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm1vdXNlRG93blBhZ2UgPSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZTtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubmF2aWdhdGlvbk1vdXNlRG93bigpO1xuICB9XG4gIGhhbmRsZU1vdXNlRG93bihldmVudDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5Lm5hdmlnYXRpb25Nb3VzZURvd24oKTtcbiAgfVxuICBoYW5kbGVDb21wbGV0ZUNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnN1cnZleS5jb21wbGV0ZUxhc3RQYWdlKCk7XG4gIH1cbiAgaGFuZGxlUHJldmlld0NsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnN1cnZleS5zaG93UHJldmlldygpO1xuICB9XG4gIGhhbmRsZVN0YXJ0Q2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LnN0YXJ0KCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5IHx8IHRoaXMuc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nID09PSBcIm5vbmVcIilcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHZhciBpc1N0YXJ0ZWRQYWdlID0gdGhpcy5zdXJ2ZXkuc3RhdGUgPT09IFwic3RhcnRpbmdcIjtcbiAgICB2YXIgcHJldkJ1dHRvbiA9XG4gICAgICB0aGlzLnN1cnZleS5pc1Nob3dQcmV2QnV0dG9uXG4gICAgICAgID8gdGhpcy5yZW5kZXJCdXR0b24oXG4gICAgICAgICAgdGhpcy5oYW5kbGVQcmV2Q2xpY2ssXG4gICAgICAgICAgdGhpcy5oYW5kbGVNb3VzZURvd24sXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkucGFnZVByZXZUZXh0LFxuICAgICAgICAgIHRoaXMuc3VydmV5LmNzc05hdmlnYXRpb25QcmV2XG4gICAgICAgIClcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBuZXh0QnV0dG9uID1cbiAgICAgIHRoaXMuc3VydmV5LmlzU2hvd05leHRCdXR0b25cbiAgICAgICAgPyB0aGlzLnJlbmRlckJ1dHRvbihcbiAgICAgICAgICB0aGlzLmhhbmRsZU5leHRDbGljayxcbiAgICAgICAgICB0aGlzLmhhbmRsZU5leHRNb3VzZURvd24sXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkucGFnZU5leHRUZXh0LFxuICAgICAgICAgIHRoaXMuc3VydmV5LmNzc05hdmlnYXRpb25OZXh0XG4gICAgICAgIClcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBjb21wbGV0ZUJ1dHRvbiA9XG4gICAgICB0aGlzLnN1cnZleS5pc0NvbXBsZXRlQnV0dG9uVmlzaWJsZVxuICAgICAgICA/IHRoaXMucmVuZGVyQnV0dG9uKFxuICAgICAgICAgIHRoaXMuaGFuZGxlQ29tcGxldGVDbGljayxcbiAgICAgICAgICB0aGlzLmhhbmRsZU1vdXNlRG93bixcbiAgICAgICAgICB0aGlzLnN1cnZleS5jb21wbGV0ZVRleHQsXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkuY3NzTmF2aWdhdGlvbkNvbXBsZXRlXG4gICAgICAgIClcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBwcmV2aWV3QnV0dG9uID1cbiAgICAgICFpc1N0YXJ0ZWRQYWdlICYmXG4gICAgICB0aGlzLnN1cnZleS5pc0xhc3RQYWdlICYmXG4gICAgICB0aGlzLnN1cnZleS5pc1ByZXZpZXdCdXR0b25WaXNpYmxlXG4gICAgICAgID8gdGhpcy5yZW5kZXJCdXR0b24oXG4gICAgICAgICAgdGhpcy5oYW5kbGVQcmV2aWV3Q2xpY2ssXG4gICAgICAgICAgdGhpcy5oYW5kbGVNb3VzZURvd24sXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkucHJldmlld1RleHQsXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkuY3NzTmF2aWdhdGlvblByZXZpZXdcbiAgICAgICAgKVxuICAgICAgICA6IG51bGw7XG4gICAgdmFyIHN0YXJ0QnV0dG9uID0gaXNTdGFydGVkUGFnZVxuICAgICAgPyB0aGlzLnJlbmRlckJ1dHRvbihcbiAgICAgICAgdGhpcy5oYW5kbGVTdGFydENsaWNrLFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnN1cnZleS5zdGFydFN1cnZleVRleHQsXG4gICAgICAgIHRoaXMuc3VydmV5LmNzc05hdmlnYXRpb25TdGFydFxuICAgICAgKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuZm9vdGVyfT5cbiAgICAgICAge3N0YXJ0QnV0dG9ufVxuICAgICAgICB7cHJldkJ1dHRvbn1cbiAgICAgICAge25leHRCdXR0b259XG4gICAgICAgIHtwcmV2aWV3QnV0dG9ufVxuICAgICAgICB7Y29tcGxldGVCdXR0b259XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCdXR0b24oXG4gICAgY2xpY2s6IGFueSxcbiAgICBtb3VzZURvd246IGFueSxcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgYnRuQ2xhc3NOYW1lOiBzdHJpbmdcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZSA9IHsgbWFyZ2luUmlnaHQ6IFwiNXB4XCIgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17YnRuQ2xhc3NOYW1lfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbk1vdXNlRG93bj17bW91c2VEb3dufVxuICAgICAgICBvbkNsaWNrPXtjbGlja31cbiAgICAgICAgdmFsdWU9e3RleHR9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleU5hdmlnYXRpb25CYXNlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgdXBkYXRlOiAwIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzcztcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVN0YXRlRnVuY3Rpb246IGFueSA9IG51bGw7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLnNldFN0YXRlKHsgdXBkYXRlOiBzZWxmLnN0YXRlLnVwZGF0ZSArIDEgfSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQuYWRkKHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbik7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24pIHtcbiAgICAgIHRoaXMuc3VydmV5Lm9uUGFnZVZpc2libGVDaGFuZ2VkLnJlbW92ZSh0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24pO1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UHJvZ3Jlc3NNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5TmF2aWdhdGlvbkJhc2UgfSBmcm9tIFwiLi9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9ncmVzcyBleHRlbmRzIFN1cnZleU5hdmlnYXRpb25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzVG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlzVG9wO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcHJvZ3Jlc3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHByb2dyZXNzVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5wcm9ncmVzc1RleHQ7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgc3R5bGUgPSB0aGlzLmlzVG9wID8ge30gOiB7IG1hcmdpblRvcDogXCIxZW1cIiB9O1xuICAgIHZhciBwcm9ncmVzc1N0eWxlID0ge1xuICAgICAgd2lkdGg6IHRoaXMucHJvZ3Jlc3MgKyBcIiVcIixcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3N9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17cHJvZ3Jlc3NTdHlsZX1cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQmFyfVxuICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgICAgYXJpYS12YWx1ZW1pbj17MH1cbiAgICAgICAgICBhcmlhLXZhbHVlbWF4PXsxMDB9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtTdXJ2ZXlQcm9ncmVzc01vZGVsLmdldFByb2dyZXNzVGV4dEluQmFyQ3NzKHRoaXMuY3NzKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9ncmVzc1RleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e1N1cnZleVByb2dyZXNzTW9kZWwuZ2V0UHJvZ3Jlc3NUZXh0VW5kZXJCYXJDc3ModGhpcy5jc3MpfVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucHJvZ3Jlc3NUZXh0fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtcHJvZ3Jlc3MtcGFnZXNcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xufSk7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXByb2dyZXNzLXF1ZXN0aW9uc1wiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzLCBwcm9wcyk7XG59KTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXByb2dyZXNzLWNvcnJlY3RRdWVzdGlvbnNcIixcbiAgcHJvcHMgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzLCBwcm9wcyk7XG4gIH1cbik7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wcm9ncmVzcy1yZXF1aXJlZFF1ZXN0aW9uc1wiLFxuICBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwsIFBhZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5TmF2aWdhdGlvbkJhc2UgfSBmcm9tIFwiLi9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMgZXh0ZW5kcyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB7XG4gIHByaXZhdGUgcHJvZ3Jlc3NCdXR0b25zTW9kZWw6IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsO1xuICBwcml2YXRlIHVwZGF0ZVNjcm9sbGVyOiBhbnkgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgbGlzdENvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsID0gbmV3IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsKHRoaXMuc3VydmV5KTtcbiAgICB0aGlzLmxpc3RDb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyQ2VudGVyfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldFNjcm9sbEJ1dHRvbkNzcyh0cnVlKX1cbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5jbGlja1Njcm9sbEJ1dHRvbih0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudCwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyfVxuICAgICAgICAgICAgcmVmPXt0aGlzLmxpc3RDb250YWluZXJSZWZ9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdH0+XG4gICAgICAgICAgICAgIHt0aGlzLmdldExpc3RFbGVtZW50cygpfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0U2Nyb2xsQnV0dG9uQ3NzKGZhbHNlKX1cbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5jbGlja1Njcm9sbEJ1dHRvbih0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudCwgZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldExpc3RFbGVtZW50cygpOiBKU1guRWxlbWVudFtdIHtcbiAgICBsZXQgYnV0dG9uczogSlNYLkVsZW1lbnRbXSA9IFtdO1xuICAgIHRoaXMuc3VydmV5LnZpc2libGVQYWdlcy5mb3JFYWNoKChwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGJ1dHRvbnMucHVzaCh0aGlzLnJlbmRlckxpc3RFbGVtZW50KHBhZ2UsIGluZGV4KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1dHRvbnM7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckxpc3RFbGVtZW50KHBhZ2U6IFBhZ2VNb2RlbCwgaW5kZXg6IG51bWJlcik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGxpXG4gICAgICAgIGtleT17XCJsaXN0ZWxlbWVudFwiICsgaW5kZXh9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRMaXN0RWxlbWVudENzcyhpbmRleCl9XG4gICAgICAgIG9uQ2xpY2s9e1xuICAgICAgICAgIHRoaXMuaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleClcbiAgICAgICAgICAgID8gKCkgPT4gdGhpcy5jbGlja0xpc3RFbGVtZW50KGluZGV4KVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGV9XG4gICAgICAgICAgdGl0bGU9e3BhZ2UubmF2aWdhdGlvblRpdGxlIHx8IHBhZ2UubmFtZX1cbiAgICAgICAgPlxuICAgICAgICAgIHtwYWdlLm5hdmlnYXRpb25UaXRsZSB8fCBwYWdlLm5hbWV9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb259XG4gICAgICAgICAgdGl0bGU9e3BhZ2UubmF2aWdhdGlvbkRlc2NyaXB0aW9ufVxuICAgICAgICA+XG4gICAgICAgICAge3BhZ2UubmF2aWdhdGlvbkRlc2NyaXB0aW9ufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldExpc3RFbGVtZW50Q3NzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xpY2tMaXN0RWxlbWVudChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5jbGlja0xpc3RFbGVtZW50KGluZGV4KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2Nyb2xsQnV0dG9uQ3NzKGlzTGVmdFNjcm9sbDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuZ2V0U2Nyb2xsQnV0dG9uQ3NzKHRoaXMuc3RhdGUuaGFzU2Nyb2xsZXIsIGlzTGVmdFNjcm9sbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsaWNrU2Nyb2xsQnV0dG9uKFxuICAgIGxpc3RDb250YWluZXJFbGVtZW50OiBFbGVtZW50LFxuICAgIGlzTGVmdFNjcm9sbDogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBsaXN0Q29udGFpbmVyRWxlbWVudC5zY3JvbGxMZWZ0ICs9IChpc0xlZnRTY3JvbGwgPyAtMSA6IDEpICogNzA7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy51cGRhdGVTY3JvbGxlciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNTY3JvbGxlcjpcbiAgICAgICAgICB0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudC5zY3JvbGxXaWR0aCA+XG4gICAgICAgICAgdGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgsXG4gICAgICB9KTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy51cGRhdGVTY3JvbGxlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZVNjcm9sbGVyKTtcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtcHJvZ3Jlc3MtYnV0dG9uc1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3NCdXR0b25zLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5IH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlcIjtcbmltcG9ydCB7IFJlYWN0V2luZG93TW9kZWwgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5V2luZG93IGV4dGVuZHMgU3VydmV5IHtcbiAgcHJvdGVjdGVkIHdpbmRvdzogUmVhY3RXaW5kb3dNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uRXhwYW5kZWQgPSB0aGlzLmhhbmRsZU9uRXhwYW5kZWQuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgcmV0dXJuIFt0aGlzLndpbmRvdywgdGhpcy53aW5kb3cuc3VydmV5XTtcbiAgfVxuICBoYW5kbGVPbkV4cGFuZGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLndpbmRvdy5pc0V4cGFuZGVkID0gIXRoaXMud2luZG93LmlzRXhwYW5kZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgdGhpcy53aW5kb3cuaXNTaG93aW5nO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaGVhZGVyID0gdGhpcy5yZW5kZXJXaW5kb3dIZWFkZXIoKTtcbiAgICB2YXIgYm9keSA9IHRoaXMud2luZG93LmlzRXhwYW5kZWQgPyB0aGlzLnJlbmRlckJvZHkoKSA6IG51bGw7XG4gICAgbGV0IHN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgIGJvdHRvbTogMyxcbiAgICAgIHJpZ2h0OiAxMCxcbiAgICAgIG1heFdpZHRoOiBcIjYwJVwiLFxuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy53aW5kb3cucm9vdH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAge2hlYWRlcn1cbiAgICAgICAge2JvZHl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJXaW5kb3dIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZUEgPSB7IHdpZHRoOiBcIjEwMCVcIiwgY3Vyc29yOiBcInBvaW50ZXJcIiB9O1xuICAgIHZhciBzdHlsZVRpdGxlID0geyBwYWRkaW5nUmlnaHQ6IFwiMTBweFwiIH07XG4gICAgdmFyIGdseXBoQ2xhc3NOYW1lID0gdGhpcy53aW5kb3cuaXNFeHBhbmRlZFxuICAgICAgPyB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkNvbGxhcHNlZFxuICAgICAgOiB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkV4cGFuZGVkO1xuICAgIGdseXBoQ2xhc3NOYW1lID0gXCJnbHlwaGljb24gcHVsbC1yaWdodCBcIiArIGdseXBoQ2xhc3NOYW1lO1xuICAgIHZhciB0aXRsZSA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnN1cnZleS5sb2NUaXRsZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy53aW5kb3cuaGVhZGVyLnJvb3R9PlxuICAgICAgICA8c3BhbiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uRXhwYW5kZWR9IHN0eWxlPXtzdHlsZUF9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5jc3Mud2luZG93LmhlYWRlci50aXRsZX0gc3R5bGU9e3N0eWxlVGl0bGV9PlxuICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dseXBoQ2xhc3NOYW1lfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLndpbmRvdy5pc0V4cGFuZGVkID8gKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uRXhwYW5kZWR9XG4gICAgICAgICAgICBzdHlsZT17eyBmbG9hdDogXCJyaWdodFwiLCBjdXJzb3I6IFwicG9pbnRlclwiIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzcy53aW5kb3cuaGVhZGVyLnRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+XG4gICAgICAgICAgICAgIFhcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQm9keSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy53aW5kb3cuYm9keX0+e3RoaXMuZG9SZW5kZXIoKX08L2Rpdj47XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVN1cnZleShuZXdQcm9wczogYW55KSB7XG4gICAgaWYgKCFuZXdQcm9wcykgbmV3UHJvcHMgPSB7fTtcbiAgICBzdXBlci5jcmVhdGVTdXJ2ZXkobmV3UHJvcHMpO1xuICAgIHRoaXMud2luZG93ID0gbmV3IFJlYWN0V2luZG93TW9kZWwobnVsbCwgdGhpcy5zdXJ2ZXkpO1xuICAgIGlmIChuZXdQcm9wcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0KSB7XG4gICAgICB0aGlzLndpbmRvdy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0ID0gbmV3UHJvcHMuY2xvc2VPbkNvbXBsZXRlVGltZW91dDtcbiAgICB9XG4gICAgdGhpcy53aW5kb3cuaXNTaG93aW5nID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMud2luZG93LmlzRXhwYW5kZWQgJiYgKG5ld1Byb3BzLmV4cGFuZGVkIHx8IG5ld1Byb3BzLmlzRXhwYW5kZWQpKVxuICAgICAgdGhpcy53aW5kb3cuZXhwYW5kKCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMud2luZG93LmNsb3NlV2luZG93T25Db21wbGV0ZUNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi53aW5kb3cuaGlkZSgpO1xuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgU3VydmV5RWxlbWVudCxcbiAgU3VydmV5RXJyb3IsXG4gIFF1ZXN0aW9uLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICBkb0tleTJDbGlja1VwLFxuICBUb29sdGlwTWFuYWdlcixcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UsIFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5Q3VzdG9tV2lkZ2V0IH0gZnJvbSBcIi4vY3VzdG9tLXdpZGdldFwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3Ige1xuICBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQ7XG4gIHJlbmRlckVycm9yKGtleTogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IsIGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50O1xuICBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nO1xuICBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGlzTmVlZEZvY3VzID0gZmFsc2U7XG4gIHB1YmxpYyBzdGF0aWMgcmVuZGVyUXVlc3Rpb25Cb2R5KFxuICAgIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblxuICApOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFxdWVzdGlvbi5pc1Zpc2libGUpIHJldHVybiBudWxsO1xuICAgIHZhciBjdXN0b21XaWRnZXQgPSBxdWVzdGlvbi5jdXN0b21XaWRnZXQ7XG4gICAgaWYgKCFjdXN0b21XaWRnZXQpIHtcbiAgICAgIHJldHVybiBjcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbik7XG4gICAgfVxuICAgIHJldHVybiA8U3VydmV5Q3VzdG9tV2lkZ2V0IGNyZWF0b3I9e2NyZWF0b3J9IHF1ZXN0aW9uPXtxdWVzdGlvbn0gLz47XG4gIH1cbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbltcInJlYWN0XCJdID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uW1wicmVhY3RcIl0gPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBwcml2YXRlIGRvQWZ0ZXJSZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuaXNOZWVkRm9jdXMpIHtcbiAgICAgIGlmICghdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmNsaWNrVGl0bGVGdW5jdGlvbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5pc05lZWRGb2N1cyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbikge1xuICAgICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoZWwgJiYgZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKSAhPT0gXCJyXCIpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiLCBcInJcIik7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtbmFtZVwiLCB0aGlzLnF1ZXN0aW9uLm5hbWUpO1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5hZnRlclJlbmRlcikge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb24uYWZ0ZXJSZW5kZXIoZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLmNhblJlbmRlcigpICYmXG4gICAgICAhIXRoaXMucXVlc3Rpb24gJiZcbiAgICAgICEhdGhpcy5jcmVhdG9yICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgdmFyIGNzc0NsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBxdWVzdGlvblJlbmRlciA9IHRoaXMucmVuZGVyUXVlc3Rpb24oKTtcbiAgICB2YXIgaGVhZGVyID0gdGhpcy5yZW5kZXJIZWFkZXIocXVlc3Rpb24pO1xuICAgIHZhciBoZWFkZXJUb3AgPSBxdWVzdGlvbi5oYXNUaXRsZU9uTGVmdFRvcCA/IGhlYWRlciA6IG51bGw7XG4gICAgdmFyIGhlYWRlckJvdHRvbSA9IHF1ZXN0aW9uLmhhc1RpdGxlT25Cb3R0b20gPyBoZWFkZXIgOiBudWxsO1xuICAgIHZhciBkZXNjcmlwdGlvblVuZGVySW5wdXQgPSBxdWVzdGlvbi5oYXNEZXNjcmlwdGlvblVuZGVySW5wdXRcbiAgICAgID8gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbihjc3NDbGFzc2VzLCB0cnVlKVxuICAgICAgOiBudWxsO1xuXG4gICAgdmFyIGNvbW1lbnQgPVxuICAgICAgcXVlc3Rpb24gJiYgcXVlc3Rpb24uaGFzQ29tbWVudCA/IHRoaXMucmVuZGVyQ29tbWVudChjc3NDbGFzc2VzKSA6IG51bGw7XG4gICAgY29uc3QgZXJyb3JzQWJvdmVRdWVzdGlvbiA9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXAgJiYgIXRoaXMucXVlc3Rpb24uaGFzUGFyZW50XG4gICAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJcIilcbiAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGVycm9yc1Rvb2x0aXAgPVxuICAgICAgdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwICYmIHRoaXMucXVlc3Rpb24uaGFzUGFyZW50XG4gICAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJ0b29sdGlwXCIpXG4gICAgICAgIDogbnVsbDtcblxuICAgIHZhciBlcnJvcnNUb3AgPVxuICAgICAgdGhpcy5jcmVhdG9yLnF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpID09PSBcInRvcFwiICYmXG4gICAgICAhdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJ0b3BcIilcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBlcnJvcnNCb3R0b20gPVxuICAgICAgdGhpcy5jcmVhdG9yLnF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpID09PSBcImJvdHRvbVwiICYmXG4gICAgICAhdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJib3R0b21cIilcbiAgICAgICAgOiBudWxsO1xuICAgIGxldCByb290U3R5bGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdMZWZ0KSByb290U3R5bGVbXCJwYWRkaW5nTGVmdFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdMZWZ0O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdSaWdodClcbiAgICAgIHJvb3RTdHlsZVtcInBhZGRpbmdSaWdodFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdSaWdodDtcblxuICAgIHZhciBjb250ZW50U3R5bGUgPSB7XG4gICAgICBkaXNwbGF5OiAhdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCA/IFwiXCIgOiBcIm5vbmVcIixcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgICBpZD17cXVlc3Rpb24uaWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbi5nZXRSb290Q3NzKCl9XG4gICAgICAgICAgc3R5bGU9e3Jvb3RTdHlsZX1cbiAgICAgICAgICByb2xlPXtxdWVzdGlvbi5hcmlhUm9sZX1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtxdWVzdGlvbi5oYXNUaXRsZSA/IHF1ZXN0aW9uLmFyaWFUaXRsZUlkIDogbnVsbH1cbiAgICAgICAgPlxuICAgICAgICAgIHtlcnJvcnNBYm92ZVF1ZXN0aW9ufVxuICAgICAgICAgIHtoZWFkZXJUb3B9XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbi5jc3NDb250ZW50fVxuICAgICAgICAgICAgc3R5bGU9e2NvbnRlbnRTdHlsZX1cbiAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtlcnJvcnNUb3B9XG4gICAgICAgICAgICB7cXVlc3Rpb25SZW5kZXJ9XG4gICAgICAgICAgICB7Y29tbWVudH1cbiAgICAgICAgICAgIHtlcnJvcnNCb3R0b219XG4gICAgICAgICAgICB7ZXJyb3JzVG9vbHRpcH1cbiAgICAgICAgICAgIHtkZXNjcmlwdGlvblVuZGVySW5wdXR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2hlYWRlckJvdHRvbX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwRWxlbWVudChlbGVtZW50OiBKU1guRWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFJlYWN0U3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBSZWFjdFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gc3VydmV5LndyYXBFbGVtZW50KGVsZW1lbnQsIHRoaXMucXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbihcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaXNVbmRlcklucHV0OiBib29sZWFuID0gZmFsc2VcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBkZXNjcmlwdGlvblRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmxvY0Rlc2NyaXB0aW9uXG4gICAgKTtcbiAgICB2YXIgY2xhc3NOYW1lID0gaXNVbmRlcklucHV0XG4gICAgICA/IGNzc0NsYXNzZXMuZGVzY3JpcHRpb25VbmRlcklucHV0XG4gICAgICA6IGNzc0NsYXNzZXMuZGVzY3JpcHRpb247XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PntkZXNjcmlwdGlvblRleHR9PC9kaXY+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb21tZW50KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY29tbWVudFRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmxvY0NvbW1lbnRUZXh0XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb3JtR3JvdXB9PlxuICAgICAgICA8ZGl2Pntjb21tZW50VGV4dH08L2Rpdj5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHRpdGxlID0gcXVlc3Rpb24uaGFzVGl0bGUgPyAoXG4gICAgICA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3F1ZXN0aW9ufT48L1RpdGxlRWxlbWVudD5cbiAgICApIDogbnVsbDtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSBxdWVzdGlvbi5oYXNEZXNjcmlwdGlvblVuZGVyVGl0bGVcbiAgICAgID8gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbihjc3NDbGFzc2VzKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzSGVhZGVyfSBvbkNsaWNrPXtxdWVzdGlvbi5jbGlja1RpdGxlRnVuY3Rpb259PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVycm9ycyhjc3NDbGFzc2VzOiBhbnksIGxvY2F0aW9uOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgbG9jYXRpb249e2xvY2F0aW9ufVxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wifVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwicXVlc3Rpb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRFcnJvcnMgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmdldFN0YXRlKCk7XG4gICAgdGhpcy50b29sdGlwUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlkO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBsb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY2F0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0U3RhdGUocHJldlN0YXRlOiBhbnkgPSBudWxsKSB7XG4gICAgcmV0dXJuICFwcmV2U3RhdGUgPyB7IGVycm9yOiAwIH0gOiB7IGVycm9yOiBwcmV2U3RhdGUuZXJyb3IgKyAxIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lmhhc1Zpc2libGVFcnJvcnM7XG4gIH1cbiAgcHJpdmF0ZSB0b29sdGlwTWFuYWdlcjogVG9vbHRpcE1hbmFnZXI7XG4gIHByaXZhdGUgdG9vbHRpcFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYgKHRoaXMucHJvcHMubG9jYXRpb24gPT0gXCJ0b29sdGlwXCIpIHtcbiAgICAgIGlmICh0aGlzLnRvb2x0aXBSZWYuY3VycmVudCAmJiAhdGhpcy50b29sdGlwTWFuYWdlcikge1xuICAgICAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyID0gbmV3IFRvb2x0aXBNYW5hZ2VyKHRoaXMudG9vbHRpcFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGlmICghIXRoaXMudG9vbHRpcE1hbmFnZXIgJiYgIXRoaXMudG9vbHRpcFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHRoaXMuZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICghIXRoaXMudG9vbHRpcE1hbmFnZXIpIHtcbiAgICAgIHRoaXMuZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCkge1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIuZGlzcG9zZSgpO1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50LmVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSBcImVycm9yXCIgKyBpO1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRvci5yZW5kZXJFcnJvcihrZXksIHRoaXMuZWxlbWVudC5lcnJvcnNbaV0sIHRoaXMuY3NzQ2xhc3NlcylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmVsZW1lbnQuY3NzRXJyb3J9XG4gICAgICAgIGlkPXt0aGlzLmlkfVxuICAgICAgICByZWY9e3RoaXMudG9vbHRpcFJlZn1cbiAgICAgID5cbiAgICAgICAge2Vycm9yc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzV3JhcHBlZCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlc3Rpb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW1Dc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtQ3NzO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGRvQWZ0ZXJSZW5kZXIoKSB7fVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVycm9ycyhlcnJvcnNMb2NhdGlvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2hvd0Vycm9ycygpID8gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGxvY2F0aW9uPXtlcnJvcnNMb2NhdGlvbn1cbiAgICAgIC8+XG4gICAgKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBlcnJvcnNMb2NhdGlvbiA9IHRoaXMuY3JlYXRvci5xdWVzdGlvbkVycm9yTG9jYXRpb24oKTtcbiAgICB2YXIgZXJyb3JzID0gdGhpcy5yZW5kZXJFcnJvcnMoZXJyb3JzTG9jYXRpb24pO1xuICAgIHZhciBlcnJvcnNUb3AgPVxuICAgICAgZXJyb3JzTG9jYXRpb24gPT09IFwidG9wXCIgJiYgIXRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcFxuICAgICAgICA/IGVycm9yc1xuICAgICAgICA6IG51bGw7XG4gICAgdmFyIGVycm9yc0JvdHRvbSA9XG4gICAgICBlcnJvcnNMb2NhdGlvbiA9PT0gXCJib3R0b21cIiAmJiAhdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICAgID8gZXJyb3JzXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgcmVuZGVyZWRRdWVzdGlvbiA9IHRoaXMucmVuZGVyUXVlc3Rpb24oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2Vycm9yc1RvcH1cbiAgICAgICAge3JlbmRlcmVkUXVlc3Rpb259XG4gICAgICAgIHtlcnJvcnNCb3R0b219XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50O1xuICBwcm90ZWN0ZWQgZ2V0U2hvd0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc1Zpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gU3VydmV5UXVlc3Rpb24ucmVuZGVyUXVlc3Rpb25Cb2R5KHRoaXMuY3JlYXRvciwgdGhpcy5xdWVzdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzV3JhcHBlZCB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwcm90ZWN0ZWQgY2VsbFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxUYWJsZUNlbGxFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNlbGxSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmNlbGxSZWYuY3VycmVudDtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgc3R5bGUgPSB0aGlzLmdldENlbGxTdHlsZSgpO1xuICAgIHZhciBlcnJvcnNUb29sdGlwID0gdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKFwidG9vbHRpcFwiKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8dGRcbiAgICAgICAgcmVmPXt0aGlzLmNlbGxSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5pdGVtQ3NzfVxuICAgICAgICBkYXRhLXJlc3BvbnNpdmUtdGl0bGU9e3RoaXMuZ2V0SGVhZGVyVGV4dCgpfVxuICAgICAgICB0aXRsZT17dGhpcy5wcm9wcy5jZWxsLmdldFRpdGxlKCl9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgID5cbiAgICAgICAge3RoaXMud3JhcENlbGwodGhpcy5wcm9wcy5jZWxsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuY2VsbFF1ZXN0aW9uV3JhcHBlcn0+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckNvbnRlbnQoKX1cbiAgICAgICAgICAgICAge2Vycm9yc1Rvb2x0aXB9XG4gICAgICAgICAgICA8L2Rpdj4pXG4gICAgICAgICl9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENlbGxTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRIZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gICAgZWxlbWVudDogSlNYLkVsZW1lbnRcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghY2VsbCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHN1cnZleTogUmVhY3RTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFJlYWN0U3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50O1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBzdXJ2ZXkud3JhcE1hdHJpeENlbGwoZWxlbWVudCwgY2VsbCk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsLFxuICBCdXR0b25Hcm91cEl0ZW1WYWx1ZSxcbiAgQnV0dG9uR3JvdXBJdGVtTW9kZWwsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbDtcbiAgfVxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3R9PntpdGVtc308L2Rpdj47XG4gIH1cbiAgcmVuZGVySXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKFxuICAgICAgKGl0ZW06IEJ1dHRvbkdyb3VwSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFN1cnZleUJ1dHRvbkdyb3VwSXRlbVxuICAgICAgICAgICAga2V5PXt0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4fVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgID48L1N1cnZleUJ1dHRvbkdyb3VwSXRlbT5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlCdXR0b25Hcm91cEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwdWJsaWMgbW9kZWw6IEJ1dHRvbkdyb3VwSXRlbU1vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgQnV0dG9uR3JvdXBJdGVtTW9kZWwodGhpcy5xdWVzdGlvbiwgdGhpcy5pdGVtLCB0aGlzLmluZGV4KTtcbiAgfVxuICBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBnZXQgaXRlbSgpOiBCdXR0b25Hcm91cEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGNvbnN0IGljb24gPSB0aGlzLnJlbmRlckljb24oKTtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMucmVuZGVySW5wdXQoKTtcbiAgICBjb25zdCBjYXB0aW9uID0gdGhpcy5yZW5kZXJDYXB0aW9uKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmxhYmVsfVxuICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbH1cbiAgICAgID5cbiAgICAgICAge2lucHV0fVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuZGVjb3JhdG9yfT5cbiAgICAgICAgICB7aWNvbn1cbiAgICAgICAgICB7Y2FwdGlvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckljb24oKSB7XG4gICAgaWYgKCEhdGhpcy5tb2RlbC5pY29uTmFtZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmljb259XG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMubW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgc2l6ZT17dGhpcy5tb2RlbC5pY29uU2l6ZSB8fCAyNH1cbiAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJbnB1dCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuY29udHJvbH1cbiAgICAgICAgaWQ9e3RoaXMubW9kZWwuaWR9XG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIG5hbWU9e3RoaXMubW9kZWwubmFtZX1cbiAgICAgICAgY2hlY2tlZD17dGhpcy5tb2RlbC5zZWxlY3RlZH1cbiAgICAgICAgdmFsdWU9e3RoaXMubW9kZWwudmFsdWV9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLm1vZGVsLnJlYWRPbmx5fVxuICAgICAgICBvbkNoYW5nZT17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwub25DaGFuZ2UoKTtcbiAgICAgICAgfX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5tb2RlbC5pc1JlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMubW9kZWwuaGFzRXJyb3JzfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLm1vZGVsLmRlc2NyaWJlZEJ5fVxuICAgICAgICByb2xlPVwicmFkaW9cIlxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDYXB0aW9uKCkge1xuICAgIGlmICghdGhpcy5tb2RlbC5zaG93Q2FwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgbGV0IGNhcHRpb24gPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLm1vZGVsLmNhcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmNhcHRpb259XG4gICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sfVxuICAgICAgPlxuICAgICAgICB7Y2FwdGlvbn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cbi8vIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJidXR0b25ncm91cFwiLCBwcm9wcyA9PiB7XG4vLyAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIHByb3BzKTtcbi8vIH0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5TW9kZWwgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNoZWNrYm94TW9kZWwgfSBmcm9tIFwiLi4vcXVlc3Rpb25fY2hlY2tib3hcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vYmFzZVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25DaGVja2JveCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25DaGVja2JveE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0U2VsZWN0QmFzZVJvb3RDc3MoKX1cbiAgICAgICAgcmVmPXsoZmllbGRzZXQpID0+ICh0aGlzLmNvbnRyb2wgPSBmaWVsZHNldCl9XG4gICAgICA+XG4gICAgICAgIDxsZWdlbmQgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT17XCJzdi1oaWRkZW5cIn0+PC9sZWdlbmQ+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IHRoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKVxuICAgICAgICAgIDogdGhpcy5nZXRJdGVtcyhjc3NDbGFzc2VzKX1cbiAgICAgIDwvZmllbGRzZXQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbVwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBjaSA9PT0gMCAmJiBpaSA9PT0gMCxcbiAgICAgICAgICBjc3NDbGFzc2VzLFxuICAgICAgICAgIFwiXCIgKyBjaSArIGlpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJdGVtcyhjc3NDbGFzc2VzOiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVuZGVyZWRJdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IFwiaXRlbVwiICsgaTtcbiAgICAgIHZhciByZW5kZXJlZEl0ZW0gPSB0aGlzLnJlbmRlckl0ZW0oa2V5LCBpdGVtLCBpID09IDAsIGNzc0NsYXNzZXMsIFwiXCIgKyBpKTtcbiAgICAgIHJlbmRlcmVkSXRlbXMucHVzaChyZW5kZXJlZEl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWRJdGVtcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IGFueSxcbiAgICBpc0ZpcnN0OiBib29sZWFuLFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpbmRleDogc3RyaW5nXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgIHRleHRTdHlsZT17dGhpcy50ZXh0U3R5bGV9XG4gICAgICAgIGlzRmlyc3Q9e2lzRmlyc3R9XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBSZWFjdFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVkSXRlbSA9IG51bGw7XG4gICAgaWYoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gc3VydmV5LndyYXBJdGVtVmFsdWUocmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkNoZWNrYm94TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0U3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0ZpcnN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNGaXJzdDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaGlkZUNhcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGlkZUNhcHRpb24gPT09IHRydWU7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB2YXIgbmV3VmFsdWUgPSBbXS5jb25jYXQodGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlIHx8IFtdKTtcbiAgICB2YXIgaW5kZXggPSBuZXdWYWx1ZS5pbmRleE9mKHRoaXMuaXRlbS52YWx1ZSk7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIG5ld1ZhbHVlLnB1c2godGhpcy5pdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgc2VsZWN0QWxsQ2hhbmdlZCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi50b2dnbGVTZWxlY3RBbGwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXRlbSAmJiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKHRoaXMuaXRlbSk7XG4gICAgdmFyIG90aGVySXRlbSA9IHRoaXMucXVlc3Rpb24uaXNPdGhlckl0ZW0odGhpcy5pdGVtKSAmJiBpc0NoZWNrZWRcbiAgICAgID8gdGhpcy5yZW5kZXJPdGhlcigpXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQ2hlY2tib3goaXNDaGVja2VkLCBvdGhlckl0ZW0pO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5wdXRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsOy8veyBtYXJnaW5SaWdodDogXCIzcHhcIiB9O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDaGVja2JveChcbiAgICBpc0NoZWNrZWQ6IGJvb2xlYW4sXG4gICAgb3RoZXJJdGVtOiBKU1guRWxlbWVudFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGlkID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtSWQodGhpcy5pdGVtKTtcbiAgICB2YXIgdGV4dCA9ICF0aGlzLmhpZGVDYXB0aW9uID8gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5pdGVtLmxvY1RleHQpIDogXCJcIjtcbiAgICBsZXQgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3ModGhpcy5pdGVtKTtcbiAgICBsZXQgbGFiZWxDbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0TGFiZWxDbGFzcyh0aGlzLml0ZW0pO1xuICAgIHZhciBvbkl0ZW1DaGFuZ2VkID1cbiAgICAgIHRoaXMuaXRlbSA9PSB0aGlzLnF1ZXN0aW9uLnNlbGVjdEFsbEl0ZW1cbiAgICAgICAgPyB0aGlzLnNlbGVjdEFsbENoYW5nZWRcbiAgICAgICAgOiB0aGlzLmhhbmRsZU9uQ2hhbmdlO1xuXG4gICAgdmFyIGxvY1RleHQ6IGFueSA9IHRoaXMuaXRlbS5sb2NUZXh0O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9IHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17bGFiZWxDbGFzc30gYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5nZXRBcmlhSXRlbUxhYmVsKHRoaXMuaXRlbSl9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2x9XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuaXRlbS52YWx1ZX1cbiAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLmlucHV0U3R5bGV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkl0ZW1DaGFuZ2VkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgP1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+OlxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPiA6XG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsfT5cbiAgICAgICAgICAgIHt0ZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAge290aGVySXRlbX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck90aGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtXG4gICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgb3RoZXJDc3M9e3RoaXMuY3NzQ2xhc3Nlcy5vdGhlcn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLmNzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY2hlY2tib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQ2hlY2tib3gsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQsIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Db21tZW50TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8UXVlc3Rpb25Db21tZW50TW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIG9uQmx1ciA9ICF0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlID8gdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQgOiBudWxsO1xuICAgIHZhciBvbklucHV0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlKVxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChldmVudCk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucXVlc3Rpb24udXBkYXRlRWxlbWVudCgpO1xuICAgIH07XG4gICAgdmFyIHBsYWNlSG9sZGVyID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlSG9sZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKSkge1xuICAgICAgcmV0dXJuIDxkaXY+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jbGFzc05hbWV9XG4gICAgICAgIGRpc2FibGVkPXsgdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfVxuICAgICAgICByZWFkT25seT17IHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IH1cbiAgICAgICAgcmVmPXsodGV0eGFyZWEpID0+ICh0aGlzLmNvbnRyb2wgPSB0ZXR4YXJlYSl9XG4gICAgICAgIG1heExlbmd0aD17dGhpcy5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyfVxuICAgICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHsgdGhpcy5xdWVzdGlvbi5vbktleURvd24oZXZlbnQpOyB9fVxuICAgICAgICBjb2xzPXt0aGlzLnF1ZXN0aW9uLmNvbHN9XG4gICAgICAgIHJvd3M9e3RoaXMucXVlc3Rpb24ucm93c31cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICBzdHlsZT17eyByZXNpemU6IHRoaXMucXVlc3Rpb24ucmVzaXplU3R5bGUgfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgICBsZXQgY2xhc3NOYW1lID0gdGhpcy5wcm9wcy5vdGhlckNzcyB8fCB0aGlzLmNzc0NsYXNzZXMuY29tbWVudDtcbiAgICBsZXQgaGFuZGxlT25DaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbW1lbnQ6IGV2ZW50LnRhcmdldC52YWx1ZSB9KTtcbiAgICB9O1xuICAgIGxldCBjb21tZW50ID0gISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuY29tbWVudCAhPT0gdW5kZWZpbmVkID8gdGhpcy5zdGF0ZS5jb21tZW50IDogcXVlc3Rpb24uY29tbWVudCB8fCBcIlwiO1xuICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KCkpIHtcbiAgICAgIHJldHVybiA8ZGl2Pntjb21tZW50fTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgdmFsdWU9e2NvbW1lbnR9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIG1heExlbmd0aD17cXVlc3Rpb24uZ2V0T3RoZXJzTWF4TGVuZ3RoKCl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtxdWVzdGlvbi5jb21tZW50T3JPdGhlclBsYWNlSG9sZGVyfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlT25DaGFuZ2V9XG4gICAgICAgIG9uQmx1cj17KGUpID0+IHsgcXVlc3Rpb24ub25Db21tZW50Q2hhbmdlKGUpOyBoYW5kbGVPbkNoYW5nZShlKTsgfSB9XG4gICAgICAgIG9uSW5wdXQ9eyhlKSA9PiBxdWVzdGlvbi5vbkNvbW1lbnRJbnB1dChlKX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17cXVlc3Rpb24uaXNSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17cXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICBzdHlsZT17eyByZXNpemU6IHF1ZXN0aW9uLnJlc2l6ZVN0eWxlIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQ29tbWVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbkN1c3RvbU1vZGVsLCBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25DdXN0b20gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8UXVlc3Rpb25DdXN0b21Nb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICBjb25zdCByZXMgPSBzdXBlci5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgaWYoISF0aGlzLnF1ZXN0aW9uLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgcmVzLnB1c2godGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gU3VydmV5UXVlc3Rpb24ucmVuZGVyUXVlc3Rpb25Cb2R5KFxuICAgICAgdGhpcy5jcmVhdG9yLFxuICAgICAgdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb25cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNvbXBvc2l0ZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlQYW5lbFxuICAgICAgICBlbGVtZW50PXt0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbH1cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBzdXJ2ZXk9e3RoaXMucXVlc3Rpb24uc3VydmV5fVxuICAgICAgPjwvU3VydmV5UGFuZWw+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY3VzdG9tXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkN1c3RvbSwgcHJvcHMpO1xufSk7XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY29tcG9zaXRlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNvbXBvc2l0ZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCxcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxRdWVzdGlvbkRyb3Bkb3duTW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0VmFsdWVDb3JlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uQmFzZS5yZW5kZXJlZFZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQ29yZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZS5yZW5kZXJlZFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgY29tbWVudCA9IHRoaXMucXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkXG4gICAgICA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcylcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgc2VsZWN0ID0gdGhpcy5yZW5kZXJTZWxlY3QoY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLnJlbmRlckNzc1Jvb3R9PlxuICAgICAgICB7c2VsZWN0fVxuICAgICAgICB7Y29tbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclNlbGVjdChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5TW9kZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIDxkaXYgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfSBkaXNhYmxlZD5cbiAgICAgICAgICB7IHRoaXMucXVlc3Rpb24ucmVhZE9ubHlUZXh0IH1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zZWxlY3RXcmFwcGVyfT5cbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfVxuICAgICAgICAgIHJlZj17KHNlbGVjdCkgPT4gKHRoaXMuY29udHJvbCA9IHNlbGVjdCl9XG4gICAgICAgICAgYXV0b0NvbXBsZXRlPXt0aGlzLnF1ZXN0aW9uLmF1dG9Db21wbGV0ZX1cbiAgICAgICAgICBvbkNoYW5nZT17dGhpcy51cGRhdGVWYWx1ZU9uRXZlbnR9XG4gICAgICAgICAgb25JbnB1dD17dGhpcy51cGRhdGVWYWx1ZU9uRXZlbnR9XG4gICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIHJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmlzUmVxdWlyZWR9XG4gICAgICAgID5cbiAgICAgICAgICB7IHRoaXMucXVlc3Rpb24uc2hvd09wdGlvbnNDYXB0aW9uID8gKDxvcHRpb24gdmFsdWU9XCJcIj57dGhpcy5xdWVzdGlvbi5vcHRpb25zQ2FwdGlvbn08L29wdGlvbj4pIDogbnVsbCB9XG4gICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcCgoaXRlbSwgaSkgPT4gPFN1cnZleVF1ZXN0aW9uT3B0aW9uSXRlbSBrZXk9e1wiaXRlbVwiICsgaX0gaXRlbT17aXRlbX0vPikgfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck90aGVyKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtXG4gICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk9wdGlvbkl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwcml2YXRlIGdldCBpdGVtKCk6IEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxvcHRpb24gdmFsdWU9e3RoaXMuaXRlbS52YWx1ZX0gZGlzYWJsZWQ9eyF0aGlzLml0ZW0uaXNFbmFibGVkfT5cbiAgICAgICAge3RoaXMuaXRlbS50ZXh0fVxuICAgICAgPC9vcHRpb24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZHJvcGRvd25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRHJvcGRvd24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnQgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgQmFzZSwgQXJyYXlDaGFuZ2VzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEJhc2U8UCwgUz4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UCwgUz4ge1xuICBwdWJsaWMgc3RhdGljIHJlbmRlckxvY1N0cmluZyhcbiAgICBsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nLFxuICAgIHN0eWxlOiBhbnkgPSBudWxsLFxuICAgIGtleT86IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChsb2NTdHIucmVuZGVyQXMsIHtcbiAgICAgIGxvY1N0cjogbG9jU3RyLnJlbmRlckFzRGF0YSxcbiAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgIGtleToga2V5LFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZTogc3RyaW5nO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubWFrZUJhc2VFbGVtZW50c1JlYWN0KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy51bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICB0aGlzLm1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbmRlcigpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0RW5kUmVuZGVyaW5nKDEpO1xuICAgIHZhciByZXMgPSB0aGlzLnJlbmRlckVsZW1lbnQoKTtcbiAgICB0aGlzLnN0YXJ0RW5kUmVuZGVyaW5nKC0xKTtcblxuICAgIHJlcyA9IHRoaXMud3JhcEVsZW1lbnQocmVzKTtcblxuICAgIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwRWxlbWVudChlbGVtZW50OiBKU1guRWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzUmVuZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgIHZhciBzdGF0ZUVsOiBhbnkgPSB0aGlzLmdldFN0YXRlRWxlbWVudCgpO1xuICAgIHJldHVybiAhIXN0YXRlRWwgJiYgc3RhdGVFbC5yZWFjdFJlbmRlcmluZyA+IDA7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUVsZW1lbnQoKTtcbiAgfVxuICBwcml2YXRlIHN0YXJ0RW5kUmVuZGVyaW5nKHZhbDogbnVtYmVyKSB7XG4gICAgdmFyIHN0YXRlRWw6IGFueSA9IHRoaXMuZ2V0UmVuZGVyZWRFbGVtZW50KCk7XG4gICAgaWYgKCEhc3RhdGVFbCkge1xuICAgICAgaWYgKCFzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nKSBzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nID0gMDtcbiAgICAgIHN0YXRlRWwucmVhY3RSZW5kZXJpbmcgKz0gdmFsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNoYW5nZWRTdGF0ZVByb3BOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZTtcbiAgfVxuICBwcml2YXRlIG1ha2VCYXNlRWxlbWVudHNSZWFjdCgpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubWFrZUJhc2VFbGVtZW50UmVhY3QoZWxzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudW5NYWtlQmFzZUVsZW1lbnRSZWFjdChlbHNbaV0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgdmFyIGVsID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnQoKTtcbiAgICByZXR1cm4gISFlbCA/IFtlbF0gOiBbXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNEaXNwbGF5TW9kZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wczogYW55ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gcHJvcHMuaXNEaXNwbGF5TW9kZSB8fCBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTG9jU3RyaW5nKFxuICAgIGxvY1N0cjogTG9jYWxpemFibGVTdHJpbmcsXG4gICAgc3R5bGU6IGFueSA9IG51bGxcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcobG9jU3RyLCBzdHlsZSk7XG4gIH1cbiAgcHJpdmF0ZSBtYWtlQmFzZUVsZW1lbnRSZWFjdChzdGF0ZUVsZW1lbnQ6IEJhc2UpIHtcbiAgICBpZiAoIXN0YXRlRWxlbWVudCkgcmV0dXJuO1xuICAgIHN0YXRlRWxlbWVudC5pdGVyYXRlUHJvcGVydGllc0hhc2goKGhhc2gsIGtleSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNhblVzZVByb3BJblN0YXRlKGtleSkpIHJldHVybjtcbiAgICAgIHZhciB2YWw6IGFueSA9IGhhc2hba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFyIHZhbDogYW55ID0gdmFsO1xuICAgICAgICB2YWxbXCJvbkFycmF5Q2hhbmdlZFwiXSA9IChhcnJheUNoYW5nZXM6IEFycmF5Q2hhbmdlcykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgICAgICAgdGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlID0ga2V5O1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHZhciBuZXdTdGF0ZTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgICAgICBuZXdTdGF0ZVtrZXldID0gdmFsO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1N0YXRlIGFzIFM7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgc3RhdGVFbGVtZW50LnNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlciA9IChcbiAgICAgIGhhc2g6IGFueSxcbiAgICAgIGtleTogc3RyaW5nLFxuICAgICAgdmFsOiBhbnlcbiAgICApID0+IHtcbiAgICAgIGlmIChoYXNoW2tleV0gIT09IHZhbCkge1xuICAgICAgICBoYXNoW2tleV0gPSB2YWw7XG4gICAgICAgIGlmICghdGhpcy5jYW5Vc2VQcm9wSW5TdGF0ZShrZXkpKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZSA9IGtleTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgIHZhciBuZXdTdGF0ZTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHZhbDtcbiAgICAgICAgICByZXR1cm4gbmV3U3RhdGUgYXMgUztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuVXNlUHJvcEluU3RhdGUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIHVuTWFrZUJhc2VFbGVtZW50UmVhY3Qoc3RhdGVFbGVtZW50OiBCYXNlKSB7XG4gICAgaWYgKCFzdGF0ZUVsZW1lbnQpIHJldHVybjtcbiAgICBzdGF0ZUVsZW1lbnQuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyID0gdW5kZWZpbmVkO1xuICAgIHN0YXRlRWxlbWVudC5pdGVyYXRlUHJvcGVydGllc0hhc2goKGhhc2gsIGtleSkgPT4ge1xuICAgICAgdmFyIHZhbDogYW55ID0gaGFzaFtrZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgdmFsOiBhbnkgPSB2YWw7XG4gICAgICAgIHZhbFtcIm9uQXJyYXlDaGFuZ2VkXCJdID0gKCkgPT4ge307XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0U3VydmV5RWxlbWVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnRyb2w6IEhUTUxFbGVtZW50O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uQmFzZSkge1xuICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudCh0aGlzLmNvbnRyb2wpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLmNvbnRyb2w7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpICE9PSBcInJcIikge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIsIFwiclwiKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uQmFzZSgpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbkJhc2UgJiYgISF0aGlzLmNyZWF0b3I7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldCB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXREYXRhLmlzTmVlZFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzRGlzcGxheU1vZGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJvcHM6IGFueSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgIHByb3BzLmlzRGlzcGxheU1vZGUgfHxcbiAgICAgICghIXRoaXMucXVlc3Rpb25CYXNlICYmIHRoaXMucXVlc3Rpb25CYXNlLmlzSW5wdXRSZWFkT25seSkgfHwgZmFsc2VcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwQ2VsbChcbiAgICBjZWxsOiBhbnksXG4gICAgZWxlbWVudDogSlNYLkVsZW1lbnQsXG4gICAgcmVhc29uOiBzdHJpbmdcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghcmVhc29uKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc3VydmV5OiBSZWFjdFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbkJhc2VcbiAgICAgIC5zdXJ2ZXkgYXMgUmVhY3RTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IHN1cnZleS53cmFwTWF0cml4Q2VsbChlbGVtZW50LCBjZWxsLCByZWFzb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8XG4gIFQgZXh0ZW5kcyBRdWVzdGlvblxuPiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50ID0gdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFQge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBUO1xuICB9XG4gIHVwZGF0ZVZhbHVlT25FdmVudCA9IChldmVudDogYW55KSA9PiB7XG4gICAgaWYgKFxuICAgICAgIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnF1ZXN0aW9uQmFzZS52YWx1ZSwgZXZlbnQudGFyZ2V0LnZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5zZXRWYWx1ZUNvcmUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB9XG4gIH07XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb25CYXNlLnZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQ29yZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZS52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2w6IGFueSA9IHRoaXMuY29udHJvbDtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5nZXRWYWx1ZUNvcmUoKTtcbiAgICAgIGlmICghSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCBjb250cm9sLnZhbHVlKSkge1xuICAgICAgICBjb250cm9sLnZhbHVlID0gdGhpcy5nZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkVtcHR5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkVtcHR5IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uRW1wdHlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uRW1wdHlNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgLz47XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImVtcHR5XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkVtcHR5LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkV4cHJlc3Npb24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fVxuICAgICAgICByZWY9eyhkaXYpID0+ICh0aGlzLmNvbnRyb2wgPSBkaXYpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5mb3JtYXRlZFZhbHVlfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZXhwcmVzc2lvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25FeHByZXNzaW9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IEhhc2hUYWJsZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgUmVhY3RRdWVzdGlvbkZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBSZWFjdFF1ZXN0aW9uRmFjdG9yeSA9IG5ldyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSgpO1xuICBwcml2YXRlIGNyZWF0b3JIYXNoOiBIYXNoVGFibGU8KG5hbWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnQ+ID0ge307XG5cbiAgcHVibGljIHJlZ2lzdGVyUXVlc3Rpb24oXG4gICAgcXVlc3Rpb25UeXBlOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25DcmVhdG9yOiAobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudFxuICApIHtcbiAgICB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV0gPSBxdWVzdGlvbkNyZWF0b3I7XG4gIH1cbiAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNyZWF0b3JIYXNoKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LnNvcnQoKTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdO1xuICAgIGlmIChjcmVhdG9yID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjcmVhdG9yKHBhcmFtcyk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GaWxlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25GaWxlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkZpbGVNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uRmlsZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgcHJldmlldyA9IHRoaXMucmVuZGVyUHJldmlldygpO1xuICAgIHZhciBmaWxlSW5wdXQgPSBudWxsO1xuICAgIHZhciBmaWxlRGVjb3JhdG9yID0gdGhpcy5yZW5kZXJGaWxlRGVjb3JhdG9yKCk7XG4gICAgdmFyIGNsZWFyQnV0dG9uID0gdGhpcy5yZW5kZXJDbGVhckJ1dHRvbihcbiAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25cbiAgICApO1xuICAgIHZhciBjbGVhckJ1dHRvbkJvdHRvbSA9IHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oXG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uQm90dG9tXG4gICAgKTtcbiAgICBmaWxlSW5wdXQgPSAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBjbGFzc05hbWU9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUlucHV0IDogdGhpcy5xdWVzdGlvbi5nZXRSZWFkT25seUZpbGVDc3MoKX1cbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgcmVmPXtpbnB1dCA9PiAodGhpcy5jb250cm9sID0gaW5wdXQpfVxuICAgICAgICBzdHlsZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHt9IDogeyBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH19XG4gICAgICAgIG9uQ2hhbmdlPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8gdGhpcy5xdWVzdGlvbi5kb0NoYW5nZSA6IG51bGx9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgbXVsdGlwbGU9e3RoaXMucXVlc3Rpb24uYWxsb3dNdWx0aXBsZX1cbiAgICAgICAgdGl0bGU9e3RoaXMucXVlc3Rpb24uaW5wdXRUaXRsZX1cbiAgICAgICAgYWNjZXB0PXt0aGlzLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXN9XG4gICAgICAvPlxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEZpbGVSb290Q3NzKCl9PlxuICAgICAgICB7ZmlsZUlucHV0fVxuICAgICAgICB7ZmlsZURlY29yYXRvcn1cbiAgICAgICAge2NsZWFyQnV0dG9ufVxuICAgICAgICB7cHJldmlld31cbiAgICAgICAge2NsZWFyQnV0dG9uQm90dG9tfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRmlsZURlY29yYXRvcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcXVlc3Rpb25Dc3MgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgbGV0IG5vRmlsZUNob3NlbiA9IG51bGw7XG4gICAgbGV0IGNob29zZUZpbGUgPSBudWxsO1xuICAgIGNob29zZUZpbGUgPSAoXG4gICAgICA8bGFiZWxcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDaG9vc2VGaWxlQ3NzKCl9XG4gICAgICAgIGh0bWxGb3I9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5jaG9vc2VCdXR0b25DYXB0aW9ufVxuICAgICAgPlxuICAgICAgICA8c3Bhbj57dGhpcy5xdWVzdGlvbi5jaG9vc2VCdXR0b25DYXB0aW9ufTwvc3Bhbj5cbiAgICAgICAgeyghIXRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jaG9vc2VGaWxlSWNvbklkKSA/IDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hvb3NlRmlsZUljb25JZH0gc2l6ZT17XCJhdXRvXCJ9PjwvU3ZnSWNvbj46IG51bGwgfVxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgbm9GaWxlQ2hvc2VuID0gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5ub0ZpbGVDaG9zZW59PlxuICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLm5vRmlsZUNob3NlbkNhcHRpb259XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRGaWxlRGVjb3JhdG9yQ3NzKCl9XG4gICAgICAgIG9uRHJvcD17dGhpcy5xdWVzdGlvbi5vbkRyb3B9XG4gICAgICAgIG9uRHJhZ092ZXI9e3RoaXMucXVlc3Rpb24ub25EcmFnT3Zlcn1cbiAgICAgICAgb25EcmFnTGVhdmU9e3RoaXMucXVlc3Rpb24ub25EcmFnTGVhdmV9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRyYWdBcmVhUGxhY2Vob2xkZXJ9Pnt0aGlzLnF1ZXN0aW9uLmRyYWdBcmVhUGxhY2Vob2xkZXJ9PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLndyYXBwZXJ9PlxuICAgICAgICAgIHtjaG9vc2VGaWxlfVxuICAgICAgICAgIHtub0ZpbGVDaG9zZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2xlYXJCdXR0b24oY2xhc3NOYW1lOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICF0aGlzLnF1ZXN0aW9uLmlzRW1wdHkoKSAmJiAhdGhpcy5pc0Rpc3BsYXlNb2RlICYmICEhY2xhc3NOYW1lPyAoXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLnF1ZXN0aW9uLmRvQ2xlYW59IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgPHNwYW4+e3RoaXMucXVlc3Rpb24uY2xlYW5CdXR0b25DYXB0aW9ufTwvc3Bhbj5cbiAgICAgICAgeyghIXRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25JY29uSWQpID8gPFN2Z0ljb24gaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25JY29uSWR9IHNpemU9e1wiYXV0b1wifT48L1N2Z0ljb24+OiBudWxsIH1cbiAgICAgIDwvYnV0dG9uPlxuICAgICkgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGaWxlU2lnbihjbGFzc05hbWU6IHN0cmluZywgdmFsOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgaWYoIWNsYXNzTmFtZSB8fCAhdmFsLm5hbWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgPGFcbiAgICAgICAgICBocmVmPXt2YWwuY29udGVudH1cbiAgICAgICAgICBvbkNsaWNrPXtldmVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmRvRG93bmxvYWRGaWxlKGV2ZW50LCB2YWwpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgdGl0bGU9e3ZhbC5uYW1lfVxuICAgICAgICAgIGRvd25sb2FkPXt2YWwubmFtZX1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aDogdGhpcy5xdWVzdGlvbi5pbWFnZVdpZHRoICsgXCJweFwiIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dmFsLm5hbWV9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclByZXZpZXcoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5wcmV2aWV3VmFsdWUpIHJldHVybiBudWxsO1xuICAgIHZhciBwcmV2aWV3cyA9IHRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlLm1hcCgodmFsLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCF2YWwpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXh9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJldmlld31cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJlbmRlckZpbGVTaWduKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbiwgdmFsKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlV3JhcHBlcn0+XG4gICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5jYW5QcmV2aWV3SW1hZ2UodmFsKSA/IChcbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz17dmFsLmNvbnRlbnR9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLmltYWdlSGVpZ2h0fVxuICAgICAgICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLmltYWdlV2lkdGh9XG4gICAgICAgICAgICAgICAgYWx0PVwiRmlsZSBwcmV2aWV3XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoPGltZyBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kZWZhdWx0SW1hZ2V9IGhlaWdodD17dGhpcy5xdWVzdGlvbi5pbWFnZUhlaWdodH0gd2lkdGg9e3RoaXMucXVlc3Rpb24uaW1hZ2VXaWR0aH0vPil9XG4gICAgICAgICAgICB7dmFsLm5hbWUgJiYgIXRoaXMucXVlc3Rpb24uaXNSZWFkT25seSA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlQnV0dG9ufSBvbkNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvUmVtb3ZlRmlsZSh2YWwpfT5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5yZW1vdmVGaWxlQ2FwdGlvbn1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgeyh0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZVN2Z0ljb25JZCkgP1xuICAgICAgICAgICAgICAgICAgKDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZVN2Z0ljb25JZH0gc2l6ZT17XCJhdXRvXCJ9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmd9PjwvU3ZnSWNvbj4pOiBudWxsIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJGaWxlU2lnbih0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZVNpZ25Cb3R0b20sIHZhbCl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfSk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUxpc3R9PntwcmV2aWV3c308L2Rpdj47XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImZpbGVcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkZpbGUsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkh0bWxNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSHRtbCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25IdG1sTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkh0bWxNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnJlYWN0T25TdHJDaGFuZ2VkKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NIdG1sLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHt9O1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICB0aGlzLnJlYWN0T25TdHJDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSByZWFjdE9uU3RyQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0h0bWwub25DaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNoYW5nZWQ6ICEhdGhpcy5zdGF0ZSAmJiB0aGlzLnN0YXRlLmNoYW5nZWQgPyB0aGlzLnN0YXRlLmNoYW5nZWQgKyAxIDogMSB9KTtcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmICEhdGhpcy5xdWVzdGlvbi5odG1sO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMucXVlc3Rpb24ubG9jSHRtbC5yZW5kZXJlZEh0bWwgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24ucmVuZGVyQ3NzUm9vdH1cbiAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaHRtbFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25IdG1sLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLFxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IE1hdHJpeFJvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgcm93c0NoYW5nZWQ6IDAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk1hdHJpeE1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7IHJvd3NDaGFuZ2VkOiBzZWxmLnN0YXRlLnJvd3NDaGFuZ2VkICsgMSB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgcm93c1RIID0gdGhpcy5xdWVzdGlvbi5oYXNSb3dzID8gPHRkIC8+IDogbnVsbDtcbiAgICB2YXIgaGVhZGVycyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICB2YXIga2V5ID0gXCJjb2x1bW5cIiArIGk7XG4gICAgICB2YXIgY29sdW1UZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoY29sdW1uLmxvY1RleHQpO1xuICAgICAgaGVhZGVycy5wdXNoKFxuICAgICAgICA8dGggY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbH0ga2V5PXtrZXl9PlxuICAgICAgICAgIHt0aGlzLndyYXBDZWxsKHsgY29sdW1uOiBjb2x1bW4gfSwgY29sdW1UZXh0LCBcImNvbHVtbi1oZWFkZXJcIil9XG4gICAgICAgIDwvdGg+XG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciB2aXNpYmxlUm93cyA9IHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHZpc2libGVSb3dzW2ldO1xuICAgICAgdmFyIGtleSA9IFwicm93LVwiICsgcm93Lm5hbWUgKyBcIi1cIiArIGk7XG4gICAgICByb3dzLnB1c2goXG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeFJvd1xuICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIHJvdz17cm93fVxuICAgICAgICAgIGlzRmlyc3Q9e2kgPT0gMH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIHZhciBoZWFkZXIgPSAhdGhpcy5xdWVzdGlvbi5zaG93SGVhZGVyID8gbnVsbCA6IChcbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIHtyb3dzVEh9XG4gICAgICAgICAge2hlYWRlcnN9XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnRhYmxlV3JhcHBlcn1cbiAgICAgICAgcmVmPXtyb290ID0+ICh0aGlzLmNvbnRyb2wgPSByb290KX1cbiAgICAgID5cbiAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgIDxsZWdlbmQgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9IC8+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAgICA8dGJvZHk+e3Jvd3N9PC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhSb3cgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeFJvd01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb3c7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucm93LnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5yb3cudmFsdWUgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKGNlbGw6IGFueSwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHJlYXNvbjogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCFyZWFzb24pIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzdXJ2ZXk6IFJlYWN0U3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBSZWFjdFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gc3VydmV5LndyYXBNYXRyaXhDZWxsKGVsZW1lbnQsIGNlbGwsIHJlYXNvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvdztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHJvd3NURCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNSb3dzKSB7XG4gICAgICB2YXIgcm93VGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucm93LmxvY1RleHQpO1xuICAgICAgcm93c1REID0gPHRkIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGx9PlxuICAgICAgICB7dGhpcy53cmFwQ2VsbCh7IHJvdzogdGhpcy5yb3cgfSwgcm93VGV4dCwgXCJyb3ctaGVhZGVyXCIpfVxuICAgICAgPC90ZD47XG4gICAgfVxuXG4gICAgdmFyIHRkcyA9IHRoaXMuZ2VuZXJhdGVUZHMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHRyIGNsYXNzTmFtZT17dGhpcy5yb3cucm93Q2xhc3Nlc30+XG4gICAgICAgIHtyb3dzVER9XG4gICAgICAgIHt0ZHN9XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cblxuICBnZW5lcmF0ZVRkcygpIHtcbiAgICB2YXIgdGRzID0gW107XG4gICAgdmFyIHJvdyA9IHRoaXMucm93O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdGQgPSBudWxsO1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICB2YXIga2V5ID0gXCJ2YWx1ZVwiICsgaTtcblxuICAgICAgLy92YXIgaXNDaGVja2VkID0gSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHJvdy52YWx1ZSwgY29sdW1uLnZhbHVlKTtcbiAgICAgIHZhciBpc0NoZWNrZWQgPSByb3cudmFsdWUgPT0gY29sdW1uLnZhbHVlO1xuICAgICAgbGV0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHJvdywgY29sdW1uKTtcbiAgICAgIHZhciBpbnB1dElkID0gdGhpcy5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyByb3cubmFtZSArIFwiX1wiICsgaTtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmhhc0NlbGxUZXh0KSB7XG4gICAgICAgIHZhciBnZXRIYW5kbGVyID0gIXRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5XG4gICAgICAgICAgPyAoY29sdW1uOiBhbnkpID0+ICgpID0+IHRoaXMuY2VsbENsaWNrKHJvdywgY29sdW1uKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgdGQgPSAoXG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17aXRlbUNsYXNzfVxuICAgICAgICAgICAgb25DbGljaz17Z2V0SGFuZGxlciA/IGdldEhhbmRsZXIoY29sdW1uKSA6IG51bGx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKFxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmdldENlbGxEaXNwbGF5TG9jVGV4dChyb3cubmFtZSwgY29sdW1uKVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGQgPSAoXG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICAgIGRhdGEtcmVzcG9uc2l2ZS10aXRsZT17Y29sdW1uLmxvY1RleHQucmVuZGVyZWRIdG1sfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9PlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBpZD17aW5wdXRJZH1cbiAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1WYWx1ZX1cbiAgICAgICAgICAgICAgICBuYW1lPXtyb3cuZnVsbE5hbWV9XG4gICAgICAgICAgICAgICAgdmFsdWU9e2NvbHVtbi52YWx1ZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtjb2x1bW4ubG9jVGV4dC5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCItMTIgLTEyIDI0IDI0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIHI9XCI2XCIgY3g9XCIwXCIgY3k9XCIwXCIgLz5zXG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2lyY2xlXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2hlY2tcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiBcIm5vbmVcIiB9fT5cbiAgICAgICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRkcy5wdXNoKHRkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGRzO1xuICB9XG4gIGNlbGxDbGljayhyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICByb3cudmFsdWUgPSBjb2x1bW4udmFsdWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnJvdy52YWx1ZSB9KTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4XCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXgsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHJvcGRvd25cIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24sIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gIFF1ZXN0aW9uXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fcmFkaW9ncm91cFwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IE1hdHJpeFJvdyB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWF0cml4L3Jvd1wiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2UgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2U7XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdGF0ZShwcmV2U3RhdGU6IGFueSA9IG51bGwpIHtcbiAgICByZXR1cm4geyByb3dDb3VudGVyOiAhcHJldlN0YXRlID8gMCA6IHByZXZTdGF0ZS5yb3dDb3VudGVyICsgMSB9O1xuICB9XG4gIHByaXZhdGUgdXBkYXRlU3RhdGVPbkNhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLmdldFN0YXRlKHRoaXMuc3RhdGUpKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlT25DYWxsYmFjaygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5vblJlbmRlcmVkVGFibGVSZXNldENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnJlbmRlcmVkUm93c0NoYW5nZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlT25DYWxsYmFjaygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnJlbmRlcmVkUm93c0NoYW5nZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5xdWVzdGlvbi5vblJlbmRlcmVkVGFibGVSZXNldENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yZW5kZXJlZFJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnJlbmRlclRhYmxlRGl2KCk7XG4gIH1cbiAgcmVuZGVyVGFibGVEaXYoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBoZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcigpO1xuICAgIHZhciBmb290ZXJzID0gdGhpcy5yZW5kZXJGb290ZXIoKTtcbiAgICB2YXIgcm93cyA9IHRoaXMucmVuZGVyUm93cygpO1xuICAgIHZhciBkaXZTdHlsZSA9IHRoaXMucXVlc3Rpb24uaG9yaXpvbnRhbFNjcm9sbFxuICAgICAgPyAoeyBvdmVyZmxvd1g6IFwic2Nyb2xsXCIgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzKVxuICAgICAgOiAoe30gYXMgUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e2RpdlN0eWxlfSByZWY9eyhyb290KSA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9PlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgICB7cm93c31cbiAgICAgICAgICB7Zm9vdGVyc31cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgdGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGU7XG4gICAgaWYgKCF0YWJsZS5zaG93SGVhZGVyKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgaGVhZGVyczogYW55W10gPSBbXTtcbiAgICB2YXIgY2VsbHMgPSB0YWJsZS5oZWFkZXJSb3cuY2VsbHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGwgPSBjZWxsc1tpXTtcbiAgICAgIHZhciBrZXkgPSBcImNvbHVtblwiICsgaTtcbiAgICAgIHZhciBjb2x1bW5TdHlsZTogYW55ID0ge307XG4gICAgICBpZiAoISFjZWxsLndpZHRoKSB7XG4gICAgICAgIGNvbHVtblN0eWxlLndpZHRoID0gY2VsbC53aWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICghIWNlbGwubWluV2lkdGgpIHtcbiAgICAgICAgY29sdW1uU3R5bGUubWluV2lkdGggPSBjZWxsLm1pbldpZHRoO1xuICAgICAgfVxuICAgICAgdmFyIGNlbGxDb250ZW50ID0gdGhpcy5yZW5kZXJDZWxsQ29udGVudChjZWxsLCBcImNvbHVtbi1oZWFkZXJcIiwge30pO1xuICAgICAgaGVhZGVycy5wdXNoKFxuICAgICAgICA8dGhcbiAgICAgICAgICBjbGFzc05hbWU9e2NlbGwuY2xhc3NOYW1lfVxuICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgIHN0eWxlPXtjb2x1bW5TdHlsZX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjZWxsQ29udGVudH1cbiAgICAgICAgPC90aD5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj57aGVhZGVyc308L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICApO1xuICB9XG4gIHJlbmRlckZvb3RlcigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHRhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgIGlmICghdGFibGUuc2hvd0Zvb3RlcikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHJvdyA9IHRoaXMucmVuZGVyUm93KFxuICAgICAgXCJmb290ZXJcIixcbiAgICAgIHRhYmxlLmZvb3RlclJvdyxcbiAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc1xuICAgICk7XG4gICAgcmV0dXJuIDx0Zm9vdD57cm93fTwvdGZvb3Q+O1xuICB9XG4gIHJlbmRlclJvd3MoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIHJlbmRlcmVkUm93cyA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVuZGVyZWRSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzLnB1c2goXG4gICAgICAgIHRoaXMucmVuZGVyUm93KHJlbmRlcmVkUm93c1tpXS5pZCwgcmVuZGVyZWRSb3dzW2ldLCBjc3NDbGFzc2VzKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDx0Ym9keT57cm93c308L3Rib2R5PjtcbiAgfVxuICByZW5kZXJSb3coXG4gICAga2V5VmFsdWU6IGFueSxcbiAgICByb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBtYXRyaXhyb3cgPSBbXTtcbiAgICB2YXIgY2VsbHMgPSByb3cuY2VsbHM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXRyaXhyb3cucHVzaCh0aGlzLnJlbmRlckNlbGwoY2VsbHNbaV0sIGksIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgdmFyIGtleSA9IFwicm93XCIgKyBrZXlWYWx1ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtrZXl9PlxuICAgICAgICA8TWF0cml4Um93IG1vZGVsPXtyb3d9IHBhcmVudE1hdHJpeD17dGhpcy5xdWVzdGlvbn0+e21hdHJpeHJvd308L01hdHJpeFJvdz5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckNlbGwoXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IFwiY2VsbFwiICsgaW5kZXg7XG4gICAgaWYgKGNlbGwuaGFzUXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQ2VsbFxuICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgIGl0ZW1Dc3M9e2NlbGwuY2xhc3NOYW1lfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgY2VsbD17Y2VsbH1cbiAgICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICBsZXQgcmVhc29uID0gY2VsbC5oYXNUaXRsZSA/IFwicm93LWhlYWRlclwiIDogXCJcIjtcbiAgICB2YXIgY2VsbENvbnRlbnQgPSB0aGlzLnJlbmRlckNlbGxDb250ZW50KGNlbGwsIHJlYXNvbiwgY3NzQ2xhc3Nlcyk7XG4gICAgdmFyIGNlbGxTdHlsZTogYW55ID0gbnVsbDtcbiAgICBpZiAoISFjZWxsLndpZHRoIHx8ICEhY2VsbC5taW5XaWR0aCkge1xuICAgICAgY2VsbFN0eWxlID0ge307XG4gICAgICBpZiAoISFjZWxsLndpZHRoKSBjZWxsU3R5bGUud2lkdGggPSBjZWxsLndpZHRoO1xuICAgICAgaWYgKCEhY2VsbC5taW5XaWR0aCkgY2VsbFN0eWxlLm1pbldpZHRoID0gY2VsbC5taW5XaWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRkXG4gICAgICAgIGNsYXNzTmFtZT17Y2VsbC5jbGFzc05hbWV9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBzdHlsZT17Y2VsbFN0eWxlfVxuICAgICAgICBjb2xTcGFuPXtjZWxsLmNvbFNwYW5zfVxuICAgICAgPlxuICAgICAgICB7Y2VsbENvbnRlbnR9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJDZWxsQ29udGVudChcbiAgICBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICAgIHJlYXNvbjogc3RyaW5nLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNlbGxDb250ZW50ID0gbnVsbDtcbiAgICB2YXIgcmVxdWlyZWRTcGFjZSA9IG51bGw7XG4gICAgdmFyIHJlcXVpcmVkVGV4dCA9IG51bGw7XG4gICAgdmFyIGNlbGxTdHlsZTogYW55ID0gbnVsbDtcbiAgICBpZiAoISFjZWxsLndpZHRoIHx8ICEhY2VsbC5taW5XaWR0aCkge1xuICAgICAgY2VsbFN0eWxlID0ge307XG4gICAgICBpZiAoISFjZWxsLndpZHRoKSBjZWxsU3R5bGUud2lkdGggPSBjZWxsLndpZHRoO1xuICAgICAgaWYgKCEhY2VsbC5taW5XaWR0aCkgY2VsbFN0eWxlLm1pbldpZHRoID0gY2VsbC5taW5XaWR0aDtcbiAgICB9XG4gICAgaWYgKGNlbGwuaGFzVGl0bGUpIHtcbiAgICAgIHJlYXNvbiA9IFwicm93LWhlYWRlclwiO1xuICAgICAgY2VsbENvbnRlbnQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyhjZWxsLmxvY1RpdGxlKTtcbiAgICAgIGlmIChjZWxsLnJlcXVpcmVkVGV4dCkge1xuICAgICAgICByZXF1aXJlZFNwYWNlID0gPHNwYW4+Jm5ic3A7PC9zcGFuPjtcbiAgICAgICAgcmVxdWlyZWRUZXh0ID0gPHNwYW4+e2NlbGwucmVxdWlyZWRUZXh0fTwvc3Bhbj47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjZWxsLmlzRHJhZ0hhbmRsZXJDZWxsKSB7XG4gICAgICBjZWxsQ29udGVudCA9ICg8PlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIGl0ZW09e3sgZGF0YTogeyByb3c6IGNlbGwucm93LCBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9IH19Lz5cbiAgICAgIDwvPik7XG4gICAgfVxuICAgIGlmIChjZWxsLmlzQWN0aW9uc0NlbGwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhBY3Rpb25zQ2VsbFxuICAgICAgICAgIG1vZGVsPXtjZWxsLml0ZW0uZ2V0RGF0YSgpfVxuICAgICAgICA+PC9TdXJ2ZXlRdWVzdGlvbk1hdHJpeEFjdGlvbnNDZWxsPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNlbGwuaGFzUGFuZWwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKFxuICAgICAgICA8U3VydmV5UGFuZWxcbiAgICAgICAgICBrZXk9e2NlbGwucGFuZWwuaWR9XG4gICAgICAgICAgZWxlbWVudD17Y2VsbC5wYW5lbH1cbiAgICAgICAgICBzdXJ2ZXk9e3RoaXMucXVlc3Rpb24uc3VydmV5fVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY2VsbENvbnRlbnQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcmVhZHlDZWxsID0gKFxuICAgICAgPD5cbiAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgICB7cmVxdWlyZWRTcGFjZX1cbiAgICAgICAge3JlcXVpcmVkVGV4dH1cbiAgICAgIDwvPlxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMud3JhcENlbGwoY2VsbCwgcmVhZHlDZWxsLCByZWFzb24pO1xuICB9XG59XG5cbmNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4QWN0aW9uc0NlbGwgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBtb2RlbCgpOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsfSBoYW5kbGVDbGljaz17ZmFsc2V9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25DZWxsIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBjZWxsKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNlbGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcSA9IHN1cGVyLmdldFF1ZXN0aW9uKCk7XG4gICAgaWYgKCEhcSkgcmV0dXJuIHE7XG4gICAgcmV0dXJuICEhdGhpcy5jZWxsID8gdGhpcy5jZWxsLnF1ZXN0aW9uIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZG9BZnRlclJlbmRlcigpIHtcbiAgICB2YXIgZWwgPSB0aGlzLmNlbGxSZWYuY3VycmVudDtcbiAgICBpZiAoXG4gICAgICBlbCAmJlxuICAgICAgdGhpcy5jZWxsICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleSAmJlxuICAgICAgZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKSAhPT0gXCJyXCJcbiAgICApIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIiwgXCJyXCIpO1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgY2VsbFF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLFxuICAgICAgICBodG1sRWxlbWVudDogZWwsXG4gICAgICAgIHJvdzogdGhpcy5jZWxsLnJvdyxcbiAgICAgICAgY29sdW1uOiB0aGlzLmNlbGwuY2VsbC5jb2x1bW4sXG4gICAgICB9O1xuICAgICAgdGhpcy5xdWVzdGlvbi5zdXJ2ZXkubWF0cml4QWZ0ZXJDZWxsUmVuZGVyKHRoaXMucXVlc3Rpb24sIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2hvd0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5xdWVzdGlvbi5pc1Zpc2libGUgJiZcbiAgICAgICghdGhpcy5jZWxsLmlzQ2hvaWNlIHx8IHRoaXMuY2VsbC5pc0ZpcnN0Q2hvaWNlKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENlbGxTdHlsZSgpOiBhbnkge1xuICAgIHZhciByZXM6IGFueSA9IHN1cGVyLmdldENlbGxTdHlsZSgpO1xuICAgIGlmICghIXRoaXMuY2VsbC53aWR0aCB8fCAhIXRoaXMuY2VsbC5taW5XaWR0aCkge1xuICAgICAgaWYgKCFyZXMpIHJlcyA9IHt9O1xuICAgICAgaWYgKCEhdGhpcy5jZWxsLndpZHRoKSByZXMud2lkdGggPSB0aGlzLmNlbGwud2lkdGg7XG4gICAgICBpZiAoISF0aGlzLmNlbGwubWluV2lkdGgpIHJlcy5taW5XaWR0aCA9IHRoaXMuY2VsbC5taW5XaWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsLmhlYWRlcnM7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuY2VsbC5pc0Nob2ljZSlcbiAgICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbi5yZW5kZXJRdWVzdGlvbkJvZHkodGhpcy5jcmVhdG9yLCB0aGlzLnF1ZXN0aW9uKTtcbiAgICBpZiAodGhpcy5jZWxsLmlzQ2hlY2tib3gpIHJldHVybiB0aGlzLnJlbmRlckNlbGxDaGVja2JveEJ1dHRvbigpO1xuICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxSYWRpb2dyb3VwQnV0dG9uKCk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJDZWxsQ2hlY2tib3hCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSB0aGlzLmNlbGwucXVlc3Rpb24uaWQgKyBcIml0ZW1cIiArIHRoaXMuY2VsbC5jaG9pY2VJbmRleDtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5jZWxsLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLmNlbGwucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5jZWxsLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgaXRlbT17dGhpcy5jZWxsLml0ZW19XG4gICAgICAgIGlzRmlyc3Q9e3RoaXMuY2VsbC5pc0ZpcnN0Q2hvaWNlfVxuICAgICAgICBpbmRleD17dGhpcy5jZWxsLmNob2ljZUluZGV4LnRvU3RyaW5nKCl9XG4gICAgICAgIGhpZGVDYXB0aW9uPXt0cnVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyQ2VsbFJhZGlvZ3JvdXBCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSB0aGlzLmNlbGwucXVlc3Rpb24uaWQgKyBcIml0ZW1cIiArIHRoaXMuY2VsbC5jaG9pY2VJbmRleDtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5jZWxsLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLmNlbGwucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5jZWxsLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgaXRlbT17dGhpcy5jZWxsLml0ZW19XG4gICAgICAgIGluZGV4PXt0aGlzLmNlbGwuY2hvaWNlSW5kZXgudG9TdHJpbmcoKX1cbiAgICAgICAgaXNDaGVja2VkPXt0aGlzLmNlbGwucXVlc3Rpb24udmFsdWUgPT09IHRoaXMuY2VsbC5pdGVtLnZhbHVlfVxuICAgICAgICBpc0Rpc2FibGVkPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNSZWFkT25seSB8fCAhdGhpcy5jZWxsLml0ZW0uaXNFbmFibGVkfVxuICAgICAgICBoaWRlQ2FwdGlvbj17dHJ1ZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2sgPSB0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IG1hdHJpeCgpOiBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsO1xuICB9XG4gIGhhbmRsZU9uUm93QWRkQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubWF0cml4LmFkZFJvd1VJKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBzaG93VGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd1RhYmxlO1xuICAgIHZhciBtYWluRGl2ID0gc2hvd1RhYmxlXG4gICAgICA/IHRoaXMucmVuZGVyVGFibGVEaXYoKVxuICAgICAgOiB0aGlzLnJlbmRlck5vUm93c0NvbnRlbnQoY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIHt0aGlzLnJlbmRlckFkZFJvd0J1dHRvbk9uVG9wKGNzc0NsYXNzZXMpfVxuICAgICAgICB7bWFpbkRpdn1cbiAgICAgICAge3RoaXMucmVuZGVyQWRkUm93QnV0dG9uT25Cb3R0b20oY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b25PblRvcChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1hdHJpeC5yZW5kZXJlZFRhYmxlLnNob3dBZGRSb3dPblRvcCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKGNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b25PbkJvdHRvbShjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1hdHJpeC5yZW5kZXJlZFRhYmxlLnNob3dBZGRSb3dPbkJvdHRvbSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKGNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOb1Jvd3NDb250ZW50KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0ZXh0OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMubWF0cml4LmxvY0VtcHR5Um93c1RleHQpO1xuICAgIGNvbnN0IHRleHREaXY6IEpTWC5FbGVtZW50ID0gPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZW1wdHlSb3dzVGV4dH0+e3RleHR9PC9kaXY+O1xuICAgIGNvbnN0IGJ0bjogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbihjc3NDbGFzc2VzLCB0cnVlKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZW1wdHlSb3dzU2VjdGlvbn0+XG4gICAgICAgIHt0ZXh0RGl2fVxuICAgICAgICB7YnRufVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQWRkUm93QnV0dG9uKFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpc0VtcHR5U2VjdGlvbjogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBhZGRSb3dUZXh0OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMubWF0cml4LmxvY0FkZFJvd1RleHQpO1xuICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICg8YnV0dG9uXG4gICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0QWRkUm93QnV0dG9uQ3NzKGlzRW1wdHlTZWN0aW9uKX1cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgb25DbGljaz17XG4gICAgICAgIHRoaXMucXVlc3Rpb24uaXNEZXNpZ25Nb2RlID8gdW5kZWZpbmVkIDogdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrXG4gICAgICB9XG4gICAgPlxuICAgICAge2FkZFJvd1RleHR9XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaWNvbkFkZH0gLz5cbiAgICA8L2J1dHRvbj4pO1xuICAgIHJldHVybiAoXG4gICAgICBpc0VtcHR5U2VjdGlvbiA/IGFkZEJ1dHRvbiA6IDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmZvb3Rlcn0+e2FkZEJ1dHRvbn08L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkeW5hbWljXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50RXJyb3JzLCBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc1dyYXBwZWQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNdWx0aXBsZVRleHRJdGVtTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBUaXRsZUNvbnRlbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHRhYmxlUm93cyA9IHRoaXMucXVlc3Rpb24uZ2V0Um93cygpO1xuICAgIHZhciByb3dzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3MucHVzaCh0aGlzLnJlbmRlclJvdyhpLCB0YWJsZVJvd3NbaV0sIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0YWJsZSBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgIDx0Ym9keT57cm93c308L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtVG9vbHRpcEVycm9yKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXAgPyAoXG4gICAgICA8U3VydmV5RWxlbWVudEVycm9yc1xuICAgICAgICBlbGVtZW50PXtpdGVtLmVkaXRvcn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBsb2NhdGlvbj17XCJ0b29sdGlwXCJ9XG4gICAgICAgIGlkPXtpdGVtLmVkaXRvci5pZCArIFwiX2Vycm9yc1wifVxuICAgICAgLz5cbiAgICApOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJSb3coXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBpdGVtczogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKSB7XG4gICAgdmFyIGtleTogc3RyaW5nID0gXCJpdGVtXCIgKyByb3dJbmRleDtcbiAgICB2YXIgdGRzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgIHZhciBzcGFucyA9IFtdO1xuICAgICAgdGRzLnB1c2goXG4gICAgICAgIDx0ZCBrZXk9e1wiaXRlbVwiICsgaX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbH0+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJdGVtTGFiZWxDc3MoaXRlbSl9PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1UaXRsZX0+XG4gICAgICAgICAgICAgIDxUaXRsZUNvbnRlbnQgZWxlbWVudD17aXRlbS5lZGl0b3J9IGNzc0NsYXNzZXM9e2l0ZW0uZWRpdG9yLmNzc0NsYXNzZXN9PjwvVGl0bGVDb250ZW50PlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPFN1cnZleU11bHRpcGxlVGV4dEl0ZW1FZGl0b3JcbiAgICAgICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICAgICAgaXRlbUNzcz17dGhpcy5xdWVzdGlvbi5nZXRJdGVtQ3NzKCl9XG4gICAgICAgICAgICAgIHF1ZXN0aW9uPXtpdGVtLmVkaXRvcn1cbiAgICAgICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1Ub29sdGlwRXJyb3IoaXRlbSwgY3NzQ2xhc3Nlcyl9XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC90ZD5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dHIga2V5PXtrZXl9IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb3d9PlxuICAgICAgICB7dGRzfVxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlNdWx0aXBsZVRleHRJdGVtRWRpdG9yIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIHtcbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5pdGVtQ3NzfT57dGhpcy5yZW5kZXJDb250ZW50KCl9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwsIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uUGFuZWxBZGRDbGljayA9IHRoaXMuaGFuZGxlT25QYW5lbEFkZENsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPblBhbmVsUHJldkNsaWNrID0gdGhpcy5oYW5kbGVPblBhbmVsUHJldkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPblBhbmVsTmV4dENsaWNrID0gdGhpcy5oYW5kbGVPblBhbmVsTmV4dENsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPblJhbmdlQ2hhbmdlID0gdGhpcy5oYW5kbGVPblJhbmdlQ2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBwYW5lbENvdW50ZXI6IDAgfSk7XG4gICAgY29uc3Qgc2VsZjogU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgPSB0aGlzO1xuICAgIHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYudXBkYXRlUXVlc3Rpb25SZW5kZXJpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJNb2RlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlUXVlc3Rpb25SZW5kZXJpbmcoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwYW5lbENvdW50ZXI6IHRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLnBhbmVsQ291bnRlciArIDEgOiAxLFxuICAgIH0pO1xuICB9XG4gIGhhbmRsZU9uUGFuZWxBZGRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5hZGRQYW5lbFVJKCk7XG4gIH1cbiAgaGFuZGxlT25QYW5lbFByZXZDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5nb1RvUHJldlBhbmVsKCk7XG4gIH1cbiAgaGFuZGxlT25QYW5lbE5leHRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5nb1RvTmV4dFBhbmVsKCk7XG4gIH1cbiAgaGFuZGxlT25SYW5nZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXggPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHBhbmVscyA9IFtdO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnF1ZXN0aW9uLnBhbmVsc1tpXTtcbiAgICAgICAgcGFuZWxzLnB1c2goXG4gICAgICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICAgICAgICAgICAga2V5PXtwYW5lbC5pZH1cbiAgICAgICAgICAgIGVsZW1lbnQ9e3BhbmVsfVxuICAgICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWwgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYW5lbCA9IHRoaXMucXVlc3Rpb24uY3VycmVudFBhbmVsO1xuICAgICAgICBwYW5lbHMucHVzaChcbiAgICAgICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtXG4gICAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uY3VycmVudEluZGV4fVxuICAgICAgICAgICAgZWxlbWVudD17cGFuZWx9XG4gICAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICAgIGluZGV4PXt0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleH1cbiAgICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBidG5BZGQ6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0XG4gICAgICA/IHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBuYXZUb3A6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgPyB0aGlzLnJlbmRlck5hdmlnYXRvcigpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgbmF2Qm90dG9tOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc0JvdHRvbVNob3dpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJOYXZpZ2F0b3IoKVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmhvcml6b250YWxTY3JvbGwpIHtcbiAgICAgIHN0eWxlW1wib3ZlcmZsb3dYXCJdID0gXCJzY3JvbGxcIjtcbiAgICB9XG4gICAgY29uc3QgbmF2VjIgPSB0aGlzLnJlbmRlck5hdmlnYXRvclYyKCk7XG4gICAgY29uc3Qgbm9FbnRyaWVzUGxhY2Vob2xkZXIgPSB0aGlzLnJlbmRlclBsYWNlaG9sZGVyKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgIHtub0VudHJpZXNQbGFjZWhvbGRlcn1cbiAgICAgICAge25hdlRvcH1cbiAgICAgICAgPGRpdiBzdHlsZT17c3R5bGV9PntwYW5lbHN9PC9kaXY+XG4gICAgICAgIHtuYXZCb3R0b219XG4gICAgICAgIHtidG5BZGR9XG4gICAgICAgIHtuYXZWMn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5hdmlnYXRvcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmFuZ2U6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JhbmdlU2hvd2luZyA/IHRoaXMucmVuZGVyUmFuZ2UoKSA6IG51bGw7XG4gICAgY29uc3QgYnRuUHJldjogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRyZXJQcmV2QnV0dG9uKCk7XG4gICAgY29uc3QgYnRuTmV4dDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRyZXJOZXh0QnV0dG9uKCk7XG4gICAgY29uc3QgYnRuQWRkOiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKCk7XG4gICAgY29uc3QgcHJvZ3Jlc3NDbGFzczogc3RyaW5nID0gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NUb3BcbiAgICAgIDogdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQm90dG9tO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXt7IGNsZWFyOiBcImJvdGhcIiB9fSBjbGFzc05hbWU9e3Byb2dyZXNzQ2xhc3N9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQ29udGFpbmVyfT5cbiAgICAgICAgICB7YnRuUHJldn1cbiAgICAgICAgICB7cmFuZ2V9XG4gICAgICAgICAge2J0bk5leHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7YnRuQWRkfVxuICAgICAgICB7dGhpcy5yZW5kZXJQcm9ncmVzc1RleHQoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJQcm9ncmVzc1RleHQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc1RleHR9PlxuICAgICAge3RoaXMucXVlc3Rpb24ucHJvZ3Jlc3NUZXh0fVxuICAgIDwvZGl2Pik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZHJlclByZXZCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgdGl0bGU9e3RoaXMucXVlc3Rpb24ucGFuZWxQcmV2VGV4dH0gb25DbGljaz17dGhpcy5oYW5kbGVPblBhbmVsUHJldkNsaWNrfT5cbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UHJldkJ1dHRvbkNzcygpfVxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCdG5JY29ufVxuICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxuICAgICAgICA+XG4gICAgICAgIDwvU3ZnSWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRyZXJOZXh0QnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHRpdGxlPXt0aGlzLnF1ZXN0aW9uLnBhbmVsTmV4dFRleHR9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25QYW5lbE5leHRDbGlja30+XG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldE5leHRCdXR0b25Dc3MoKX1cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQnRuSWNvbn1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclJhbmdlKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBnZXRQcm9ncmVzcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHJhbmdlTWF4OiBudW1iZXIgPSB0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnQgLSAxO1xuICAgICAgcmV0dXJuICh0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleCAvIHJhbmdlTWF4KSAqIDEwMCArIFwiJVwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc30+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0Jhcn1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aDogZ2V0UHJvZ3Jlc3MoKSB9fVxuICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5jYW5BZGRQYW5lbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRBZGRCdXR0b25Dc3MoKX0gb25DbGljaz17dGhpcy5oYW5kbGVPblBhbmVsQWRkQ2xpY2t9ID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkVGV4dH0+IHt0aGlzLnF1ZXN0aW9uLnBhbmVsQWRkVGV4dH0gPC9zcGFuPlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOYXZpZ2F0b3JWMigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYodGhpcy5xdWVzdGlvbi5wYW5lbENvdW50ID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByYW5nZTogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nICYmICF0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nID8gdGhpcy5yZW5kZXJSYW5nZSgpIDogbnVsbDtcbiAgICBjb25zdCBhZGRCdG4gPSB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpO1xuICAgIGNvbnN0IHByZXZCdG4gPSB0aGlzLnJlbmRyZXJQcmV2QnV0dG9uKCk7XG4gICAgY29uc3QgbmV4dEJ0biA9IHRoaXMucmVuZHJlck5leHRCdXR0b24oKTtcbiAgICBjb25zdCBwcm9ncmVzc1RleHQgPSB0aGlzLnJlbmRlclByb2dyZXNzVGV4dCgpO1xuICAgIGlmKCF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3Rlcn0+XG4gICAgICB7cmFuZ2V9XG4gICAgICA8aHIgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VwYXJhdG9yfSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXJCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAge2FkZEJ0bn1cbiAgICAgICAgeyF0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgPyA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQ29udGFpbmVyfT5cbiAgICAgICAgICB7cHJldkJ0bn1cbiAgICAgICAgICB7cHJvZ3Jlc3NUZXh0fVxuICAgICAgICAgIHtuZXh0QnRufVxuICAgICAgICA8L2Rpdj4gOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKHRoaXMucXVlc3Rpb24uZ2V0U2hvd05vRW50cmllc1BsYWNlaG9sZGVyKCkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9FbnRyaWVzUGxhY2Vob2xkZXJ9PlxuICAgICAgICAgIDxzcGFuPnt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY05vRW50cmllc1RleHQpfTwvc3Bhbj5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtIGV4dGVuZHMgU3VydmV5UGFuZWwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25QYW5lbFJlbW92ZUNsaWNrID0gdGhpcy5oYW5kbGVPblBhbmVsUmVtb3ZlQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb24gPyAodGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwpIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzKCk6IGFueSB7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICByZXR1cm4gISFzdXJ2ZXkgPyBzdXJ2ZXkuZ2V0Q3NzKCkgOiB7fTtcbiAgfVxuICBoYW5kbGVPblBhbmVsUmVtb3ZlQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVtb3ZlUGFuZWxVSSh0aGlzLmluZGV4KTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGNvbnN0IHBhbmVsOiBKU1guRWxlbWVudCA9IHN1cGVyLnJlbmRlcigpO1xuICAgIGNvbnN0IHJlbW92ZUJ1dHRvbjogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckJ1dHRvbigpO1xuICAgIGNvbnN0IHNlcGFyYXRvcjogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgJiYgdGhpcy5pbmRleCA8IHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudCAtIDEgP1xuICAgICAgKDxociBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZXBhcmF0b3J9IC8+KSA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFBhbmVsV3JhcHBlckNzcygpfT5cbiAgICAgICAgICB7cGFuZWx9XG4gICAgICAgICAge3JlbW92ZUJ1dHRvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzZXBhcmF0b3J9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnF1ZXN0aW9uLmNhblJlbW92ZVBhbmVsIHx8XG4gICAgICAodGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMucGFuZWwuaXNDb2xsYXBzZWQpXG4gICAgKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFBhbmVsUmVtb3ZlQnV0dG9uQ3NzKCl9XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25QYW5lbFJlbW92ZUNsaWNrfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlVGV4dH1cbiAgICAgICAgPiB7dGhpcy5xdWVzdGlvbi5wYW5lbFJlbW92ZVRleHR9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uUmVtb3ZlfVxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicGFuZWxkeW5hbWljXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLCBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgY2xlYXJCdXR0b24gPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmNhblNob3dDbGVhckJ1dHRvbikge1xuICAgICAgY2xlYXJCdXR0b24gPSAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9ufVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5jbGVhclZhbHVlKCl9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpfVxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgcmVmPXsoZmllbGRzZXQpID0+ICh0aGlzLmNvbnRyb2wgPSBmaWVsZHNldCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IHRoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKVxuICAgICAgICAgIDogdGhpcy5nZXRJdGVtcyhjc3NDbGFzc2VzKX1cbiAgICAgICAge2NsZWFyQnV0dG9ufVxuICAgICAgPC9maWVsZHNldD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb2x1bW5zKGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0U3RhdGVWYWx1ZSgpO1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubWFwKChjb2x1bW46IGFueSwgY2k6IG51bWJlcikgPT4ge1xuICAgICAgdmFyIGl0ZW1zID0gY29sdW1uLm1hcCgoaXRlbTogYW55LCBpaTogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oaXRlbSwgdmFsdWUsIGNzc0NsYXNzZXMsIFwiXCIgKyBjaSArIGlpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYga2V5PXtcImNvbHVtblwiICsgY2l9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5DbGFzcygpfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAge2l0ZW1zfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0U3RhdGVWYWx1ZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIHJlbmRlcmVkSXRlbSA9IHRoaXMucmVuZGVySXRlbShpdGVtLCB2YWx1ZSwgY3NzQ2xhc3NlcywgXCJcIiArIGkpO1xuICAgICAgaXRlbXMucHVzaChyZW5kZXJlZEl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDsvL3sgZGlzcGxheTogXCJpbmxpbmVcIiwgcG9zaXRpb246IFwic3RhdGljXCIgfTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckl0ZW0oXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHZhbHVlOiBhbnksXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGluZGV4OiBzdHJpbmdcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSBcIml0ZW1cIiArIGluZGV4O1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgdGV4dFN0eWxlPXt0aGlzLnRleHRTdHlsZX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBpc0NoZWNrZWQ9e3ZhbHVlID09PSBpdGVtLnZhbHVlfVxuICAgICAgLz5cbiAgICApO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFJlYWN0U3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gc3VydmV5LndyYXBJdGVtVmFsdWUocmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxuICBwcml2YXRlIGdldFN0YXRlVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gIXRoaXMucXVlc3Rpb24uaXNFbXB0eSgpID8gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlIDogXCJcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYWRpb0l0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0U3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNDaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlzQ2hlY2tlZDtcbiAgfVxuICBwcml2YXRlIGdldCBoaWRlQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oaWRlQ2FwdGlvbiA9PT0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXREYXRhLmlzTmVlZFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlclxuICAgICk7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA9IHRoaXMuaXRlbS52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb24gJiYgISF0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBvdGhlckl0ZW0gPVxuICAgICAgdGhpcy5xdWVzdGlvbi5pc090aGVySXRlbSh0aGlzLml0ZW0pICYmIHRoaXMucXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkXG4gICAgICAgID8gdGhpcy5yZW5kZXJPdGhlcih0aGlzLmNzc0NsYXNzZXMpXG4gICAgICAgIDogbnVsbDtcblxuICAgIHZhciBpdGVtVGV4dCA9ICF0aGlzLmhpZGVDYXB0aW9uXG4gICAgICA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUZXh0LCB0aGlzLnRleHRTdHlsZSlcbiAgICAgIDogXCJcIjtcbiAgICB2YXIgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgbGFiZWxDbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0TGFiZWxDbGFzcyh0aGlzLml0ZW0pO1xuICAgIHZhciBsb2NUZXh0OiBhbnkgPSB0aGlzLml0ZW0ubG9jVGV4dDtcbiAgICB2YXIgY29udHJvbExhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xMYWJlbENsYXNzKHRoaXMuaXRlbSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2l0ZW1DbGFzc31cbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2xhYmVsQ2xhc3N9IGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uZ2V0QXJpYUl0ZW1MYWJlbCh0aGlzLml0ZW0pfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2x9XG4gICAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5nZXRJdGVtSWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uTmFtZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMuaXNDaGVja2VkfVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuaXRlbS52YWx1ZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5xdWVzdGlvbi5nZXRJdGVtRW5hYmxlZCh0aGlzLml0ZW0pfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgP1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb24gP1xuICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz4gOlxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPiA6XG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjb250cm9sTGFiZWxDbGFzc30+XG4gICAgICAgICAgICB7aXRlbVRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICB7b3RoZXJJdGVtfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyT3RoZXIoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBvdGhlckNzcz17Y3NzQ2xhc3Nlcy5vdGhlcn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtLCBwcm9wcyk7XG59KTtcblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhZGlvZ3JvdXBcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmFkaW9ncm91cCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSxcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5TW9kZWwgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi4vaXRlbXZhbHVlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhbmtpbmcgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhbmtpbmdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmFua2luZ01vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yb290Q2xhc3N9XG4gICAgICAgIHJlZj17KHJvb3QpID0+ICh0aGlzLmNvbnRyb2wgPSByb290KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMuZ2V0SXRlbXMoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SXRlbXMoKTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICBjb25zdCByYW5raW5nQ2hvaWNlcyA9IHRoaXMucXVlc3Rpb24ucmFua2luZ0Nob2ljZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5raW5nQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHJhbmtpbmdDaG9pY2VzW2ldO1xuICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgaSxcbiAgICAgICAgICAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5oYW5kbGVLZXlkb3duLmNhbGwodGhpcy5xdWVzdGlvbiwgZXZlbnQsIGl0ZW0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTtcbiAgICAgICAgICAgIC8vZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uaGFuZGxlUG9pbnRlckRvd24uY2FsbChcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbixcbiAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgdGhpcy5xdWVzdGlvblxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgaTogbnVtYmVyLFxuICAgIGhhbmRsZUtleWRvd246IChldmVudDogYW55KSA9PiB2b2lkLFxuICAgIGhhbmRsZVBvaW50ZXJEb3duOiAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4gdm9pZCxcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaXRlbUNsYXNzOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uUmFua2luZ01vZGVsXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBrZXk6IHN0cmluZyA9IGl0ZW0udmFsdWUgKyBcIi1cIiArIGkgKyBcIi1pdGVtXCI7XG4gICAgY29uc3QgdGV4dDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyhpdGVtLmxvY1RleHQpO1xuICAgIGNvbnN0IGluZGV4ID0gaTtcbiAgICBjb25zdCBpbmRleFRleHQ6IHN0cmluZyA9IHRoaXMucXVlc3Rpb24uZ2V0TnVtYmVyQnlJbmRleChpKTtcbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25SYW5raW5nSXRlbVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBpbmRleFRleHQ9e2luZGV4VGV4dH1cbiAgICAgICAgaGFuZGxlS2V5ZG93bj17aGFuZGxlS2V5ZG93bn1cbiAgICAgICAgaGFuZGxlUG9pbnRlckRvd249e2hhbmRsZVBvaW50ZXJEb3dufVxuICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICBpdGVtQ2xhc3M9e2l0ZW1DbGFzc31cbiAgICAgICAgcXVlc3Rpb249e3F1ZXN0aW9ufVxuICAgICAgLz5cbiAgICApO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFJlYWN0U3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gc3VydmV5LndyYXBJdGVtVmFsdWUocmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYW5raW5nSXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByb3RlY3RlZCBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRleHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXhUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXhUZXh0O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaGFuZGxlS2V5ZG93bigpOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGFuZGxlS2V5ZG93bjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGhhbmRsZVBvaW50ZXJEb3duKCk6IChldmVudDogYW55KSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oYW5kbGVQb2ludGVyRG93bjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzc0NsYXNzZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbUNsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbUNsYXNzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW1DbGFzc31cbiAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleWRvd259XG4gICAgICAgIG9uUG9pbnRlckRvd249e3RoaXMuaGFuZGxlUG9pbnRlckRvd259XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtcmFua2luZy1pdGVtPXt0aGlzLmluZGV4fVxuICAgICAgPlxuICAgICAgICA8ZGl2IHRhYkluZGV4PXstMX0gc3R5bGU9e3sgb3V0bGluZTogXCJub25lXCIgfX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtR2hvc3ROb2RlfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUNvbnRlbnR9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtSWNvbkNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAxNlwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEljb25Ib3ZlckNzcygpfVxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDJDNiAwLjkgNi45IDAgOCAwQzkuMSAwIDEwIDAuOSAxMCAyQzEwIDMuMSA5LjEgNCA4IDRDNi45IDQgNiAzLjEgNiAyWk0yIDBDMC45IDAgMCAwLjkgMCAyQzAgMy4xIDAuOSA0IDIgNEMzLjEgNCA0IDMuMSA0IDJDNCAwLjkgMy4xIDAgMiAwWk04IDZDNi45IDYgNiA2LjkgNiA4QzYgOS4xIDYuOSAxMCA4IDEwQzkuMSAxMCAxMCA5LjEgMTAgOEMxMCA2LjkgOS4xIDYgOCA2Wk0yIDZDMC45IDYgMCA2LjkgMCA4QzAgOS4xIDAuOSAxMCAyIDEwQzMuMSAxMCA0IDkuMSA0IDhDNCA2LjkgMy4xIDYgMiA2Wk04IDEyQzYuOSAxMiA2IDEyLjkgNiAxNEM2IDE1LjEgNi45IDE2IDggMTZDOS4xIDE2IDEwIDE1LjEgMTAgMTRDMTAgMTIuOSA5LjEgMTIgOCAxMlpNMiAxMkMwLjkgMTIgMCAxMi45IDAgMTRDMCAxNS4xIDAuOSAxNiAyIDE2QzMuMSAxNiA0IDE1LjEgNCAxNEM0IDEyLjkgMy4xIDEyIDIgMTJaXCIgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAyNFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEljb25Gb2N1c0NzcygpfVxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA1TDUgMEwwIDVINFY5SDZWNUgxMFpcIiAvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAxOVYxNUg0VjE5SDBMNSAyNEwxMCAxOUg2WlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUluZGV4fT57dGhpcy5pbmRleFRleHR9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLmNvbnRyb2xMYWJlbH0+e3RoaXMudGV4dH08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYW5raW5nXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhbmtpbmcsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhdGluZ01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZW5kZXJlZFJhdGluZ0l0ZW0gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhdGluZyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DbGljayA9IHRoaXMuaGFuZGxlT25DbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25SYXRpbmdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmF0aW5nTW9kZWw7XG4gIH1cbiAgaGFuZGxlT25DbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5zZXRWYWx1ZUZyb21DbGljayhldmVudC50YXJnZXQudmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIG1pblRleHQgPSB0aGlzLnF1ZXN0aW9uLm1pblJhdGVEZXNjcmlwdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY01pblJhdGVEZXNjcmlwdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgbWF4VGV4dCA9IHRoaXMucXVlc3Rpb24ubWF4UmF0ZURlc2NyaXB0aW9uXG4gICAgICA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTWF4UmF0ZURlc2NyaXB0aW9uKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBjb21tZW50ID0gdGhpcy5xdWVzdGlvbi5oYXNPdGhlciA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fSByZWY9eyhkaXYpID0+ICh0aGlzLmNvbnRyb2wgPSBkaXYpfT5cbiAgICAgICAgPGZpZWxkc2V0IHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICAgICAgPGxlZ2VuZCByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPXtcInN2LWhpZGRlblwifT48L2xlZ2VuZD5cbiAgICAgICAgICB7ISF0aGlzLnF1ZXN0aW9uLmhhc01pbkxhYmVsID8gPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm1pblRleHR9PnttaW5UZXh0fTwvc3Bhbj46IG51bGx9XG4gICAgICAgICAge3RoaXMucXVlc3Rpb24ucmVuZGVyZWRSYXRlSXRlbXMubWFwKChpdGVtLCBpKSA9PiB0aGlzLnJlbmRlckl0ZW0oXCJ2YWx1ZVwiICsgaSwgaXRlbSwgaSwgY3NzQ2xhc3NlcykpfVxuICAgICAgICAgIHshIXRoaXMucXVlc3Rpb24uaGFzTWF4TGFiZWwgPyA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubWF4VGV4dH0+e21heFRleHR9PC9zcGFuPjogbnVsbH1cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IFJlbmRlcmVkUmF0aW5nSXRlbSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGl0ZW1UZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGxhYmVsIGtleT17a2V5fSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0uaXRlbVZhbHVlKX0+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3YtdmlzdWFsbHloaWRkZW5cIlxuICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyBpbmRleH1cbiAgICAgICAgICB2YWx1ZT17aXRlbS52YWx1ZX1cbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZX1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uQ2xpY2t9XG4gICAgICAgICAgb25DaGFuZ2U9eygpPT57fX1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtVGV4dH0+e2l0ZW1UZXh0fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyT3RoZXIoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5vdGhlcn0+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtXG4gICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmF0aW5nXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhdGluZywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8XG4gIFF1ZXN0aW9uVGV4dE1vZGVsXG4+IHtcbiAgcHJpdmF0ZSBfaXNXYWl0aW5nRm9yRW50ZXIgPSBmYWxzZTtcbiAgLy9jb250cm9sUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgLy90aGlzLmNvbnRyb2xSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgaW5wdXRDbGFzcyA9ICh0aGlzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uVGV4dE1vZGVsKS5nZXRDb250cm9sQ2xhc3MoKTtcbiAgICB2YXIgb25LZXlEb3duID0gbnVsbDtcbiAgICB2YXIgb25LZXlVcCA9IG51bGw7XG4gICAgdmFyIG9uQ29tcG9zaXRpb25VcGRhdGUgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlKSB7XG4gICAgICBvbktleURvd24gPSAoZTogYW55KSA9PiAodGhpcy5faXNXYWl0aW5nRm9yRW50ZXIgPSBlLmtleUNvZGUgPT09IDIyOSk7XG4gICAgICBvbktleVVwID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2lzV2FpdGluZ0ZvckVudGVyIHx8IGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgICAgICB0aGlzLl9pc1dhaXRpbmdGb3JFbnRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgb25Db21wb3NpdGlvblVwZGF0ZSA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgZS5wZXJzaXN0KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9LCAxKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL3N1cnZleWpzL3N1cnZleS1saWJyYXJ5L2lzc3Vlcy8zMzg0XG4gICAgICBvbktleVVwID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBvbkNoYW5nZSA9IChlOiBhbnkpID0+IHtcbiAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBwbGFjZUhvbGRlciA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRQbGFjZUhvbGRlcjtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KCkpIHtcbiAgICAgIHJldHVybiA8ZGl2Pnt0aGlzLnF1ZXN0aW9uLnZhbHVlfTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBjbGFzc05hbWU9e2lucHV0Q2xhc3N9XG4gICAgICAgIHR5cGU9e3RoaXMucXVlc3Rpb24uaW5wdXRUeXBlfVxuICAgICAgICAvL3JlZj17dGhpcy5jb250cm9sUmVmfVxuICAgICAgICByZWY9eyhpbnB1dCkgPT4gKHRoaXMuY29udHJvbCA9IGlucHV0KX1cbiAgICAgICAgc3R5bGU9e3RoaXMucXVlc3Rpb24uaW5wdXRTdHlsZX1cbiAgICAgICAgbWF4TGVuZ3RoPXt0aGlzLnF1ZXN0aW9uLmdldE1heExlbmd0aCgpfVxuICAgICAgICBtaW49e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRNaW59XG4gICAgICAgIG1heD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1heH1cbiAgICAgICAgc3RlcD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFN0ZXB9XG4gICAgICAgIHNpemU9e3RoaXMucXVlc3Rpb24uaW5wdXRTaXplfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2VIb2xkZXJ9XG4gICAgICAgIGxpc3Q9e3RoaXMucXVlc3Rpb24uZGF0YUxpc3RJZH1cbiAgICAgICAgYXV0b0NvbXBsZXRlPXt0aGlzLnF1ZXN0aW9uLmF1dG9Db21wbGV0ZX1cbiAgICAgICAgb25CbHVyPXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBvbktleVVwPXtvbktleVVwfVxuICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgb25Db21wb3NpdGlvblVwZGF0ZT17b25Db21wb3NpdGlvblVwZGF0ZX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkID9cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7IHRoaXMucmVuZGVySW5wdXQoKSB9XG4gICAgICAgICAgeyB0aGlzLnJlbmRlckRhdGFMaXN0KCkgfVxuICAgICAgICA8L2Rpdj46XG4gICAgICAgIHRoaXMucmVuZGVySW5wdXQoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJEYXRhTGlzdCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWQpIHJldHVybiBudWxsO1xuICAgIHZhciBpdGVtcyA9IHRoaXMucXVlc3Rpb24uZGF0YUxpc3Q7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgb3B0aW9ucyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9wdGlvbnMucHVzaCg8b3B0aW9uIGtleT17XCJpdGVtXCIraX0gdmFsdWU9e2l0ZW1zW2ldfT48L29wdGlvbj4pO1xuICAgIH1cbiAgICByZXR1cm4gPGRhdGFsaXN0IGlkPXt0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWR9PntvcHRpb25zfTwvZGF0YWxpc3Q+O1xuICB9XG4gIC8vIHByb3RlY3RlZCB1cGRhdGVEb21FbGVtZW50KCkge1xuICAvLyAgIHRoaXMuY29udHJvbCA9IHRoaXMuY29udHJvbFJlZi5jdXJyZW50O1xuICAvLyAgIHN1cGVyLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgLy8gfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwidGV4dFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25UZXh0LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IFN1cnZleU1vZGVsLCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLCBTdXJ2ZXlXaW5kb3dNb2RlbCwgU3VydmV5RWxlbWVudCwgUXVlc3Rpb25Sb3dNb2RlbCwgSXRlbVZhbHVlLCBRdWVzdGlvblNlbGVjdEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0U3VydmV5TW9kZWwgZXh0ZW5kcyBTdXJ2ZXlNb2RlbCB7XG4gIHJlbmRlckNhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBjb25zdHJ1Y3Rvcihqc29uT2JqOiBhbnkgPSBudWxsKSB7XG4gICAgc3VwZXIoanNvbk9iaik7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJDYWxsYmFjaykge1xuICAgICAgdGhpcy5yZW5kZXJDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgbWVyZ2VDc3Moc3JjOiBhbnksIGRlc3Q6IGFueSkge1xuICAgIHRoaXMubWVyZ2VWYWx1ZXMoc3JjLCBkZXN0KTtcbiAgfVxuICBwdWJsaWMgZG9BZnRlclJlbmRlclN1cnZleShlbDogYW55KSB7XG4gICAgdGhpcy5hZnRlclJlbmRlclN1cnZleShlbCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTG9hZFN1cnZleUZyb21TZXJ2aWNlKCkge1xuICAgIGlmICghIXRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0V2FzU2hvd24oZmFsc2UpO1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCkge1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbiAgcHVibGljIHNldENvbXBsZXRlZFN0YXRlKHZhbHVlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xuICAgIHN1cGVyLnNldENvbXBsZXRlZFN0YXRlKHZhbHVlLCB0ZXh0KTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG4gIHB1YmxpYyBzdGFydCgpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gc3VwZXIuc3RhcnQoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwdWJsaWMgd3JhcFJvdyhlbGVtZW50OiBKU1guRWxlbWVudCwgcm93OiBRdWVzdGlvblJvd01vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBuZXcgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIodGhpcykud3JhcFJvdyhlbGVtZW50LCByb3cpO1xuICB9XG4gIHB1YmxpYyB3cmFwRWxlbWVudChlbGVtZW50OiBKU1guRWxlbWVudCwgcXVlc3Rpb246IFN1cnZleUVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIG5ldyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlcih0aGlzKS53cmFwRWxlbWVudChlbGVtZW50LCBxdWVzdGlvbik7XG4gIH1cbiAgcHVibGljIHdyYXBJdGVtVmFsdWUoZWxlbWVudDogSlNYLkVsZW1lbnQsIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2UsIGl0ZW06IEl0ZW1WYWx1ZSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gbmV3IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyKHRoaXMpLndyYXBJdGVtVmFsdWUoZWxlbWVudCwgcXVlc3Rpb24sIGl0ZW0pO1xuICB9XG5cbiAgcHVibGljIHdyYXBNYXRyaXhDZWxsKGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLCByZWFzb246IHN0cmluZyA9IFwiY2VsbFwiKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBuZXcgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIodGhpcykud3JhcE1hdHJpeENlbGwoZWxlbWVudCwgY2VsbCwgcmVhc29uKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIHtcbiAgY29uc3RydWN0b3IocHVibGljIHN1cnZleTogU3VydmV5TW9kZWwpIHt9XG4gIHB1YmxpYyB3cmFwUm93KGVsZW1lbnQ6IEpTWC5FbGVtZW50LCByb3c6IFF1ZXN0aW9uUm93TW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHRoaXMuc3VydmV5LmdldFJvd1dyYXBwZXJDb21wb25lbnROYW1lKHJvdyk7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHRoaXMuc3VydmV5LmdldFJvd1dyYXBwZXJDb21wb25lbnREYXRhKHJvdyk7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcm93LFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgd3JhcEVsZW1lbnQoZWxlbWVudDogSlNYLkVsZW1lbnQsIHF1ZXN0aW9uOiBTdXJ2ZXlFbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSB0aGlzLnN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUocXVlc3Rpb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSB0aGlzLnN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEocXVlc3Rpb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgd3JhcEl0ZW1WYWx1ZShlbGVtZW50OiBKU1guRWxlbWVudCwgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZSwgaXRlbTogSXRlbVZhbHVlKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSB0aGlzLnN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50TmFtZShpdGVtLCBxdWVzdGlvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHRoaXMuc3VydmV5LmdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnREYXRhKGl0ZW0sIHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGtleTogZWxlbWVudC5rZXksXG4gICAgICBlbGVtZW50LFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBpdGVtLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgd3JhcE1hdHJpeENlbGwoZWxlbWVudDogSlNYLkVsZW1lbnQsIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIHJlYXNvbjogc3RyaW5nID0gXCJjZWxsXCIpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShjZWxsLCByZWFzb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSB0aGlzLnN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEoY2VsbCwgcmVhc29uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBjZWxsLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVhY3RXaW5kb3dNb2RlbCBleHRlbmRzIFN1cnZleVdpbmRvd01vZGVsIHtcbiAgY29uc3RydWN0b3IoanNvbk9iajogYW55ID0gbnVsbCwgbW9kZWw6IFJlYWN0U3VydmV5TW9kZWwgPSBudWxsKSB7XG4gICAgc3VwZXIoanNvbk9iaiwgbW9kZWwpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkoanNvbk9iajogYW55KTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiBuZXcgUmVhY3RTdXJ2ZXlNb2RlbChqc29uT2JqKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlckNhbGxiYWNrKCk6ICgpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5yZW5kZXJDYWxsYmFjaztcbiAgfVxuICBwdWJsaWMgc2V0IHJlbmRlckNhbGxiYWNrKHZhbDogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuc3VydmV5LnJlbmRlckNhbGxiYWNrID0gdmFsO1xuICB9XG59XG5cblN1cnZleU1vZGVsLnBsYXRmb3JtID0gXCJyZWFjdFwiO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5VGltZXJQYW5lbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgdXBkYXRlID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyB0aW1lU3BlbnQ6IHRoaXMuc3VydmV5LnRpbWVTcGVudCB9KTtcbiAgfTtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5zdXJ2ZXkub25UaW1lci5hZGQodGhpcy51cGRhdGUpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuc3VydmV5Lm9uVGltZXIucmVtb3ZlKHRoaXMudXBkYXRlKTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2Pnt0aGlzLnN1cnZleS50aW1lckluZm9UZXh0fTwvZGl2PjtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgSUVsZW1lbnQsIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVJvdyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLnJlY2FsY3VsYXRlQ3NzKCk7XG4gIH1cbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZUNzcygpIHtcbiAgICB0aGlzLnJvdy52aXNpYmxlRWxlbWVudHMubWFwKGVsZW1lbnQgPT4gKGVsZW1lbnQgYXMgUXVlc3Rpb24pLmNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucm93O1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBRdWVzdGlvblJvd01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb3c7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzcztcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucm93ICYmICEhdGhpcy5zdXJ2ZXkgJiYgISF0aGlzLmNyZWF0b3IgJiYgdGhpcy5yb3cudmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBlbGVtZW50cyA9IG51bGw7XG4gICAgZWxlbWVudHMgPSB0aGlzLnJvdy52aXNpYmxlRWxlbWVudHMubWFwKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50KGVsZW1lbnQsIGluZGV4KTtcbiAgICAgIGNvbnN0IGNzcyA9IChlbGVtZW50IGFzIFF1ZXN0aW9uKS5jc3NDbGFzc2VzVmFsdWU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3MucXVlc3Rpb25XcmFwcGVyfVxuICAgICAgICAgIHN0eWxlPXsoZWxlbWVudCBhcyBhbnkpLnJvb3RTdHlsZX1cbiAgICAgICAgICBkYXRhLWtleT17aW5uZXJFbGVtZW50LmtleX1cbiAgICAgICAgICBrZXk9e2lubmVyRWxlbWVudC5rZXl9XG4gICAgICAgICAgb25Gb2N1cz17KGVsZW1lbnQgYXMgUXVlc3Rpb24pLmZvY3VzSW59XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5yb3cuaXNOZWVkUmVuZGVyID8gaW5uZXJFbGVtZW50IDogUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGVsZW1lbnQuc2tlbGV0b25Db21wb25lbnROYW1lLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGNzczogdGhpcy5jc3MsIH0pfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPXt0aGlzLnJvdy5nZXRSb3dDc3MoKX0gPlxuICAgICAgICB7ZWxlbWVudHN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFJlYWN0U3VydmV5TW9kZWwgPSB0aGlzLnN1cnZleSBhcyBSZWFjdFN1cnZleU1vZGVsO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnJlbmRlckVsZW1lbnRDb250ZW50KCk7XG4gICAgY29uc3Qgd3JhcHBlciA9IHN1cnZleS53cmFwUm93KGNvbnRlbnQsIHRoaXMucm93KTtcbiAgICByZXR1cm4gd3JhcHBlciB8fCBjb250ZW50O1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwgJiYgIXRoaXMucm93LmlzTmVlZFJlbmRlcikge1xuICAgICAgdmFyIHJvd0NvbnRhaW5lckRpdiA9IGVsO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucm93LnN0YXJ0TGF6eVJlbmRlcmluZyhyb3dDb250YWluZXJEaXYpO1xuICAgICAgfSwgMTApO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogYW55LCBuZXh0U3RhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChuZXh0UHJvcHMucm93ICE9PSB0aGlzLnJvdykge1xuICAgICAgbmV4dFByb3BzLnJvdy5pc05lZWRSZW5kZXIgPSB0aGlzLnJvdy5pc05lZWRSZW5kZXI7XG4gICAgICB0aGlzLnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gICAgfVxuICAgIHRoaXMucmVjYWxjdWxhdGVDc3MoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIHN0b3BMYXp5UmVuZGVyaW5nKCkge1xuICAgIHRoaXMucm93LnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gICAgdGhpcy5yb3cuaXNOZWVkUmVuZGVyID0gIXRoaXMucm93LmlzTGF6eVJlbmRlcmluZygpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGVsZW1lbnRJbmRleD86IG51bWJlcik6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpbmRleCA9IGVsZW1lbnRJbmRleCA/IFwiLVwiICsgZWxlbWVudEluZGV4IDogMDtcbiAgICB2YXIgZWxlbWVudFR5cGUgPSBlbGVtZW50LmdldFR5cGUoKTtcbiAgICBpZiAoIVJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuaXNFbGVtZW50UmVnaXN0ZXJlZChlbGVtZW50VHlwZSkpIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gXCJxdWVzdGlvblwiO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGVsZW1lbnRUeXBlLCB7XG4gICAgICBrZXk6IGVsZW1lbnQubmFtZSArIGluZGV4LFxuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGNyZWF0b3I6IHRoaXMuY3JlYXRvcixcbiAgICAgIHN1cnZleTogdGhpcy5zdXJ2ZXksXG4gICAgICBjc3M6IHRoaXMuY3NzLFxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25TaWduYXR1cmVQYWQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fSByZWY9eyhyb290KSA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9IHN0eWxlPXt7IGhlaWdodDogdGhpcy5xdWVzdGlvbi5oZWlnaHQsIHdpZHRoOiB0aGlzLnF1ZXN0aW9uLndpZHRoIH19PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IHRoaXMucXVlc3Rpb24ubmVlZFNob3dQbGFjZWhvbGRlcigpID8gXCJcIiA6IFwibm9uZVwiIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5wbGFjZUhvbGRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxjYW52YXMgdGFiSW5kZXg9ezB9PjwvY2FudmFzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY29udHJvbHN9PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNsZWFyQnV0dG9ufVxuICAgICAgICAgICAgdGl0bGU9e3RoaXMucXVlc3Rpb24uY2xlYXJCdXR0b25DYXB0aW9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYXJCdXR0b25JY29uSWQgPyA8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uSWNvbklkfSBzaXplPXtcImF1dG9cIn0+PC9TdmdJY29uPiA6IDxzcGFuPuKcljwvc3Bhbj59XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic2lnbmF0dXJlcGFkXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblNpZ25hdHVyZVBhZCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0geyBjaGFuZ2VkOiAwIH07XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IGxvY1N0cigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IHN0eWxlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHNlbGYuc2V0U3RhdGUoeyBjaGFuZ2VkOiBzZWxmLnN0YXRlLmNoYW5nZWQgKyAxIH0pO1xyXG4gICAgfTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7fTtcclxuICB9XHJcbiAgb25JbnB1dCA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLmxvY1N0ci50ZXh0ID0gZXZlbnQudGFyZ2V0LmlubmVyVGV4dDtcclxuICB9O1xyXG4gIG9uQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH07XHJcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sb2NTdHIuaGFzSHRtbCkge1xyXG4gICAgICBjb25zdCBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5sb2NTdHIucmVuZGVyZWRIdG1sIH07XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxyXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XHJcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsZX1cclxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XHJcbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25JbnB1dH1cclxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25DbGlja31cclxuICAgICAgICAvPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPHNwYW5cclxuICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcclxuICAgICAgICBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCJcclxuICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XHJcbiAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGV9XHJcbiAgICAgICAgb25CbHVyPXt0aGlzLm9uSW5wdXR9XHJcbiAgICAgICAgb25DbGljaz17dGhpcy5vbkNsaWNrfVxyXG4gICAgICA+XHJcbiAgICAgICAge3RoaXMubG9jU3RyLnJlbmRlcmVkSHRtbH1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxyXG4gIExvY2FsaXphYmxlU3RyaW5nLmVkaXRhYmxlUmVuZGVyZXIsXHJcbiAgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IsIHByb3BzKTtcclxuICB9XHJcbik7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUxvY1N0cmluZ1ZpZXdlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgbG9jU3RyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0cjtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgc3R5bGUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7fTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xyXG4gICAgaWYoISFwcmV2UHJvcHMubG9jU3RyKSB7XHJcbiAgICAgIHByZXZQcm9wcy5sb2NTdHIub25DaGFuZ2VkID0gKCkgPT4ge307XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlYWN0T25TdHJDaGFuZ2VkKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVhY3RPblN0ckNoYW5nZWQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjaGFuZ2VkOiAhIXRoaXMuc3RhdGUgJiYgdGhpcy5zdGF0ZS5jaGFuZ2VkID8gdGhpcy5zdGF0ZS5jaGFuZ2VkICsgMSA6IDEgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAodGhpcy5sb2NTdHIuaGFzSHRtbCkge1xyXG4gICAgICBsZXQgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMubG9jU3RyLnJlbmRlcmVkSHRtbCB9O1xyXG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwic3Ytc3RyaW5nLXZpZXdlclwiIHN0eWxlPXt0aGlzLnN0eWxlfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPjtcclxuICAgIH1cclxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJzdi1zdHJpbmctdmlld2VyXCIgc3R5bGU9e3RoaXMuc3R5bGV9Pnt0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWx9PC9zcGFuPjtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxyXG4gIExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRSZW5kZXJlcixcclxuICAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ1ZpZXdlciwgcHJvcHMpO1xyXG4gIH1cclxuKTtcclxuIiwiLyoqXG4gKiBHbG9iYWwgc3VydmV5IHNldHRpbmdzXG4gKi9cbmV4cG9ydCB2YXIgc2V0dGluZ3MgPSB7XG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBTdXJ2ZXlKUyBjb21wYXJhdG9yLiBCeSBkZWZhdWx0IHdlIHRyaW0gc3RyaW5ncyBhbmQgY29tcGFyZSB0aGVtIGFzIGNhc2UgaW5zZW5zaXRpdmUuIFRvIGNoYW5nZSB0aGUgYmVoYXZpb3IgeW91IGNhbiB1c2UgZm9sbG93aW5nIGNvZGU6XG4gICAqIHNldHRpbmdzLmNvbXBhcmF0b3IudHJpbVN0cmluZ3MgPSBmYWxzZTsgLy9cImFiYyBcIiB3aWxsIG5vdCBlcXVhbCB0byBcImFiY1wiLiBUaGV5IGFyZSBlcXVhbCBieSBkZWZhdWx0LlxuICAgKiBzZXR0aW5ncy5jb21wYXJhdG9yLmNhc2VTZW5zaXRpdmUgPSB0cnVlOyAvL1wiYWJjIFwiIHdpbGwgbm90IGVxdWFsIHRvIFwiQWJjXCIuIFRoZXkgYXJlIGVxdWFsIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBjb21wYXJhdG9yOiB7XG4gICAgdHJpbVN0cmluZ3M6IHRydWUsXG4gICAgY2FzZVNlbnNpdGl2ZTogZmFsc2VcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdGhhdCB1c2VzIHRvIHN0b3JlIHRoZSBxdWVzdGlvbiBjb21tZW50LCBhcyB7cXVlc3Rpb25OYW1lfSArIHtjb21tZW50UHJlZml4fS5cbiAgICogVGhlIGRlZmF1bHRcbiAgICovXG4gIGNvbW1lbnRQcmVmaXg6IFwiLUNvbW1lbnRcIixcbiAgLyoqXG4gICAqIEVuY29kZSBwYXJhbWV0ZXIgb24gY2FsbGluZyByZXN0ZnVsIHdlYiBBUElcbiAgICovXG4gIHdlYnNlcnZpY2VFbmNvZGVQYXJhbWV0ZXJzOiB0cnVlLFxuICAvKipcbiAgICogQ2FjaGUgdGhlIHJlc3VsdCBmb3IgY2hvaWNlcyBnZXR0aW5nIGZyb20gd2ViIHNlcnZpY2VzLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSwgdG8gZGlzYWJsZSB0aGUgY2FjaGluZy5cbiAgICovXG4gIHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bDogdHJ1ZSxcbiAgZ2V0IHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bGwoKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzLnVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bDtcbiAgfSxcbiAgc2V0IHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bGwodmFsOiBib29sZWFuKSB7XG4gICAgc2V0dGluZ3MudXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsID0gdmFsO1xuICB9LFxuICAvKipcbiAgICogU3VydmV5SlMgd2ViIHNlcnZpY2UgQVBJIHVybFxuICAgKi9cbiAgc3VydmV5U2VydmljZVVybDogXCJodHRwczovL2FwaS5zdXJ2ZXlqcy5pby9wdWJsaWMvdjEvU3VydmV5XCIsXG4gIC8qKlxuICAgKiBzZXBhcmF0b3IgdGhhdCBjYW4gYWxsb3cgdG8gc2V0IHZhbHVlIGFuZCB0ZXh0IG9mIEl0ZW1WYWx1ZSBvYmplY3QgaW4gb25lIHN0cmluZyBhczogXCJ2YWx1ZXx0ZXh0XCJcbiAgICovXG4gIGl0ZW1WYWx1ZVNlcGFyYXRvcjogXCJ8XCIsXG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBzZXJpYWxpemUgaXRlbXZhbHVlIGluc3RhbmNlIGFsd2F5cyBhcyBvYmplY3QgZXZlbiBpZiB0ZXh0IHByb3BlcnR5IGlzIGVtcHR5XG4gICAqIGNvbnN0IGl0ZW0gPSBuZXcgU3VydmV5Lkl0ZW1WYWx1ZSg1KTtcbiAgICogaXRlbS50b0pTT04oKTsgLy93aWxsIHJldHVybiB7dmFsdWU6IDV9LCBpbnN0ZWFkIG9mIDUgYnkgZGVmYXVsdC5cbiAgICovXG4gIGl0ZW1WYWx1ZUFsd2F5c1NlcmlhbGl6ZUFzT2JqZWN0OiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIHNlcmlhbGl6ZSBpdGVtdmFsdWUgdGV4dCBwcm9wZXJ0eSwgZXZlbiBpZiBpdCBpcyBlbXB0eSBvciBlcXVhbHMgdG8gdmFsdWVcbiAgICogY29uc3QgaXRlbSA9IG5ldyBTdXJ2ZXkuSXRlbVZhbHVlKFwiaXRlbTFcIik7XG4gICAqIGl0ZW0udG9KU09OKCk7IC8vd2lsbCByZXR1cm4ge3ZhbHVlOiBpdGVtMSwgdGV4dDogXCJpdGVtMVwifSwgaW5zdGVhZCBvZiBcIml0ZW0xXCIgYnkgZGVmYXVsdC5cbiAgICovXG4gIGl0ZW1WYWx1ZUFsd2F5c1NlcmlhbGl6ZVRleHQ6IGZhbHNlLFxuICAvKipcbiAgICogZGVmYXVsdCBsb2NhbGUgbmFtZSBmb3IgbG9jYWxpemFibGUgc3RyaW5ncyB0aGF0IHVzZXMgZHVyaW5nIHNlcmlhbGl6YXRpb24sIHtcImRlZmF1bHRcIjogXCJNeSB0ZXh0XCIsIFwiZGVcIjogXCJNZWluIFRleHRcIn1cbiAgICovXG4gIGRlZmF1bHRMb2NhbGVOYW1lOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIERlZmF1bHQgcm93IG5hbWUgZm9yIG1hdHJpeCAoc2luZ2xlIGNob2ljZSlcbiAgICovXG4gIG1hdHJpeERlZmF1bHRSb3dOYW1lOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIERlZmF1bHQgY2VsbCB0eXBlIGZvciBkcm9wZG93biBhbmQgZHluYW1pYyBtYXRyaWNlc1xuICAgKi9cbiAgbWF0cml4RGVmYXVsdENlbGxUeXBlOiBcImRyb3Bkb3duXCIsXG4gIC8qKlxuICAgKiBUb3RhbCB2YWx1ZSBwb3N0Zml4IGZvciBkcm9wZG93biBhbmQgZHluYW1pYyBtYXRyaWNlcy4gVGhlIHRvdGFsIHZhbHVlIHN0b3JlcyBhczoge21hdHJpeE5hbWV9ICsge3Bvc3RmaXh9XG4gICAqL1xuICBtYXRyaXhUb3RhbFZhbHVlUG9zdEZpeDogXCItdG90YWxcIixcbiAgLyoqXG4gICAqIE1heGltdW0gcm93IGNvdW50IGluIGR5bmFtaWMgbWF0cml4XG4gICAqL1xuICBtYXRyaXhNYXhpbXVtUm93Q291bnQ6IDEwMDAsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJvd0NvdW50IHRoYXQgcmV0dXJucyBpbiBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0IGZ1bmN0aW9uXG4gICAqL1xuICBtYXRyaXhNYXhSb3dDb3VudEluQ29uZGl0aW9uOiAxLFxuICAvKipcbiAgICogTWF4aW11bSBwYW5lbCBjb3VudCBpbiBkeW5hbWljIHBhbmVsXG4gICAqL1xuICBwYW5lbE1heGltdW1QYW5lbENvdW50OiAxMDAsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJhdGUgdmFsdWUgY291bnQgaW4gcmF0aW5nIHF1ZXN0aW9uXG4gICAqL1xuICByYXRpbmdNYXhpbXVtUmF0ZVZhbHVlQ291bnQ6IDIwLFxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgcXVlc3Rpb24gd2hpbGUgY2hvaWNlcyBhcmUgZ2V0dGluZyBmcm9tIHRoZSB3ZWIgc2VydmljZVxuICAgKi9cbiAgZGlzYWJsZU9uR2V0dGluZ0Nob2ljZXNGcm9tV2ViOiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGFsd2F5cyBzZXJpYWxpemUgdGhlIGxvY2FsaXphdGlvbiBzdHJpbmcgYXMgb2JqZWN0IGV2ZW4gaWYgdGhlcmUgaXMgb25seSBvbmUgdmFsdWUgZm9yIGRlZmF1bHQgbG9jYWxlLiBJbnN0ZWFkIG9mIHN0cmluZyBcIk15U3RyXCIgc2VyaWFsaXplIGFzIHtkZWZhdWx0OiBcIk15U3RyXCJ9XG4gICAqL1xuICBzZXJpYWxpemVMb2NhbGl6YWJsZVN0cmluZ0FzT2JqZWN0OiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBoaWRlIGVtcHR5IHBhZ2UgdGl0bGUgYW5kIGRlc2NyaXB0aW9uIGluIGRlc2lnbiBtb2RlXG4gICAqL1xuICBhbGxvd1Nob3dFbXB0eVRpdGxlSW5EZXNpZ25Nb2RlOiB0cnVlLFxuICAvKipcbiAgICogU2V0IHRvIGZhbHNlIHRvIGhpZGUgZW1wdHkgcGFnZSBkZXNjcmlwdGlvbiBpbiBkZXNpZ24gbW9kZVxuICAgKi9cbiAgYWxsb3dTaG93RW1wdHlEZXNjcmlwdGlvbkluRGVzaWduTW9kZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gZXhlY3V0ZSB0aGUgY29tcGxldGUgdHJpZ2dlciBvbiB2YWx1ZSBjaGFuZ2UgaW5zdGVhZCBvZiBvbiBuZXh0IHBhZ2UuXG4gICAqL1xuICBleGVjdXRlQ29tcGxldGVUcmlnZ2VyT25WYWx1ZUNoYW5nZWQ6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZXhlY3V0ZSB0aGUgc2tpcCB0cmlnZ2VyIG9uIG5leHQgcGFnZSBpbnN0ZWFkIG9mIG9uIHZhbHVlIGNoYW5nZS5cbiAgICovXG4gIGV4ZWN1dGVTa2lwVHJpZ2dlck9uVmFsdWVDaGFuZ2VkOiB0cnVlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyB0aGUgaW5wdXQgZmllbGQgb2YgW0NvbW1lbnRdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9uY29tbWVudG1vZGVsKSBxdWVzdGlvbnMgaXMgcmVuZGVyZWQgaW4gdGhlIHJlYWQtb25seSBtb2RlLlxuICAgKiBBdmFpbGFibGUgdmFsdWVzOlxuICAgKiBcInRleHRhcmVhXCIgKGRlZmF1bHQpIC0gQSAndGV4dGFyZWEnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBDb21tZW50IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqIFwiZGl2XCIgLSBBICdkaXYnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBDb21tZW50IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqL1xuICByZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlOiBcInRleHRhcmVhXCIsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IHRoZSBpbnB1dCBmaWVsZCBvZiBbVGV4dF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb250ZXh0bW9kZWwpIHF1ZXN0aW9ucyBpcyByZW5kZXJlZCBpbiB0aGUgcmVhZC1vbmx5IG1vZGUuXG4gICAqIEF2YWlsYWJsZSB2YWx1ZXM6XG4gICAqIFwiaW5wdXRcIiAoZGVmYXVsdCkgLSBBbiAnaW5wdXQnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBUZXh0IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqIFwiZGl2XCIgLSBBICdkaXYnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBUZXh0IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqL1xuICByZWFkT25seVRleHRSZW5kZXJNb2RlOiBcImlucHV0XCIsXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uLCBzZXQgeW91ciBmdW5jdGlvbiwgaWYgeW91IHdhbnQgdG8gc2hvdyB5b3VyIG93biBkaWFsb2cgY29uZmlybSB3aW5kb3cgaW5zdGVhZCBvZiBzdGFuZGFyZCBicm93c2VyIHdpbmRvdy5cbiAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICovXG4gIGNvbmZpcm1BY3Rpb25GdW5jOiBmdW5jdGlvbiAobWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZSk7XG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1pbldpZHRoIGNvbnN0cmFpbnRcbiAgICovXG4gIG1pbldpZHRoOiBcIjMwMHB4XCIsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1pbldpZHRoIGNvbnN0cmFpbnRcbiAgICovXG4gIG1heFdpZHRoOiBcImluaXRpYWxcIixcbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgdGVsbHMgaG93IG1hbnkgdGltZXMgc3VydmV5IHJlLXJ1biBleHByZXNzaW9ucyBvbiB2YWx1ZSBjaGFuZ2VzIGR1cmluZyBjb25kaXRpb24gcnVubmluZy4gV2UgbmVlZCBpdCB0byBhdm9pZCByZWN1cnNpb25zIGluIHRoZSBleHByZXNzaW9uc1xuICAgKi9cbiAgbWF4aW11bUNvbmRpdGlvblJ1bkNvdW50T25WYWx1ZUNoYW5nZWQ6IDEwLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCB2aXNpYmxlSW5kZXggZm9yIHF1ZXN0aW9uIHdpdGggdGl0bGVMb2NhdGlvbiA9IFwiaGlkZGVuXCIgaXMgLTEsIGFuZCBzdXJ2ZXkgZG9lc24ndCBjb3VudCB0aGVzZSBxdWVzdGlvbnMgd2hlbiBzZXQgcXVlc3Rpb25zIG51bWJlcnMuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgYSBxdWVzdGlvbiBuZXh0IHRvIGEgcXVlc3Rpb24gd2l0aCBoaWRkZW4gdGl0bGUgd2lsbCBpbmNyZWFzZSBpdCdzIG51bWJlci5cbiAgICovXG4gIHNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuVGl0bGU6IGZhbHNlLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCB2aXNpYmxlSW5kZXggZm9yIHF1ZXN0aW9uIHdpdGggaGlkZU51bWJlciA9IHRydWUgaXMgLTEsIGFuZCBzdXJ2ZXkgZG9lc24ndCBjb3VudCB0aGVzZSBxdWVzdGlvbnMgd2hlbiBzZXQgcXVlc3Rpb25zIG51bWJlcnMuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgYSBxdWVzdGlvbiBuZXh0IHRvIGEgcXVlc3Rpb24gd2l0aCBoaWRkZW4gdGl0bGUgbnVtYmVyIHdpbGwgaW5jcmVhc2UgaXQncyBudW1iZXIuXG4gICAqL1xuICBzZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlbk51bWJlcjogZmFsc2UsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGFsbCByb3dzIGFyZSByZW5kZXJlZCBubyBtYXR0ZXJzIHdod3RoZXIgdGhleSBhcmUgdmlzaWJsZS5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBzdXJ2ZXkgbWFya3VwIHJvd3Mgd2lsbCBiZSByZW5kZXJlZCBvbmx5IGlmIHRoZXkgYXJlIHZpc2libGUgaW4gdmlld3BvcnQuXG4gICAqIFRoaXMgZmVhdHVyZSBpcyBleHBlcmltYW50YWwgYW5kIG1pZ2h0IGRvIG5vdCBzdXBwb3J0IGFsbCB0aGUgdXNlIGNhc2VzLlxuICAgKi9cbiAgbGF6eVJvd3NSZW5kZXJpbmc6IGZhbHNlLFxuICBsYXp5Um93c1JlbmRlcmluZ1N0YXJ0Um93OiAzLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCBjaGVja2JveCBhbmQgcmFkaW9ncm91cCBpdGVtcyBhcmUgb3JkZXJlZCBpbiByb3dzLlxuICAgKiBTZXQgaXQgXCJjb2x1bW5cIiwgYW5kIGl0ZW1zIHdpbGwgYmUgb3JkZXJlZCBpbiBjb2x1bW5zLlxuICAgKi9cbiAgc2hvd0l0ZW1zSW5PcmRlcjogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBTdXBwb3J0ZWQgdmFsaWRhdG9ycyBieSBxdWVzdGlvbiB0eXBlcy4gWW91IGNhbiBtb2RpZnkgdGhpcyB2YXJpYWJsZSB0byBhZGQgdmFsaWRhdG9ycyBmb3IgbmV3IHF1ZXN0aW9uIHR5cGVzIG9yIGFkZC9yZW1vdmUgZm9yIGV4aXN0aW5nIHF1ZXN0aW9uIHR5cGVzLlxuICAgKi9cbiAgc3VwcG9ydGVkVmFsaWRhdG9yczoge1xuICAgIHF1ZXN0aW9uOiBbXCJleHByZXNzaW9uXCJdLFxuICAgIGNvbW1lbnQ6IFtcInRleHRcIiwgXCJyZWdleFwiXSxcbiAgICB0ZXh0OiBbXCJudW1lcmljXCIsIFwidGV4dFwiLCBcInJlZ2V4XCIsIFwiZW1haWxcIl0sXG4gICAgY2hlY2tib3g6IFtcImFuc3dlcmNvdW50XCJdLFxuICAgIGltYWdlcGlja2VyOiBbXCJhbnN3ZXJjb3VudFwiXSxcbiAgfSxcbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWUgYXMgc3RyaW5nIFwieXl5eS1tbS1kZFwiLiB0ZXh0IHF1ZXN0aW9ucyB3aXRoIGlucHV0VHlwZSBcImRhdGVcIiB3aWxsIG5vdCBhbGxvdyB0byBzZXQgdG8gc3VydmV5IGRhdGUgdGhhdCBsZXNzIHRoYW4gdGhpcyB2YWx1ZVxuICAgKi9cbiAgbWluRGF0ZTogXCJcIixcbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWUgYXMgc3RyaW5nIFwieXl5eS1tbS1kZFwiLiB0ZXh0IHF1ZXN0aW9ucyB3aXRoIGlucHV0VHlwZSBcImRhdGVcIiB3aWxsIG5vdCBhbGxvdyB0byBzZXQgdG8gc3VydmV5IGRhdGUgdGhhdCBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZVxuICAgKi9cbiAgbWF4RGF0ZTogXCJcIixcbiAgc2hvd01vZGFsOiA8XG4gICAgKFxuICAgICAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxuICAgICAgZGF0YTogYW55LFxuICAgICAgb25BcHBseTogKCkgPT4gYm9vbGVhbixcbiAgICAgIG9uQ2FuY2VsPzogKCkgPT4gdm9pZCxcbiAgICAgIGNzc0NsYXNzPzogc3RyaW5nLFxuICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICBkaXNwbGF5TW9kZT86IFwicG9wdXBcIiB8IFwib3ZlcmxheVwiXG4gICAgKSA9PiB2b2lkXG4gICAgPnVuZGVmaW5lZCxcbiAgc3VwcG9ydENyZWF0b3JWMjogZmFsc2UsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBsaXN0IG9mIGN1c3RvbSBpY29ucy5cbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmVwbGFjZSBTdXJ2ZXlKUyBkZWZhdWx0IGljb25zIChkaXNwbGF5ZWQgaW4gVUkgZWxlbWVudHMgb2YgU3VydmV5SlMgTGlicmFyeSBvciBDcmVhdG9yKSB3aXRoIHlvdXIgY3VzdG9tIGljb25zLlxuICAgKiBGb3IgZXZlcnkgZGVmYXVsdCBpY29uIHRvIHJlcGxhY2UsIGFkZCBhIGtleS92YWx1ZSBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCBpY29uJ3MgbmFtZSBhcyBhIGtleSBhbmQgdGhlIG5hbWUgb2YgeW91ciBjdXN0b20gaWNvbiBhcyBhIHZhbHVlLlxuICAgKiBGb3IgZXhhbXBsZTogU3VydmV5LnNldHRpbmdzLmN1c3RvbUljb25zW1wiaWNvbi1yZWRvXCJdID0gXCJteS1vd24tcmVkby1pY29uXCJcbiAgICovXG4gIGN1c3RvbUljb25zOiB7fSxcbiAgdGl0bGVUYWdzOiB7XG4gICAgc3VydmV5OiBcImgzXCIsXG4gICAgcGFnZTogXCJoNFwiLFxuICAgIHBhbmVsOiBcImg0XCIsXG4gICAgcXVlc3Rpb246IFwiaDVcIixcbiAgfVxufTtcbiIsImltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi9hY3Rpb25zL2FjdGlvblwiO1xuaW1wb3J0IHsgQWRhcHRpdmVBY3Rpb25Db250YWluZXIgfSBmcm9tIFwiLi4vYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXJcIjtcblxuaW50ZXJmYWNlIElEaW1lbnNpb25zIHtcbiAgc2Nyb2xsOiBudW1iZXI7XG4gIG9mZnNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG1pbkRpbWVuc2lvbkNvbnN0ID0gNTY7XG4gIHByaXZhdGUgc2VwYXJhdG9yU2l6ZSA9IDE3O1xuICBwcml2YXRlIHNlcGFyYXRvckFkZENvbnN0ID0gMTtcbiAgcHJpdmF0ZSBwYWRkaW5nU2l6ZUNvbnN0ID0gODtcbiAgcHJvdGVjdGVkIHJlY2FsY01pbkRpbWVuc2lvbkNvbnN0ID0gdHJ1ZTtcblxuICBwdWJsaWMgZ2V0Q29tcHV0ZWRTdHlsZTogKFxuICAgIGVsdDogRWxlbWVudFxuICApID0+IENTU1N0eWxlRGVjbGFyYXRpb24gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZS5iaW5kKHdpbmRvdyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgcHJpdmF0ZSBtb2RlbDogQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gICAgcHJpdmF0ZSBpdGVtc1NlbGVjdG9yOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBkb3RzSXRlbVNpemU6IG51bWJlciA9IDQ4LFxuICApIHtcblxuICAgIHRoaXMubW9kZWwudXBkYXRlQ2FsbGJhY2sgPSAoaXNSZXNldEluaXRpYWxpemVkOiBib29sZWFuKSA9PiB7XG4gICAgICBpZihpc1Jlc2V0SW5pdGlhbGl6ZWQpXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnByb2Nlc3MoKTtcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKF8pID0+IHRoaXMucHJvY2VzcygpKTtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRhaW5lci5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9ucyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IElEaW1lbnNpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsOiBlbGVtZW50LnNjcm9sbFdpZHRoLFxuICAgICAgb2Zmc2V0OiBlbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QXZhaWxhYmxlU3BhY2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgbGV0IHNwYWNlID0gdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgaWYgKHN0eWxlLmJveFNpemluZyA9PT0gXCJib3JkZXItYm94XCIpIHtcbiAgICAgIHNwYWNlIC09IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0xlZnQpICsgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nUmlnaHQpO1xuICAgIH1cbiAgICByZXR1cm4gc3BhY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FsY0l0ZW1TaXplKGl0ZW06IEhUTUxEaXZFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXRlbS5vZmZzZXRXaWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY01pbkRpbWVuc2lvbihjdXJyZW50QWN0aW9uOiBBY3Rpb24pIHtcbiAgICBsZXQgbWluRGltZW5zaW9uQ29uc3QgPSB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0O1xuICAgIGlmKGN1cnJlbnRBY3Rpb24uaWNvblNpemUgJiYgdGhpcy5yZWNhbGNNaW5EaW1lbnNpb25Db25zdCkge1xuICAgICAgbWluRGltZW5zaW9uQ29uc3QgPSAyICogY3VycmVudEFjdGlvbi5pY29uU2l6ZSArIHRoaXMucGFkZGluZ1NpemVDb25zdDtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRBY3Rpb24uY2FuU2hyaW5rXG4gICAgICA/IG1pbkRpbWVuc2lvbkNvbnN0ICtcbiAgICAgIChjdXJyZW50QWN0aW9uLm5lZWRTZXBhcmF0b3IgPyB0aGlzLnNlcGFyYXRvclNpemUgOiAwKVxuICAgICAgOiBjdXJyZW50QWN0aW9uLm1heERpbWVuc2lvbjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0l0ZW1zU2l6ZXMoKSB7XG4gICAgY29uc3QgYWN0aW9ucyA9IHRoaXMubW9kZWwuYWN0aW9ucztcbiAgICB0aGlzLmNvbnRhaW5lclxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5pdGVtc1NlbGVjdG9yKVxuICAgICAgLmZvckVhY2goKGl0ZW06IEhUTUxEaXZFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBjdXJyZW50QWN0aW9uID0gYWN0aW9uc1tpbmRleF07XG4gICAgICAgIGN1cnJlbnRBY3Rpb24ubWF4RGltZW5zaW9uID0gdGhpcy5jYWxjSXRlbVNpemUoaXRlbSk7XG4gICAgICAgIGN1cnJlbnRBY3Rpb24ubWluRGltZW5zaW9uID0gdGhpcy5jYWxjTWluRGltZW5zaW9uKGN1cnJlbnRBY3Rpb24pO1xuICAgICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNDb250YWluZXJWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoIHx8XG4gICAgICB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQgfHxcbiAgICAgIHRoaXMuY29udGFpbmVyLmdldENsaWVudFJlY3RzKCkubGVuZ3RoXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHByb2Nlc3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNDb250YWluZXJWaXNpYmxlKSB7XG4gICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiAoYWN0aW9uLm1vZGUgPSBcImxhcmdlXCIpKTtcbiAgICAgICAgdGhpcy5jYWxjSXRlbXNTaXplcygpO1xuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5tb2RlbC5maXQodGhpcy5nZXRBdmFpbGFibGVTcGFjZSgpLCB0aGlzLmRvdHNJdGVtU2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbC51cGRhdGVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICBpZiAoISF0aGlzLnJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciBleHRlbmRzIFJlc3BvbnNpdml0eU1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50LFxuICAgIG1vZGVsOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcixcbiAgICBpdGVtc1NlbGVjdG9yOiBzdHJpbmcsXG4gICAgZG90c0l0ZW1TaXplPzogbnVtYmVyXG4gICkge1xuICAgIHN1cGVyKGNvbnRhaW5lciwgbW9kZWwsIGl0ZW1zU2VsZWN0b3IsIGRvdHNJdGVtU2l6ZSk7XG4gICAgdGhpcy5taW5EaW1lbnNpb25Db25zdCA9IDQwO1xuICAgIHRoaXMucmVjYWxjTWluRGltZW5zaW9uQ29uc3QgPSBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaW1lbnNpb25zKCk6IElEaW1lbnNpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsOiB0aGlzLmNvbnRhaW5lci5zY3JvbGxIZWlnaHQsXG4gICAgICBvZmZzZXQ6IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZVNwYWNlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB0aGlzLmdldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIpO1xuICAgIGxldCBzcGFjZTogbnVtYmVyID0gdGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgIGlmIChzdHlsZS5ib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3ApICsgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGNJdGVtU2l6ZShpdGVtOiBIVE1MRGl2RWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0ub2Zmc2V0SGVpZ2h0O1xuICB9XG59XG4iLCJpbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuLy4uL3NldHRpbmdzXCI7XG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbnMoYTogYW55LCBiOiBhbnkpIHtcbiAgY29uc3QgcmVnRXhTdHJpcDA6IFJlZ0V4cCA9IC8oXFwuMCspKyQvO1xuICBjb25zdCBzZWdtZW50c0E6IHN0cmluZ1tdID0gYS5yZXBsYWNlKHJlZ0V4U3RyaXAwLCBcIlwiKS5zcGxpdChcIi5cIik7XG4gIGNvbnN0IHNlZ21lbnRzQjogc3RyaW5nW10gPSBiLnJlcGxhY2UocmVnRXhTdHJpcDAsIFwiXCIpLnNwbGl0KFwiLlwiKTtcbiAgY29uc3QgbGVuOiBudW1iZXIgPSBNYXRoLm1pbihzZWdtZW50c0EubGVuZ3RoLCBzZWdtZW50c0IubGVuZ3RoKTtcbiAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgZGlmZjogbnVtYmVyID1cbiAgICAgIHBhcnNlSW50KHNlZ21lbnRzQVtpXSwgMTApIC0gcGFyc2VJbnQoc2VnbWVudHNCW2ldLCAxMCk7XG4gICAgaWYgKGRpZmYpIHtcbiAgICAgIHJldHVybiBkaWZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2VnbWVudHNBLmxlbmd0aCAtIHNlZ21lbnRzQi5sZW5ndGg7XG59XG5mdW5jdGlvbiBjb25maXJtQWN0aW9uKG1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoISFzZXR0aW5ncyAmJiAhIXNldHRpbmdzLmNvbmZpcm1BY3Rpb25GdW5jKVxuICAgIHJldHVybiBzZXR0aW5ncy5jb25maXJtQWN0aW9uRnVuYyhtZXNzYWdlKTtcbiAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZSk7XG59XG5mdW5jdGlvbiBkZXRlY3RJRUJyb3dzZXIoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHVhOiBzdHJpbmcgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgY29uc3Qgb2xkSWU6IG51bWJlciA9IHVhLmluZGV4T2YoXCJNU0lFIFwiKTtcbiAgY29uc3QgZWxldmVuSWU6IG51bWJlciA9IHVhLmluZGV4T2YoXCJUcmlkZW50L1wiKTtcbiAgcmV0dXJuIG9sZEllID4gLTEgfHwgZWxldmVuSWUgPiAtMTtcbn1cbmZ1bmN0aW9uIGRldGVjdElFT3JFZGdlKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mICg8YW55PmRldGVjdElFT3JFZGdlKS5pc0lFT3JFZGdlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY29uc3QgdWE6IHN0cmluZyA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWU6IG51bWJlciA9IHVhLmluZGV4T2YoXCJNU0lFIFwiKTtcbiAgICBjb25zdCB0cmlkZW50OiBudW1iZXIgPSB1YS5pbmRleE9mKFwiVHJpZGVudC9cIik7XG4gICAgY29uc3QgZWRnZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIkVkZ2UvXCIpO1xuICAgICg8YW55PmRldGVjdElFT3JFZGdlKS5pc0lFT3JFZGdlID0gZWRnZSA+IDAgfHwgdHJpZGVudCA+IDAgfHwgbXNpZSA+IDA7XG4gIH1cbiAgcmV0dXJuICg8YW55PmRldGVjdElFT3JFZGdlKS5pc0lFT3JFZGdlO1xufVxuZnVuY3Rpb24gbG9hZEZpbGVGcm9tQmFzZTY0KGI2NERhdGE6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZykge1xuICB0cnkge1xuICAgIGNvbnN0IGJ5dGVTdHJpbmc6IHN0cmluZyA9IGF0b2IoYjY0RGF0YS5zcGxpdChcIixcIilbMV0pO1xuXG4gICAgLy8gc2VwYXJhdGUgb3V0IHRoZSBtaW1lIGNvbXBvbmVudFxuICAgIGNvbnN0IG1pbWVTdHJpbmc6IHN0cmluZyA9IGI2NERhdGFcbiAgICAgIC5zcGxpdChcIixcIilbMF1cbiAgICAgIC5zcGxpdChcIjpcIilbMV1cbiAgICAgIC5zcGxpdChcIjtcIilbMF07XG5cbiAgICAvLyB3cml0ZSB0aGUgYnl0ZXMgb2YgdGhlIHN0cmluZyB0byBhbiBBcnJheUJ1ZmZlclxuICAgIGNvbnN0IGFiOiBBcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XG4gICAgY29uc3QgaWE6IFVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShhYik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlU3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpYVtpXSA9IGJ5dGVTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgLy8gd3JpdGUgdGhlIEFycmF5QnVmZmVyIHRvIGEgYmxvYiwgYW5kIHlvdSdyZSBkb25lXG4gICAgY29uc3QgYmI6IEJsb2IgPSBuZXcgQmxvYihbYWJdLCB7IHR5cGU6IG1pbWVTdHJpbmcgfSk7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgd2luZG93Lm5hdmlnYXRvciAmJlxuICAgICAgKDxhbnk+d2luZG93Lm5hdmlnYXRvcilbXCJtc1NhdmVCbG9iXCJdXG4gICAgKSB7XG4gICAgICAoPGFueT53aW5kb3cubmF2aWdhdG9yKVtcIm1zU2F2ZU9yT3BlbkJsb2JcIl0oYmIsIGZpbGVOYW1lKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikgeyB9XG59XG5mdW5jdGlvbiBpc01vYmlsZSgpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cub3JpZW50YXRpb24gIT09IFwidW5kZWZpbmVkXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZShcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIHRocmVzaG9sZDogbnVtYmVyID0gMFxuKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZWxlbWVudFJlY3Q6IERPTVJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB2aWV3SGVpZ2h0OiBudW1iZXIgPSBNYXRoLm1heChcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgIHdpbmRvdy5pbm5lckhlaWdodFxuICApO1xuICBjb25zdCB0b3BXaW46IG51bWJlciA9IC10aHJlc2hvbGQ7XG4gIGNvbnN0IGJvdHRvbVdpbjogbnVtYmVyID0gdmlld0hlaWdodCArIHRocmVzaG9sZDtcbiAgY29uc3QgdG9wRWw6IG51bWJlciA9IGVsZW1lbnRSZWN0LnRvcDtcbiAgY29uc3QgYm90dG9tRWw6IG51bWJlciA9IGVsZW1lbnRSZWN0LmJvdHRvbTtcblxuICBjb25zdCBtYXhUb3A6IG51bWJlciA9IE1hdGgubWF4KHRvcFdpbiwgdG9wRWwpO1xuICBjb25zdCBtaW5Cb3R0b206IG51bWJlciA9IE1hdGgubWluKGJvdHRvbVdpbiwgYm90dG9tRWwpO1xuICByZXR1cm4gbWF4VG9wIDw9IG1pbkJvdHRvbTtcbn1cblxuZnVuY3Rpb24gZmluZFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cbiAgaWYgKFxuICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZWxlbWVudC5jbGllbnRIZWlnaHQgJiZcbiAgICAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dZID09PSBcImF1dG9cIilcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBpZiAoXG4gICAgZWxlbWVudC5zY3JvbGxXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGggJiZcbiAgICAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1ggPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dYID09PSBcImF1dG9cIilcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZmluZFNjcm9sbGFibGVQYXJlbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsRWxlbWVudEJ5Q2hpbGRJZChpZDogc3RyaW5nKSB7XG4gIGlmICghZG9jdW1lbnQpIHJldHVybjtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWwpIHJldHVybjtcbiAgY29uc3Qgc2Nyb2xsYWJsZUVsID0gZmluZFNjcm9sbGFibGVQYXJlbnQoZWwpO1xuICBpZiAoISFzY3JvbGxhYmxlRWwpIHtcbiAgICBzY3JvbGxhYmxlRWwuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJzY3JvbGxcIikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEljb25OYW1lRnJvbVByb3h5KGljb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWljb25OYW1lKSByZXR1cm4gaWNvbk5hbWU7XG4gIHZhciBwcm94eU5hbWUgPSAoPGFueT5zZXR0aW5ncy5jdXN0b21JY29ucylbaWNvbk5hbWVdO1xuICByZXR1cm4gISFwcm94eU5hbWUgPyBwcm94eU5hbWUgOiBpY29uTmFtZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3ZnKFxuICBzaXplOiBudW1iZXIgfCBzdHJpbmcsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxuICBpY29uTmFtZTogc3RyaW5nLFxuICBzdmdFbGVtOiBhbnlcbikge1xuICBpZihzaXplICE9PSBcImF1dG9cIikge1xuICAgIHN2Z0VsZW0uc3R5bGUud2lkdGggPSAoc2l6ZSB8fCB3aWR0aCB8fCAxNikgKyBcInB4XCI7XG4gICAgc3ZnRWxlbS5zdHlsZS5oZWlnaHQgPSAoc2l6ZSB8fCBoZWlnaHQgfHwgMTYpICsgXCJweFwiO1xuICB9XG4gIGNvbnN0IG5vZGU6IGFueSA9IHN2Z0VsZW0uY2hpbGROb2Rlc1swXTtcbiAgY29uc3QgcmVhbEljb25OYW1lID0gZ2V0SWNvbk5hbWVGcm9tUHJveHkoaWNvbk5hbWUpO1xuICBub2RlLnNldEF0dHJpYnV0ZU5TKFxuICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIFwieGxpbms6aHJlZlwiLFxuICAgIFwiI1wiICsgcmVhbEljb25OYW1lXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXA8VD4odmFsdWU6IFQgfCAoKCkgPT4gVCkpOiBUIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoPCgpID0+IFQ+dmFsdWUpKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpemUodmFsdWU6IGFueSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIFwiXCIgKyB2YWx1ZSArIFwicHhcIjtcbiAgfVxuICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxhc3RTeW1ib2w6IHN0cmluZyA9IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdO1xuICAgIGlmICgobGFzdFN5bWJvbCA+PSBcIjBcIiAmJiBsYXN0U3ltYm9sIDw9IFwiOVwiKSB8fCBsYXN0U3ltYm9sID09IFwiLlwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBudW06IG51bWJlciA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICByZXR1cm4gXCJcIiArIG51bSArIFwicHhcIjtcbiAgICAgIH0gY2F0Y2ggeyB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZG9LZXkyQ2xpY2tVcChldnQ6IEtleWJvYXJkRXZlbnQsIG9wdGlvbnMgPSB7IHByb2Nlc3NFc2M6IHRydWUgfSk6IHZvaWQge1xuICBpZiAoISFldnQudGFyZ2V0ICYmICg8YW55PmV2dC50YXJnZXQpW1wiY29udGVudEVkaXRhYmxlXCJdID09PSBcInRydWVcIikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlbGVtZW50OiBhbnkgPSBldnQudGFyZ2V0O1xuICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgY29uc3QgY2hhcjogbnVtYmVyID0gZXZ0LndoaWNoIHx8IGV2dC5rZXlDb2RlO1xuICBpZiAoY2hhciA9PT0gMTMgfHwgY2hhciA9PT0gMzIpIHtcbiAgICBpZiAoZWxlbWVudC5jbGljaykgZWxlbWVudC5jbGljaygpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMucHJvY2Vzc0VzYyAmJiBjaGFyID09PSAyNykge1xuICAgIGlmIChlbGVtZW50LmJsdXIpIGVsZW1lbnQuYmx1cigpO1xuICB9XG59XG5mdW5jdGlvbiBkb0tleTJDbGlja0Rvd24oZXZ0OiBLZXlib2FyZEV2ZW50LCBvcHRpb25zID0geyBwcm9jZXNzRXNjOiB0cnVlIH0pOiB2b2lkIHtcbiAgaWYgKCEhZXZ0LnRhcmdldCAmJiAoPGFueT5ldnQudGFyZ2V0KVtcImNvbnRlbnRFZGl0YWJsZVwiXSA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGNoYXIgPSBldnQud2hpY2ggfHwgZXZ0LmtleUNvZGU7XG4gIGNvbnN0IHN1cHBvcnRlZENvZGVzID0gWzEzLCAzMl07XG4gIGlmIChvcHRpb25zLnByb2Nlc3NFc2MpIHtcbiAgICBzdXBwb3J0ZWRDb2Rlcy5wdXNoKDI3KTtcbiAgfVxuICBpZiAoc3VwcG9ydGVkQ29kZXMuaW5kZXhPZihjaGFyKSAhPT0gLTEpIHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuZnVuY3Rpb24gaW5jcmVhc2VIZWlnaHRCeUNvbnRlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGdldENvbXB1dGVkU3R5bGU/OiAoZWx0OiBFbGVtZW50KSA9PiBhbnkpIHtcbiAgaWYgKCFlbGVtZW50KSByZXR1cm47XG4gIGlmICghZ2V0Q29tcHV0ZWRTdHlsZSkgZ2V0Q29tcHV0ZWRTdHlsZSA9IChlbHQ6IEVsZW1lbnQpID0+IHsgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsdCk7IH07XG5cbiAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IFwiYXV0b1wiO1xuICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IChlbGVtZW50LnNjcm9sbEhlaWdodCArIHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyVG9wV2lkdGgpICsgcGFyc2VGbG9hdChzdHlsZS5ib3JkZXJCb3R0b21XaWR0aCkpICsgXCJweFwiO1xufVxuZnVuY3Rpb24gZ2V0T3JpZ2luYWxFdmVudChldmVudDogYW55KSB7XG4gIHJldHVybiBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50O1xufVxuZnVuY3Rpb24gcHJldmVudERlZmF1bHRzKGV2ZW50OiBhbnkpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG5cbmV4cG9ydCB7XG4gIGNvbXBhcmVWZXJzaW9ucyxcbiAgY29uZmlybUFjdGlvbixcbiAgZGV0ZWN0SUVPckVkZ2UsXG4gIGRldGVjdElFQnJvd3NlcixcbiAgbG9hZEZpbGVGcm9tQmFzZTY0LFxuICBpc01vYmlsZSxcbiAgaXNFbGVtZW50VmlzaWJsZSxcbiAgZmluZFNjcm9sbGFibGVQYXJlbnQsXG4gIHNjcm9sbEVsZW1lbnRCeUNoaWxkSWQsXG4gIGNyZWF0ZVN2ZyxcbiAgZG9LZXkyQ2xpY2tVcCxcbiAgZG9LZXkyQ2xpY2tEb3duLFxuICBnZXRJY29uTmFtZUZyb21Qcm94eSxcbiAgaW5jcmVhc2VIZWlnaHRCeUNvbnRlbnQsXG4gIGdldE9yaWdpbmFsRXZlbnQsXG4gIHByZXZlbnREZWZhdWx0c1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXzsiXSwic291cmNlUm9vdCI6IiJ9
8448
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvZW50cmllcy9yZWFjdC11aS1tb2RlbC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9lbnRyaWVzL3JlYWN0LXVpLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2Jvb2xlYW4tY2hlY2tib3gudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2Jvb2xlYW4udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLXNlcGFyYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbGlzdC9saXN0LWl0ZW0udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbGlzdC9saXN0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4L3Jvdy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wb3B1cC9wb3B1cC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9za2VsZXRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL2xvZ28taW1hZ2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9zdXJ2ZXktaGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3RpdGxlL2RlZmF1bHQtdGl0bGUudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9ucy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1jb250ZW50LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2N1c3RvbS13aWRnZXQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2VsZW1lbnQtZmFjdG9yeS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvZmxvdy1wYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvaW1hZ2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2ltYWdlcGlja2VyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9wYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9wYW5lbC1iYXNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9wYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzcy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5V2luZG93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2J1dHRvbmdyb3VwLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NvbW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY3VzdG9tLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VsZW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZW1wdHkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZXhwcmVzc2lvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9mYWN0b3J5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZpbGUudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25faHRtbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXgudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbXVsdGlwbGV0ZXh0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3BhbmVsZHluYW1pYy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9yYWRpb2dyb3VwLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhbmtpbmcudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmF0aW5nLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3RleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0c3VydmV5bW9kZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0dGltZXJwYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvcm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9zaWduYXR1cmVwYWQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3N0cmluZy1lZGl0b3IudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3N0cmluZy12aWV3ZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3NldHRpbmdzLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3V0aWxzL3V0aWxzLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0L2V4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC9leHRlcm5hbCB7XCJyb290XCI6XCJTdXJ2ZXlcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNvcmVcIixcImNvbW1vbmpzXCI6XCJzdXJ2ZXktY29yZVwiLFwiYW1kXCI6XCJzdXJ2ZXktY29yZVwifSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO1FDVkE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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QUFDO0lBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEksQ0FBQztBQUNELFNBQVMsZ0JBQWdCLENBQUMsS0FBVTtJQUNsQyxPQUFPLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDO0FBQ3RDLENBQUM7QUFDRCxTQUFTLGVBQWUsQ0FBQyxLQUFVO0lBQ2pDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQW1CQzs7Ozs7Ozs7Ozs7O0FDM09GLG1EOzs7Ozs7Ozs7OztBQ0FBLHVEOzs7Ozs7Ozs7OztBQ0FBLHlEIiwiZmlsZSI6InN1cnZleS1yZWFjdC11aS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJzdXJ2ZXktcmVhY3QtdWlcIiwgW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIiwgXCJzdXJ2ZXktY29yZVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJzdXJ2ZXktcmVhY3QtdWlcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTdXJ2ZXlSZWFjdFwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUmVhY3RET01cIl0sIHJvb3RbXCJTdXJ2ZXlcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9lbnRyaWVzL3JlYWN0LXVpLnRzXCIpO1xuIiwiLy8gcmVhY3RcbmV4cG9ydCB7IFN1cnZleSwgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5XCI7XG5leHBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHN1cnZleW1vZGVsXCI7XG5leHBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlXCI7XG5leHBvcnQgeyBTdXJ2ZXlUaW1lclBhbmVsIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0dGltZXJwYW5lbFwiO1xuZXhwb3J0IHsgU3VydmV5TmF2aWdhdGlvbiB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb25cIjtcbmV4cG9ydCB7IFN1cnZleVBhZ2UgfSBmcm9tIFwiLi4vcmVhY3QvcGFnZVwiO1xuZXhwb3J0IHsgU3VydmV5Um93IH0gZnJvbSBcIi4uL3JlYWN0L3Jvd1wiO1xuZXhwb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi4vcmVhY3QvcGFuZWxcIjtcbmV4cG9ydCB7IFN1cnZleUZsb3dQYW5lbCB9IGZyb20gXCIuLi9yZWFjdC9mbG93LXBhbmVsXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvbixcbiAgU3VydmV5RWxlbWVudEVycm9ycyxcbiAgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsLFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvblwiO1xuZXhwb3J0IHtcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0sXG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudCxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveCxcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvblJhbmtpbmcsXG4gIFN1cnZleVF1ZXN0aW9uUmFua2luZ0l0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhbmtpbmdcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9kcm9wZG93blwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25NYXRyaXgsXG4gIFN1cnZleVF1ZXN0aW9uTWF0cml4Um93LFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uSHRtbCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2h0bWxcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRmlsZSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZpbGVcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbXVsdGlwbGV0ZXh0XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9yYWRpb2dyb3VwXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblRleHQgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl90ZXh0XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4gfSBmcm9tIFwiLi4vcmVhY3QvYm9vbGVhblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuQ2hlY2tib3ggfSBmcm9tIFwiLi4vcmVhY3QvYm9vbGVhbi1jaGVja2JveFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25FbXB0eSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VtcHR5XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQ2VsbCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWMgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3BhbmVsZHluYW1pY1wiO1xuZXhwb3J0IHsgU3VydmV5UHJvZ3Jlc3MgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc1wiO1xuZXhwb3J0IHsgU3VydmV5UHJvZ3Jlc3NCdXR0b25zIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3NCdXR0b25zXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhdGluZyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhdGluZ1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgU3VydmV5V2luZG93IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5V2luZG93XCI7XG5leHBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmV4cG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vcmVhY3QvZWxlbWVudC1mYWN0b3J5XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyIH0gZnJvbSBcIi4uL3JlYWN0L2ltYWdlcGlja2VyXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkltYWdlIH0gZnJvbSBcIi4uL3JlYWN0L2ltYWdlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblNpZ25hdHVyZVBhZCB9IGZyb20gXCIuLi9yZWFjdC9zaWduYXR1cmVwYWRcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9idXR0b25ncm91cFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25DdXN0b20sIFN1cnZleVF1ZXN0aW9uQ29tcG9zaXRlIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY3VzdG9tXCI7XG5cbmV4cG9ydCB7IERlZmF1bHRUaXRsZSB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3RpdGxlL2RlZmF1bHQtdGl0bGVcIjtcbmV4cG9ydCB7IFBvcHVwIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcG9wdXAvcG9wdXBcIjtcbmV4cG9ydCB7IExpc3QgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9saXN0L2xpc3RcIjtcbmV4cG9ydCB7IFRpdGxlQWN0aW9ucyB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnNcIjtcbmV4cG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnRcIjtcbmV4cG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuZXhwb3J0IHsgTG9nb0ltYWdlIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9sb2dvLWltYWdlXCI7XG5leHBvcnQgeyBTdXJ2ZXlIZWFkZXIgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL3N1cnZleS1oZWFkZXJcIjtcbmV4cG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb25cIjtcbmV4cG9ydCB7IE1hdHJpeFJvdyB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL21hdHJpeC9yb3dcIjtcbmV4cG9ydCB7IFNrZWxldG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc2tlbGV0b25cIjtcblxuZXhwb3J0IHsgU3VydmV5TG9jU3RyaW5nVmlld2VyIH0gZnJvbSBcIi4uL3JlYWN0L3N0cmluZy12aWV3ZXJcIjtcbmV4cG9ydCB7IFN1cnZleUxvY1N0cmluZ0VkaXRvciB9IGZyb20gXCIuLi9yZWFjdC9zdHJpbmctZWRpdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdXRpbHMvcmVzcG9uc2l2aXR5LW1hbmFnZXJcIjtcbmV4cG9ydCB7IHVud3JhcCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG4vL1VuY29tbWVudCB0byBpbmNsdWRlIHRoZSBcImRhdGVcIiBxdWVzdGlvbiB0eXBlLlxuLy9leHBvcnQge2RlZmF1bHQgYXMgU3VydmV5UXVlc3Rpb25EYXRlfSBmcm9tIFwiLi4vcGx1Z2lucy9yZWFjdC9yZWFjdHF1ZXN0aW9uZGF0ZVwiO1xuIiwiZXhwb3J0ICogZnJvbSBcIi4vcmVhY3QtdWktbW9kZWxcIjtcbi8vZXhwb3J0ICogZnJvbSBcIi4vY29yZS1leHBvcnRcIjsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB9IGZyb20gXCIuL2Jvb2xlYW5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQm9vbGVhbkNoZWNrYm94IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Cb29sZWFuIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICBjb25zdCBpdGVtQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1Dc3MoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2l0ZW1DbGFzc30gb25DbGljaz17dGhpcy5oYW5kbGVPbkNsaWNrfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17dGhpcy5jaGVja1JlZn1cbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgOiB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jb250cm9sfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlIHx8IGZhbHNlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3J9PlxuICAgICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLnN2Z0ljb24gP1xuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5zdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgPC9zdmc+OlxuICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbURlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgPHJlY3RcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy51bmNoZWNrZWRQYXRofVxuICAgICAgICAgICAgICAgICAgeD1cIjVcIlxuICAgICAgICAgICAgICAgICAgeT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTRcIlxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNoZWNrZWRQYXRofVxuICAgICAgICAgICAgICAgICAgcG9pbnRzPVwiMTksMTAgMTQsMTAgMTQsNSAxMCw1IDEwLDEwIDUsMTAgNSwxNCAxMCwxNCAxMCwxOSAxNCwxOSAxNCwxNCAxOSwxNCBcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbmRldGVybWluYXRlUGF0aH1cbiAgICAgICAgICAgICAgICAgIGQ9XCJNMjIsMEgyQzAuOSwwLDAsMC45LDAsMnYyMGMwLDEuMSwwLjksMiwyLDJoMjBjMS4xLDAsMi0wLjksMi0yVjJDMjQsMC45LDIzLjEsMCwyMiwweiBNMjEsMThMNiwzaDE1VjE4eiBNMyw2bDE1LDE1SDNWNnpcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2hlY2tcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi50aXRsZUxvY2F0aW9uID09PSBcImhpZGRlblwiICYmIChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyhmYWxzZSl9PlxuICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NEaXNwbGF5TGFiZWwpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXG4gIFwic3YtYm9vbGVhbi1jaGVja2JveFwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5DaGVja2JveCwgcHJvcHMpO1xuICB9XG4pO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJib29sZWFuXCIsXG4gIFwiY2hlY2tib3hcIixcbiAgXCJzdi1ib29sZWFuLWNoZWNrYm94XCJcbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQm9vbGVhbk1vZGVsLCBDc3NDbGFzc0J1aWxkZXIsIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJvdGVjdGVkIGNoZWNrUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2sgPSB0aGlzLmhhbmRsZU9uQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZU9uTGFiZWxDbGljayA9IHRoaXMuaGFuZGxlT25MYWJlbENsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPblN3aXRjaENsaWNrID0gdGhpcy5oYW5kbGVPblN3aXRjaENsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jaGVja1JlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkJvb2xlYW5Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQm9vbGVhbk1vZGVsO1xuICB9XG4gIC8qXG4gIHByaXZhdGUgZ2V0IGFsbG93Q2xpY2soKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNJbmRldGVybWluYXRlICYmICF0aGlzLmlzRGlzcGxheU1vZGU7XG4gIH1cbiAgKi9cbiAgcHJpdmF0ZSBkb0NoZWNrKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBoYW5kbGVPbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5kb0NoZWNrKGV2ZW50LnRhcmdldC5jaGVja2VkKTtcbiAgfVxuICBoYW5kbGVPbkNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uTGFiZWxDbGljayhldmVudCwgdHJ1ZSk7XG4gIH1cbiAgaGFuZGxlT25Td2l0Y2hDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vblN3aXRjaENsaWNrTW9kZWwoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9XG4gIGhhbmRsZU9uTGFiZWxDbGljayhldmVudDogYW55LCB2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMucXVlc3Rpb24ub25MYWJlbENsaWNrKGV2ZW50LCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybjtcbiAgICBjb25zdCBlbCA9IHRoaXMuY2hlY2tSZWYuY3VycmVudDtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLmluZGV0ZXJtaW5hdGUgPSB0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZTtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sID0gZWw7XG4gICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGl0ZW1DbGFzczogc3RyaW5nID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ3NzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9PlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25DbGlja30+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e3RoaXMuY2hlY2tSZWZ9XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgIDogdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY29udHJvbH1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICBjaGVja2VkPXt0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSB8fCBmYWxzZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyhmYWxzZSl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMuaGFuZGxlT25MYWJlbENsaWNrKGV2ZW50LCBmYWxzZSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTGFiZWxGYWxzZSl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnN3aXRjaH0gb25DbGljaz17dGhpcy5oYW5kbGVPblN3aXRjaENsaWNrfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zbGlkZXJ9PlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5pc0RldGVybWluYXRlZCAmJiBjc3NDbGFzc2VzLnNsaWRlclRleHQgP1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNsaWRlclRleHR9PnsgdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5nZXRDaGVja2VkTGFiZWwoKSkgfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyh0cnVlKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4gdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2soZXZlbnQsIHRydWUpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsVHJ1ZSl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYm9vbGVhblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Cb29sZWFuLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi4vcG9wdXAvcG9wdXBcIjtcclxuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFySXRlbSB9IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhckl0ZW1Ecm9wZG93biBleHRlbmRzIFN1cnZleUFjdGlvbkJhckl0ZW0ge1xyXG4gIHJlbmRlckJ1dHRvbkNvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBidXR0b25Db250ZW50ID0gc3VwZXIucmVuZGVyQnV0dG9uQ29udGVudCgpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPD5cclxuICAgICAgICB7YnV0dG9uQ29udGVudH1cclxuICAgICAgICA8UG9wdXAgbW9kZWw9e3RoaXMuaXRlbS5wb3B1cE1vZGVsfT48L1BvcHVwPlxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWFjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlBY3Rpb25CYXJJdGVtRHJvcGRvd24sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgQmFzZSwgQWN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vLi4vcmVhY3RTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IgfSBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvclwiO1xyXG5cclxuaW50ZXJmYWNlIElBY3Rpb25CYXJJdGVtUHJvcHMge1xyXG4gIGl0ZW06IEFjdGlvbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElBY3Rpb25CYXJJdGVtUHJvcHMsIGFueT4ge1xyXG4gIGdldCBpdGVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG5cclxuICByZW5kZXJFbGVtZW50KCkge1xyXG4gICAgLy9yZWZhY3RvclxyXG4gICAgY29uc3QgaXRlbUNsYXNzID0gdGhpcy5pdGVtLmdldEFjdGlvblJvb3RDc3MoKTtcclxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuaXRlbS5uZWVkU2VwYXJhdG9yID8gKFxyXG4gICAgICA8U3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yPjwvU3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yPlxyXG4gICAgKSA6IG51bGw7XHJcblxyXG4gICAgY29uc3QgaXRlbUNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcclxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2LWFjdGlvbi1iYXItaXRlbVwiLFxyXG4gICAgICB7XHJcbiAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtpdGVtQ2xhc3N9IGlkPXt0aGlzLml0ZW0uaWR9PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtYWN0aW9uX19jb250ZW50XCI+XHJcbiAgICAgICAgICB7c2VwYXJhdG9yfVxyXG4gICAgICAgICAge2l0ZW1Db21wb25lbnR9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFySXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxyXG4gIElBY3Rpb25CYXJJdGVtUHJvcHMsXHJcbiAgYW55XHJcbj4ge1xyXG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcclxuICB9XHJcblxyXG4gIHJlbmRlckVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gPD57dGhpcy5yZW5kZXJJbm5lckJ1dHRvbigpfTwvPjtcclxuICB9XHJcblxyXG4gIHJlbmRlclRleHQoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXRlbS5oYXNUaXRsZSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB0aXRsZUNsYXNzID0gdGhpcy5pdGVtLmdldEFjdGlvbkJhckl0ZW1UaXRsZUNzcygpO1xyXG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17dGl0bGVDbGFzc30+IHt0aGlzLml0ZW0udGl0bGV9PC9zcGFuPjtcclxuICB9XHJcblxyXG4gIHJlbmRlckJ1dHRvbkNvbnRlbnQoKSB7XHJcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJUZXh0KCk7XHJcbiAgICBjb25zdCBzdmdJY29uID0gISF0aGlzLml0ZW0uaWNvbk5hbWUgPyAoXHJcbiAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW0uY3NzQ2xhc3Nlcy5pdGVtSWNvbn1cclxuICAgICAgICBzaXplPXt0aGlzLml0ZW0uaWNvblNpemV9XHJcbiAgICAgICAgaWNvbk5hbWU9e3RoaXMuaXRlbS5pY29uTmFtZX1cclxuICAgICAgPjwvU3ZnSWNvbj5cclxuICAgICkgOiBudWxsO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPD5cclxuICAgICAgICB7c3ZnSWNvbn1cclxuICAgICAgICB7dGV4dH1cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVySW5uZXJCdXR0b24oKSB7XHJcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLml0ZW0uZ2V0QWN0aW9uQmFySXRlbUNzcygpO1xyXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLml0ZW0udG9vbHRpcCB8fCB0aGlzLml0ZW0udGl0bGU7XHJcbiAgICBjb25zdCBidXR0b25Db250ZW50ID0gdGhpcy5yZW5kZXJCdXR0b25Db250ZW50KCk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IHRoaXMuaXRlbS5kaXNhYmxlVGFiU3RvcCA/IC0xIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgYnV0dG9uID0gYXR0YWNoS2V5MmNsaWNrKFxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXRlbS5kaXNhYmxlZH1cclxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLml0ZW0uYWN0aW9uKHRoaXMuaXRlbSl9XHJcbiAgICAgICAgdGl0bGU9e3RpdGxlfVxyXG4gICAgICAgIHRhYkluZGV4PXt0YWJJbmRleH1cclxuICAgICAgPlxyXG4gICAgICAgIHtidXR0b25Db250ZW50fVxyXG4gICAgICA8L2J1dHRvbj4sIG51bGwsIHsgcHJvY2Vzc0VzYzogZmFsc2UgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJ1dHRvbjtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtYWN0aW9uLWJhci1pdGVtXCIsIChwcm9wcykgPT4ge1xyXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhckl0ZW0sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IGBzdi1hY3Rpb24tYmFyLXNlcGFyYXRvciAke3RoaXMucHJvcHMuY3NzQ2xhc3Nlc31gO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT48L2Rpdj47XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhclNlcGFyYXRvciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgQWN0aW9uLFxuICBBY3Rpb25Db250YWluZXJcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuLi8uLi8uLi9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lclwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1zZXBhcmF0b3JcIjtcblxuaW50ZXJmYWNlIElBY3Rpb25CYXJQcm9wcyB7XG4gIG1vZGVsOiBBY3Rpb25Db250YWluZXI8QWN0aW9uPjtcbiAgaGFuZGxlQ2xpY2s/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUFjdGlvbkJhclByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQWN0aW9uQmFyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBoYW5kbGVDbGljaygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oYW5kbGVDbGljayAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5oYW5kbGVDbGljayA6IHRydWU7XG4gIH1cblxuICBnZXQgbW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghdGhpcy5tb2RlbC5oYXNBY3Rpb25zKSByZXR1cm47XG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIHRoaXMubW9kZWwuaW5pdFJlc3BvbnNpdml0eU1hbmFnZXIoY29udGFpbmVyKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMubW9kZWwucmVzZXRSZXNwb25zaXZpdHlNYW5hZ2VyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBhbnkge1xuICAgIGlmICghdGhpcy5tb2RlbC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVySXRlbXMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmdldFJvb3RDc3MoKX1cbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDbGljayA/IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gOiB1bmRlZmluZWR9XG4gICAgICA+XG4gICAgICAgIHtpdGVtc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnMubWFwKFxuICAgICAgKGl0ZW06IEFjdGlvbiwgaXRlbUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8U3VydmV5QWN0aW9uIGl0ZW09e2l0ZW19IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvU3VydmV5QWN0aW9uPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1hY3Rpb24tYmFyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBTdXJ2ZXlBY3Rpb25CYXIsXG4gICAgKHByb3BzIGFzIGFueSkgYXMgSUFjdGlvbkJhclByb3BzXG4gICk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vLi4vcmVhY3RTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xyXG5cclxuaW50ZXJmYWNlIElMaXN0SXRlbVByb3BzIHtcclxuICBtb2RlbDogTGlzdE1vZGVsO1xyXG4gIGl0ZW06IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpc3RJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUxpc3RJdGVtUHJvcHMsIGFueT4ge1xyXG4gIGdldCBtb2RlbCgpOiBMaXN0TW9kZWwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XHJcbiAgfVxyXG4gIGdldCBpdGVtKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xyXG4gIH1cclxuICBoYW5kbGVLZXlkb3duID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRoaXMubW9kZWwub25LZXlEb3duKGV2ZW50KTtcclxuICB9O1xyXG4gIGdldFN0YXRlRWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGlmICghdGhpcy5pdGVtKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3R5bGUgPSB7XHJcbiAgICAgIHBhZGRpbmdMZWZ0OiB0aGlzLm1vZGVsLmdldEl0ZW1JbmRlbnQodGhpcy5pdGVtKSxcclxuICAgICAgZGlzcGxheTogdGhpcy5pdGVtLnZpc2libGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLml0ZW0udmlzaWJsZSA/IG51bGwgOiBcIm5vbmVcIixcclxuICAgIH07XHJcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLm1vZGVsLmdldEl0ZW1DbGFzcyh0aGlzLml0ZW0pO1xyXG4gICAgY29uc3QgY29udGVudCA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLml0ZW0uY29tcG9uZW50KSB7XHJcbiAgICAgIGNvbnN0IGljb24gPSB0aGlzLml0ZW0uaWNvbk5hbWUgPyAoXHJcbiAgICAgICAgPFN2Z0ljb25cclxuICAgICAgICAgIGtleT17MX1cclxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LWxpc3RfX2l0ZW0taWNvblwiXHJcbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfVxyXG4gICAgICAgICAgc2l6ZT17MjR9XHJcbiAgICAgICAgPjwvU3ZnSWNvbj5cclxuICAgICAgKSA6IG51bGw7XHJcbiAgICAgIGNvbnRlbnQucHVzaChpY29uKTtcclxuICAgICAgY29udGVudC5wdXNoKDxzcGFuIGtleT17Mn0+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnRlbnQucHVzaChSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQodGhpcy5pdGVtLmNvbXBvbmVudCwgeyBpdGVtOiB0aGlzLml0ZW0gfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXHJcbiAgICAgIDxsaVxyXG4gICAgICAgIHN0eWxlPXtzdHlsZX1cclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cclxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdEl0ZW0odGhpcy5pdGVtKTtcclxuICAgICAgICB9fVxyXG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQsIHRoaXMuaXRlbSl9XHJcbiAgICAgID5cclxuICAgICAgICB7Y29udGVudH1cclxuICAgICAgPC9saT5cclxuICAgICk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1saXN0LWl0ZW1cIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdEl0ZW0sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgSUFjdGlvbiwgTGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XHJcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSBcIi4vbGlzdC1pdGVtXCI7XHJcblxyXG5pbnRlcmZhY2UgSUxpc3RQcm9wcyB7XHJcbiAgbW9kZWw6IExpc3RNb2RlbDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJTGlzdFByb3BzLCBhbnk+IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBmaWx0ZXJlZFRleHQ6IHRoaXMubW9kZWwuZmlsdGVyZWRUZXh0IHx8IFwiXCJcclxuICAgIH07XHJcbiAgfVxyXG4gIGdldCBtb2RlbCgpOiBMaXN0TW9kZWwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XHJcbiAgfVxyXG4gIGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5tb2RlbC5vbktleURvd24oZXZlbnQpO1xyXG4gIH07XHJcbiAgZ2V0U3RhdGVFbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XHJcbiAgfVxyXG4gIHJlbmRlckVsZW1lbnQoKSB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVySXRlbXMoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtbGlzdF9fY29udGFpbmVyXCI+XHJcbiAgICAgICAge3RoaXMuc2VhcmNoRWxlbWVudENvbnRlbnQoKX1cclxuICAgICAgICA8dWxcclxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LWxpc3RcIlxyXG4gICAgICAgICAgb25Nb3VzZURvd249eyhlKSA9PiB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBvbktleURvd249e3RoaXMuaGFuZGxlS2V5ZG93bn1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7aXRlbXN9XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuICByZW5kZXJJdGVtcygpIHtcclxuICAgIGlmICghdGhpcy5tb2RlbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnM7XHJcbiAgICBpZiAoIWl0ZW1zKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbTogSUFjdGlvbiwgaXRlbUluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8TGlzdEl0ZW0gbW9kZWw9e3RoaXMubW9kZWx9IGl0ZW09e2l0ZW19IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvTGlzdEl0ZW0+XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEVsZW1lbnRDb250ZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsLm5lZWRGaWx0ZXIpIHJldHVybiBudWxsO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IG9uQ2hhbmdlID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbC5maWx0ZXJlZFRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1saXN0X19maWx0ZXJcIj5cclxuICAgICAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17XCJzdi1saXN0X19maWx0ZXItaWNvblwifVxyXG4gICAgICAgICAgICBpY29uTmFtZT17XCJpY29uLXNlYXJjaFwifVxyXG4gICAgICAgICAgICBzaXplPXtcImF1dG9cIn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvU3ZnSWNvbj5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2LWxpc3RfX2lucHV0XCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMubW9kZWwuZmlsdGVyZWRUZXh0UGxhY2Vob2xkZXJ9XHJcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmZpbHRlcmVkVGV4dH1cclxuICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxyXG4gICAgICAgICAgPjwvaW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxpc3RcIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdCwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uU2hvd0hpZGVDbGljayA9IHRoaXMuaGFuZGxlT25TaG93SGlkZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucm93O1xuICB9XG4gIGhhbmRsZU9uU2hvd0hpZGVDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5yb3cuc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0V4cGFuZGVkID0gdGhpcy5yb3cuaXNEZXRhaWxQYW5lbFNob3dpbmc7XG4gICAgdmFyIGFyaWFFeHBhbmRlZCA9IGlzRXhwYW5kZWQ7XG4gICAgdmFyIGFyaWFDb250cm9scyA9IGlzRXhwYW5kZWQgPyB0aGlzLnJvdy5kZXRhaWxQYW5lbElkIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVPblNob3dIaWRlQ2xpY2t9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEJ1dHRvbkNzcyh0aGlzLnJvdyl9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2FyaWFFeHBhbmRlZH1cbiAgICAgICAgYXJpYS1jb250cm9scz17YXJpYUNvbnRyb2xzfVxuICAgICAgPlxuICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEljb25Dc3ModGhpcy5yb3cpfVxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsSWNvbklkKHRoaXMucm93KX1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1kZXRhaWwtYnV0dG9uXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvbkRyYWd9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LWRyYWctZHJvcC1pY29uXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrID0gdGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnJvdztcbiAgfVxuICBoYW5kbGVPblJvd1JlbW92ZUNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbW92ZVJvd1VJKHRoaXMucm93KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHJlbW92ZVJvd1RleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY1JlbW92ZVJvd1RleHQpO1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRSZW1vdmVSb3dCdXR0b25Dc3MoKX1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgPlxuICAgICAgICB7cmVtb3ZlUm93VGV4dH1cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvblJlbW92ZX0gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LXJlbW92ZS1idXR0b25cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmludGVyZmFjZSBJTUF0cml4Um93UHJvcHMge1xuICBtb2RlbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93O1xuICBwYXJlbnRNYXRyaXg6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2U7XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhSb3cgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJTUF0cml4Um93UHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSU1BdHJpeFJvd1Byb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBtb2RlbCgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIGdldCBwYXJlbnRNYXRyaXgoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucGFyZW50TWF0cml4O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUG9pbnRlckRvd25IYW5kbGVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnBhcmVudE1hdHJpeC5vblBvaW50ZXJEb3duKGV2ZW50Lm5hdGl2ZUV2ZW50LCB0aGlzLm1vZGVsLnJvdyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgIHJldHVybiAoXG4gICAgICA8dHJcbiAgICAgICAgY2xhc3NOYW1lPXttb2RlbC5jbGFzc05hbWV9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtbWF0cml4LXJvdz17bW9kZWwucm93ICYmIG1vZGVsLnJvdy5pZH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMub25Qb2ludGVyRG93bkhhbmRsZXIoZXZlbnQpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXgtcm93XCIsXG4gIChwcm9wczogSU1BdHJpeFJvd1Byb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWF0cml4Um93LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgUG9wdXBNb2RlbCwgUG9wdXBCYXNlVmlld01vZGVsLCBjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsLCBDc3NDbGFzc0J1aWxkZXIsIHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmludGVyZmFjZSBJUG9wdXBQcm9wcyB7XG4gIG1vZGVsOiBQb3B1cE1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUG9wdXAgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJUG9wdXBQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgcG9wdXA6IFBvcHVwQmFzZVZpZXdNb2RlbDtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJUG9wdXBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMucG9wdXAgPSBuZXcgUG9wdXBCYXNlVmlld01vZGVsKHRoaXMucHJvcHMubW9kZWwpO1xuICAgIHRoaXMucG9wdXAuY3JlYXRlUG9wdXBDb250YWluZXIoKTtcbiAgfVxuICBnZXQgbW9kZWwoKTogUG9wdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucG9wdXAubW91bnRQb3B1cENvbnRhaW5lcigpO1xuICAgIHRoaXMucG9wdXAudGFyZ2V0RWxlbWVudCA9IHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQucGFyZW50RWxlbWVudDtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnBvcHVwLmRlc3Ryb3lQb3B1cENvbnRhaW5lcigpO1xuICB9XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IElQb3B1cFByb3BzKSB7XG4gICAgcmV0dXJuIG5leHRQcm9wcy5tb2RlbCAhPT0gdGhpcy5wb3B1cC5tb2RlbDtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5wb3B1cC5tb2RlbCA9IHRoaXMubW9kZWw7XG4gICAgY29uc3QgcG9wdXBDb250YWluZXIgPSBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICA8UG9wdXBDb250YWluZXIgbW9kZWw9e3RoaXMucG9wdXB9PjwvUG9wdXBDb250YWluZXI+LFxuICAgICAgdGhpcy5wb3B1cC5jb250YWluZXJcbiAgICApO1xuICAgIHJldHVybiA8ZGl2IHJlZj17dGhpcy5jb250YWluZXJSZWZ9Pntwb3B1cENvbnRhaW5lcn08L2Rpdj47XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcG9wdXBcIixcbiAgKHByb3BzOiBJUG9wdXBQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFBvcHVwLCBwcm9wcyk7XG4gIH1cbik7XG5cbmV4cG9ydCBjbGFzcyBQb3B1cENvbnRhaW5lciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHB1YmxpYyBwcmV2SXNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5tb2RlbC5vbktleURvd24oZXZlbnQpO1xuICB9O1xuICBnZXQgbW9kZWwoKTogUG9wdXBCYXNlVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNsaWNrSW5zaWRlID0gKGV2OiBhbnkpID0+IHtcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfTtcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYgKCF0aGlzLnByZXZJc1Zpc2libGUgJiYgdGhpcy5tb2RlbC5pc1Zpc2libGUpIHtcbiAgICAgIHRoaXMubW9kZWwudXBkYXRlT25TaG93aW5nKCk7XG4gICAgfVxuICAgIHRoaXMucHJldklzVmlzaWJsZSA9IHRoaXMubW9kZWwuaXNWaXNpYmxlO1xuICB9XG4gIHJlbmRlckNvbnRhaW5lcigpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5tb2RlbC5zaG93UG9pbnRlciA/IHRoaXMucmVuZGVyUG9pbnRlcigpIDogbnVsbDtcbiAgICBjb25zdCBoZWFkZXIgPSAhIXRoaXMubW9kZWwudGl0bGUgPyB0aGlzLnJlbmRlckhlYWRlcigpIDogbnVsbDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KCk7XG4gICAgY29uc3QgZm9vdGVyID0gdGhpcy5tb2RlbC5zaG93Rm9vdGVyID8gdGhpcy5yZW5kZXJGb290ZXIoKSA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2NvbnRhaW5lclwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgbGVmdDogdGhpcy5tb2RlbC5sZWZ0LFxuICAgICAgICAgIHRvcDogdGhpcy5tb2RlbC50b3AsXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGVsLmhlaWdodCxcbiAgICAgICAgfX1cbiAgICAgICAgb25DbGljaz17KGV2OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmNsaWNrSW5zaWRlKGV2KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9zaGFkb3dcIj5cbiAgICAgICAgICB7cG9pbnRlcn1cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50XCI+XG4gICAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7Zm9vdGVyfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUG9pbnRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiB0aGlzLm1vZGVsLnBvaW50ZXJUYXJnZXQubGVmdCxcbiAgICAgICAgICB0b3A6IHRoaXMubW9kZWwucG9pbnRlclRhcmdldC50b3AsXG4gICAgICAgIH19XG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19wb2ludGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgKTtcbiAgfVxuICByZW5kZXJIZWFkZXIoKSB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2hlYWRlclwiPnt0aGlzLm1vZGVsLnRpdGxlfTwvZGl2PjtcbiAgfVxuICByZW5kZXJDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnRDb21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLm1vZGVsLmNvbnRlbnRDb21wb25lbnROYW1lLFxuICAgICAgdGhpcy5tb2RlbC5jb250ZW50Q29tcG9uZW50RGF0YVxuICAgICk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2NvbnRlbnRcIj57Y29udGVudENvbXBvbmVudH08L2Rpdj47XG4gIH1cbiAgcmVuZGVyQ2FuY2VsQnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9XCJzdi1wb3B1cF9fZm9vdGVyLWl0ZW0gc3YtcG9wdXBfX2J1dHRvbiBzdi1wb3B1cF9fYnV0dG9uLS1jYW5jZWxcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jYW5jZWwoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMubW9kZWwuY2FuY2VsQnV0dG9uVGV4dH1cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyQXBwbHlCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19mb290ZXItaXRlbSBzdi1wb3B1cF9fYnV0dG9uIHN2LXBvcHVwX19idXR0b24tLWFwcGx5XCJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuYXBwbHkoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMubW9kZWwuYXBwbHlCdXR0b25UZXh0fVxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuICByZW5kZXJGb290ZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2Zvb3RlclwiPlxuICAgICAgICB7dGhpcy5yZW5kZXJDYW5jZWxCdXR0b24oKX1cbiAgICAgICAge3RoaXMubW9kZWwuaXNNb2RhbCA/IHRoaXMucmVuZGVyQXBwbHlCdXR0b24oKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnJlbmRlckNvbnRhaW5lcigpO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZChcInN2LXBvcHVwXCIpLmFwcGVuZCh0aGlzLm1vZGVsLnN0eWxlQ2xhc3MpLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBkaXNwbGF5OiB0aGlzLm1vZGVsLmlzVmlzaWJsZSA/IFwiXCIgOiBcIm5vbmVcIixcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgb25DbGljaz17KGU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuY2xpY2tPdXRzaWRlKCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleWRvd259XG4gICAgICA+XG4gICAgICAgIHtjb250YWluZXJ9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93TW9kYWwoXG4gIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgZGF0YTogYW55LFxuICBvbkFwcGx5OiAoKSA9PiBib29sZWFuLFxuICBvbkNhbmNlbD86ICgpID0+IHZvaWQsXG4gIGNzc0NsYXNzPzogc3RyaW5nLFxuICB0aXRsZT86IHN0cmluZyxcbiAgZGlzcGxheU1vZGU6IFwicG9wdXBcIiB8IFwib3ZlcmxheVwiID0gXCJwb3B1cFwiXG4pIHtcbiAgY29uc3QgcG9wdXBWaWV3TW9kZWw6IFBvcHVwQmFzZVZpZXdNb2RlbCA9IGNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWwoXG4gICAgY29tcG9uZW50TmFtZSxcbiAgICBkYXRhLFxuICAgIG9uQXBwbHksXG4gICAgb25DYW5jZWwsXG4gICAgKCkgPT4ge1xuICAgICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShwb3B1cFZpZXdNb2RlbC5jb250YWluZXIpO1xuICAgICAgcG9wdXBWaWV3TW9kZWwuZGVzdHJveVBvcHVwQ29udGFpbmVyKCk7XG4gICAgfSxcbiAgICB1bmRlZmluZWQsXG4gICAgY3NzQ2xhc3MsXG4gICAgdGl0bGUsXG4gICAgZGlzcGxheU1vZGVcbiAgKTtcbiAgUmVhY3RET00ucmVuZGVyKDxQb3B1cENvbnRhaW5lciBtb2RlbD17cG9wdXBWaWV3TW9kZWx9IC8+LCBwb3B1cFZpZXdNb2RlbC5jb250YWluZXIpO1xuXG4gIHBvcHVwVmlld01vZGVsLm1vZGVsLmlzVmlzaWJsZSA9IHRydWU7XG59XG5cbnNldHRpbmdzLnNob3dNb2RhbCA9IHNob3dNb2RhbDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTa2VsZXRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3Ytc2tlbGV0b24tZWxlbWVudFwiPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXNrZWxldG9uXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNrZWxldG9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5pbnRlcmZhY2UgSUxvZ29JbWFnZVByb3BzIHtcbiAgZGF0YTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvSW1hZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SUxvZ29JbWFnZVByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElMb2dvSW1hZ2VQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250ZW50OiBKU1guRWxlbWVudFtdID0gW107XG4gICAgY29udGVudC5wdXNoKFxuICAgICAgPGRpdiBrZXk9e1wibG9nby1pbWFnZVwifSBjbGFzc05hbWU9e3RoaXMuc3VydmV5LmxvZ29DbGFzc05hbWVzfT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5zdXJ2ZXkuY3NzLmxvZ29JbWFnZX1cbiAgICAgICAgICBzcmM9e3RoaXMuc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIGFsdD17dGhpcy5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnN1cnZleS5sb2dvV2lkdGggPyB0aGlzLnN1cnZleS5sb2dvV2lkdGggOiB1bmRlZmluZWR9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnN1cnZleS5sb2dvSGVpZ2h0ID8gdGhpcy5zdXJ2ZXkubG9nb0hlaWdodCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBzdHlsZT17eyBvYmplY3RGaXQ6IHRoaXMuc3VydmV5LmxvZ29GaXQgYXMgYW55IH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICAgIHJldHVybiA8Pntjb250ZW50fTwvPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxvZ28taW1hZ2VcIiwgKHByb3BzOiBJTG9nb0ltYWdlUHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9nb0ltYWdlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi4vdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleUhlYWRlclByb3BzIHtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJU3VydmV5SGVhZGVyUHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleUhlYWRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5jc3M7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlIZWFkZXIgPSB0aGlzO1xuICAgIHRoaXMuc3VydmV5LmxvY0xvZ28ub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IGNoYW5nZWQ6IHNlbGYuc3RhdGUuY2hhbmdlZCArIDEgfSk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnN1cnZleS5sb2NMb2dvLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkucmVuZGVyZWRIYXNUaXRsZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnN1cnZleS5sb2NEZXNjcmlwdGlvblxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5oZWFkZXJUZXh0fVxuICAgICAgICBzdHlsZT17eyBtYXhXaWR0aDogdGhpcy5zdXJ2ZXkudGl0bGVNYXhXaWR0aCB9fVxuICAgICAgPlxuICAgICAgICA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMuc3VydmV5fT48L1RpdGxlRWxlbWVudD5cbiAgICAgICAgPGg1IGNsYXNzTmFtZT17dGhpcy5jc3MuZGVzY3JpcHRpb259PntkZXNjcmlwdGlvbn08L2g1PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyTG9nb0ltYWdlKGlzUmVuZGVyOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghaXNSZW5kZXIpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWU6IHN0cmluZyA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgXCJsb2dvLWltYWdlXCJcbiAgICApO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGE6IGFueSA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgXCJsb2dvLWltYWdlXCJcbiAgICApO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZGF0YTogY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnJlbmRlcmVkSGFzSGVhZGVyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmhlYWRlcn0+XG4gICAgICAgIHt0aGlzLnJlbmRlckxvZ29JbWFnZSh0aGlzLnN1cnZleS5pc0xvZ29CZWZvcmUpfVxuICAgICAgICB7dGhpcy5yZW5kZXJUaXRsZSgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJMb2dvSW1hZ2UodGhpcy5zdXJ2ZXkuaXNMb2dvQWZ0ZXIpfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuaGVhZGVyQ2xvc2V9PjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdXJ2ZXktaGVhZGVyXCIsXG4gIChwcm9wczogSVN1cnZleUhlYWRlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5SGVhZGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgY3JlYXRlU3ZnIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdmdJY29uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHByaXZhdGUgc3ZnSWNvblJlZjogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3ZnSWNvblJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgdXBkYXRlU3ZnKCkge1xuICAgIGlmKHRoaXMucHJvcHMuaWNvbk5hbWUpXG4gICAgICBjcmVhdGVTdmcoXG4gICAgICAgIHRoaXMucHJvcHMuc2l6ZSxcbiAgICAgICAgdGhpcy5wcm9wcy53aWR0aCxcbiAgICAgICAgdGhpcy5wcm9wcy5oZWlnaHQsXG4gICAgICAgIHRoaXMucHJvcHMuaWNvbk5hbWUsXG4gICAgICAgIHRoaXMuc3ZnSWNvblJlZi5jdXJyZW50XG4gICAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZVN2ZygpO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfT5cbiAgICAgICAge1xuICAgICAgICAgIHRoaXMucHJvcHMuaWNvbk5hbWUgP1xuICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9e1wic3Ytc3ZnLWljb25cIn0gcmVmPXt0aGlzLnN2Z0ljb25SZWZ9IHJvbGU9XCJpbWdcIj48dXNlPjwvdXNlPjwvc3ZnPlxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3ZnKCk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1zdmctaWNvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3ZnSWNvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiwgRGVmYXVsdFRpdGxlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBUaXRsZUNvbnRlbnQgfSBmcm9tIFwiLi90aXRsZS1jb250ZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGl0bGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBpc05lZWRGb2N1cyA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgZWxlbWVudCgpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB2YXIgZXhwYW5kQ29sbGFwc2UgPSBudWxsO1xuICAgIGlmICh0aGlzLmVsZW1lbnQuaXNDb2xsYXBzZWQgfHwgdGhpcy5lbGVtZW50LmlzRXhwYW5kZWQpIHtcbiAgICAgIGNvbnN0IGljb25Dc3M6IHN0cmluZyA9IERlZmF1bHRUaXRsZU1vZGVsLmdldEljb25Dc3MoXG4gICAgICAgIHRoaXMuY3NzQ2xhc3NlcywgdGhpcy5lbGVtZW50LmlzQ29sbGFwc2VkKTtcblxuICAgICAgdmFyIGNoYW5nZUV4cGFuZGVkID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5lbGVtZW50O1xuXG4gICAgICAgIGlmICghcXVlc3Rpb24uaXNFeHBhbmRlZCAmJiAhcXVlc3Rpb24uaXNDb2xsYXBzZWQpIHJldHVybjtcblxuICAgICAgICBxdWVzdGlvbi50b2dnbGVTdGF0ZSgpO1xuICAgICAgICB0aGlzLmlzTmVlZEZvY3VzID0gcXVlc3Rpb24uaXNDb2xsYXBzZWQ7XG4gICAgICB9O1xuICAgICAgdmFyIHByZXNzRXhwYW5kID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSBjaGFuZ2VFeHBhbmRlZChldmVudCk7XG4gICAgICB9O1xuICAgICAgdmFyIGFyaWFFeHBhbmRlZCA9IHRoaXMuZWxlbWVudC5pc0V4cGFuZGVkO1xuICAgICAgdmFyIGFyaWFDb250cm9scyA9IHRoaXMuZWxlbWVudC5pc0V4cGFuZGVkXG4gICAgICAgID8gdGhpcy5lbGVtZW50LmNvbnRlbnRJZFxuICAgICAgICA6IG51bGw7XG4gICAgICBleHBhbmRDb2xsYXBzZSA9IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e2ljb25Dc3N9XG4gICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgb25LZXlVcD17cHJlc3NFeHBhbmR9XG4gICAgICAgICAgYXJpYS1leHBhbmRlZD17YXJpYUV4cGFuZGVkfVxuICAgICAgICAgIGFyaWEtY29udHJvbHM9e2FyaWFDb250cm9sc31cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8VGl0bGVDb250ZW50XG4gICAgICAgICAgZWxlbWVudD17dGhpcy5lbGVtZW50fVxuICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY3NzQ2xhc3Nlc31cbiAgICAgICAgPjwvVGl0bGVDb250ZW50PlxuICAgICAgICB7ZXhwYW5kQ29sbGFwc2V9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cblxuICBwcml2YXRlIGRvQWZ0ZXJSZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuaXNOZWVkRm9jdXMpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5jbGlja1RpdGxlRnVuY3Rpb24oKTtcbiAgICAgIHRoaXMuaXNOZWVkRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1kZWZhdWx0LXRpdGxlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChEZWZhdWx0VGl0bGUsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCwgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4uL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuaW1wb3J0IHsgVGl0bGVDb250ZW50IH0gZnJvbSBcIi4vdGl0bGUtY29udGVudFwiO1xuXG5leHBvcnQgY2xhc3MgVGl0bGVBY3Rpb25zIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0aXRsZUNvbnRlbnQ6IEpTWC5FbGVtZW50ID0gPFRpdGxlQ29udGVudCBlbGVtZW50PXt0aGlzLmVsZW1lbnR9IGNzc0NsYXNzZXM9e3RoaXMuY3NzQ2xhc3Nlc30+PC9UaXRsZUNvbnRlbnQ+O1xuICAgIGlmKCF0aGlzLmVsZW1lbnQuaGFzVGl0bGVBY3Rpb25zKSByZXR1cm4gdGl0bGVDb250ZW50O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LXRpdGxlLWFjdGlvbnNcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3YtdGl0bGUtYWN0aW9uc19fdGl0bGVcIj57dGl0bGVDb250ZW50fTwvc3Bhbj5cbiAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5lbGVtZW50LmdldFRpdGxlVG9vbGJhcigpfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwiZWxlbWVudFwiLFxuICBcInRpdGxlLWFjdGlvbnNcIixcbiAgXCJzdi10aXRsZS1hY3Rpb25zXCJcbik7XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtdGl0bGUtYWN0aW9uc1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGl0bGVBY3Rpb25zLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRDb3JlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IElUaXRsZU93bmVyIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBUaXRsZUNvbnRlbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNzc0NsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGVsZW1lbnQoKTogU3VydmV5RWxlbWVudENvcmUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0aXRsZU93bmVyID0gdGhpcy5lbGVtZW50LmdldFRpdGxlT3duZXIoKTtcbiAgICBpZighdGl0bGVPd25lcilcbiAgICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5lbGVtZW50LmxvY1RpdGxlKTtcbiAgICB2YXIgc3BhbnMgPSB0aGlzLnJlbmRlclRpdGxlU3BhbnModGl0bGVPd25lciwgdGhpcy5jc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gPD57c3BhbnN9PC8+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJUaXRsZVNwYW5zKGVsZW1lbnQ6IElUaXRsZU93bmVyLCBjc3NDbGFzc2VzOiBhbnkpOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIHZhciBnZXRTcGFjZVNwYW4gPSAoa2V5OiBhbnkpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuIGRhdGEta2V5PXtrZXl9IGtleT17a2V5fT5cbiAgICAgICAgICAmbmJzcDtcbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9O1xuICAgIHZhciBzcGFucyA9IFtdO1xuICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZVRleHRPblN0YXJ0KSB7XG4gICAgICBzcGFucy5wdXNoKHRoaXMucmVuZGVyUmVxdWlyZVRleHQoZWxlbWVudCwgY3NzQ2xhc3NlcykpO1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJyZXEtc3BcIikpO1xuICAgIH1cbiAgICB2YXIgcXVlc3Rpb25OdW1iZXIgPSBlbGVtZW50Lm5vO1xuICAgIGlmIChxdWVzdGlvbk51bWJlcikge1xuICAgICAgc3BhbnMucHVzaChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBkYXRhLWtleT17XCJxX251bVwifVxuICAgICAgICAgIGtleT17XCJxX251bVwifVxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5udW1iZXJ9XG4gICAgICAgICAgc3R5bGU9e3sgcG9zaXRpb246IFwic3RhdGljXCIgfX1cbiAgICAgICAgICBhcmlhLWhpZGRlbj17dHJ1ZX1cbiAgICAgICAgPlxuICAgICAgICAgIHtxdWVzdGlvbk51bWJlcn1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICAgIHNwYW5zLnB1c2goZ2V0U3BhY2VTcGFuKFwibnVtLXNwXCIpKTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlVGV4dEJlZm9yZVRpdGxlKSB7XG4gICAgICBzcGFucy5wdXNoKHRoaXMucmVuZGVyUmVxdWlyZVRleHQoZWxlbWVudCwgY3NzQ2xhc3NlcykpO1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJyZXEtc3BcIikpO1xuICAgIH1cbiAgICBzcGFucy5wdXNoKFxuICAgICAgU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKGVsZW1lbnQubG9jVGl0bGUsIG51bGwsIFwicV90aXRsZVwiKVxuICAgICk7XG4gICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGUpIHtcbiAgICAgIHNwYW5zLnB1c2goZ2V0U3BhY2VTcGFuKFwicmVxLXNwXCIpKTtcbiAgICAgIHNwYW5zLnB1c2godGhpcy5yZW5kZXJSZXF1aXJlVGV4dChlbGVtZW50LCBjc3NDbGFzc2VzKSk7XG4gICAgfVxuICAgIHJldHVybiBzcGFucztcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUmVxdWlyZVRleHQoXG4gICAgZWxlbWVudDogSVRpdGxlT3duZXIsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgZGF0YS1rZXk9e1wicmVxLXRleHRcIn1cbiAgICAgICAga2V5PXtcInJlcS10ZXh0XCJ9XG4gICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yZXF1aXJlZFRleHQgfHwgY3NzQ2xhc3Nlcy5wYW5lbC5yZXF1aXJlZFRleHR9XG4gICAgICAgIGFyaWEtaGlkZGVuPXt0cnVlfVxuICAgICAgPlxuICAgICAgICB7ZWxlbWVudC5yZXF1aXJlZFRleHR9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudENvcmUsIGRvS2V5MkNsaWNrVXAgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFRpdGxlQWN0aW9ucyB9IGZyb20gXCIuL3RpdGxlLWFjdGlvbnNcIjtcblxuZXhwb3J0IGNsYXNzIFRpdGxlRWxlbWVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGVsZW1lbnQoKTogU3VydmV5RWxlbWVudENvcmUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5oYXNUaXRsZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgdGl0bGVDb250ZW50ID0gKFxuICAgICAgPFRpdGxlQWN0aW9uc1xuICAgICAgICBlbGVtZW50PXtlbGVtZW50fVxuICAgICAgICBjc3NDbGFzc2VzPXtlbGVtZW50LmNzc0NsYXNzZXN9XG4gICAgICA+PC9UaXRsZUFjdGlvbnM+XG4gICAgKTtcbiAgICBsZXQgb25DbGljayA9IG51bGw7XG4gICAgbGV0IG9uS2V5VXAgPSBudWxsO1xuICAgIGlmIChlbGVtZW50Lmhhc1RpdGxlRXZlbnRzKSB7XG4gICAgICBvbkNsaWNrID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gZWxlbWVudC50b2dnbGVTdGF0ZSgpO1xuICAgICAgfTtcbiAgICAgIG9uS2V5VXAgPSAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgZG9LZXkyQ2xpY2tVcChldnQubmF0aXZlRXZlbnQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBDdXN0b21UYWcgPSBlbGVtZW50LnRpdGxlVGFnTmFtZSBhcyBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDdXN0b21UYWdcbiAgICAgICAgY2xhc3NOYW1lPXtlbGVtZW50LmNzc1RpdGxlfVxuICAgICAgICBpZD17ZWxlbWVudC5hcmlhVGl0bGVJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgICAgZWxlbWVudC5nZXRUeXBlKCkgPT09IFwicmFkaW9ncm91cFwiXG4gICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgIDogZWxlbWVudC5sb2NUaXRsZS5yZW5kZXJlZEh0bWxcbiAgICAgICAgfVxuICAgICAgICB0YWJJbmRleD17ZWxlbWVudC50aXRsZVRhYkluZGV4fVxuICAgICAgICBhcmlhLWV4cGFuZGVkPXtlbGVtZW50LnRpdGxlQXJpYUV4cGFuZGVkfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbktleVVwPXtvbktleVVwfVxuICAgICAgPlxuICAgICAgICB7dGl0bGVDb250ZW50fVxuICAgICAgPC9DdXN0b21UYWc+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDdXN0b21XaWRnZXQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJpdmF0ZSB3aWRnZXRSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy53aWRnZXRSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcml2YXRlIF9hZnRlclJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICBsZXQgZWwgPSB0aGlzLndpZGdldFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMucXVlc3Rpb25CYXNlLCBlbCk7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlKSB7XG4gICAgICB0aGlzLl9hZnRlclJlbmRlcigpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB2YXIgaXNEZWZhdWx0UmVuZGVyID1cbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0ICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZSAmJiAhaXNEZWZhdWx0UmVuZGVyKSB7XG4gICAgICB0aGlzLl9hZnRlclJlbmRlcigpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQpIHtcbiAgICAgIGxldCBlbCA9IHRoaXMud2lkZ2V0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lsbFVubW91bnQodGhpcy5xdWVzdGlvbkJhc2UsIGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgdGhpcy5xdWVzdGlvbkJhc2UudmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGN1c3RvbVdpZGdldCA9IHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldDtcblxuICAgIGlmIChjdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IHJlZj17dGhpcy53aWRnZXRSZWZ9PlxuICAgICAgICAgIHt0aGlzLmNyZWF0b3IuY3JlYXRlUXVlc3Rpb25FbGVtZW50KHRoaXMucXVlc3Rpb25CYXNlKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCB3aWRnZXQgPSBudWxsO1xuICAgIGlmIChjdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXIpIHtcbiAgICAgIHdpZGdldCA9IGN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlcih0aGlzLnF1ZXN0aW9uQmFzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlKSB7XG4gICAgICAgIGxldCBodG1sVmFsdWUgPSB7IF9faHRtbDogY3VzdG9tV2lkZ2V0Lmh0bWxUZW1wbGF0ZSB9O1xuICAgICAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMud2lkZ2V0UmVmfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDxkaXYgcmVmPXt0aGlzLndpZGdldFJlZn0+e3dpZGdldH08L2Rpdj47XG4gIH1cbn1cbiIsImltcG9ydCB7IEhhc2hUYWJsZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgUmVhY3RFbGVtZW50RmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFJlYWN0RWxlbWVudEZhY3RvcnkgPSBuZXcgUmVhY3RFbGVtZW50RmFjdG9yeSgpO1xuICBwcml2YXRlIGNyZWF0b3JIYXNoOiBIYXNoVGFibGU8KG5hbWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnQ+ID0ge307XG5cbiAgcHVibGljIHJlZ2lzdGVyRWxlbWVudChcbiAgICBlbGVtZW50VHlwZTogc3RyaW5nLFxuICAgIGVsZW1lbnRDcmVhdG9yOiAocHJvcHM6IGFueSkgPT4gSlNYLkVsZW1lbnRcbiAgKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV0gPSBlbGVtZW50Q3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xuICB9XG4gIHB1YmxpYyBpc0VsZW1lbnRSZWdpc3RlcmVkKGVsZW1lbnRUeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gISF0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlRWxlbWVudChlbGVtZW50VHlwZTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3JlYXRvciA9IHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICAgIGlmIChjcmVhdG9yID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjcmVhdG9yKHBhcmFtcyk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRmxvd1BhbmVsTW9kZWwsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbiB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUZsb3dQYW5lbCBleHRlbmRzIFN1cnZleVBhbmVsIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZsb3dQYW5lbCgpOiBGbG93UGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWwgYXMgRmxvd1BhbmVsTW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoISF0aGlzLmZsb3dQYW5lbCkge1xuICAgICAgdGhpcy5mbG93UGFuZWwub25DdXN0b21IdG1sUHJvZHVjaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZmxvd1BhbmVsLm9uR2V0SHRtbEZvclF1ZXN0aW9uID0gdGhpcy5yZW5kZXJRdWVzdGlvbjtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLmZsb3dQYW5lbCkge1xuICAgICAgdGhpcy5mbG93UGFuZWwub25DdXN0b21IdG1sUHJvZHVjaW5nID0gbnVsbDtcbiAgICAgIHRoaXMuZmxvd1BhbmVsLm9uR2V0SHRtbEZvclF1ZXN0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uKG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5mbG93UGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiPHF1ZXN0aW9uPlwiICsgcXVlc3Rpb24ubmFtZSArIFwiPC9xdWVzdGlvbj5cIjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUm93cygpOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIHJldHVybiBbdGhpcy5yZW5kZXJIdG1sKCldO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyZWRJbmRleDogbnVtYmVyO1xuICBwcml2YXRlIGdldE5vZGVJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcmVkSW5kZXgrKztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySHRtbCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmZsb3dQYW5lbCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgaHRtbCA9IFwiPHNwYW4+XCIgKyB0aGlzLmZsb3dQYW5lbC5wcm9kdWNlSHRtbCgpICsgXCI8L3NwYW4+XCI7XG4gICAgaWYgKCFET01QYXJzZXIpIHtcbiAgICAgIGNvbnN0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiBodG1sIH07XG4gICAgICByZXR1cm4gPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPjtcbiAgICB9XG4gICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCBcInRleHQveG1sXCIpO1xuICAgIHRoaXMucmVuZGVyZWRJbmRleCA9IDA7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyUGFyZW50Tm9kZShkb2MpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOb2Rlcyhkb21Ob2RlczogQXJyYXk8Tm9kZT4pOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21Ob2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZXMucHVzaCh0aGlzLnJlbmRlck5vZGUoZG9tTm9kZXNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG4gIHByaXZhdGUgZ2V0U3R5bGUobm9kZVR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0eWxlOiBhbnkgPSB7fTtcbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJiXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiaVwiKSB7XG4gICAgICBzdHlsZS5mb250U3R5bGUgPSBcIml0YWxpY1wiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ1XCIpIHtcbiAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uID0gXCJ1bmRlcmxpbmVcIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQYXJlbnROb2RlKG5vZGU6IE5vZGUpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnJlbmRlck5vZGVzKHRoaXMuZ2V0Q2hpbGREb21Ob2Rlcyhub2RlKSk7XG4gICAgaWYgKG5vZGVUeXBlID09PSBcImRpdlwiKVxuICAgICAgcmV0dXJuIDxkaXYga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfT57Y2hpbGRyZW59PC9kaXY+O1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9IHN0eWxlPXt0aGlzLmdldFN0eWxlKG5vZGVUeXBlKX0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOb2RlKG5vZGU6IE5vZGUpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmhhc1RleHRDaGlsZE5vZGVzT25seShub2RlKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUGFyZW50Tm9kZShub2RlKTtcbiAgICB9XG4gICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vZGVUeXBlID09PSBcInF1ZXN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5mbG93UGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobm9kZS50ZXh0Q29udGVudCk7XG4gICAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uQm9keSA9IChcbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uXG4gICAgICAgICAga2V5PXtxdWVzdGlvbi5uYW1lfVxuICAgICAgICAgIGVsZW1lbnQ9e3F1ZXN0aW9ufVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICBjc3M9e3RoaXMuY3NzfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICAgIHJldHVybiA8c3BhbiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9PntxdWVzdGlvbkJvZHl9PC9zcGFuPjtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlID09PSBcImRpdlwiKSB7XG4gICAgICByZXR1cm4gPGRpdiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9Pntub2RlLnRleHRDb250ZW50fTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0gc3R5bGU9e3RoaXMuZ2V0U3R5bGUobm9kZVR5cGUpfT5cbiAgICAgICAge25vZGUudGV4dENvbnRlbnR9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldENoaWxkRG9tTm9kZXMobm9kZTogTm9kZSk6IEFycmF5PE5vZGU+IHtcbiAgICBjb25zdCBkb21Ob2RlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkb21Ob2Rlcy5wdXNoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBkb21Ob2RlcztcbiAgfVxuICBwcml2YXRlIGhhc1RleHRDaGlsZE5vZGVzT25seShub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm9kZXMgPSBub2RlLmNoaWxkTm9kZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5vZGVzW2ldLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwiI3RleHRcIikgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChzdHlsZTogYW55LCByb3dzOiBKU1guRWxlbWVudFtdKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZi1wYW5lbFwiLCB7IHN0eWxlOiBzdHlsZSB9LCByb3dzKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcImZsb3dwYW5lbFwiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUZsb3dQYW5lbCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSW1hZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSW1hZ2UgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSW1hZ2VMaW5rLm9uQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gKCkgPT4geyB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkltYWdlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkltYWdlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnF1ZXN0aW9uLmltYWdlTGluaztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7IG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdCB9O1xuICAgIHZhciBjb250cm9sID0gbnVsbDtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1vZGUgPT09IFwiaW1hZ2VcIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbWFnZX1cbiAgICAgICAgICBzcmM9e3RoaXMucXVlc3Rpb24ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICBhbHQ9e3RoaXMucXVlc3Rpb24udGV4dCB8fCB0aGlzLnF1ZXN0aW9uLnRpdGxlfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIC8vYWx0PXtpdGVtLnRleHQgfHwgaXRlbS52YWx1ZX1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1vZGUgPT09IFwidmlkZW9cIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHZpZGVvIGNvbnRyb2xzXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmltYWdlfVxuICAgICAgICAgIHNyYz17dGhpcy5xdWVzdGlvbi5pbWFnZUxpbmt9XG4gICAgICAgICAgd2lkdGg9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRXaWR0aH1cbiAgICAgICAgICBoZWlnaHQ9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRIZWlnaHR9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICA+PC92aWRlbz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTW9kZSA9PT0gXCJ5b3V0dWJlXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxpZnJhbWVcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaW1hZ2V9XG4gICAgICAgICAgc3JjPXt0aGlzLnF1ZXN0aW9uLmltYWdlTGlua31cbiAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFdpZHRofVxuICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZEhlaWdodH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgID48L2lmcmFtZT5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3R9Pntjb250cm9sfTwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uSW1hZ2UsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbDtcbiAgfVxuICBoYW5kbGVPbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ubXVsdGlTZWxlY3QpIHtcbiAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gdGhpcy5xdWVzdGlvbi52YWx1ZS5jb25jYXQoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjdXJyVmFsdWUgPSB0aGlzLnF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICBjdXJyVmFsdWUuc3BsaWNlKHRoaXMucXVlc3Rpb24udmFsdWUuaW5kZXhPZihldmVudC50YXJnZXQudmFsdWUpLCAxKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IGN1cnJWYWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgPGxlZ2VuZFxuICAgICAgICAgIHJvbGU9XCJyYWRpb1wiXG4gICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9IC8+XG4gICAgICAgIHt0aGlzLmdldEl0ZW1zKGNzc0NsYXNzZXMpfVxuICAgICAgPC9maWVsZHNldD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJdGVtcyhjc3NDbGFzc2VzOiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlc1tpXTtcbiAgICAgIHZhciBrZXkgPSB0aGlzLnF1ZXN0aW9uLm5hbWUgKyBcIi1cIiArIGl0ZW0udmFsdWU7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMucmVuZGVySXRlbShrZXksIGl0ZW0sIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHsgbWFyZ2luTGVmdDogXCIzcHhcIiwgZGlzcGxheTogXCJpbmxpbmVcIiwgcG9zaXRpb246IFwic3RhdGljXCIgfTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXNDaGVja2VkID0gdGhpcy5xdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZChpdGVtKTtcbiAgICB2YXIgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSk7XG4gICAgdmFyIHRleHQgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnNob3dMYWJlbCkge1xuICAgICAgdGV4dCA9IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGV4dH1cbiAgICAgICAgPlxuICAgICAgICAgIHtpdGVtLnRleHQgPyBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KSA6IGl0ZW0udmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7IG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdCB9O1xuXG4gICAgdmFyIGNvbnRyb2wgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmNvbnRlbnRNb2RlID09PSBcImltYWdlXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxpbWdcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaW1hZ2V9XG4gICAgICAgICAgc3JjPXtpdGVtW1wiaW1hZ2VMaW5rXCJdfVxuICAgICAgICAgIHdpZHRoPXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlV2lkdGggfVxuICAgICAgICAgIGhlaWdodD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZUhlaWdodCB9XG4gICAgICAgICAgYWx0PXtpdGVtLmxvY1RleHQucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmNvbnRlbnRNb2RlID09PSBcInZpZGVvXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDx2aWRlbyBjb250cm9sc1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbWFnZX1cbiAgICAgICAgICBzcmM9e2l0ZW1bXCJpbWFnZUxpbmtcIl19XG4gICAgICAgICAgd2lkdGg9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCB9XG4gICAgICAgICAgaGVpZ2h0PXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlSGVpZ2h0IH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgID48L3ZpZGVvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSAoXG4gICAgICA8ZGl2IGtleT17a2V5fSBjbGFzc05hbWU9e2l0ZW1DbGFzc30+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubGFiZWx9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogXCJub25lXCIgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtQ29udHJvbH1cbiAgICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmdldEl0ZW1JZChpdGVtKX1cbiAgICAgICAgICAgIHR5cGU9e3RoaXMucXVlc3Rpb24uaW5wdXRUeXBlfVxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5xdWVzdGlvbk5hbWV9XG4gICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICAgICAgICB2YWx1ZT17aXRlbS52YWx1ZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5xdWVzdGlvbi5nZXRJdGVtRW5hYmxlZChpdGVtKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2VDb250YWluZXJ9PlxuICAgICAgICAgICAgICB7Y29udHJvbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge3RleHR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVkSXRlbSA9IG51bGw7XG4gICAgaWYoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImltYWdlcGlja2VyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsQmFzZSB9IGZyb20gXCIuL3BhbmVsLWJhc2VcIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFnZSBleHRlbmRzIFN1cnZleVBhbmVsQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFBhbmVsQmFzZSgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucGFnZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhZ2UoKTogUGFnZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEJhc2UgYXMgUGFnZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgdGl0bGUgPSB0aGlzLnJlbmRlclRpdGxlKCk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbigpO1xuICAgIHZhciByb3dzID0gdGhpcy5yZW5kZXJSb3dzKHRoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFnZS5yb290fT5cbiAgICAgICAge3RpdGxlfVxuICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICAgIHtyb3dzfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMucGFnZX0+PC9UaXRsZUVsZW1lbnQ+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnBhZ2UuX3Nob3dEZXNjcmlwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5wYWdlLmxvY0Rlc2NyaXB0aW9uKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFnZS5kZXNjcmlwdGlvbn0+e3RleHR9PC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJvd01vZGVsLCBQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVJvdyB9IGZyb20gXCIuL3Jvd1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFuZWxCYXNlIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJvdGVjdGVkIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEJhc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblVzZVByb3BJblN0YXRlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGtleSAhPT0gXCJlbGVtZW50c1wiICYmIHN1cGVyLmNhblVzZVByb3BJblN0YXRlKGtleSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldFN1cnZleSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldENzcygpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYW5lbEJhc2UoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50IHx8IHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcHMuc3VydmV5IHx8ICghIXRoaXMucGFuZWxCYXNlID8gdGhpcy5wYW5lbEJhc2Uuc3VydmV5IDogbnVsbClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZiAoXG4gICAgICAhIXByZXZQcm9wcy5wYWdlICYmXG4gICAgICAhIXRoaXMuc3VydmV5ICYmXG4gICAgICAhIXRoaXMuc3VydmV5LmN1cnJlbnRQYWdlICYmXG4gICAgICBwcmV2UHJvcHMucGFnZS5uYW1lID09PSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZS5uYW1lXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIHByaXZhdGUgZG9BZnRlclJlbmRlcigpIHtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIGlmICh0aGlzLnBhbmVsQmFzZS5pc1BhbmVsKSB7XG4gICAgICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwodGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbCwgZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnN1cnZleSAmJiAhIXRoaXMucGFuZWxCYXNlXG4gICAgICAmJiB0aGlzLnBhbmVsQmFzZS5pc1Zpc2libGUgJiYgISF0aGlzLnBhbmVsQmFzZS5zdXJ2ZXlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyZWRSb3dzQ2FjaGU6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgcmVuZGVyUm93cyhjc3M6IGFueSk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgaWYgKHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWUgIT09IFwicm93c1wiKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkUm93c0NhY2hlID0ge307XG4gICAgfVxuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIHF1ZXN0aW9uUm93cyA9IHRoaXMucGFuZWxCYXNlLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvblJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLnJlbmRlcmVkUm93c0NhY2hlW3F1ZXN0aW9uUm93c1tpXS5pZF07XG4gICAgICBpZiAoIXJvdykge1xuICAgICAgICByb3cgPSB0aGlzLmNyZWF0ZVJvdyhxdWVzdGlvblJvd3NbaV0sIGNzcyk7XG4gICAgICAgIHRoaXMucmVuZGVyZWRSb3dzQ2FjaGVbcXVlc3Rpb25Sb3dzW2ldLmlkXSA9IHJvdztcbiAgICAgIH1cbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cbiAgICByZXR1cm4gcm93cztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUm93KHJvdzogUXVlc3Rpb25Sb3dNb2RlbCwgY3NzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlSb3dcbiAgICAgICAga2V5PXtyb3cuaWR9XG4gICAgICAgIHJvdz17cm93fVxuICAgICAgICBzdXJ2ZXk9e3RoaXMuc3VydmV5fVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGNzcz17Y3NzfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRFcnJvcnMgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbEJhc2UgfSBmcm9tIFwiLi9wYW5lbC1iYXNlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsLCBkb0tleTJDbGlja1VwLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYW5lbCBleHRlbmRzIFN1cnZleVBhbmVsQmFzZSB7XG4gIHByaXZhdGUgaGFzQmVlbkV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHVibGljIGdldCBwYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5yZW5kZXJIZWFkZXIoKTtcbiAgICBjb25zdCBlcnJvcnMgPSAoXG4gICAgICA8U3VydmV5RWxlbWVudEVycm9yc1xuICAgICAgICBlbGVtZW50PXt0aGlzLnBhbmVsQmFzZX1cbiAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgLz5cbiAgICApO1xuICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgcGFkZGluZ0xlZnQ6IHRoaXMucGFuZWwuaW5uZXJQYWRkaW5nTGVmdCxcbiAgICAgIGRpc3BsYXk6ICF0aGlzLnBhbmVsLmlzQ29sbGFwc2VkID8gdW5kZWZpbmVkIDogXCJub25lXCIsXG4gICAgfTtcbiAgICBsZXQgY29udGVudDogSlNYLkVsZW1lbnQgPSBudWxsO1xuICAgIGlmICghdGhpcy5wYW5lbC5pc0NvbGxhcHNlZCB8fCB0aGlzLmhhc0JlZW5FeHBhbmRlZCkge1xuICAgICAgdGhpcy5oYXNCZWVuRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgY29uc3Qgcm93czogSlNYLkVsZW1lbnRbXSA9IHRoaXMucmVuZGVyUm93cyh0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzKTtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZTogc3RyaW5nID0gdGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcy5wYW5lbC5jb250ZW50O1xuICAgICAgY29udGVudCA9IHRoaXMucmVuZGVyQ29udGVudChzdHlsZSwgcm93cywgY2xhc3NOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17KHRoaXMucGFuZWxCYXNlIGFzIFBhbmVsTW9kZWwpLmdldENvbnRhaW5lckNzcygpfVxuICAgICAgICBvbkZvY3VzPXsodGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbCkuZm9jdXNJbn1cbiAgICAgID5cbiAgICAgICAge2hlYWRlcn1cbiAgICAgICAge2Vycm9yc31cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIoKSB7XG4gICAgaWYgKCF0aGlzLnBhbmVsQmFzZS5oYXNUaXRsZSAmJiAhdGhpcy5wYW5lbEJhc2UuaGFzRGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB0aXRsZTogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlclRpdGxlKCk7XG4gICAgY29uc3QgZGVzY3JpcHRpb246IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbigpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcy5wYW5lbC5oZWFkZXJ9PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBFbGVtZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnBhbmVsLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBFbGVtZW50KHN1cnZleSwgZWxlbWVudCwgdGhpcy5wYW5lbCk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoc3R5bGU6IGFueSwgcm93czogSlNYLkVsZW1lbnRbXSwgY2xhc3NOYW1lOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYm90dG9tOiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyQm90dG9tKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gaWQ9e3RoaXMucGFuZWwuY29udGVudElkfT5cbiAgICAgICAge3Jvd3N9XG4gICAgICAgIHtib3R0b219XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnBhbmVsQmFzZS50aXRsZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxUaXRsZUVsZW1lbnQgZWxlbWVudD17dGhpcy5wYW5lbEJhc2V9PjwvVGl0bGVFbGVtZW50PjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRGVzY3JpcHRpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5wYW5lbEJhc2UuZGVzY3JpcHRpb24pIHJldHVybiBudWxsO1xuICAgIHZhciB0ZXh0ID0gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKHRoaXMucGFuZWxCYXNlLmxvY0Rlc2NyaXB0aW9uKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucGFuZWwuY3NzQ2xhc3Nlcy5wYW5lbC5kZXNjcmlwdGlvbn0+e3RleHR9PC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQm90dG9tKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBmb290ZXJUb29sYmFyID0gdGhpcy5wYW5lbC5nZXRGb290ZXJUb29sYmFyKCk7XG4gICAgaWYgKCFmb290ZXJUb29sYmFyLmhhc0FjdGlvbnMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXtmb290ZXJUb29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj47XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJwYW5lbFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UGFuZWwsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiwgUGFnZU1vZGVsLCBTdXJ2ZXlFcnJvciwgU3R5bGVzTWFuYWdlciwgc3VydmV5Q3NzLCBIZWxwZXJzLCBkb0tleTJDbGlja1VwLCBTdmdSZWdpc3RyeSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhZ2UgfSBmcm9tIFwiLi9wYWdlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIgfSBmcm9tIFwiLi9zdHJpbmctdmlld2VyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlIZWFkZXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvc3VydmV5LWhlYWRlclwiO1xuaW1wb3J0IHsgU3VydmV5VGltZXJQYW5lbCB9IGZyb20gXCIuL3JlYWN0dGltZXJwYW5lbFwiO1xuaW1wb3J0IHsgU3VydmV5TmF2aWdhdGlvbiB9IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IGRvS2V5MkNsaWNrRG93biB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+XG4gIGltcGxlbWVudHMgSVN1cnZleUNyZWF0b3Ige1xuICBwcml2YXRlIHByZXZpb3VzSlNPTiA9IHt9O1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGNzc1R5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5Q3NzLmN1cnJlbnRUeXBlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IGNzc1R5cGUodmFsdWU6IHN0cmluZykge1xuICAgIFN0eWxlc01hbmFnZXIuYXBwbHlUaGVtZSh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHN1cnZleTogU3VydmV5TW9kZWw7XG5cbiAgcHJpdmF0ZSByb290Tm9kZUlkOiBzdHJpbmc7IC8vIHJvb3QgZG9tIG5vZGUgSUQgYXR0clxuICBwcml2YXRlIHJvb3ROb2RlQ2xhc3NOYW1lOiBzdHJpbmc7IC8vIHJvb3QgZG9tIG5vZGUgY2xhc3NcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlVHJ5QWdhaW5DbGljayA9IHRoaXMuaGFuZGxlVHJ5QWdhaW5DbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlU3VydmV5KHByb3BzKTtcbiAgICB0aGlzLnVwZGF0ZVN1cnZleShwcm9wcywge30pO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMucm9vdE5vZGVJZCA9IHByb3BzLmlkIHx8IG51bGw7XG4gICAgdGhpcy5yb290Tm9kZUNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSB8fCBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5O1xuICB9XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc01vZGVsSlNPTkNoYW5nZWQobmV4dFByb3BzKSkge1xuICAgICAgdGhpcy5jcmVhdGVTdXJ2ZXkobmV4dFByb3BzKTtcbiAgICAgIHRoaXMudXBkYXRlU3VydmV5KG5leHRQcm9wcywge30pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnVwZGF0ZVN1cnZleSh0aGlzLnByb3BzLCBwcmV2UHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKGVsICYmIHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5hZnRlclJlbmRlclN1cnZleShlbCk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zdGFydFRpbWVyRnJvbVVJKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zdG9wVGltZXIoKTtcbiAgICB9XG4gIH1cbiAgZG9SZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIFN2Z1JlZ2lzdHJ5LnJlbmRlckljb25zKCk7XG4gICAgbGV0IHJlbmRlclJlc3VsdDogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuc3VydmV5LnN0YXRlID09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgIHJlbmRlclJlc3VsdCA9IHRoaXMucmVuZGVyQ29tcGxldGVkKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN1cnZleS5zdGF0ZSA9PSBcImNvbXBsZXRlZGJlZm9yZVwiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckNvbXBsZXRlZEJlZm9yZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgIHJlbmRlclJlc3VsdCA9IHRoaXMucmVuZGVyTG9hZGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlclN1cnZleSgpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXI6IEpTWC5FbGVtZW50ID0gPFN1cnZleUhlYWRlciBzdXJ2ZXk9e3RoaXMuc3VydmV5fT48L1N1cnZleUhlYWRlcj47XG4gICAgY29uc3Qgb25TdWJtaXQgPSBmdW5jdGlvbiAoZXZlbnQ6IFJlYWN0LkZvcm1FdmVudDxIVE1MRm9ybUVsZW1lbnQ+KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG4gICAgbGV0IGN1c3RvbUhlYWRlcjogSlNYLkVsZW1lbnQgPSA8ZGl2IGNsYXNzTmFtZT1cInN2X2N1c3RvbV9oZWFkZXJcIiAvPjtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuaGFzTG9nbykge1xuICAgICAgY3VzdG9tSGVhZGVyID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucm9vdE5vZGVDbGFzc05hbWUgPyB0aGlzLnJvb3ROb2RlQ2xhc3NOYW1lICsgXCIgXCIgKyB0aGlzLmNzcy5yb290IDogdGhpcy5jc3Mucm9vdDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGlkPXt0aGlzLnJvb3ROb2RlSWR9IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2Nzc0NsYXNzZXN9PlxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17b25TdWJtaXR9PlxuICAgICAgICAgIHtjdXN0b21IZWFkZXJ9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAge3JlbmRlclJlc3VsdH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZG9SZW5kZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5jc3M7XG4gIH1cbiAgcHVibGljIHNldCBjc3ModmFsdWU6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmNzcyA9IHZhbHVlO1xuICB9XG4gIGhhbmRsZVRyeUFnYWluQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmRvQ29tcGxldGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29tcGxldGVkKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnNob3dDb21wbGV0ZWRQYWdlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY29tcGxldGVkU3RhdGUgPSBudWxsO1xuICAgIGlmICh0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSkge1xuICAgICAgdmFyIHRyeUFnYWluQnV0dG9uID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgdmFyIGJ0blRleHQgPSB0aGlzLnN1cnZleS5nZXRMb2NTdHJpbmcoXCJzYXZlQWdhaW5CdXR0b25cIik7XG4gICAgICAgIHRyeUFnYWluQnV0dG9uID0gKFxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT17XCJidXR0b25cIn1cbiAgICAgICAgICAgIHZhbHVlPXtidG5UZXh0fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5zYXZlRGF0YS5zYXZlQWdhaW5CdXR0b259XG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZVRyeUFnYWluQ2xpY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZhciBjc3MgPSB0aGlzLmNzcy5zYXZlRGF0YVt0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZV07XG4gICAgICBjb21wbGV0ZWRTdGF0ZSA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnNhdmVEYXRhLnJvb3R9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3N9PlxuICAgICAgICAgICAgPHNwYW4+e3RoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlVGV4dH08L3NwYW4+XG4gICAgICAgICAgICB7dHJ5QWdhaW5CdXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnN1cnZleS5jb21wbGV0ZWRDc3N9XG4gICAgICAgIC8+XG4gICAgICAgIHtjb21wbGV0ZWRTdGF0ZX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29tcGxldGVkQmVmb3JlKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuc3VydmV5LnByb2Nlc3NlZENvbXBsZXRlZEJlZm9yZUh0bWwgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSBjbGFzc05hbWU9e3RoaXMuY3NzLmJvZHl9IC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTG9hZGluZygpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRMb2FkaW5nSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IGNsYXNzTmFtZT17dGhpcy5jc3MuYm9keX0gLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJTdXJ2ZXkoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBhY3RpdmVQYWdlID0gdGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZVxuICAgICAgPyB0aGlzLnJlbmRlclBhZ2UodGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZSlcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBpc1N0YXJpbmcgPSB0aGlzLnN1cnZleS5pc1Nob3dTdGFydGluZ1BhZ2U7XG4gICAgdmFyIHBhZ2VJZCA9IHRoaXMuc3VydmV5LmFjdGl2ZVBhZ2UgPyB0aGlzLnN1cnZleS5hY3RpdmVQYWdlLmlkIDogXCJcIjtcbiAgICB2YXIgdG9wUHJvZ3Jlc3MgPSB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uVG9wICYmICFpc1N0YXJpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJQcm9ncmVzcyh0cnVlKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBib3R0b21Qcm9ncmVzcyA9IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Cb3R0b20gJiYgIWlzU3RhcmluZ1xuICAgICAgPyB0aGlzLnJlbmRlclByb2dyZXNzKGZhbHNlKVxuICAgICAgOiBudWxsO1xuICAgIGxldCBjbGFzc05hbWUgPSB0aGlzLnN1cnZleS5ib2R5Q3NzO1xuICAgIGlmICghYWN0aXZlUGFnZSkge1xuICAgICAgY2xhc3NOYW1lID0gdGhpcy5jc3MuYm9keUVtcHR5O1xuICAgICAgYWN0aXZlUGFnZSA9IHRoaXMucmVuZGVyRW1wdHlTdXJ2ZXkoKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9e3BhZ2VJZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICA+XG4gICAgICAgIHt0b3BQcm9ncmVzc31cbiAgICAgICAge3RoaXMucmVuZGVyVGltZXJQYW5lbChcInRvcFwiKX1cbiAgICAgICAge3RoaXMucmVuZGVyTmF2aWdhdGlvbihcInRvcFwiKX1cbiAgICAgICAge2FjdGl2ZVBhZ2V9XG4gICAgICAgIHt0aGlzLnJlbmRlclRpbWVyUGFuZWwoXCJib3R0b21cIil9XG4gICAgICAgIHtib3R0b21Qcm9ncmVzc31cbiAgICAgICAge3RoaXMucmVuZGVyTmF2aWdhdGlvbihcImJvdHRvbVwiKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpbWVyUGFuZWwobG9jYXRpb246IHN0cmluZykge1xuICAgIGlmKHRoaXMuc3VydmV5LmlzU2hvd1N0YXJ0aW5nUGFnZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGxvY2F0aW9uID09PSBcInRvcFwiICYmICF0aGlzLnN1cnZleS5pc1RpbWVyUGFuZWxTaG93aW5nT25Ub3ApXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBpZiAobG9jYXRpb24gPT09IFwiYm90dG9tXCIgJiYgIXRoaXMuc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPbkJvdHRvbSlcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8U3VydmV5VGltZXJQYW5lbCB0aW1lck1vZGVsPXt0aGlzLnN1cnZleS50aW1lck1vZGVsfSAvPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGFnZShwYWdlOiBQYWdlTW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlQYWdlXG4gICAgICAgIHN1cnZleT17dGhpcy5zdXJ2ZXl9XG4gICAgICAgIHBhZ2U9e3BhZ2V9XG4gICAgICAgIGNzcz17dGhpcy5jc3N9XG4gICAgICAgIGNyZWF0b3I9e3RoaXN9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclByb2dyZXNzKGlzVG9wOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcInN2LXByb2dyZXNzLVwiICsgdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICB7IHN1cnZleTogdGhpcy5zdXJ2ZXksIGNzczogdGhpcy5jc3MsIGlzVG9wOiBpc1RvcCB9XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTmF2aWdhdGlvbihuYXZQb3NpdGlvbjogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nICE9PSBcImJvdGhcIiAmJlxuICAgICAgKHRoaXMuc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nID09PSBcIm5vbmVcIiB8fFxuICAgICAgICB0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZyAhPT0gbmF2UG9zaXRpb24pXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIDxTdXJ2ZXlOYXZpZ2F0aW9uIHN1cnZleT17dGhpcy5zdXJ2ZXl9IGNzcz17dGhpcy5jc3N9IC8+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbXB0eVN1cnZleSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxzcGFuPnt0aGlzLnN1cnZleS5lbXB0eVN1cnZleVRleHR9PC9zcGFuPjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSBuZXdQcm9wcyA9IHt9O1xuICAgIHRoaXMucHJldmlvdXNKU09OID0ge307XG4gICAgaWYgKG5ld1Byb3BzKSB7XG4gICAgICBpZiAobmV3UHJvcHMubW9kZWwpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXdQcm9wcy5tb2RlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZXdQcm9wcy5qc29uKSB7XG4gICAgICAgICAgdGhpcy5wcmV2aW91c0pTT04gPSBuZXdQcm9wcy5qc29uO1xuICAgICAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleU1vZGVsKG5ld1Byb3BzLmpzb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleU1vZGVsKCk7XG4gICAgfVxuICAgIGlmICghIW5ld1Byb3BzLmNzcykge1xuICAgICAgdGhpcy5zdXJ2ZXkuY3NzID0gdGhpcy5jc3M7XG4gICAgfVxuICAgIHRoaXMuc2V0U3VydmV5RXZlbnRzKCk7XG4gIH1cbiAgcHJpdmF0ZSBpc01vZGVsSlNPTkNoYW5nZWQobmV3UHJvcHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghIW5ld1Byb3BzW1wibW9kZWxcIl0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN1cnZleSAhPT0gbmV3UHJvcHNbXCJtb2RlbFwiXTtcbiAgICB9XG4gICAgaWYgKCEhbmV3UHJvcHNbXCJqc29uXCJdKSB7XG4gICAgICByZXR1cm4gIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdQcm9wc1tcImpzb25cIl0sIHRoaXMucHJldmlvdXNKU09OKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVTdXJ2ZXkobmV3UHJvcHM6IGFueSwgb2xkUHJvcHM/OiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSByZXR1cm47XG4gICAgb2xkUHJvcHMgPSBvbGRQcm9wcyB8fCB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gbmV3UHJvcHMpIHtcbiAgICAgIGlmIChrZXkgPT0gXCJtb2RlbFwiIHx8IGtleSA9PSBcImNoaWxkcmVuXCIgfHwga2V5ID09IFwianNvblwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PSBcImNzc1wiKSB7XG4gICAgICAgIHRoaXMuc3VydmV5Lm1lcmdlVmFsdWVzKG5ld1Byb3BzLmNzcywgdGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkpO1xuICAgICAgICB0aGlzLnN1cnZleVtcInVwZGF0ZUVsZW1lbnRDc3NcIl0oKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAobmV3UHJvcHNba2V5XSA9PT0gb2xkUHJvcHNba2V5XSkgY29udGludWU7XG4gICAgICBpZiAoa2V5LmluZGV4T2YoXCJvblwiKSA9PSAwICYmIHRoaXMuc3VydmV5W2tleV0gJiYgdGhpcy5zdXJ2ZXlba2V5XS5hZGQpIHtcbiAgICAgICAgaWYgKCEhb2xkUHJvcHNba2V5XSkge1xuICAgICAgICAgIHRoaXMuc3VydmV5W2tleV0ucmVtb3ZlKG9sZFByb3BzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VydmV5W2tleV0uYWRkKG5ld1Byb3BzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXlba2V5XSA9IG5ld1Byb3BzW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzZXRTdXJ2ZXlFdmVudHMoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY291bnRlciA9XG4gICAgICAgICEhc2VsZi5zdGF0ZSAmJiAhIXNlbGYuc3RhdGUubW9kZWxDaGFuZ2VkID8gc2VsZi5zdGF0ZS5tb2RlbENoYW5nZWQgOiAwO1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IG1vZGVsQ2hhbmdlZDogY291bnRlciArIDEgfSk7XG4gICAgfTtcbiAgICB0aGlzLnN1cnZleS5vblBhcnRpYWxTZW5kLmFkZCgoc2VuZGVyKSA9PiB7XG4gICAgICBpZiAoISFzZWxmLnN0YXRlKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvL0lTdXJ2ZXlDcmVhdG9yXG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICFxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcgfHwgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpcyxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFcnJvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBlcnJvcjogU3VydmV5RXJyb3IsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBrZXk9e2tleX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pY29ufSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaXRlbX0+XG4gICAgICAgICAgPFN1cnZleUxvY1N0cmluZ1ZpZXdlciBsb2NTdHI9e2Vycm9yLmxvY1RleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXlcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleSwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hLZXkyY2xpY2soZWxlbWVudDogSlNYLkVsZW1lbnQsIHZpZXdNb2RlbD86IGFueSwgb3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSB9KTogSlNYLkVsZW1lbnQge1xuICBpZiAoISF2aWV3TW9kZWwgJiYgdmlld01vZGVsLmRpc2FibGVUYWJTdG9wKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7IHRhYkluZGV4OiAtMSB9KTtcbiAgfVxuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KFxuICAgIGVsZW1lbnQsXG4gICAge1xuICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICBvbktleVVwOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGRvS2V5MkNsaWNrVXAoZXZ0LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIG9uS2V5RG93bjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0Rvd24oZXZ0LCBvcHRpb25zKVxuICAgIH1cbiAgKTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbiBleHRlbmRzIFN1cnZleU5hdmlnYXRpb25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZVByZXZDbGljayA9IHRoaXMuaGFuZGxlUHJldkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVOZXh0Q2xpY2sgPSB0aGlzLmhhbmRsZU5leHRDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlTmV4dE1vdXNlRG93biA9IHRoaXMuaGFuZGxlTmV4dE1vdXNlRG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlTW91c2VEb3duID0gdGhpcy5oYW5kbGVNb3VzZURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUNvbXBsZXRlQ2xpY2sgPSB0aGlzLmhhbmRsZUNvbXBsZXRlQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZVByZXZpZXdDbGljayA9IHRoaXMuaGFuZGxlUHJldmlld0NsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVTdGFydENsaWNrID0gdGhpcy5oYW5kbGVTdGFydENsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgaGFuZGxlUHJldkNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnN1cnZleS5wcmV2UGFnZSgpO1xuICB9XG4gIGhhbmRsZU5leHRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkubmV4dFBhZ2VVSUNsaWNrKCk7XG4gIH1cbiAgaGFuZGxlTmV4dE1vdXNlRG93bihldmVudDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5Lm5leHRQYWdlTW91c2VEb3duKCk7XG4gIH1cbiAgaGFuZGxlTW91c2VEb3duKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubmF2aWdhdGlvbk1vdXNlRG93bigpO1xuICB9XG4gIGhhbmRsZUNvbXBsZXRlQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LmNvbXBsZXRlTGFzdFBhZ2UoKTtcbiAgfVxuICBoYW5kbGVQcmV2aWV3Q2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3VydmV5LnNob3dQcmV2aWV3KCk7XG4gIH1cbiAgaGFuZGxlU3RhcnRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkuc3RhcnQoKTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgdGhpcy5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgPT09IFwibm9uZVwiKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgdmFyIHByZXZCdXR0b24gPVxuICAgICAgdGhpcy5zdXJ2ZXkuaXNTaG93UHJldkJ1dHRvblxuICAgICAgICA/IHRoaXMucmVuZGVyQnV0dG9uKFxuICAgICAgICAgIHRoaXMuaGFuZGxlUHJldkNsaWNrLFxuICAgICAgICAgIHRoaXMuaGFuZGxlTW91c2VEb3duLFxuICAgICAgICAgIHRoaXMuc3VydmV5LnBhZ2VQcmV2VGV4dCxcbiAgICAgICAgICB0aGlzLnN1cnZleS5jc3NOYXZpZ2F0aW9uUHJldlxuICAgICAgICApXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgbmV4dEJ1dHRvbiA9XG4gICAgICB0aGlzLnN1cnZleS5pc1Nob3dOZXh0QnV0dG9uXG4gICAgICAgID8gdGhpcy5yZW5kZXJCdXR0b24oXG4gICAgICAgICAgdGhpcy5oYW5kbGVOZXh0Q2xpY2ssXG4gICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TW91c2VEb3duLFxuICAgICAgICAgIHRoaXMuc3VydmV5LnBhZ2VOZXh0VGV4dCxcbiAgICAgICAgICB0aGlzLnN1cnZleS5jc3NOYXZpZ2F0aW9uTmV4dFxuICAgICAgICApXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgY29tcGxldGVCdXR0b24gPVxuICAgICAgdGhpcy5zdXJ2ZXkuaXNDb21wbGV0ZUJ1dHRvblZpc2libGVcbiAgICAgICAgPyB0aGlzLnJlbmRlckJ1dHRvbihcbiAgICAgICAgICB0aGlzLmhhbmRsZUNvbXBsZXRlQ2xpY2ssXG4gICAgICAgICAgdGhpcy5oYW5kbGVNb3VzZURvd24sXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkuY29tcGxldGVUZXh0LFxuICAgICAgICAgIHRoaXMuc3VydmV5LmNzc05hdmlnYXRpb25Db21wbGV0ZVxuICAgICAgICApXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgcHJldmlld0J1dHRvbiA9XG4gICAgICB0aGlzLnN1cnZleS5pc1ByZXZpZXdCdXR0b25WaXNpYmxlXG4gICAgICAgID8gdGhpcy5yZW5kZXJCdXR0b24oXG4gICAgICAgICAgdGhpcy5oYW5kbGVQcmV2aWV3Q2xpY2ssXG4gICAgICAgICAgdGhpcy5oYW5kbGVNb3VzZURvd24sXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkucHJldmlld1RleHQsXG4gICAgICAgICAgdGhpcy5zdXJ2ZXkuY3NzTmF2aWdhdGlvblByZXZpZXdcbiAgICAgICAgKVxuICAgICAgICA6IG51bGw7XG4gICAgdmFyIHN0YXJ0QnV0dG9uID0gdGhpcy5zdXJ2ZXkuaXNTaG93U3RhcnRpbmdQYWdlXG4gICAgICA/IHRoaXMucmVuZGVyQnV0dG9uKFxuICAgICAgICB0aGlzLmhhbmRsZVN0YXJ0Q2xpY2ssXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuc3VydmV5LnN0YXJ0U3VydmV5VGV4dCxcbiAgICAgICAgdGhpcy5zdXJ2ZXkuY3NzTmF2aWdhdGlvblN0YXJ0XG4gICAgICApXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5mb290ZXJ9PlxuICAgICAgICB7c3RhcnRCdXR0b259XG4gICAgICAgIHtwcmV2QnV0dG9ufVxuICAgICAgICB7bmV4dEJ1dHRvbn1cbiAgICAgICAge3ByZXZpZXdCdXR0b259XG4gICAgICAgIHtjb21wbGV0ZUJ1dHRvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckJ1dHRvbihcbiAgICBjbGljazogYW55LFxuICAgIG1vdXNlRG93bjogYW55LFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBidG5DbGFzc05hbWU6IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHN0eWxlID0geyBtYXJnaW5SaWdodDogXCI1cHhcIiB9O1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXtidG5DbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uTW91c2VEb3duPXttb3VzZURvd259XG4gICAgICAgIG9uQ2xpY2s9e2NsaWNrfVxuICAgICAgICB2YWx1ZT17dGV4dH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbkJhc2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyB1cGRhdGU6IDAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlU3RhdGVGdW5jdGlvbjogYW55ID0gbnVsbDtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoeyB1cGRhdGU6IHNlbGYuc3RhdGUudXBkYXRlICsgMSB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLnN1cnZleS5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5hZGQodGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbikge1xuICAgICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQucmVtb3ZlKHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbik7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24gPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9ncmVzc01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB9IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb2dyZXNzIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNUb3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNUb3A7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBwcm9ncmVzcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5wcm9ncmVzc1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnByb2dyZXNzVGV4dDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZSA9IHRoaXMuaXNUb3AgPyB7fSA6IHsgbWFyZ2luVG9wOiBcIjFlbVwiIH07XG4gICAgdmFyIHByb2dyZXNzU3R5bGUgPSB7XG4gICAgICB3aWR0aDogdGhpcy5wcm9ncmVzcyArIFwiJVwiLFxuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc30gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXtwcm9ncmVzc1N0eWxlfVxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCYXJ9XG4gICAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICBhcmlhLXZhbHVlbWluPXswfVxuICAgICAgICAgIGFyaWEtdmFsdWVtYXg9ezEwMH1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9e1N1cnZleVByb2dyZXNzTW9kZWwuZ2V0UHJvZ3Jlc3NUZXh0SW5CYXJDc3ModGhpcy5jc3MpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnByb2dyZXNzVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17U3VydmV5UHJvZ3Jlc3NNb2RlbC5nZXRQcm9ncmVzc1RleHRVbmRlckJhckNzcyh0aGlzLmNzcyl9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5wcm9ncmVzc1RleHR9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1wYWdlc1wiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzLCBwcm9wcyk7XG59KTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtcHJvZ3Jlc3MtcXVlc3Rpb25zXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbn0pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcHJvZ3Jlc3MtY29ycmVjdFF1ZXN0aW9uc1wiLFxuICBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbiAgfVxuKTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXByb2dyZXNzLXJlcXVpcmVkUXVlc3Rpb25zXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCwgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB9IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb2dyZXNzQnV0dG9ucyBleHRlbmRzIFN1cnZleU5hdmlnYXRpb25CYXNlIHtcbiAgcHJpdmF0ZSBwcm9ncmVzc0J1dHRvbnNNb2RlbDogU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWw7XG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsZXI6IGFueSA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBsaXN0Q29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwgPSBuZXcgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwodGhpcy5zdXJ2ZXkpO1xuICAgIHRoaXMubGlzdENvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0U2Nyb2xsQnV0dG9uQ3NzKHRydWUpfVxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLmNsaWNrU2Nyb2xsQnV0dG9uKHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXJ9XG4gICAgICAgICAgICByZWY9e3RoaXMubGlzdENvbnRhaW5lclJlZn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0fT5cbiAgICAgICAgICAgICAge3RoaXMuZ2V0TGlzdEVsZW1lbnRzKCl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRTY3JvbGxCdXR0b25Dc3MoZmFsc2UpfVxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLmNsaWNrU2Nyb2xsQnV0dG9uKHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0TGlzdEVsZW1lbnRzKCk6IEpTWC5FbGVtZW50W10ge1xuICAgIGxldCBidXR0b25zOiBKU1guRWxlbWVudFtdID0gW107XG4gICAgdGhpcy5zdXJ2ZXkudmlzaWJsZVBhZ2VzLmZvckVhY2goKHBhZ2U6IFBhZ2VNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgYnV0dG9ucy5wdXNoKHRoaXMucmVuZGVyTGlzdEVsZW1lbnQocGFnZSwgaW5kZXgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYnV0dG9ucztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTGlzdEVsZW1lbnQocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8bGlcbiAgICAgICAga2V5PXtcImxpc3RlbGVtZW50XCIgKyBpbmRleH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KX1cbiAgICAgICAgb25DbGljaz17XG4gICAgICAgICAgdGhpcy5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KVxuICAgICAgICAgICAgPyAoKSA9PiB0aGlzLmNsaWNrTGlzdEVsZW1lbnQoaW5kZXgpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZX1cbiAgICAgICAgICB0aXRsZT17cGFnZS5uYXZpZ2F0aW9uVGl0bGUgfHwgcGFnZS5uYW1lfVxuICAgICAgICA+XG4gICAgICAgICAge3BhZ2UubmF2aWdhdGlvblRpdGxlIHx8IHBhZ2UubmFtZX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VEZXNjcmlwdGlvbn1cbiAgICAgICAgICB0aXRsZT17cGFnZS5uYXZpZ2F0aW9uRGVzY3JpcHRpb259XG4gICAgICAgID5cbiAgICAgICAgICB7cGFnZS5uYXZpZ2F0aW9uRGVzY3JpcHRpb259XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBpc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBjbGlja0xpc3RFbGVtZW50KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmNsaWNrTGlzdEVsZW1lbnQoaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTY3JvbGxCdXR0b25Dc3MoaXNMZWZ0U2Nyb2xsOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5nZXRTY3JvbGxCdXR0b25Dc3ModGhpcy5zdGF0ZS5oYXNTY3JvbGxlciwgaXNMZWZ0U2Nyb2xsKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xpY2tTY3JvbGxCdXR0b24oXG4gICAgbGlzdENvbnRhaW5lckVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgaXNMZWZ0U2Nyb2xsOiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGxpc3RDb250YWluZXJFbGVtZW50LnNjcm9sbExlZnQgKz0gKGlzTGVmdFNjcm9sbCA/IC0xIDogMSkgKiA3MDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc1Njcm9sbGVyOlxuICAgICAgICAgIHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LnNjcm9sbFdpZHRoID5cbiAgICAgICAgICB0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aCxcbiAgICAgIH0pO1xuICAgIH0sIDEwMCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZVNjcm9sbGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMudXBkYXRlU2Nyb2xsZXIpO1xuICAgICAgdGhpcy51cGRhdGVTY3JvbGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1idXR0b25zXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXkgfSBmcm9tIFwiLi9yZWFjdFN1cnZleVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlXaW5kb3cgZXh0ZW5kcyBTdXJ2ZXkge1xuICBwcm90ZWN0ZWQgd2luZG93OiBTdXJ2ZXlXaW5kb3dNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uRXhwYW5kZWQgPSB0aGlzLmhhbmRsZU9uRXhwYW5kZWQuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgcmV0dXJuIFt0aGlzLndpbmRvdywgdGhpcy53aW5kb3cuc3VydmV5XTtcbiAgfVxuICBoYW5kbGVPbkV4cGFuZGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLndpbmRvdy5jaGFuZ2VFeHBhbmRDb2xsYXBzZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmIHRoaXMud2luZG93LmlzU2hvd2luZztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVyV2luZG93SGVhZGVyKCk7XG4gICAgdmFyIGJvZHkgPSB0aGlzLndpbmRvdy5pc0V4cGFuZGVkID8gdGhpcy5yZW5kZXJCb2R5KCkgOiBudWxsO1xuICAgIGxldCBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICBib3R0b206IDMsXG4gICAgICByaWdodDogMTAsXG4gICAgICBtYXhXaWR0aDogXCI2MCVcIixcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy53aW5kb3cuY3NzUm9vdH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAge2hlYWRlcn1cbiAgICAgICAge2JvZHl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJXaW5kb3dIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZUEgPSB7IHdpZHRoOiBcIjEwMCVcIiwgY3Vyc29yOiBcInBvaW50ZXJcIiB9O1xuICAgIHZhciBzdHlsZVRpdGxlID0geyBwYWRkaW5nUmlnaHQ6IFwiMTBweFwiIH07XG4gICAgdmFyIGdseXBoQ2xhc3NOYW1lID0gdGhpcy53aW5kb3cuY3NzQnV0dG9uO1xuICAgIGdseXBoQ2xhc3NOYW1lID0gXCJnbHlwaGljb24gcHVsbC1yaWdodCBcIiArIGdseXBoQ2xhc3NOYW1lO1xuICAgIHZhciB0aXRsZSA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnN1cnZleS5sb2NUaXRsZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLndpbmRvdy5jc3NIZWFkZXJSb290fT5cbiAgICAgICAgPHNwYW4gb25DbGljaz17dGhpcy5oYW5kbGVPbkV4cGFuZGVkfSBzdHlsZT17c3R5bGVBfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMud2luZG93LmNzc0hlYWRlclRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+XG4gICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2x5cGhDbGFzc05hbWV9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMud2luZG93LmlzRXhwYW5kZWQgPyAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25FeHBhbmRlZH1cbiAgICAgICAgICAgIHN0eWxlPXt7IGZsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMud2luZG93LmNzc0hlYWRlclRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+XG4gICAgICAgICAgICAgIFhcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQm9keSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLndpbmRvdy5jc3NCb2R5fT57dGhpcy5kb1JlbmRlcigpfTwvZGl2PjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KG5ld1Byb3BzOiBhbnkpIHtcbiAgICBpZiAoIW5ld1Byb3BzKSBuZXdQcm9wcyA9IHt9O1xuICAgIHN1cGVyLmNyZWF0ZVN1cnZleShuZXdQcm9wcyk7XG4gICAgdGhpcy53aW5kb3cgPSBuZXcgU3VydmV5V2luZG93TW9kZWwobnVsbCwgdGhpcy5zdXJ2ZXkpO1xuICAgIGlmIChuZXdQcm9wcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0KSB7XG4gICAgICB0aGlzLndpbmRvdy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0ID0gbmV3UHJvcHMuY2xvc2VPbkNvbXBsZXRlVGltZW91dDtcbiAgICB9XG4gICAgdGhpcy53aW5kb3cuaXNTaG93aW5nID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMud2luZG93LmlzRXhwYW5kZWQgJiYgKG5ld1Byb3BzLmV4cGFuZGVkIHx8IG5ld1Byb3BzLmlzRXhwYW5kZWQpKVxuICAgICAgdGhpcy53aW5kb3cuZXhwYW5kKCk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgU3VydmV5RWxlbWVudCxcbiAgU3VydmV5RXJyb3IsXG4gIFF1ZXN0aW9uLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICBkb0tleTJDbGlja1VwLFxuICBUb29sdGlwTWFuYWdlcixcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUN1c3RvbVdpZGdldCB9IGZyb20gXCIuL2N1c3RvbS13aWRnZXRcIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yIHtcbiAgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50O1xuICByZW5kZXJFcnJvcihrZXk6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yLCBjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudDtcbiAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZztcbiAgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBpc05lZWRGb2N1cyA9IGZhbHNlO1xuICBwdWJsaWMgc3RhdGljIHJlbmRlclF1ZXN0aW9uQm9keShcbiAgICBjcmVhdG9yOiBJU3VydmV5Q3JlYXRvcixcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25cbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghcXVlc3Rpb24uaXNWaXNpYmxlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY3VzdG9tV2lkZ2V0ID0gcXVlc3Rpb24uY3VzdG9tV2lkZ2V0O1xuICAgIGlmICghY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gY3JlYXRvci5jcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gPFN1cnZleUN1c3RvbVdpZGdldCBjcmVhdG9yPXtjcmVhdG9yfSBxdWVzdGlvbj17cXVlc3Rpb259IC8+O1xuICB9XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghIXRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb25bXCJyZWFjdFwiXSA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbltcInJlYWN0XCJdID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBkb0FmdGVyUmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmlzTmVlZEZvY3VzKSB7XG4gICAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5jbGlja1RpdGxlRnVuY3Rpb24oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNOZWVkRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgICAgaWYgKGVsICYmIGVsLmdldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIikgIT09IFwiclwiKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIiwgXCJyXCIpO1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW5hbWVcIiwgdGhpcy5xdWVzdGlvbi5uYW1lKTtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24uYWZ0ZXJSZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmFmdGVyUmVuZGVyKGVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5jYW5SZW5kZXIoKSAmJlxuICAgICAgISF0aGlzLnF1ZXN0aW9uICYmXG4gICAgICAhIXRoaXMuY3JlYXRvciAmJlxuICAgICAgdGhpcy5xdWVzdGlvbi5pc1Zpc2libGVcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHZhciBjc3NDbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgcXVlc3Rpb25SZW5kZXIgPSB0aGlzLnJlbmRlclF1ZXN0aW9uKCk7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKHF1ZXN0aW9uKTtcbiAgICB2YXIgaGVhZGVyVG9wID0gcXVlc3Rpb24uaGFzVGl0bGVPbkxlZnRUb3AgPyBoZWFkZXIgOiBudWxsO1xuICAgIHZhciBoZWFkZXJCb3R0b20gPSBxdWVzdGlvbi5oYXNUaXRsZU9uQm90dG9tID8gaGVhZGVyIDogbnVsbDtcbiAgICB2YXIgZGVzY3JpcHRpb25VbmRlcklucHV0ID0gcXVlc3Rpb24uaGFzRGVzY3JpcHRpb25VbmRlcklucHV0XG4gICAgICA/IHRoaXMucmVuZGVyRGVzY3JpcHRpb24oY3NzQ2xhc3NlcywgdHJ1ZSlcbiAgICAgIDogbnVsbDtcblxuICAgIHZhciBjb21tZW50ID1cbiAgICAgIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLmhhc0NvbW1lbnQgPyB0aGlzLnJlbmRlckNvbW1lbnQoY3NzQ2xhc3NlcykgOiBudWxsO1xuICAgIGNvbnN0IGVycm9yc0Fib3ZlUXVlc3Rpb24gPVxuICAgICAgdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwICYmICF0aGlzLnF1ZXN0aW9uLmhhc1BhcmVudFxuICAgICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwiXCIpXG4gICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBlcnJvcnNUb29sdGlwID1cbiAgICAgIHRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcCAmJiB0aGlzLnF1ZXN0aW9uLmhhc1BhcmVudFxuICAgICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwidG9vbHRpcFwiKVxuICAgICAgICA6IG51bGw7XG5cbiAgICB2YXIgZXJyb3JzVG9wID1cbiAgICAgIHRoaXMuY3JlYXRvci5xdWVzdGlvbkVycm9yTG9jYXRpb24oKSA9PT0gXCJ0b3BcIiAmJlxuICAgICAgIXRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcFxuICAgICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwidG9wXCIpXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgZXJyb3JzQm90dG9tID1cbiAgICAgIHRoaXMuY3JlYXRvci5xdWVzdGlvbkVycm9yTG9jYXRpb24oKSA9PT0gXCJib3R0b21cIiAmJlxuICAgICAgIXRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcFxuICAgICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwiYm90dG9tXCIpXG4gICAgICAgIDogbnVsbDtcbiAgICBsZXQgcm9vdFN0eWxlOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBpZiAoISFxdWVzdGlvbi5wYWRkaW5nTGVmdCkgcm9vdFN0eWxlW1wicGFkZGluZ0xlZnRcIl0gPSBxdWVzdGlvbi5wYWRkaW5nTGVmdDtcbiAgICBpZiAoISFxdWVzdGlvbi5wYWRkaW5nUmlnaHQpXG4gICAgICByb290U3R5bGVbXCJwYWRkaW5nUmlnaHRcIl0gPSBxdWVzdGlvbi5wYWRkaW5nUmlnaHQ7XG5cbiAgICB2YXIgY29udGVudFN0eWxlID0ge1xuICAgICAgZGlzcGxheTogIXRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQgPyBcIlwiIDogXCJub25lXCIsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgICAgaWQ9e3F1ZXN0aW9uLmlkfVxuICAgICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uZ2V0Um9vdENzcygpfVxuICAgICAgICAgIHN0eWxlPXtyb290U3R5bGV9XG4gICAgICAgICAgcm9sZT17cXVlc3Rpb24uYXJpYVJvbGV9XG4gICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT17cXVlc3Rpb24uaGFzVGl0bGUgPyBxdWVzdGlvbi5hcmlhVGl0bGVJZCA6IG51bGx9XG4gICAgICAgID5cbiAgICAgICAgICB7ZXJyb3JzQWJvdmVRdWVzdGlvbn1cbiAgICAgICAgICB7aGVhZGVyVG9wfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzQ29udGVudH1cbiAgICAgICAgICAgIHN0eWxlPXtjb250ZW50U3R5bGV9XG4gICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZXJyb3JzVG9wfVxuICAgICAgICAgICAge3F1ZXN0aW9uUmVuZGVyfVxuICAgICAgICAgICAge2NvbW1lbnR9XG4gICAgICAgICAgICB7ZXJyb3JzQm90dG9tfVxuICAgICAgICAgICAge2Vycm9yc1Rvb2x0aXB9XG4gICAgICAgICAgICB7ZGVzY3JpcHRpb25VbmRlcklucHV0fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtoZWFkZXJCb3R0b219XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcEVsZW1lbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEVsZW1lbnQoc3VydmV5LCBlbGVtZW50LCB0aGlzLnF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbi5yZW5kZXJRdWVzdGlvbkJvZHkodGhpcy5jcmVhdG9yLCB0aGlzLnF1ZXN0aW9uKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRGVzY3JpcHRpb24oXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGlzVW5kZXJJbnB1dDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgZGVzY3JpcHRpb25UZXh0ID0gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKFxuICAgICAgdGhpcy5xdWVzdGlvbi5sb2NEZXNjcmlwdGlvblxuICAgICk7XG4gICAgdmFyIGNsYXNzTmFtZSA9IGlzVW5kZXJJbnB1dFxuICAgICAgPyBjc3NDbGFzc2VzLmRlc2NyaXB0aW9uVW5kZXJJbnB1dFxuICAgICAgOiBjc3NDbGFzc2VzLmRlc2NyaXB0aW9uO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT57ZGVzY3JpcHRpb25UZXh0fTwvZGl2PjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29tbWVudChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNvbW1lbnRUZXh0ID0gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKFxuICAgICAgdGhpcy5xdWVzdGlvbi5sb2NDb21tZW50VGV4dFxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9ybUdyb3VwfT5cbiAgICAgICAgPGRpdj57Y29tbWVudFRleHR9PC9kaXY+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtXG4gICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBvdGhlckNzcz17Y3NzQ2xhc3Nlcy5vdGhlcn1cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcihxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciB0aXRsZSA9IHF1ZXN0aW9uLmhhc1RpdGxlID8gKFxuICAgICAgPFRpdGxlRWxlbWVudCBlbGVtZW50PXtxdWVzdGlvbn0+PC9UaXRsZUVsZW1lbnQ+XG4gICAgKSA6IG51bGw7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gcXVlc3Rpb24uaGFzRGVzY3JpcHRpb25VbmRlclRpdGxlXG4gICAgICA/IHRoaXMucmVuZGVyRGVzY3JpcHRpb24oY3NzQ2xhc3NlcylcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3F1ZXN0aW9uLmNzc0hlYWRlcn0gb25DbGljaz17cXVlc3Rpb24uY2xpY2tUaXRsZUZ1bmN0aW9ufT5cbiAgICAgICAge3RpdGxlfVxuICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFcnJvcnMoY3NzQ2xhc3NlczogYW55LCBsb2NhdGlvbjogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5RWxlbWVudEVycm9yc1xuICAgICAgICBlbGVtZW50PXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGxvY2F0aW9uPXtsb2NhdGlvbn1cbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIn1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInF1ZXN0aW9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbiwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50RXJyb3JzIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpO1xuICAgIHRoaXMudG9vbHRpcFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pZDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGVsZW1lbnQoKTogU3VydmV5RWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgbG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NhdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldFN0YXRlKHByZXZTdGF0ZTogYW55ID0gbnVsbCkge1xuICAgIHJldHVybiAhcHJldlN0YXRlID8geyBlcnJvcjogMCB9IDogeyBlcnJvcjogcHJldlN0YXRlLmVycm9yICsgMSB9O1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5lbGVtZW50ICYmIHRoaXMuZWxlbWVudC5oYXNWaXNpYmxlRXJyb3JzO1xuICB9XG4gIHByaXZhdGUgdG9vbHRpcE1hbmFnZXI6IFRvb2x0aXBNYW5hZ2VyO1xuICBwcml2YXRlIHRvb2x0aXBSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGlmICh0aGlzLnByb3BzLmxvY2F0aW9uID09IFwidG9vbHRpcFwiKSB7XG4gICAgICBpZiAodGhpcy50b29sdGlwUmVmLmN1cnJlbnQgJiYgIXRoaXMudG9vbHRpcE1hbmFnZXIpIHtcbiAgICAgICAgdGhpcy50b29sdGlwTWFuYWdlciA9IG5ldyBUb29sdGlwTWFuYWdlcih0aGlzLnRvb2x0aXBSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgICBpZiAoISF0aGlzLnRvb2x0aXBNYW5hZ2VyICYmICF0aGlzLnRvb2x0aXBSZWYuY3VycmVudCkge1xuICAgICAgICB0aGlzLmRpc3Bvc2VUb29sdGlwTWFuYWdlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAoISF0aGlzLnRvb2x0aXBNYW5hZ2VyKSB7XG4gICAgICB0aGlzLmRpc3Bvc2VUb29sdGlwTWFuYWdlcigpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGRpc3Bvc2VUb29sdGlwTWFuYWdlcigpIHtcbiAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyLmRpc3Bvc2UoKTtcbiAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyID0gdW5kZWZpbmVkO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZWxlbWVudC5lcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gXCJlcnJvclwiICsgaTtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICB0aGlzLmNyZWF0b3IucmVuZGVyRXJyb3Ioa2V5LCB0aGlzLmVsZW1lbnQuZXJyb3JzW2ldLCB0aGlzLmNzc0NsYXNzZXMpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5lbGVtZW50LmNzc0Vycm9yfVxuICAgICAgICBpZD17dGhpcy5pZH1cbiAgICAgICAgcmVmPXt0aGlzLnRvb2x0aXBSZWZ9XG4gICAgICA+XG4gICAgICAgIHtlcnJvcnN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc1dyYXBwZWQgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBbaW5kZXg6IHN0cmluZ106IGFueTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXN0aW9uKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRRdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpdGVtQ3NzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbUNzcztcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIHByb3RlY3RlZCBkb0FmdGVyUmVuZGVyKCkge31cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFcnJvcnMoZXJyb3JzTG9jYXRpb246IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldFNob3dFcnJvcnMoKSA/IChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBsb2NhdGlvbj17ZXJyb3JzTG9jYXRpb259XG4gICAgICAvPlxuICAgICkgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgZXJyb3JzTG9jYXRpb24gPSB0aGlzLmNyZWF0b3IucXVlc3Rpb25FcnJvckxvY2F0aW9uKCk7XG4gICAgdmFyIGVycm9ycyA9IHRoaXMucmVuZGVyRXJyb3JzKGVycm9yc0xvY2F0aW9uKTtcbiAgICB2YXIgZXJyb3JzVG9wID1cbiAgICAgIGVycm9yc0xvY2F0aW9uID09PSBcInRvcFwiICYmICF0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXBcbiAgICAgICAgPyBlcnJvcnNcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBlcnJvcnNCb3R0b20gPVxuICAgICAgZXJyb3JzTG9jYXRpb24gPT09IFwiYm90dG9tXCIgJiYgIXRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcFxuICAgICAgICA/IGVycm9yc1xuICAgICAgICA6IG51bGw7XG4gICAgdmFyIHJlbmRlcmVkUXVlc3Rpb24gPSB0aGlzLnJlbmRlclF1ZXN0aW9uKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtlcnJvcnNUb3B9XG4gICAgICAgIHtyZW5kZXJlZFF1ZXN0aW9ufVxuICAgICAgICB7ZXJyb3JzQm90dG9tfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudDtcbiAgcHJvdGVjdGVkIGdldFNob3dFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNWaXNpYmxlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc0NlbGwgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc1dyYXBwZWQge1xuICBbaW5kZXg6IHN0cmluZ106IGFueTtcbiAgcHJvdGVjdGVkIGNlbGxSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MVGFibGVDZWxsRWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jZWxsUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbikge1xuICAgICAgdmFyIGVsID0gdGhpcy5jZWxsUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHN0eWxlID0gdGhpcy5nZXRDZWxsU3R5bGUoKTtcbiAgICB2YXIgZXJyb3JzVG9vbHRpcCA9IHRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcFxuICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhcInRvb2x0aXBcIilcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPHRkXG4gICAgICAgIHJlZj17dGhpcy5jZWxsUmVmfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuaXRlbUNzc31cbiAgICAgICAgZGF0YS1yZXNwb25zaXZlLXRpdGxlPXt0aGlzLmdldEhlYWRlclRleHQoKX1cbiAgICAgICAgdGl0bGU9e3RoaXMucHJvcHMuY2VsbC5nZXRUaXRsZSgpfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLndyYXBDZWxsKHRoaXMucHJvcHMuY2VsbCxcbiAgICAgICAgICAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLmNlbGxRdWVzdGlvbldyYXBwZXJ9PlxuICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJDb250ZW50KCl9XG4gICAgICAgICAgICAgIHtlcnJvcnNUb29sdGlwfVxuICAgICAgICAgICAgPC9kaXY+KVxuICAgICAgICApfVxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDZWxsU3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwQ2VsbChcbiAgICBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICAgIGVsZW1lbnQ6IEpTWC5FbGVtZW50XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIWNlbGwpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50O1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwTWF0cml4Q2VsbChzdXJ2ZXksIGVsZW1lbnQsIGNlbGwpO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG59XG4iLCJpbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCxcbiAgQnV0dG9uR3JvdXBJdGVtVmFsdWUsXG4gIEJ1dHRvbkdyb3VwSXRlbU1vZGVsLFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWw7XG4gIH1cbiAgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVySXRlbXMoKTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290fT57aXRlbXN9PC9kaXY+O1xuICB9XG4gIHJlbmRlckl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcChcbiAgICAgIChpdGVtOiBCdXR0b25Hcm91cEl0ZW1WYWx1ZSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxTdXJ2ZXlCdXR0b25Hcm91cEl0ZW1cbiAgICAgICAgICAgIGtleT17dGhpcy5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyBpbmRleH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICA+PC9TdXJ2ZXlCdXR0b25Hcm91cEl0ZW0+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5QnV0dG9uR3JvdXBJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHVibGljIG1vZGVsOiBCdXR0b25Hcm91cEl0ZW1Nb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IEJ1dHRvbkdyb3VwSXRlbU1vZGVsKHRoaXMucXVlc3Rpb24sIHRoaXMuaXRlbSwgdGhpcy5pbmRleCk7XG4gIH1cbiAgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgZ2V0IGl0ZW0oKTogQnV0dG9uR3JvdXBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBjb25zdCBpY29uID0gdGhpcy5yZW5kZXJJY29uKCk7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLnJlbmRlcklucHV0KCk7XG4gICAgY29uc3QgY2FwdGlvbiA9IHRoaXMucmVuZGVyQ2FwdGlvbigpO1xuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5sYWJlbH1cbiAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwuY2FwdGlvbi5yZW5kZXJlZEh0bWx9XG4gICAgICA+XG4gICAgICAgIHtpbnB1dH1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmRlY29yYXRvcn0+XG4gICAgICAgICAge2ljb259XG4gICAgICAgICAge2NhcHRpb259XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJY29uKCkge1xuICAgIGlmICghIXRoaXMubW9kZWwuaWNvbk5hbWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5pY29ufVxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLm1vZGVsLmljb25OYW1lfVxuICAgICAgICAgIHNpemU9e3RoaXMubW9kZWwuaWNvblNpemUgfHwgMjR9XG4gICAgICAgID48L1N2Z0ljb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmNvbnRyb2x9XG4gICAgICAgIGlkPXt0aGlzLm1vZGVsLmlkfVxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBuYW1lPXt0aGlzLm1vZGVsLm5hbWV9XG4gICAgICAgIGNoZWNrZWQ9e3RoaXMubW9kZWwuc2VsZWN0ZWR9XG4gICAgICAgIHZhbHVlPXt0aGlzLm1vZGVsLnZhbHVlfVxuICAgICAgICBkaXNhYmxlZD17dGhpcy5tb2RlbC5yZWFkT25seX1cbiAgICAgICAgb25DaGFuZ2U9eygpID0+IHtcbiAgICAgICAgICB0aGlzLm1vZGVsLm9uQ2hhbmdlKCk7XG4gICAgICAgIH19XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMubW9kZWwuaXNSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLm1vZGVsLmhhc0Vycm9yc31cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5tb2RlbC5kZXNjcmliZWRCeX1cbiAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2FwdGlvbigpIHtcbiAgICBpZiAoIXRoaXMubW9kZWwuc2hvd0NhcHRpb24pIHJldHVybiBudWxsO1xuICAgIGxldCBjYXB0aW9uID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tb2RlbC5jYXB0aW9uKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5jYXB0aW9ufVxuICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbH1cbiAgICAgID5cbiAgICAgICAge2NhcHRpb259XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYnV0dG9uZ3JvdXBcIiwgcHJvcHMgPT4ge1xuLy8gICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwLCBwcm9wcyk7XG4vLyB9KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLFxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCB9IGZyb20gXCIuLi9xdWVzdGlvbl9jaGVja2JveFwiO1xuaW1wb3J0IHsgQmFzZSwgSXRlbVZhbHVlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25DaGVja2JveCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25DaGVja2JveE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0U2VsZWN0QmFzZVJvb3RDc3MoKX1cbiAgICAgICAgcmVmPXsoZmllbGRzZXQpID0+ICh0aGlzLmNvbnRyb2wgPSBmaWVsZHNldCl9XG4gICAgICA+XG4gICAgICAgIDxsZWdlbmQgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT17XCJzdi1oaWRkZW5cIn0+PC9sZWdlbmQ+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IHRoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKVxuICAgICAgICAgIDogdGhpcy5nZXRJdGVtcyhjc3NDbGFzc2VzKX1cbiAgICAgIDwvZmllbGRzZXQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbVwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBjaSA9PT0gMCAmJiBpaSA9PT0gMCxcbiAgICAgICAgICBjc3NDbGFzc2VzLFxuICAgICAgICAgIFwiXCIgKyBjaSArIGlpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJdGVtcyhjc3NDbGFzc2VzOiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVuZGVyZWRJdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IFwiaXRlbVwiICsgaTtcbiAgICAgIHZhciByZW5kZXJlZEl0ZW0gPSB0aGlzLnJlbmRlckl0ZW0oa2V5LCBpdGVtLCBpID09IDAsIGNzc0NsYXNzZXMsIFwiXCIgKyBpKTtcbiAgICAgIHJlbmRlcmVkSXRlbXMucHVzaChyZW5kZXJlZEl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWRJdGVtcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IGFueSxcbiAgICBpc0ZpcnN0OiBib29sZWFuLFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpbmRleDogc3RyaW5nXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgIHRleHRTdHlsZT17dGhpcy50ZXh0U3R5bGV9XG4gICAgICAgIGlzRmlyc3Q9e2lzRmlyc3R9XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlZEl0ZW0gPSBudWxsO1xuICAgIGlmKCEhc3VydmV5KSB7XG4gICAgICB3cmFwcGVkSXRlbSA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUoc3VydmV5LCByZW5kZXJlZEl0ZW0sIHRoaXMucXVlc3Rpb24sIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlZEl0ZW0gPz8gcmVuZGVyZWRJdGVtO1xuICB9XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpdGVtKCk6IEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRleHRTdHlsZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzRmlyc3QoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0ZpcnN0O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcml2YXRlIGdldCBoaWRlQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oaWRlQ2FwdGlvbiA9PT0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXREYXRhLmlzTmVlZFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlclxuICAgICk7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHZhciBuZXdWYWx1ZSA9IFtdLmNvbmNhdCh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgfHwgW10pO1xuICAgIHZhciBpbmRleCA9IG5ld1ZhbHVlLmluZGV4T2YodGhpcy5pdGVtLnZhbHVlKTtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgbmV3VmFsdWUucHVzaCh0aGlzLml0ZW0udmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBuZXdWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBzZWxlY3RBbGxDaGFuZ2VkID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLnRvZ2dsZVNlbGVjdEFsbCgpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pdGVtICYmICEhdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGlzQ2hlY2tlZCA9IHRoaXMucXVlc3Rpb24uaXNJdGVtU2VsZWN0ZWQodGhpcy5pdGVtKTtcbiAgICB2YXIgb3RoZXJJdGVtID0gdGhpcy5xdWVzdGlvbi5pc090aGVySXRlbSh0aGlzLml0ZW0pICYmIGlzQ2hlY2tlZFxuICAgICAgPyB0aGlzLnJlbmRlck90aGVyKClcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJDaGVja2JveChpc0NoZWNrZWQsIG90aGVySXRlbSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbnB1dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7Ly97IG1hcmdpblJpZ2h0OiBcIjNweFwiIH07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNoZWNrYm94KFxuICAgIGlzQ2hlY2tlZDogYm9vbGVhbixcbiAgICBvdGhlckl0ZW06IEpTWC5FbGVtZW50XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaWQgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1JZCh0aGlzLml0ZW0pO1xuICAgIHZhciB0ZXh0ID0gIXRoaXMuaGlkZUNhcHRpb24gPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLml0ZW0ubG9jVGV4dCkgOiBcIlwiO1xuICAgIGxldCBpdGVtQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyh0aGlzLml0ZW0pO1xuICAgIGxldCBsYWJlbENsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRMYWJlbENsYXNzKHRoaXMuaXRlbSk7XG4gICAgdmFyIG9uSXRlbUNoYW5nZWQgPVxuICAgICAgdGhpcy5pdGVtID09IHRoaXMucXVlc3Rpb24uc2VsZWN0QWxsSXRlbVxuICAgICAgICA/IHRoaXMuc2VsZWN0QWxsQ2hhbmdlZFxuICAgICAgICA6IHRoaXMuaGFuZGxlT25DaGFuZ2U7XG5cbiAgICB2YXIgbG9jVGV4dDogYW55ID0gdGhpcy5pdGVtLmxvY1RleHQ7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2l0ZW1DbGFzc30gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtsYWJlbENsYXNzfSBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmdldEFyaWFJdGVtTGFiZWwodGhpcy5pdGVtKX0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbH1cbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5pdGVtLnZhbHVlfVxuICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuaW5wdXRTdHlsZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5xdWVzdGlvbi5nZXRJdGVtRW5hYmxlZCh0aGlzLml0ZW0pfVxuICAgICAgICAgICAgY2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgICAgICAgb25DaGFuZ2U9e29uSXRlbUNoYW5nZWR9XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvciA/XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAgICB7IHRoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb24gP1xuICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz46XG4gICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NwYW4+IDpcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWx9PlxuICAgICAgICAgICAge3RleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICB7b3RoZXJJdGVtfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyT3RoZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBvdGhlckNzcz17dGhpcy5jc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjaGVja2JveFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25DaGVja2JveCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCwgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNvbW1lbnRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ29tbWVudCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxRdWVzdGlvbkNvbW1lbnRNb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgb25CbHVyID0gIXRoaXMucXVlc3Rpb24uaXNJbnB1dFRleHRVcGRhdGUgPyB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudCA6IG51bGw7XG4gICAgdmFyIG9uSW5wdXQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaXNJbnB1dFRleHRVcGRhdGUpXG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGV2ZW50KTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5xdWVzdGlvbi51cGRhdGVFbGVtZW50KCk7XG4gICAgfTtcbiAgICB2YXIgcGxhY2VIb2xkZXIgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkUGxhY2VIb2xkZXI7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpKSB7XG4gICAgICByZXR1cm4gPGRpdj57dGhpcy5xdWVzdGlvbi52YWx1ZX08L2Rpdj47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNsYXNzTmFtZX1cbiAgICAgICAgZGlzYWJsZWQ9eyB0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB9XG4gICAgICAgIHJlYWRPbmx5PXsgdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfVxuICAgICAgICByZWY9eyh0ZXR4YXJlYSkgPT4gKHRoaXMuY29udHJvbCA9IHRldHhhcmVhKX1cbiAgICAgICAgbWF4TGVuZ3RoPXt0aGlzLnF1ZXN0aW9uLmdldE1heExlbmd0aCgpfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2VIb2xkZXJ9XG4gICAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgICBvbklucHV0PXtvbklucHV0fVxuICAgICAgICBvbktleURvd249eyhldmVudCkgPT4geyB0aGlzLnF1ZXN0aW9uLm9uS2V5RG93bihldmVudCk7IH19XG4gICAgICAgIGNvbHM9e3RoaXMucXVlc3Rpb24uY29sc31cbiAgICAgICAgcm93cz17dGhpcy5xdWVzdGlvbi5yb3dzfVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgIHN0eWxlPXt7IHJlc2l6ZTogdGhpcy5xdWVzdGlvbi5yZXNpemVTdHlsZSB9fVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgcXVlc3Rpb24gPSB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICAgIGxldCBjbGFzc05hbWUgPSB0aGlzLnByb3BzLm90aGVyQ3NzIHx8IHRoaXMuY3NzQ2xhc3Nlcy5jb21tZW50O1xuICAgIGxldCBoYW5kbGVPbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29tbWVudDogZXZlbnQudGFyZ2V0LnZhbHVlIH0pO1xuICAgIH07XG4gICAgbGV0IGNvbW1lbnQgPSAhIXRoaXMuc3RhdGUgJiYgdGhpcy5zdGF0ZS5jb21tZW50ICE9PSB1bmRlZmluZWQgPyB0aGlzLnN0YXRlLmNvbW1lbnQgOiBxdWVzdGlvbi5jb21tZW50IHx8IFwiXCI7XG4gICAgaWYgKHF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKSkge1xuICAgICAgcmV0dXJuIDxkaXY+e2NvbW1lbnR9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICB2YWx1ZT17Y29tbWVudH1cbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgbWF4TGVuZ3RoPXtxdWVzdGlvbi5nZXRPdGhlcnNNYXhMZW5ndGgoKX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3F1ZXN0aW9uLmNvbW1lbnRPck90aGVyUGxhY2VIb2xkZXJ9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgb25CbHVyPXsoZSkgPT4geyBxdWVzdGlvbi5vbkNvbW1lbnRDaGFuZ2UoZSk7IGhhbmRsZU9uQ2hhbmdlKGUpOyB9IH1cbiAgICAgICAgb25JbnB1dD17KGUpID0+IHF1ZXN0aW9uLm9uQ29tbWVudElucHV0KGUpfVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXtxdWVzdGlvbi5pc1JlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXtxdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9XG4gICAgICAgIHN0eWxlPXt7IHJlc2l6ZTogcXVlc3Rpb24ucmVzaXplU3R5bGUgfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY29tbWVudFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Db21tZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbiB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uQ3VzdG9tTW9kZWwsIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkN1c3RvbSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxRdWVzdGlvbkN1c3RvbU1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudHMoKTogQXJyYXk8QmFzZT4ge1xuICAgIGNvbnN0IHJlcyA9IHN1cGVyLmdldFN0YXRlRWxlbWVudHMoKTtcbiAgICBpZighIXRoaXMucXVlc3Rpb24uY29udGVudFF1ZXN0aW9uKSB7XG4gICAgICByZXMucHVzaCh0aGlzLnF1ZXN0aW9uLmNvbnRlbnRRdWVzdGlvbik7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbi5yZW5kZXJRdWVzdGlvbkJvZHkoXG4gICAgICB0aGlzLmNyZWF0b3IsXG4gICAgICB0aGlzLnF1ZXN0aW9uLmNvbnRlbnRRdWVzdGlvblxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ29tcG9zaXRlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb24uY29udGVudFBhbmVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVBhbmVsXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucXVlc3Rpb24uY29udGVudFBhbmVsfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIHN1cnZleT17dGhpcy5xdWVzdGlvbi5zdXJ2ZXl9XG4gICAgICA+PC9TdXJ2ZXlQYW5lbD5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjdXN0b21cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQ3VzdG9tLCBwcm9wcyk7XG59KTtcblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjb21wb3NpdGVcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQ29tcG9zaXRlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50LFxuICBSZWFjdFN1cnZleUVsZW1lbnQsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Ecm9wZG93bk1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFF1ZXN0aW9uRHJvcGRvd25Nb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb25CYXNlLnJlbmRlcmVkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlLnJlbmRlcmVkVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBjb21tZW50ID0gdGhpcy5xdWVzdGlvbi5pc090aGVyU2VsZWN0ZWRcbiAgICAgID8gdGhpcy5yZW5kZXJPdGhlcihjc3NDbGFzc2VzKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBzZWxlY3QgPSB0aGlzLnJlbmRlclNlbGVjdChjc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24ucmVuZGVyQ3NzUm9vdH0+XG4gICAgICAgIHtzZWxlY3R9XG4gICAgICAgIHtjb21tZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyU2VsZWN0KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlNb2RlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgPGRpdiBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCl9IGRpc2FibGVkPlxuICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5yZWFkT25seVRleHQgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNlbGVjdFdyYXBwZXJ9PlxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCl9XG4gICAgICAgICAgcmVmPXsoc2VsZWN0KSA9PiAodGhpcy5jb250cm9sID0gc2VsZWN0KX1cbiAgICAgICAgICBhdXRvQ29tcGxldGU9e3RoaXMucXVlc3Rpb24uYXV0b0NvbXBsZXRlfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgICBvbklucHV0PXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uaXNSZXF1aXJlZH1cbiAgICAgICAgPlxuICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5zaG93T3B0aW9uc0NhcHRpb24gPyAoPG9wdGlvbiB2YWx1ZT1cIlwiPnt0aGlzLnF1ZXN0aW9uLm9wdGlvbnNDYXB0aW9ufTwvb3B0aW9uPikgOiBudWxsIH1cbiAgICAgICAgICB7IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKChpdGVtLCBpKSA9PiA8U3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIGtleT17XCJpdGVtXCIgKyBpfSBpdGVtPXtpdGVtfS8+KSB9XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyT3RoZXIoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBvdGhlckNzcz17Y3NzQ2xhc3Nlcy5vdGhlcn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uT3B0aW9uSXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHByaXZhdGUgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPG9wdGlvbiB2YWx1ZT17dGhpcy5pdGVtLnZhbHVlfSBkaXNhYmxlZD17IXRoaXMuaXRlbS5pc0VuYWJsZWR9PlxuICAgICAgICB7dGhpcy5pdGVtLnRleHR9XG4gICAgICA8L29wdGlvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJkcm9wZG93blwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Ecm9wZG93biwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCYXNlLCBBcnJheUNoYW5nZXMsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRCYXNlPFAsIFM+IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFAsIFM+IHtcbiAgcHVibGljIHN0YXRpYyByZW5kZXJMb2NTdHJpbmcoXG4gICAgbG9jU3RyOiBMb2NhbGl6YWJsZVN0cmluZyxcbiAgICBzdHlsZTogYW55ID0gbnVsbCxcbiAgICBrZXk/OiBzdHJpbmdcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQobG9jU3RyLnJlbmRlckFzLCB7XG4gICAgICBsb2NTdHI6IGxvY1N0ci5yZW5kZXJBc0RhdGEsXG4gICAgICBzdHlsZTogc3R5bGUsXG4gICAgICBrZXk6IGtleSxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWU6IHN0cmluZztcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMudW5NYWtlQmFzZUVsZW1lbnRzUmVhY3QoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgdGhpcy5tYWtlQmFzZUVsZW1lbnRzUmVhY3QoKTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5jYW5SZW5kZXIoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydEVuZFJlbmRlcmluZygxKTtcbiAgICB2YXIgcmVzID0gdGhpcy5yZW5kZXJFbGVtZW50KCk7XG4gICAgdGhpcy5zdGFydEVuZFJlbmRlcmluZygtMSk7XG5cbiAgICByZXMgPSB0aGlzLndyYXBFbGVtZW50KHJlcyk7XG5cbiAgICB0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcEVsZW1lbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc1JlbmRlcmluZygpOiBib29sZWFuIHtcbiAgICB2YXIgc3RhdGVFbDogYW55ID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnQoKTtcbiAgICByZXR1cm4gISFzdGF0ZUVsICYmIHN0YXRlRWwucmVhY3RSZW5kZXJpbmcgPiAwO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlZEVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGVFbGVtZW50KCk7XG4gIH1cbiAgcHJpdmF0ZSBzdGFydEVuZFJlbmRlcmluZyh2YWw6IG51bWJlcikge1xuICAgIHZhciBzdGF0ZUVsOiBhbnkgPSB0aGlzLmdldFJlbmRlcmVkRWxlbWVudCgpO1xuICAgIGlmICghIXN0YXRlRWwpIHtcbiAgICAgIGlmICghc3RhdGVFbC5yZWFjdFJlbmRlcmluZykgc3RhdGVFbC5yZWFjdFJlbmRlcmluZyA9IDA7XG4gICAgICBzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nICs9IHZhbDtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjaGFuZ2VkU3RhdGVQcm9wTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBtYWtlQmFzZUVsZW1lbnRzUmVhY3QoKSB7XG4gICAgdmFyIGVscyA9IHRoaXMuZ2V0U3RhdGVFbGVtZW50cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLm1ha2VCYXNlRWxlbWVudFJlYWN0KGVsc1tpXSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgdW5NYWtlQmFzZUVsZW1lbnRzUmVhY3QoKSB7XG4gICAgdmFyIGVscyA9IHRoaXMuZ2V0U3RhdGVFbGVtZW50cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnVuTWFrZUJhc2VFbGVtZW50UmVhY3QoZWxzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudHMoKTogQXJyYXk8QmFzZT4ge1xuICAgIHZhciBlbCA9IHRoaXMuZ2V0U3RhdGVFbGVtZW50KCk7XG4gICAgcmV0dXJuICEhZWwgPyBbZWxdIDogW107XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzRGlzcGxheU1vZGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJvcHM6IGFueSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIHByb3BzLmlzRGlzcGxheU1vZGUgfHwgZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckxvY1N0cmluZyhcbiAgICBsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nLFxuICAgIHN0eWxlOiBhbnkgPSBudWxsXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKGxvY1N0ciwgc3R5bGUpO1xuICB9XG4gIHByaXZhdGUgbWFrZUJhc2VFbGVtZW50UmVhY3Qoc3RhdGVFbGVtZW50OiBCYXNlKSB7XG4gICAgaWYgKCFzdGF0ZUVsZW1lbnQpIHJldHVybjtcbiAgICBzdGF0ZUVsZW1lbnQuaXRlcmF0ZVByb3BlcnRpZXNIYXNoKChoYXNoLCBrZXkpID0+IHtcbiAgICAgIGlmICghdGhpcy5jYW5Vc2VQcm9wSW5TdGF0ZShrZXkpKSByZXR1cm47XG4gICAgICB2YXIgdmFsOiBhbnkgPSBoYXNoW2tleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHZhciB2YWw6IGFueSA9IHZhbDtcbiAgICAgICAgdmFsW1wib25BcnJheUNoYW5nZWRcIl0gPSAoYXJyYXlDaGFuZ2VzOiBBcnJheUNoYW5nZXMpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgICAgICAgIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZSA9IGtleTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgICB2YXIgbmV3U3RhdGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiBuZXdTdGF0ZSBhcyBTO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHN0YXRlRWxlbWVudC5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIgPSAoXG4gICAgICBoYXNoOiBhbnksXG4gICAgICBrZXk6IHN0cmluZyxcbiAgICAgIHZhbDogYW55XG4gICAgKSA9PiB7XG4gICAgICBpZiAoaGFzaFtrZXldICE9PSB2YWwpIHtcbiAgICAgICAgaGFzaFtrZXldID0gdmFsO1xuICAgICAgICBpZiAoIXRoaXMuY2FuVXNlUHJvcEluU3RhdGUoa2V5KSkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgICAgICB0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWUgPSBrZXk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICB2YXIgbmV3U3RhdGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICAgIG5ld1N0YXRlW2tleV0gPSB2YWw7XG4gICAgICAgICAgcmV0dXJuIG5ld1N0YXRlIGFzIFM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblVzZVByb3BJblN0YXRlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSB1bk1ha2VCYXNlRWxlbWVudFJlYWN0KHN0YXRlRWxlbWVudDogQmFzZSkge1xuICAgIGlmICghc3RhdGVFbGVtZW50KSByZXR1cm47XG4gICAgc3RhdGVFbGVtZW50LnNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlciA9IHVuZGVmaW5lZDtcbiAgICBzdGF0ZUVsZW1lbnQuaXRlcmF0ZVByb3BlcnRpZXNIYXNoKChoYXNoLCBrZXkpID0+IHtcbiAgICAgIHZhciB2YWw6IGFueSA9IGhhc2hba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFyIHZhbDogYW55ID0gdmFsO1xuICAgICAgICB2YWxbXCJvbkFycmF5Q2hhbmdlZFwiXSA9ICgpID0+IHt9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZWFjdFN1cnZleUVsZW1lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBjb250cm9sOiBIVE1MRWxlbWVudDtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbkJhc2UpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQodGhpcy5jb250cm9sKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gICAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5jb250cm9sO1xuICAgIGlmICghIWVsKSB7XG4gICAgICBpZiAoZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKSAhPT0gXCJyXCIpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiLCBcInJcIik7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbkJhc2UoKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlZEVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb25CYXNlICYmICEhdGhpcy5jcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBzaG91bGRDb21wb25lbnRVcGRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LndpZGdldEpzb24uaXNEZWZhdWx0UmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlclxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3BsYXlNb2RlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByb3BzOiBhbnkgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICBwcm9wcy5pc0Rpc3BsYXlNb2RlIHx8XG4gICAgICAoISF0aGlzLnF1ZXN0aW9uQmFzZSAmJiB0aGlzLnF1ZXN0aW9uQmFzZS5pc0lucHV0UmVhZE9ubHkpIHx8IGZhbHNlXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcENlbGwoXG4gICAgY2VsbDogYW55LFxuICAgIGVsZW1lbnQ6IEpTWC5FbGVtZW50LFxuICAgIHJlYXNvbjogc3RyaW5nXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uQmFzZVxuICAgICAgLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBNYXRyaXhDZWxsKHN1cnZleSwgZWxlbWVudCwgY2VsbCwgcmVhc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFxuICBUIGV4dGVuZHMgUXVlc3Rpb25cbj4gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudCA9IHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50LmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgVDtcbiAgfVxuICB1cGRhdGVWYWx1ZU9uRXZlbnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGlmIChcbiAgICAgICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModGhpcy5xdWVzdGlvbkJhc2UudmFsdWUsIGV2ZW50LnRhcmdldC52YWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgfVxuICB9O1xuICBwcm90ZWN0ZWQgc2V0VmFsdWVDb3JlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uQmFzZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZUNvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UudmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gICAgaWYgKCEhdGhpcy5jb250cm9sKSB7XG4gICAgICBjb25zdCBjb250cm9sOiBhbnkgPSB0aGlzLmNvbnRyb2w7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVDb3JlKCk7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgY29udHJvbC52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbCkpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FbXB0eU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FbXB0eSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkVtcHR5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkVtcHR5TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2IC8+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJlbXB0eVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25FbXB0eSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FeHByZXNzaW9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH1cbiAgICAgICAgcmVmPXsoZGl2KSA9PiAodGhpcy5jb250cm9sID0gZGl2KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uZm9ybWF0ZWRWYWx1ZX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImV4cHJlc3Npb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRXhwcmVzc2lvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0UXVlc3Rpb25GYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUmVhY3RRdWVzdGlvbkZhY3RvcnkgPSBuZXcgUmVhY3RRdWVzdGlvbkZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50PiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlclF1ZXN0aW9uKFxuICAgIHF1ZXN0aW9uVHlwZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ3JlYXRvcjogKG5hbWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnRcbiAgKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdID0gcXVlc3Rpb25DcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3JlYXRvciA9IHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXTtcbiAgICBpZiAoY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRvcihwYXJhbXMpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmlsZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRmlsZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25GaWxlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkZpbGVNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHByZXZpZXcgPSB0aGlzLnJlbmRlclByZXZpZXcoKTtcbiAgICB2YXIgZmlsZUlucHV0ID0gbnVsbDtcbiAgICB2YXIgZmlsZURlY29yYXRvciA9IHRoaXMucmVuZGVyRmlsZURlY29yYXRvcigpO1xuICAgIHZhciBjbGVhckJ1dHRvbiA9IHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oXG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uXG4gICAgKTtcbiAgICB2YXIgY2xlYXJCdXR0b25Cb3R0b20gPSB0aGlzLnJlbmRlckNsZWFyQnV0dG9uKFxuICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUJ1dHRvbkJvdHRvbVxuICAgICk7XG4gICAgZmlsZUlucHV0ID0gKFxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgY2xhc3NOYW1lPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVJbnB1dCA6IHRoaXMucXVlc3Rpb24uZ2V0UmVhZE9ubHlGaWxlQ3NzKCl9XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIHJlZj17aW5wdXQgPT4gKHRoaXMuY29udHJvbCA9IGlucHV0KX1cbiAgICAgICAgc3R5bGU9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB7fSA6IHsgY29sb3I6IFwidHJhbnNwYXJlbnRcIiB9fVxuICAgICAgICBvbkNoYW5nZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uZG9DaGFuZ2UgOiBudWxsfVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgIG11bHRpcGxlPXt0aGlzLnF1ZXN0aW9uLmFsbG93TXVsdGlwbGV9XG4gICAgICAgIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VGl0bGV9XG4gICAgICAgIGFjY2VwdD17dGhpcy5xdWVzdGlvbi5hY2NlcHRlZFR5cGVzfVxuICAgICAgLz5cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRGaWxlUm9vdENzcygpfT5cbiAgICAgICAge2ZpbGVJbnB1dH1cbiAgICAgICAge2ZpbGVEZWNvcmF0b3J9XG4gICAgICAgIHtjbGVhckJ1dHRvbn1cbiAgICAgICAge3ByZXZpZXd9XG4gICAgICAgIHtjbGVhckJ1dHRvbkJvdHRvbX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZpbGVEZWNvcmF0b3IoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uQ3NzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGxldCBub0ZpbGVDaG9zZW4gPSBudWxsO1xuICAgIGxldCBjaG9vc2VGaWxlID0gbnVsbDtcbiAgICBjaG9vc2VGaWxlID0gKFxuICAgICAgPGxhYmVsXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q2hvb3NlRmlsZUNzcygpfVxuICAgICAgICBodG1sRm9yPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn1cbiAgICAgID5cbiAgICAgICAgPHNwYW4+e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn08L3NwYW4+XG4gICAgICAgIHsoISF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hvb3NlRmlsZUljb25JZCkgPyA8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNob29zZUZpbGVJY29uSWR9IHNpemU9e1wiYXV0b1wifT48L1N2Z0ljb24+OiBudWxsIH1cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgIG5vRmlsZUNob3NlbiA9IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9GaWxlQ2hvc2VufT5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5ub0ZpbGVDaG9zZW5DYXB0aW9ufVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0RmlsZURlY29yYXRvckNzcygpfVxuICAgICAgICBvbkRyb3A9e3RoaXMucXVlc3Rpb24ub25Ecm9wfVxuICAgICAgICBvbkRyYWdPdmVyPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ092ZXJ9XG4gICAgICAgIG9uRHJhZ0xlYXZlPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ0xlYXZlfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kcmFnQXJlYVBsYWNlaG9sZGVyfT57dGhpcy5xdWVzdGlvbi5kcmFnQXJlYVBsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy53cmFwcGVyfT5cbiAgICAgICAgICB7Y2hvb3NlRmlsZX1cbiAgICAgICAgICB7bm9GaWxlQ2hvc2VufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNsZWFyQnV0dG9uKGNsYXNzTmFtZTogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAhdGhpcy5xdWVzdGlvbi5pc0VtcHR5KCkgJiYgIXRoaXMuaXNEaXNwbGF5TW9kZSAmJiAhIWNsYXNzTmFtZT8gKFxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17dGhpcy5xdWVzdGlvbi5kb0NsZWFufSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxzcGFuPnt0aGlzLnF1ZXN0aW9uLmNsZWFuQnV0dG9uQ2FwdGlvbn08L3NwYW4+XG4gICAgICAgIHsoISF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uSWNvbklkKSA/IDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uSWNvbklkfSBzaXplPXtcImF1dG9cIn0+PC9TdmdJY29uPjogbnVsbCB9XG4gICAgICA8L2J1dHRvbj5cbiAgICApIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRmlsZVNpZ24oY2xhc3NOYW1lOiBzdHJpbmcsIHZhbDogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCFjbGFzc05hbWUgfHwgIXZhbC5uYW1lKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj17dmFsLmNvbnRlbnR9XG4gICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5kb0Rvd25sb2FkRmlsZShldmVudCwgdmFsKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHRpdGxlPXt2YWwubmFtZX1cbiAgICAgICAgICBkb3dubG9hZD17dmFsLm5hbWV9XG4gICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IHRoaXMucXVlc3Rpb24uaW1hZ2VXaWR0aCArIFwicHhcIiB9fVxuICAgICAgICA+XG4gICAgICAgICAge3ZhbC5uYW1lfVxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQcmV2aWV3KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcHJldmlld3MgPSB0aGlzLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZS5tYXAoKHZhbCwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghdmFsKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAga2V5PXt0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4fVxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByZXZpZXd9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJGaWxlU2lnbih0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZVNpZ24sIHZhbCl9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZVdyYXBwZXJ9PlxuICAgICAgICAgICAge3RoaXMucXVlc3Rpb24uY2FuUHJldmlld0ltYWdlKHZhbCkgPyAoXG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9e3ZhbC5jb250ZW50fVxuICAgICAgICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5pbWFnZUhlaWdodH1cbiAgICAgICAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5pbWFnZVdpZHRofVxuICAgICAgICAgICAgICAgIGFsdD1cIkZpbGUgcHJldmlld1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKDxpbWcgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlfSBoZWlnaHQ9e3RoaXMucXVlc3Rpb24uaW1hZ2VIZWlnaHR9IHdpZHRoPXt0aGlzLnF1ZXN0aW9uLmltYWdlV2lkdGh9Lz4pfVxuICAgICAgICAgICAge3ZhbC5uYW1lICYmICF0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHkgPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZUJ1dHRvbn0gb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5kb1JlbW92ZUZpbGUodmFsKX0+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGV9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24ucmVtb3ZlRmlsZUNhcHRpb259XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIHsodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWQpID9cbiAgICAgICAgICAgICAgICAgICg8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWR9IHNpemU9e1wiYXV0b1wifSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnfT48L1N2Z0ljb24+KTogbnVsbCB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3RoaXMucmVuZGVyRmlsZVNpZ24odGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVTaWduQm90dG9tLCB2YWwpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVMaXN0fT57cHJldmlld3N9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJmaWxlXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25GaWxlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25IdG1sTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkh0bWwgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSHRtbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25IdG1sTW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSHRtbC5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7fTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgcmVhY3RPblN0ckNoYW5nZWQoKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NIdG1sLm9uQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjaGFuZ2VkOiAhIXRoaXMuc3RhdGUgJiYgdGhpcy5zdGF0ZS5jaGFuZ2VkID8gdGhpcy5zdGF0ZS5jaGFuZ2VkICsgMSA6IDEgfSk7XG4gICAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiAhIXRoaXMucXVlc3Rpb24uaHRtbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnF1ZXN0aW9uLmxvY0h0bWwucmVuZGVyZWRIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLnJlbmRlckNzc1Jvb3R9XG4gICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImh0bWxcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uSHRtbCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSxcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNYXRyaXhSb3dNb2RlbCwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgcm93c0NoYW5nZWQ6IDAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk1hdHJpeE1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7IHJvd3NDaGFuZ2VkOiBzZWxmLnN0YXRlLnJvd3NDaGFuZ2VkICsgMSB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgcm93c1RIID0gdGhpcy5xdWVzdGlvbi5oYXNSb3dzID8gPHRkIC8+IDogbnVsbDtcbiAgICB2YXIgaGVhZGVycyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICB2YXIga2V5ID0gXCJjb2x1bW5cIiArIGk7XG4gICAgICB2YXIgY29sdW1UZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoY29sdW1uLmxvY1RleHQpO1xuICAgICAgaGVhZGVycy5wdXNoKFxuICAgICAgICA8dGggY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbH0ga2V5PXtrZXl9PlxuICAgICAgICAgIHt0aGlzLndyYXBDZWxsKHsgY29sdW1uOiBjb2x1bW4gfSwgY29sdW1UZXh0LCBcImNvbHVtbi1oZWFkZXJcIil9XG4gICAgICAgIDwvdGg+XG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciB2aXNpYmxlUm93cyA9IHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHZpc2libGVSb3dzW2ldO1xuICAgICAgdmFyIGtleSA9IFwicm93LVwiICsgcm93Lm5hbWUgKyBcIi1cIiArIGk7XG4gICAgICByb3dzLnB1c2goXG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeFJvd1xuICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIHJvdz17cm93fVxuICAgICAgICAgIGlzRmlyc3Q9e2kgPT0gMH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIHZhciBoZWFkZXIgPSAhdGhpcy5xdWVzdGlvbi5zaG93SGVhZGVyID8gbnVsbCA6IChcbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIHtyb3dzVEh9XG4gICAgICAgICAge2hlYWRlcnN9XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnRhYmxlV3JhcHBlcn1cbiAgICAgICAgcmVmPXtyb290ID0+ICh0aGlzLmNvbnRyb2wgPSByb290KX1cbiAgICAgID5cbiAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgIDxsZWdlbmQgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9IC8+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAgICA8dGJvZHk+e3Jvd3N9PC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhSb3cgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeFJvd01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb3c7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucm93LnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5yb3cudmFsdWUgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKGNlbGw6IGFueSwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHJlYXNvbjogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCFyZWFzb24pIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50O1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwTWF0cml4Q2VsbChzdXJ2ZXksIGVsZW1lbnQsIGNlbGwsIHJlYXNvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvdztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHJvd3NURCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNSb3dzKSB7XG4gICAgICB2YXIgcm93VGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucm93LmxvY1RleHQpO1xuICAgICAgcm93c1REID0gPHRkIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGx9PlxuICAgICAgICB7dGhpcy53cmFwQ2VsbCh7IHJvdzogdGhpcy5yb3cgfSwgcm93VGV4dCwgXCJyb3ctaGVhZGVyXCIpfVxuICAgICAgPC90ZD47XG4gICAgfVxuXG4gICAgdmFyIHRkcyA9IHRoaXMuZ2VuZXJhdGVUZHMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHRyIGNsYXNzTmFtZT17dGhpcy5yb3cucm93Q2xhc3Nlc30+XG4gICAgICAgIHtyb3dzVER9XG4gICAgICAgIHt0ZHN9XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cblxuICBnZW5lcmF0ZVRkcygpIHtcbiAgICB2YXIgdGRzID0gW107XG4gICAgdmFyIHJvdyA9IHRoaXMucm93O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdGQgPSBudWxsO1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICB2YXIga2V5ID0gXCJ2YWx1ZVwiICsgaTtcblxuICAgICAgLy92YXIgaXNDaGVja2VkID0gSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHJvdy52YWx1ZSwgY29sdW1uLnZhbHVlKTtcbiAgICAgIHZhciBpc0NoZWNrZWQgPSByb3cudmFsdWUgPT0gY29sdW1uLnZhbHVlO1xuICAgICAgbGV0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHJvdywgY29sdW1uKTtcbiAgICAgIHZhciBpbnB1dElkID0gdGhpcy5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyByb3cubmFtZSArIFwiX1wiICsgaTtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmhhc0NlbGxUZXh0KSB7XG4gICAgICAgIHZhciBnZXRIYW5kbGVyID0gIXRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5XG4gICAgICAgICAgPyAoY29sdW1uOiBhbnkpID0+ICgpID0+IHRoaXMuY2VsbENsaWNrKHJvdywgY29sdW1uKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgdGQgPSAoXG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17aXRlbUNsYXNzfVxuICAgICAgICAgICAgb25DbGljaz17Z2V0SGFuZGxlciA/IGdldEhhbmRsZXIoY29sdW1uKSA6IG51bGx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKFxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmdldENlbGxEaXNwbGF5TG9jVGV4dChyb3cubmFtZSwgY29sdW1uKVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGQgPSAoXG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICAgIGRhdGEtcmVzcG9uc2l2ZS10aXRsZT17Y29sdW1uLmxvY1RleHQucmVuZGVyZWRIdG1sfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9PlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBpZD17aW5wdXRJZH1cbiAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1WYWx1ZX1cbiAgICAgICAgICAgICAgICBuYW1lPXtyb3cuZnVsbE5hbWV9XG4gICAgICAgICAgICAgICAgdmFsdWU9e2NvbHVtbi52YWx1ZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtjb2x1bW4ubG9jVGV4dC5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCItMTIgLTEyIDI0IDI0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIHI9XCI2XCIgY3g9XCIwXCIgY3k9XCIwXCIgLz5zXG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2lyY2xlXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2hlY2tcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiBcIm5vbmVcIiB9fT5cbiAgICAgICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRkcy5wdXNoKHRkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGRzO1xuICB9XG4gIGNlbGxDbGljayhyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICByb3cudmFsdWUgPSBjb2x1bW4udmFsdWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnJvdy52YWx1ZSB9KTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4XCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXgsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHJvcGRvd25cIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24sIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gIFF1ZXN0aW9uXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fcmFkaW9ncm91cFwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IE1hdHJpeFJvdyB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWF0cml4L3Jvd1wiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2UgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2U7XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdGF0ZShwcmV2U3RhdGU6IGFueSA9IG51bGwpIHtcbiAgICByZXR1cm4geyByb3dDb3VudGVyOiAhcHJldlN0YXRlID8gMCA6IHByZXZTdGF0ZS5yb3dDb3VudGVyICsgMSB9O1xuICB9XG4gIHByaXZhdGUgdXBkYXRlU3RhdGVPbkNhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLmdldFN0YXRlKHRoaXMuc3RhdGUpKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlT25DYWxsYmFjaygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5vblJlbmRlcmVkVGFibGVSZXNldENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnJlbmRlcmVkUm93c0NoYW5nZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlT25DYWxsYmFjaygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnJlbmRlcmVkUm93c0NoYW5nZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5xdWVzdGlvbi5vblJlbmRlcmVkVGFibGVSZXNldENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yZW5kZXJlZFJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnJlbmRlclRhYmxlRGl2KCk7XG4gIH1cbiAgcmVuZGVyVGFibGVEaXYoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBoZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcigpO1xuICAgIHZhciBmb290ZXJzID0gdGhpcy5yZW5kZXJGb290ZXIoKTtcbiAgICB2YXIgcm93cyA9IHRoaXMucmVuZGVyUm93cygpO1xuICAgIHZhciBkaXZTdHlsZSA9IHRoaXMucXVlc3Rpb24uaG9yaXpvbnRhbFNjcm9sbFxuICAgICAgPyAoeyBvdmVyZmxvd1g6IFwic2Nyb2xsXCIgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzKVxuICAgICAgOiAoe30gYXMgUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e2RpdlN0eWxlfSByZWY9eyhyb290KSA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9PlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgICB7cm93c31cbiAgICAgICAgICB7Zm9vdGVyc31cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgdGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGU7XG4gICAgaWYgKCF0YWJsZS5zaG93SGVhZGVyKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgaGVhZGVyczogYW55W10gPSBbXTtcbiAgICB2YXIgY2VsbHMgPSB0YWJsZS5oZWFkZXJSb3cuY2VsbHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGwgPSBjZWxsc1tpXTtcbiAgICAgIHZhciBrZXkgPSBcImNvbHVtblwiICsgaTtcbiAgICAgIHZhciBjb2x1bW5TdHlsZTogYW55ID0ge307XG4gICAgICBpZiAoISFjZWxsLndpZHRoKSB7XG4gICAgICAgIGNvbHVtblN0eWxlLndpZHRoID0gY2VsbC53aWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICghIWNlbGwubWluV2lkdGgpIHtcbiAgICAgICAgY29sdW1uU3R5bGUubWluV2lkdGggPSBjZWxsLm1pbldpZHRoO1xuICAgICAgfVxuICAgICAgdmFyIGNlbGxDb250ZW50ID0gdGhpcy5yZW5kZXJDZWxsQ29udGVudChjZWxsLCBcImNvbHVtbi1oZWFkZXJcIiwge30pO1xuICAgICAgaGVhZGVycy5wdXNoKFxuICAgICAgICA8dGhcbiAgICAgICAgICBjbGFzc05hbWU9e2NlbGwuY2xhc3NOYW1lfVxuICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgIHN0eWxlPXtjb2x1bW5TdHlsZX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjZWxsQ29udGVudH1cbiAgICAgICAgPC90aD5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj57aGVhZGVyc308L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICApO1xuICB9XG4gIHJlbmRlckZvb3RlcigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHRhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgIGlmICghdGFibGUuc2hvd0Zvb3RlcikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHJvdyA9IHRoaXMucmVuZGVyUm93KFxuICAgICAgXCJmb290ZXJcIixcbiAgICAgIHRhYmxlLmZvb3RlclJvdyxcbiAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc1xuICAgICk7XG4gICAgcmV0dXJuIDx0Zm9vdD57cm93fTwvdGZvb3Q+O1xuICB9XG4gIHJlbmRlclJvd3MoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIHJlbmRlcmVkUm93cyA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVuZGVyZWRSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzLnB1c2goXG4gICAgICAgIHRoaXMucmVuZGVyUm93KHJlbmRlcmVkUm93c1tpXS5pZCwgcmVuZGVyZWRSb3dzW2ldLCBjc3NDbGFzc2VzKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDx0Ym9keT57cm93c308L3Rib2R5PjtcbiAgfVxuICByZW5kZXJSb3coXG4gICAga2V5VmFsdWU6IGFueSxcbiAgICByb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBtYXRyaXhyb3cgPSBbXTtcbiAgICB2YXIgY2VsbHMgPSByb3cuY2VsbHM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXRyaXhyb3cucHVzaCh0aGlzLnJlbmRlckNlbGwoY2VsbHNbaV0sIGksIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgdmFyIGtleSA9IFwicm93XCIgKyBrZXlWYWx1ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtrZXl9PlxuICAgICAgICA8TWF0cml4Um93IG1vZGVsPXtyb3d9IHBhcmVudE1hdHJpeD17dGhpcy5xdWVzdGlvbn0+e21hdHJpeHJvd308L01hdHJpeFJvdz5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckNlbGwoXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IFwiY2VsbFwiICsgaW5kZXg7XG4gICAgaWYgKGNlbGwuaGFzUXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQ2VsbFxuICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgIGl0ZW1Dc3M9e2NlbGwuY2xhc3NOYW1lfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgY2VsbD17Y2VsbH1cbiAgICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICBsZXQgcmVhc29uID0gY2VsbC5oYXNUaXRsZSA/IFwicm93LWhlYWRlclwiIDogXCJcIjtcbiAgICB2YXIgY2VsbENvbnRlbnQgPSB0aGlzLnJlbmRlckNlbGxDb250ZW50KGNlbGwsIHJlYXNvbiwgY3NzQ2xhc3Nlcyk7XG4gICAgdmFyIGNlbGxTdHlsZTogYW55ID0gbnVsbDtcbiAgICBpZiAoISFjZWxsLndpZHRoIHx8ICEhY2VsbC5taW5XaWR0aCkge1xuICAgICAgY2VsbFN0eWxlID0ge307XG4gICAgICBpZiAoISFjZWxsLndpZHRoKSBjZWxsU3R5bGUud2lkdGggPSBjZWxsLndpZHRoO1xuICAgICAgaWYgKCEhY2VsbC5taW5XaWR0aCkgY2VsbFN0eWxlLm1pbldpZHRoID0gY2VsbC5taW5XaWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRkXG4gICAgICAgIGNsYXNzTmFtZT17Y2VsbC5jbGFzc05hbWV9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBzdHlsZT17Y2VsbFN0eWxlfVxuICAgICAgICBjb2xTcGFuPXtjZWxsLmNvbFNwYW5zfVxuICAgICAgPlxuICAgICAgICB7Y2VsbENvbnRlbnR9XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJDZWxsQ29udGVudChcbiAgICBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICAgIHJlYXNvbjogc3RyaW5nLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNlbGxDb250ZW50ID0gbnVsbDtcbiAgICB2YXIgcmVxdWlyZWRTcGFjZSA9IG51bGw7XG4gICAgdmFyIHJlcXVpcmVkVGV4dCA9IG51bGw7XG4gICAgdmFyIGNlbGxTdHlsZTogYW55ID0gbnVsbDtcbiAgICBpZiAoISFjZWxsLndpZHRoIHx8ICEhY2VsbC5taW5XaWR0aCkge1xuICAgICAgY2VsbFN0eWxlID0ge307XG4gICAgICBpZiAoISFjZWxsLndpZHRoKSBjZWxsU3R5bGUud2lkdGggPSBjZWxsLndpZHRoO1xuICAgICAgaWYgKCEhY2VsbC5taW5XaWR0aCkgY2VsbFN0eWxlLm1pbldpZHRoID0gY2VsbC5taW5XaWR0aDtcbiAgICB9XG4gICAgaWYgKGNlbGwuaGFzVGl0bGUpIHtcbiAgICAgIHJlYXNvbiA9IFwicm93LWhlYWRlclwiO1xuICAgICAgY2VsbENvbnRlbnQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyhjZWxsLmxvY1RpdGxlKTtcbiAgICAgIGlmIChjZWxsLnJlcXVpcmVkVGV4dCkge1xuICAgICAgICByZXF1aXJlZFNwYWNlID0gPHNwYW4+Jm5ic3A7PC9zcGFuPjtcbiAgICAgICAgcmVxdWlyZWRUZXh0ID0gPHNwYW4+e2NlbGwucmVxdWlyZWRUZXh0fTwvc3Bhbj47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjZWxsLmlzRHJhZ0hhbmRsZXJDZWxsKSB7XG4gICAgICBjZWxsQ29udGVudCA9ICg8PlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIGl0ZW09e3sgZGF0YTogeyByb3c6IGNlbGwucm93LCBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9IH19Lz5cbiAgICAgIDwvPik7XG4gICAgfVxuICAgIGlmIChjZWxsLmlzQWN0aW9uc0NlbGwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhBY3Rpb25zQ2VsbFxuICAgICAgICAgIG1vZGVsPXtjZWxsLml0ZW0uZ2V0RGF0YSgpfVxuICAgICAgICA+PC9TdXJ2ZXlRdWVzdGlvbk1hdHJpeEFjdGlvbnNDZWxsPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNlbGwuaGFzUGFuZWwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKFxuICAgICAgICA8U3VydmV5UGFuZWxcbiAgICAgICAgICBrZXk9e2NlbGwucGFuZWwuaWR9XG4gICAgICAgICAgZWxlbWVudD17Y2VsbC5wYW5lbH1cbiAgICAgICAgICBzdXJ2ZXk9e3RoaXMucXVlc3Rpb24uc3VydmV5fVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY2VsbENvbnRlbnQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcmVhZHlDZWxsID0gKFxuICAgICAgPD5cbiAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgICB7cmVxdWlyZWRTcGFjZX1cbiAgICAgICAge3JlcXVpcmVkVGV4dH1cbiAgICAgIDwvPlxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMud3JhcENlbGwoY2VsbCwgcmVhZHlDZWxsLCByZWFzb24pO1xuICB9XG59XG5cbmNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4QWN0aW9uc0NlbGwgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBtb2RlbCgpOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsfSBoYW5kbGVDbGljaz17ZmFsc2V9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25DZWxsIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBjZWxsKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNlbGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcSA9IHN1cGVyLmdldFF1ZXN0aW9uKCk7XG4gICAgaWYgKCEhcSkgcmV0dXJuIHE7XG4gICAgcmV0dXJuICEhdGhpcy5jZWxsID8gdGhpcy5jZWxsLnF1ZXN0aW9uIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZG9BZnRlclJlbmRlcigpIHtcbiAgICB2YXIgZWwgPSB0aGlzLmNlbGxSZWYuY3VycmVudDtcbiAgICBpZiAoXG4gICAgICBlbCAmJlxuICAgICAgdGhpcy5jZWxsICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleSAmJlxuICAgICAgZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKSAhPT0gXCJyXCJcbiAgICApIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIiwgXCJyXCIpO1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgY2VsbFF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLFxuICAgICAgICBodG1sRWxlbWVudDogZWwsXG4gICAgICAgIHJvdzogdGhpcy5jZWxsLnJvdyxcbiAgICAgICAgY29sdW1uOiB0aGlzLmNlbGwuY2VsbC5jb2x1bW4sXG4gICAgICB9O1xuICAgICAgdGhpcy5xdWVzdGlvbi5zdXJ2ZXkubWF0cml4QWZ0ZXJDZWxsUmVuZGVyKHRoaXMucXVlc3Rpb24sIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2hvd0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5xdWVzdGlvbi5pc1Zpc2libGUgJiZcbiAgICAgICghdGhpcy5jZWxsLmlzQ2hvaWNlIHx8IHRoaXMuY2VsbC5pc0ZpcnN0Q2hvaWNlKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENlbGxTdHlsZSgpOiBhbnkge1xuICAgIHZhciByZXM6IGFueSA9IHN1cGVyLmdldENlbGxTdHlsZSgpO1xuICAgIGlmICghIXRoaXMuY2VsbC53aWR0aCB8fCAhIXRoaXMuY2VsbC5taW5XaWR0aCkge1xuICAgICAgaWYgKCFyZXMpIHJlcyA9IHt9O1xuICAgICAgaWYgKCEhdGhpcy5jZWxsLndpZHRoKSByZXMud2lkdGggPSB0aGlzLmNlbGwud2lkdGg7XG4gICAgICBpZiAoISF0aGlzLmNlbGwubWluV2lkdGgpIHJlcy5taW5XaWR0aCA9IHRoaXMuY2VsbC5taW5XaWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsLmhlYWRlcnM7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuY2VsbC5pc0Nob2ljZSlcbiAgICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbi5yZW5kZXJRdWVzdGlvbkJvZHkodGhpcy5jcmVhdG9yLCB0aGlzLnF1ZXN0aW9uKTtcbiAgICBpZiAodGhpcy5jZWxsLmlzQ2hlY2tib3gpIHJldHVybiB0aGlzLnJlbmRlckNlbGxDaGVja2JveEJ1dHRvbigpO1xuICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxSYWRpb2dyb3VwQnV0dG9uKCk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJDZWxsQ2hlY2tib3hCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSB0aGlzLmNlbGwucXVlc3Rpb24uaWQgKyBcIml0ZW1cIiArIHRoaXMuY2VsbC5jaG9pY2VJbmRleDtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5jZWxsLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLmNlbGwucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5jZWxsLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgaXRlbT17dGhpcy5jZWxsLml0ZW19XG4gICAgICAgIGlzRmlyc3Q9e3RoaXMuY2VsbC5pc0ZpcnN0Q2hvaWNlfVxuICAgICAgICBpbmRleD17dGhpcy5jZWxsLmNob2ljZUluZGV4LnRvU3RyaW5nKCl9XG4gICAgICAgIGhpZGVDYXB0aW9uPXt0cnVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyQ2VsbFJhZGlvZ3JvdXBCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSB0aGlzLmNlbGwucXVlc3Rpb24uaWQgKyBcIml0ZW1cIiArIHRoaXMuY2VsbC5jaG9pY2VJbmRleDtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5jZWxsLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLmNlbGwucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5jZWxsLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgaXRlbT17dGhpcy5jZWxsLml0ZW19XG4gICAgICAgIGluZGV4PXt0aGlzLmNlbGwuY2hvaWNlSW5kZXgudG9TdHJpbmcoKX1cbiAgICAgICAgaXNDaGVja2VkPXt0aGlzLmNlbGwucXVlc3Rpb24udmFsdWUgPT09IHRoaXMuY2VsbC5pdGVtLnZhbHVlfVxuICAgICAgICBpc0Rpc2FibGVkPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNSZWFkT25seSB8fCAhdGhpcy5jZWxsLml0ZW0uaXNFbmFibGVkfVxuICAgICAgICBoaWRlQ2FwdGlvbj17dHJ1ZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2sgPSB0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IG1hdHJpeCgpOiBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsO1xuICB9XG4gIGhhbmRsZU9uUm93QWRkQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubWF0cml4LmFkZFJvd1VJKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBzaG93VGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd1RhYmxlO1xuICAgIHZhciBtYWluRGl2ID0gc2hvd1RhYmxlXG4gICAgICA/IHRoaXMucmVuZGVyVGFibGVEaXYoKVxuICAgICAgOiB0aGlzLnJlbmRlck5vUm93c0NvbnRlbnQoY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIHt0aGlzLnJlbmRlckFkZFJvd0J1dHRvbk9uVG9wKGNzc0NsYXNzZXMpfVxuICAgICAgICB7bWFpbkRpdn1cbiAgICAgICAge3RoaXMucmVuZGVyQWRkUm93QnV0dG9uT25Cb3R0b20oY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b25PblRvcChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1hdHJpeC5yZW5kZXJlZFRhYmxlLnNob3dBZGRSb3dPblRvcCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKGNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b25PbkJvdHRvbShjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1hdHJpeC5yZW5kZXJlZFRhYmxlLnNob3dBZGRSb3dPbkJvdHRvbSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKGNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOb1Jvd3NDb250ZW50KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0ZXh0OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMubWF0cml4LmxvY0VtcHR5Um93c1RleHQpO1xuICAgIGNvbnN0IHRleHREaXY6IEpTWC5FbGVtZW50ID0gPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZW1wdHlSb3dzVGV4dH0+e3RleHR9PC9kaXY+O1xuICAgIGNvbnN0IGJ0bjogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbihjc3NDbGFzc2VzLCB0cnVlKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZW1wdHlSb3dzU2VjdGlvbn0+XG4gICAgICAgIHt0ZXh0RGl2fVxuICAgICAgICB7YnRufVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQWRkUm93QnV0dG9uKFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpc0VtcHR5U2VjdGlvbjogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBhZGRSb3dUZXh0OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMubWF0cml4LmxvY0FkZFJvd1RleHQpO1xuICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICg8YnV0dG9uXG4gICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0QWRkUm93QnV0dG9uQ3NzKGlzRW1wdHlTZWN0aW9uKX1cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgb25DbGljaz17XG4gICAgICAgIHRoaXMucXVlc3Rpb24uaXNEZXNpZ25Nb2RlID8gdW5kZWZpbmVkIDogdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrXG4gICAgICB9XG4gICAgPlxuICAgICAge2FkZFJvd1RleHR9XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaWNvbkFkZH0gLz5cbiAgICA8L2J1dHRvbj4pO1xuICAgIHJldHVybiAoXG4gICAgICBpc0VtcHR5U2VjdGlvbiA/IGFkZEJ1dHRvbiA6IDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmZvb3Rlcn0+e2FkZEJ1dHRvbn08L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkeW5hbWljXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50RXJyb3JzLCBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc1dyYXBwZWQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNdWx0aXBsZVRleHRJdGVtTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBUaXRsZUNvbnRlbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHRhYmxlUm93cyA9IHRoaXMucXVlc3Rpb24uZ2V0Um93cygpO1xuICAgIHZhciByb3dzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3MucHVzaCh0aGlzLnJlbmRlclJvdyhpLCB0YWJsZVJvd3NbaV0sIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0YWJsZSBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgIDx0Ym9keT57cm93c308L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtVG9vbHRpcEVycm9yKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXAgPyAoXG4gICAgICA8U3VydmV5RWxlbWVudEVycm9yc1xuICAgICAgICBlbGVtZW50PXtpdGVtLmVkaXRvcn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBsb2NhdGlvbj17XCJ0b29sdGlwXCJ9XG4gICAgICAgIGlkPXtpdGVtLmVkaXRvci5pZCArIFwiX2Vycm9yc1wifVxuICAgICAgLz5cbiAgICApOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJSb3coXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBpdGVtczogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKSB7XG4gICAgdmFyIGtleTogc3RyaW5nID0gXCJpdGVtXCIgKyByb3dJbmRleDtcbiAgICB2YXIgdGRzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgIHZhciBzcGFucyA9IFtdO1xuICAgICAgdGRzLnB1c2goXG4gICAgICAgIDx0ZCBrZXk9e1wiaXRlbVwiICsgaX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbH0+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJdGVtTGFiZWxDc3MoaXRlbSl9PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1UaXRsZX0+XG4gICAgICAgICAgICAgIDxUaXRsZUNvbnRlbnQgZWxlbWVudD17aXRlbS5lZGl0b3J9IGNzc0NsYXNzZXM9e2l0ZW0uZWRpdG9yLmNzc0NsYXNzZXN9PjwvVGl0bGVDb250ZW50PlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPFN1cnZleU11bHRpcGxlVGV4dEl0ZW1FZGl0b3JcbiAgICAgICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICAgICAgaXRlbUNzcz17dGhpcy5xdWVzdGlvbi5nZXRJdGVtQ3NzKCl9XG4gICAgICAgICAgICAgIHF1ZXN0aW9uPXtpdGVtLmVkaXRvcn1cbiAgICAgICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1Ub29sdGlwRXJyb3IoaXRlbSwgY3NzQ2xhc3Nlcyl9XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC90ZD5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dHIga2V5PXtrZXl9IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb3d9PlxuICAgICAgICB7dGRzfVxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlNdWx0aXBsZVRleHRJdGVtRWRpdG9yIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIHtcbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5pdGVtQ3NzfT57dGhpcy5yZW5kZXJDb250ZW50KCl9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwsIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uUGFuZWxBZGRDbGljayA9IHRoaXMuaGFuZGxlT25QYW5lbEFkZENsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPblBhbmVsUHJldkNsaWNrID0gdGhpcy5oYW5kbGVPblBhbmVsUHJldkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPblBhbmVsTmV4dENsaWNrID0gdGhpcy5oYW5kbGVPblBhbmVsTmV4dENsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPblJhbmdlQ2hhbmdlID0gdGhpcy5oYW5kbGVPblJhbmdlQ2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBwYW5lbENvdW50ZXI6IDAgfSk7XG4gICAgY29uc3Qgc2VsZjogU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgPSB0aGlzO1xuICAgIHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYudXBkYXRlUXVlc3Rpb25SZW5kZXJpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJNb2RlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlUXVlc3Rpb25SZW5kZXJpbmcoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwYW5lbENvdW50ZXI6IHRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLnBhbmVsQ291bnRlciArIDEgOiAxLFxuICAgIH0pO1xuICB9XG4gIGhhbmRsZU9uUGFuZWxBZGRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5hZGRQYW5lbFVJKCk7XG4gIH1cbiAgaGFuZGxlT25QYW5lbFByZXZDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5nb1RvUHJldlBhbmVsKCk7XG4gIH1cbiAgaGFuZGxlT25QYW5lbE5leHRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5nb1RvTmV4dFBhbmVsKCk7XG4gIH1cbiAgaGFuZGxlT25SYW5nZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXggPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHBhbmVscyA9IFtdO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnF1ZXN0aW9uLnBhbmVsc1tpXTtcbiAgICAgICAgcGFuZWxzLnB1c2goXG4gICAgICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICAgICAgICAgICAga2V5PXtwYW5lbC5pZH1cbiAgICAgICAgICAgIGVsZW1lbnQ9e3BhbmVsfVxuICAgICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWwgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYW5lbCA9IHRoaXMucXVlc3Rpb24uY3VycmVudFBhbmVsO1xuICAgICAgICBwYW5lbHMucHVzaChcbiAgICAgICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtXG4gICAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uY3VycmVudEluZGV4fVxuICAgICAgICAgICAgZWxlbWVudD17cGFuZWx9XG4gICAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICAgIGluZGV4PXt0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleH1cbiAgICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBidG5BZGQ6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0XG4gICAgICA/IHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBuYXZUb3A6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgPyB0aGlzLnJlbmRlck5hdmlnYXRvcigpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgbmF2Qm90dG9tOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc0JvdHRvbVNob3dpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJOYXZpZ2F0b3IoKVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmhvcml6b250YWxTY3JvbGwpIHtcbiAgICAgIHN0eWxlW1wib3ZlcmZsb3dYXCJdID0gXCJzY3JvbGxcIjtcbiAgICB9XG4gICAgY29uc3QgbmF2VjIgPSB0aGlzLnJlbmRlck5hdmlnYXRvclYyKCk7XG4gICAgY29uc3Qgbm9FbnRyaWVzUGxhY2Vob2xkZXIgPSB0aGlzLnJlbmRlclBsYWNlaG9sZGVyKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgIHtub0VudHJpZXNQbGFjZWhvbGRlcn1cbiAgICAgICAge25hdlRvcH1cbiAgICAgICAgPGRpdiBzdHlsZT17c3R5bGV9PntwYW5lbHN9PC9kaXY+XG4gICAgICAgIHtuYXZCb3R0b219XG4gICAgICAgIHtidG5BZGR9XG4gICAgICAgIHtuYXZWMn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5hdmlnYXRvcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmFuZ2U6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JhbmdlU2hvd2luZyA/IHRoaXMucmVuZGVyUmFuZ2UoKSA6IG51bGw7XG4gICAgY29uc3QgYnRuUHJldjogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRyZXJQcmV2QnV0dG9uKCk7XG4gICAgY29uc3QgYnRuTmV4dDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRyZXJOZXh0QnV0dG9uKCk7XG4gICAgY29uc3QgYnRuQWRkOiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKCk7XG4gICAgY29uc3QgcHJvZ3Jlc3NDbGFzczogc3RyaW5nID0gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NUb3BcbiAgICAgIDogdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQm90dG9tO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXt7IGNsZWFyOiBcImJvdGhcIiB9fSBjbGFzc05hbWU9e3Byb2dyZXNzQ2xhc3N9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQ29udGFpbmVyfT5cbiAgICAgICAgICB7YnRuUHJldn1cbiAgICAgICAgICB7cmFuZ2V9XG4gICAgICAgICAge2J0bk5leHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7YnRuQWRkfVxuICAgICAgICB7dGhpcy5yZW5kZXJQcm9ncmVzc1RleHQoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJQcm9ncmVzc1RleHQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc1RleHR9PlxuICAgICAge3RoaXMucXVlc3Rpb24ucHJvZ3Jlc3NUZXh0fVxuICAgIDwvZGl2Pik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZHJlclByZXZCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgdGl0bGU9e3RoaXMucXVlc3Rpb24ucGFuZWxQcmV2VGV4dH0gb25DbGljaz17dGhpcy5oYW5kbGVPblBhbmVsUHJldkNsaWNrfT5cbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UHJldkJ1dHRvbkNzcygpfVxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCdG5JY29ufVxuICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxuICAgICAgICA+XG4gICAgICAgIDwvU3ZnSWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRyZXJOZXh0QnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHRpdGxlPXt0aGlzLnF1ZXN0aW9uLnBhbmVsTmV4dFRleHR9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25QYW5lbE5leHRDbGlja30+XG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldE5leHRCdXR0b25Dc3MoKX1cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQnRuSWNvbn1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclJhbmdlKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBnZXRQcm9ncmVzcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHJhbmdlTWF4OiBudW1iZXIgPSB0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnQgLSAxO1xuICAgICAgcmV0dXJuICh0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleCAvIHJhbmdlTWF4KSAqIDEwMCArIFwiJVwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc30+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0Jhcn1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aDogZ2V0UHJvZ3Jlc3MoKSB9fVxuICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5jYW5BZGRQYW5lbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRBZGRCdXR0b25Dc3MoKX0gb25DbGljaz17dGhpcy5oYW5kbGVPblBhbmVsQWRkQ2xpY2t9ID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkVGV4dH0+IHt0aGlzLnF1ZXN0aW9uLnBhbmVsQWRkVGV4dH0gPC9zcGFuPlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOYXZpZ2F0b3JWMigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYodGhpcy5xdWVzdGlvbi5wYW5lbENvdW50ID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByYW5nZTogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nICYmICF0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nID8gdGhpcy5yZW5kZXJSYW5nZSgpIDogbnVsbDtcbiAgICBjb25zdCBhZGRCdG4gPSB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpO1xuICAgIGNvbnN0IHByZXZCdG4gPSB0aGlzLnJlbmRyZXJQcmV2QnV0dG9uKCk7XG4gICAgY29uc3QgbmV4dEJ0biA9IHRoaXMucmVuZHJlck5leHRCdXR0b24oKTtcbiAgICBjb25zdCBwcm9ncmVzc1RleHQgPSB0aGlzLnJlbmRlclByb2dyZXNzVGV4dCgpO1xuICAgIGlmKCF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3Rlcn0+XG4gICAgICB7cmFuZ2V9XG4gICAgICA8aHIgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VwYXJhdG9yfSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXJCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAge2FkZEJ0bn1cbiAgICAgICAgeyF0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgPyA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQ29udGFpbmVyfT5cbiAgICAgICAgICB7cHJldkJ0bn1cbiAgICAgICAgICB7cHJvZ3Jlc3NUZXh0fVxuICAgICAgICAgIHtuZXh0QnRufVxuICAgICAgICA8L2Rpdj4gOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKHRoaXMucXVlc3Rpb24uZ2V0U2hvd05vRW50cmllc1BsYWNlaG9sZGVyKCkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9FbnRyaWVzUGxhY2Vob2xkZXJ9PlxuICAgICAgICAgIDxzcGFuPnt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY05vRW50cmllc1RleHQpfTwvc3Bhbj5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtIGV4dGVuZHMgU3VydmV5UGFuZWwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25QYW5lbFJlbW92ZUNsaWNrID0gdGhpcy5oYW5kbGVPblBhbmVsUmVtb3ZlQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb24gPyAodGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwpIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzKCk6IGFueSB7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICByZXR1cm4gISFzdXJ2ZXkgPyBzdXJ2ZXkuZ2V0Q3NzKCkgOiB7fTtcbiAgfVxuICBoYW5kbGVPblBhbmVsUmVtb3ZlQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVtb3ZlUGFuZWxVSSh0aGlzLmluZGV4KTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGNvbnN0IHBhbmVsOiBKU1guRWxlbWVudCA9IHN1cGVyLnJlbmRlcigpO1xuICAgIGNvbnN0IHJlbW92ZUJ1dHRvbjogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckJ1dHRvbigpO1xuICAgIGNvbnN0IHNlcGFyYXRvcjogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgJiYgdGhpcy5pbmRleCA8IHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudCAtIDEgP1xuICAgICAgKDxociBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZXBhcmF0b3J9IC8+KSA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFBhbmVsV3JhcHBlckNzcygpfT5cbiAgICAgICAgICB7cGFuZWx9XG4gICAgICAgICAge3JlbW92ZUJ1dHRvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzZXBhcmF0b3J9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnF1ZXN0aW9uLmNhblJlbW92ZVBhbmVsIHx8XG4gICAgICAodGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMucGFuZWwuaXNDb2xsYXBzZWQpXG4gICAgKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFBhbmVsUmVtb3ZlQnV0dG9uQ3NzKCl9XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25QYW5lbFJlbW92ZUNsaWNrfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlVGV4dH1cbiAgICAgICAgPiB7dGhpcy5xdWVzdGlvbi5wYW5lbFJlbW92ZVRleHR9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uUmVtb3ZlfVxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicGFuZWxkeW5hbWljXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLCBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBjbGVhckJ1dHRvbiA9IG51bGw7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uY2FuU2hvd0NsZWFyQnV0dG9uKSB7XG4gICAgICBjbGVhckJ1dHRvbiA9IChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYXJCdXR0b259XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmNsZWFyVmFsdWUoKX1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnF1ZXN0aW9uLmNsZWFyQnV0dG9uQ2FwdGlvbn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXRcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFNlbGVjdEJhc2VSb290Q3NzKCl9XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICByZWY9eyhmaWVsZHNldCkgPT4gKHRoaXMuY29udHJvbCA9IGZpZWxkc2V0KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gdGhpcy5nZXRDb2x1bW5zKGNzc0NsYXNzZXMpXG4gICAgICAgICAgOiB0aGlzLmdldEl0ZW1zKGNzc0NsYXNzZXMpfVxuICAgICAgICB7Y2xlYXJCdXR0b259XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbHVtbnMoY3NzQ2xhc3NlczogYW55KSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXRTdGF0ZVZhbHVlKCk7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uY29sdW1ucy5tYXAoKGNvbHVtbjogYW55LCBjaTogbnVtYmVyKSA9PiB7XG4gICAgICB2YXIgaXRlbXMgPSBjb2x1bW4ubWFwKChpdGVtOiBhbnksIGlpOiBudW1iZXIpID0+XG4gICAgICAgIHRoaXMucmVuZGVySXRlbShpdGVtLCB2YWx1ZSwgY3NzQ2xhc3NlcywgXCJcIiArIGNpICsgaWkpXG4gICAgICApO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBrZXk9e1wiY29sdW1uXCIgKyBjaX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbHVtbkNsYXNzKCl9IHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICB7aXRlbXN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbXMoY3NzQ2xhc3NlczogYW55KTogQXJyYXk8YW55PiB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXRTdGF0ZVZhbHVlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXNbaV07XG4gICAgICB2YXIgcmVuZGVyZWRJdGVtID0gdGhpcy5yZW5kZXJJdGVtKGl0ZW0sIHZhbHVlLCBjc3NDbGFzc2VzLCBcIlwiICsgaSk7XG4gICAgICBpdGVtcy5wdXNoKHJlbmRlcmVkSXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsOy8veyBkaXNwbGF5OiBcImlubGluZVwiLCBwb3NpdGlvbjogXCJzdGF0aWNcIiB9O1xuICB9XG4gIHByaXZhdGUgcmVuZGVySXRlbShcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgdmFsdWU6IGFueSxcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaW5kZXg6IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IFwiaXRlbVwiICsgaW5kZXg7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICB0ZXh0U3R5bGU9e3RoaXMudGV4dFN0eWxlfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGlzQ2hlY2tlZD17dmFsdWUgPT09IGl0ZW0udmFsdWV9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdGF0ZVZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuICF0aGlzLnF1ZXN0aW9uLmlzRW1wdHkoKSA/IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA6IFwiXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudGV4dFN0eWxlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzQ2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0NoZWNrZWQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaGlkZUNhcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGlkZUNhcHRpb24gPT09IHRydWU7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSB0aGlzLml0ZW0udmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uICYmICEhdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgb3RoZXJJdGVtID1cbiAgICAgIHRoaXMucXVlc3Rpb24uaXNPdGhlckl0ZW0odGhpcy5pdGVtKSAmJiB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZFxuICAgICAgICA/IHRoaXMucmVuZGVyT3RoZXIodGhpcy5jc3NDbGFzc2VzKVxuICAgICAgICA6IG51bGw7XG5cbiAgICB2YXIgaXRlbVRleHQgPSAhdGhpcy5oaWRlQ2FwdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLml0ZW0ubG9jVGV4dCwgdGhpcy50ZXh0U3R5bGUpXG4gICAgICA6IFwiXCI7XG4gICAgdmFyIGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHRoaXMuaXRlbSk7XG4gICAgdmFyIGxhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgbG9jVGV4dDogYW55ID0gdGhpcy5pdGVtLmxvY1RleHQ7XG4gICAgdmFyIGNvbnRyb2xMYWJlbENsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRDb250cm9sTGFiZWxDbGFzcyh0aGlzLml0ZW0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgPlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtsYWJlbENsYXNzfSBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmdldEFyaWFJdGVtTGFiZWwodGhpcy5pdGVtKX0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKHRoaXMuaXRlbSl9XG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5xdWVzdGlvbk5hbWV9XG4gICAgICAgICAgICBjaGVja2VkPXt0aGlzLmlzQ2hlY2tlZH1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLml0ZW0udmFsdWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yID9cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3J9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+IDpcbiAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc3Bhbj4gOlxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y29udHJvbExhYmVsQ2xhc3N9PlxuICAgICAgICAgICAge2l0ZW1UZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAge290aGVySXRlbX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck90aGVyKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtXG4gICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCAocHJvcHM6IGFueSkgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbSwgcHJvcHMpO1xufSk7XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYW5raW5nTW9kZWwsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi4vaXRlbXZhbHVlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhbmtpbmcgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhbmtpbmdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmFua2luZ01vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yb290Q2xhc3N9XG4gICAgICAgIHJlZj17KHJvb3QpID0+ICh0aGlzLmNvbnRyb2wgPSByb290KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMuZ2V0SXRlbXMoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SXRlbXMoKTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICBjb25zdCByYW5raW5nQ2hvaWNlcyA9IHRoaXMucXVlc3Rpb24ucmFua2luZ0Nob2ljZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5raW5nQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHJhbmtpbmdDaG9pY2VzW2ldO1xuICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgaSxcbiAgICAgICAgICAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5oYW5kbGVLZXlkb3duLmNhbGwodGhpcy5xdWVzdGlvbiwgZXZlbnQsIGl0ZW0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTtcbiAgICAgICAgICAgIC8vZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uaGFuZGxlUG9pbnRlckRvd24uY2FsbChcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbixcbiAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgdGhpcy5xdWVzdGlvblxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgaTogbnVtYmVyLFxuICAgIGhhbmRsZUtleWRvd246IChldmVudDogYW55KSA9PiB2b2lkLFxuICAgIGhhbmRsZVBvaW50ZXJEb3duOiAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4gdm9pZCxcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaXRlbUNsYXNzOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uUmFua2luZ01vZGVsXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBrZXk6IHN0cmluZyA9IGl0ZW0udmFsdWUgKyBcIi1cIiArIGkgKyBcIi1pdGVtXCI7XG4gICAgY29uc3QgdGV4dDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyhpdGVtLmxvY1RleHQpO1xuICAgIGNvbnN0IGluZGV4ID0gaTtcbiAgICBjb25zdCBpbmRleFRleHQ6IHN0cmluZyA9IHRoaXMucXVlc3Rpb24uZ2V0TnVtYmVyQnlJbmRleChpKTtcbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25SYW5raW5nSXRlbVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBpbmRleFRleHQ9e2luZGV4VGV4dH1cbiAgICAgICAgaGFuZGxlS2V5ZG93bj17aGFuZGxlS2V5ZG93bn1cbiAgICAgICAgaGFuZGxlUG9pbnRlckRvd249e2hhbmRsZVBvaW50ZXJEb3dufVxuICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICBpdGVtQ2xhc3M9e2l0ZW1DbGFzc31cbiAgICAgICAgcXVlc3Rpb249e3F1ZXN0aW9ufVxuICAgICAgLz5cbiAgICApO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVkSXRlbSA9IG51bGw7XG4gICAgaWYgKCEhc3VydmV5KSB7XG4gICAgICB3cmFwcGVkSXRlbSA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUoc3VydmV5LCByZW5kZXJlZEl0ZW0sIHRoaXMucXVlc3Rpb24sIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlZEl0ZW0gPz8gcmVuZGVyZWRJdGVtO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhbmtpbmdJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgcHJvdGVjdGVkIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudGV4dDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleFRleHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBoYW5kbGVLZXlkb3duKCk6IChldmVudDogYW55KSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oYW5kbGVLZXlkb3duO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaGFuZGxlUG9pbnRlckRvd24oKTogKGV2ZW50OiBhbnkpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmhhbmRsZVBvaW50ZXJEb3duO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpdGVtQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtQ2xhc3M7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuaXRlbUNsYXNzfVxuICAgICAgICBvbktleURvd249e3RoaXMuaGFuZGxlS2V5ZG93bn1cbiAgICAgICAgb25Qb2ludGVyRG93bj17dGhpcy5oYW5kbGVQb2ludGVyRG93bn1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1yYW5raW5nLWl0ZW09e3RoaXMuaW5kZXh9XG4gICAgICA+XG4gICAgICAgIDxkaXYgdGFiSW5kZXg9ey0xfSBzdHlsZT17eyBvdXRsaW5lOiBcIm5vbmVcIiB9fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1HaG9zdE5vZGV9IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtQ29udGVudH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1JY29uQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTBcIlxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwIDE2XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0SWNvbkhvdmVyQ3NzKCl9XG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMkM2IDAuOSA2LjkgMCA4IDBDOS4xIDAgMTAgMC45IDEwIDJDMTAgMy4xIDkuMSA0IDggNEM2LjkgNCA2IDMuMSA2IDJaTTIgMEMwLjkgMCAwIDAuOSAwIDJDMCAzLjEgMC45IDQgMiA0QzMuMSA0IDQgMy4xIDQgMkM0IDAuOSAzLjEgMCAyIDBaTTggNkM2LjkgNiA2IDYuOSA2IDhDNiA5LjEgNi45IDEwIDggMTBDOS4xIDEwIDEwIDkuMSAxMCA4QzEwIDYuOSA5LjEgNiA4IDZaTTIgNkMwLjkgNiAwIDYuOSAwIDhDMCA5LjEgMC45IDEwIDIgMTBDMy4xIDEwIDQgOS4xIDQgOEM0IDYuOSAzLjEgNiAyIDZaTTggMTJDNi45IDEyIDYgMTIuOSA2IDE0QzYgMTUuMSA2LjkgMTYgOCAxNkM5LjEgMTYgMTAgMTUuMSAxMCAxNEMxMCAxMi45IDkuMSAxMiA4IDEyWk0yIDEyQzAuOSAxMiAwIDEyLjkgMCAxNEMwIDE1LjEgMC45IDE2IDIgMTZDMy4xIDE2IDQgMTUuMSA0IDE0QzQgMTIuOSAzLjEgMTIgMiAxMlpcIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTBcIlxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwIDI0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0SWNvbkZvY3VzQ3NzKCl9XG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDVMNSAwTDAgNUg0VjlINlY1SDEwWlwiIC8+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDE5VjE1SDRWMTlIMEw1IDI0TDEwIDE5SDZaXCIgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtSW5kZXh9Pnt0aGlzLmluZGV4VGV4dH08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsfT57dGhpcy50ZXh0fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhbmtpbmdcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmFua2luZywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmF0aW5nTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlbmRlcmVkUmF0aW5nSXRlbSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmF0aW5nIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrID0gdGhpcy5oYW5kbGVPbkNsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhdGluZ01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25SYXRpbmdNb2RlbDtcbiAgfVxuICBoYW5kbGVPbkNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnNldFZhbHVlRnJvbUNsaWNrKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgbWluVGV4dCA9IHRoaXMucXVlc3Rpb24ubWluUmF0ZURlc2NyaXB0aW9uXG4gICAgICA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTWluUmF0ZURlc2NyaXB0aW9uKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBtYXhUZXh0ID0gdGhpcy5xdWVzdGlvbi5tYXhSYXRlRGVzY3JpcHRpb25cbiAgICAgID8gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NNYXhSYXRlRGVzY3JpcHRpb24pXG4gICAgICA6IG51bGw7XG4gICAgdmFyIGNvbW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmhhc090aGVyID8gdGhpcy5yZW5kZXJPdGhlcihjc3NDbGFzc2VzKSA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9IHJlZj17KGRpdikgPT4gKHRoaXMuY29udHJvbCA9IGRpdil9PlxuICAgICAgICA8ZmllbGRzZXQgcm9sZT1cInJhZGlvZ3JvdXBcIj5cbiAgICAgICAgICA8bGVnZW5kIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9e1wic3YtaGlkZGVuXCJ9PjwvbGVnZW5kPlxuICAgICAgICAgIHshIXRoaXMucXVlc3Rpb24uaGFzTWluTGFiZWwgPyA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubWluVGV4dH0+e21pblRleHR9PC9zcGFuPjogbnVsbH1cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFJhdGVJdGVtcy5tYXAoKGl0ZW0sIGkpID0+IHRoaXMucmVuZGVySXRlbShcInZhbHVlXCIgKyBpLCBpdGVtLCBpLCBjc3NDbGFzc2VzKSl9XG4gICAgICAgICAgeyEhdGhpcy5xdWVzdGlvbi5oYXNNYXhMYWJlbCA/IDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5tYXhUZXh0fT57bWF4VGV4dH08L3NwYW4+OiBudWxsfVxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICB7Y29tbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgaXRlbTogUmVuZGVyZWRSYXRpbmdJdGVtLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXRlbVRleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyhpdGVtLmxvY1RleHQpO1xuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWwga2V5PXtrZXl9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbS5pdGVtVmFsdWUpfT5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi12aXN1YWxseWhpZGRlblwiXG4gICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4fVxuICAgICAgICAgIHZhbHVlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgY2hlY2tlZD17dGhpcy5xdWVzdGlvbi52YWx1ZSA9PSBpdGVtLnZhbHVlfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25DbGlja31cbiAgICAgICAgICBvbkNoYW5nZT17KCk9Pnt9fVxuICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1UZXh0fT57aXRlbVRleHR9PC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJPdGhlcihjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm90aGVyfT5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYXRpbmdcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmF0aW5nLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblRleHRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uVGV4dCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxcbiAgUXVlc3Rpb25UZXh0TW9kZWxcbj4ge1xuICBwcml2YXRlIF9pc1dhaXRpbmdGb3JFbnRlciA9IGZhbHNlO1xuICAvL2NvbnRyb2xSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICAvL3RoaXMuY29udHJvbFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJbnB1dCgpIHtcbiAgICBjb25zdCBpbnB1dENsYXNzID0gKHRoaXMucXVlc3Rpb24gYXMgUXVlc3Rpb25UZXh0TW9kZWwpLmdldENvbnRyb2xDbGFzcygpO1xuICAgIHZhciBvbktleURvd24gPSBudWxsO1xuICAgIHZhciBvbktleVVwID0gbnVsbDtcbiAgICB2YXIgb25Db21wb3NpdGlvblVwZGF0ZSA9IG51bGw7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNJbnB1dFRleHRVcGRhdGUpIHtcbiAgICAgIG9uS2V5RG93biA9IChlOiBhbnkpID0+ICh0aGlzLl9pc1dhaXRpbmdGb3JFbnRlciA9IGUua2V5Q29kZSA9PT0gMjI5KTtcbiAgICAgIG9uS2V5VXAgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faXNXYWl0aW5nRm9yRW50ZXIgfHwgZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICAgIHRoaXMuX2lzV2FpdGluZ0ZvckVudGVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBvbkNvbXBvc2l0aW9uVXBkYXRlID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBlLnBlcnNpc3QoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZSk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy9odHRwczovL2dpdGh1Yi5jb20vc3VydmV5anMvc3VydmV5LWxpYnJhcnkvaXNzdWVzLzMzODRcbiAgICAgIG9uS2V5VXAgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG9uQ2hhbmdlID0gKGU6IGFueSkgPT4ge1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHBsYWNlSG9sZGVyID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlSG9sZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKSkge1xuICAgICAgcmV0dXJuIDxkaXY+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIGNsYXNzTmFtZT17aW5wdXRDbGFzc31cbiAgICAgICAgdHlwZT17dGhpcy5xdWVzdGlvbi5pbnB1dFR5cGV9XG4gICAgICAgIC8vcmVmPXt0aGlzLmNvbnRyb2xSZWZ9XG4gICAgICAgIHJlZj17KGlucHV0KSA9PiAodGhpcy5jb250cm9sID0gaW5wdXQpfVxuICAgICAgICBzdHlsZT17dGhpcy5xdWVzdGlvbi5pbnB1dFN0eWxlfVxuICAgICAgICBtYXhMZW5ndGg9e3RoaXMucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCl9XG4gICAgICAgIG1pbj17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1pbn1cbiAgICAgICAgbWF4PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTWF4fVxuICAgICAgICBzdGVwPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkU3RlcH1cbiAgICAgICAgc2l6ZT17dGhpcy5xdWVzdGlvbi5pbnB1dFNpemV9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZUhvbGRlcn1cbiAgICAgICAgbGlzdD17dGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkfVxuICAgICAgICBhdXRvQ29tcGxldGU9e3RoaXMucXVlc3Rpb24uYXV0b0NvbXBsZXRlfVxuICAgICAgICBvbkJsdXI9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIG9uS2V5VXA9e29uS2V5VXB9XG4gICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICBvbkNvbXBvc2l0aW9uVXBkYXRlPXtvbkNvbXBvc2l0aW9uVXBkYXRlfVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWQgP1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHsgdGhpcy5yZW5kZXJJbnB1dCgpIH1cbiAgICAgICAgICB7IHRoaXMucmVuZGVyRGF0YUxpc3QoKSB9XG4gICAgICAgIDwvZGl2PjpcbiAgICAgICAgdGhpcy5yZW5kZXJJbnB1dCgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckRhdGFMaXN0KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uZGF0YUxpc3RJZCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5xdWVzdGlvbi5kYXRhTGlzdDtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuICAgIHZhciBvcHRpb25zID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9ucy5wdXNoKDxvcHRpb24ga2V5PXtcIml0ZW1cIitpfSB2YWx1ZT17aXRlbXNbaV19Pjwvb3B0aW9uPik7XG4gICAgfVxuICAgIHJldHVybiA8ZGF0YWxpc3QgaWQ9e3RoaXMucXVlc3Rpb24uZGF0YUxpc3RJZH0+e29wdGlvbnN9PC9kYXRhbGlzdD47XG4gIH1cbiAgLy8gcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gIC8vICAgdGhpcy5jb250cm9sID0gdGhpcy5jb250cm9sUmVmLmN1cnJlbnQ7XG4gIC8vICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICAvLyB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblRleHQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgU3VydmV5TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIFN1cnZleVdpbmRvd01vZGVsLCBTdXJ2ZXlFbGVtZW50LCBRdWVzdGlvblJvd01vZGVsLCBJdGVtVmFsdWUsIFF1ZXN0aW9uU2VsZWN0QmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIge1xuICBwdWJsaWMgc3RhdGljIHdyYXBSb3coc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHJvdzogUXVlc3Rpb25Sb3dNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldFJvd1dyYXBwZXJDb21wb25lbnROYW1lKHJvdyk7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRSb3dXcmFwcGVyQ29tcG9uZW50RGF0YShyb3cpO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHJvdyxcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwRWxlbWVudChzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgcXVlc3Rpb246IFN1cnZleUVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUocXVlc3Rpb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwSXRlbVZhbHVlKHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLCBpdGVtOiBJdGVtVmFsdWUpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50TmFtZShpdGVtLCBxdWVzdGlvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50RGF0YShpdGVtLCBxdWVzdGlvbik7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBrZXk6IGVsZW1lbnQua2V5LFxuICAgICAgZWxlbWVudCxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgaXRlbSxcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwTWF0cml4Q2VsbChzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCwgcmVhc29uOiBzdHJpbmcgPSBcImNlbGxcIik6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShjZWxsLCByZWFzb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKGNlbGwsIHJlYXNvbik7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgY2VsbCxcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbn1cblxuU3VydmV5TW9kZWwucGxhdGZvcm0gPSBcInJlYWN0XCI7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVRpbWVyTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVRpbWVyUGFuZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlUaW1lck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50aW1lck1vZGVsO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXY+e3RoaXMuc3VydmV5LnRleHR9PC9kaXY+O1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBJRWxlbWVudCwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuLi9xdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5Um93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMucmVjYWxjdWxhdGVDc3MoKTtcbiAgfVxuICBwcml2YXRlIHJlY2FsY3VsYXRlQ3NzKCkge1xuICAgIHRoaXMucm93LnZpc2libGVFbGVtZW50cy5tYXAoZWxlbWVudCA9PiAoZWxlbWVudCBhcyBRdWVzdGlvbikuY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5yb3c7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnJvdztcbiAgfVxuICBwcml2YXRlIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yb3cgJiYgISF0aGlzLnN1cnZleSAmJiAhIXRoaXMuY3JlYXRvciAmJiB0aGlzLnJvdy52aXNpYmxlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGVsZW1lbnRzID0gbnVsbDtcbiAgICBlbGVtZW50cyA9IHRoaXMucm93LnZpc2libGVFbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpbm5lckVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoZWxlbWVudCwgaW5kZXgpO1xuICAgICAgY29uc3QgY3NzID0gKGVsZW1lbnQgYXMgUXVlc3Rpb24pLmNzc0NsYXNzZXNWYWx1ZTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzcy5xdWVzdGlvbldyYXBwZXJ9XG4gICAgICAgICAgc3R5bGU9eyhlbGVtZW50IGFzIGFueSkucm9vdFN0eWxlfVxuICAgICAgICAgIGRhdGEta2V5PXtpbm5lckVsZW1lbnQua2V5fVxuICAgICAgICAgIGtleT17aW5uZXJFbGVtZW50LmtleX1cbiAgICAgICAgICBvbkZvY3VzPXsoZWxlbWVudCBhcyBRdWVzdGlvbikuZm9jdXNJbn1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJvdy5pc05lZWRSZW5kZXIgPyBpbm5lckVsZW1lbnQgOiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoZWxlbWVudC5za2VsZXRvbkNvbXBvbmVudE5hbWUsIHsgZWxlbWVudDogZWxlbWVudCwgY3NzOiB0aGlzLmNzcywgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e3RoaXMucm93LmdldFJvd0NzcygpfSA+XG4gICAgICAgIHtlbGVtZW50c31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJFbGVtZW50Q29udGVudCgpO1xuICAgIGNvbnN0IHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwUm93KHN1cnZleSwgY29udGVudCwgdGhpcy5yb3cpO1xuICAgIHJldHVybiB3cmFwcGVyIHx8IGNvbnRlbnQ7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCAmJiAhdGhpcy5yb3cuaXNOZWVkUmVuZGVyKSB7XG4gICAgICB2YXIgcm93Q29udGFpbmVyRGl2ID0gZWw7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3cuc3RhcnRMYXp5UmVuZGVyaW5nKHJvd0NvbnRhaW5lckRpdik7XG4gICAgICB9LCAxMCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKG5leHRQcm9wcy5yb3cgIT09IHRoaXMucm93KSB7XG4gICAgICBuZXh0UHJvcHMucm93LmlzTmVlZFJlbmRlciA9IHRoaXMucm93LmlzTmVlZFJlbmRlcjtcbiAgICAgIHRoaXMuc3RvcExhenlSZW5kZXJpbmcoKTtcbiAgICB9XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUNzcygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgc3RvcExhenlSZW5kZXJpbmcoKSB7XG4gICAgdGhpcy5yb3cuc3RvcExhenlSZW5kZXJpbmcoKTtcbiAgICB0aGlzLnJvdy5pc05lZWRSZW5kZXIgPSAhdGhpcy5yb3cuaXNMYXp5UmVuZGVyaW5nKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCwgZWxlbWVudEluZGV4PzogbnVtYmVyKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudEluZGV4ID8gXCItXCIgKyBlbGVtZW50SW5kZXggOiAwO1xuICAgIHZhciBlbGVtZW50VHlwZSA9IGVsZW1lbnQuZ2V0VHlwZSgpO1xuICAgIGlmICghUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5pc0VsZW1lbnRSZWdpc3RlcmVkKGVsZW1lbnRUeXBlKSkge1xuICAgICAgZWxlbWVudFR5cGUgPSBcInF1ZXN0aW9uXCI7XG4gICAgfVxuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGUsIHtcbiAgICAgIGtleTogZWxlbWVudC5uYW1lICsgaW5kZXgsXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgY3JlYXRvcjogdGhpcy5jcmVhdG9yLFxuICAgICAgc3VydmV5OiB0aGlzLnN1cnZleSxcbiAgICAgIGNzczogdGhpcy5jc3MsXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblNpZ25hdHVyZVBhZCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9IHJlZj17KHJvb3QpID0+ICh0aGlzLmNvbnRyb2wgPSByb290KX0gc3R5bGU9e3sgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLmhlaWdodCwgd2lkdGg6IHRoaXMucXVlc3Rpb24ud2lkdGggfX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogdGhpcy5xdWVzdGlvbi5uZWVkU2hvd1BsYWNlaG9sZGVyKCkgPyBcIlwiIDogXCJub25lXCIgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLnBsYWNlSG9sZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGNhbnZhcyB0YWJJbmRleD17MH0+PC9jYW52YXM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jb250cm9sc30+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY2xlYXJCdXR0b259XG4gICAgICAgICAgICB0aXRsZT17dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbkljb25JZCA/IDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYXJCdXR0b25JY29uSWR9IHNpemU9e1wiYXV0b1wifT48L1N2Z0ljb24+IDogPHNwYW4+4pyWPC9zcGFuPn1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJzaWduYXR1cmVwYWRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uU2lnbmF0dXJlUGFkLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUxvY1N0cmluZ0VkaXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgbG9jU3RyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0cjtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgc3R5bGUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIHRoaXMubG9jU3RyLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgc2VsZi5zZXRTdGF0ZSh7IGNoYW5nZWQ6IHNlbGYuc3RhdGUuY2hhbmdlZCArIDEgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHRoaXMubG9jU3RyLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHt9O1xyXG4gIH1cclxuICBvbklucHV0ID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRoaXMubG9jU3RyLnRleHQgPSBldmVudC50YXJnZXQuaW5uZXJUZXh0O1xyXG4gIH07XHJcbiAgb25DbGljayA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfTtcclxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmxvY1N0ci5oYXNIdG1sKSB7XHJcbiAgICAgIGNvbnN0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWwgfTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXHJcbiAgICAgICAgICBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCJcclxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cclxuICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxlfVxyXG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX1cclxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbklucHV0fVxyXG4gICAgICAgICAgb25DbGljaz17dGhpcy5vbkNsaWNrfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8c3BhblxyXG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxyXG4gICAgICAgIGNvbnRlbnRFZGl0YWJsZT1cInRydWVcIlxyXG4gICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cclxuICAgICAgICBzdHlsZT17dGhpcy5zdHlsZX1cclxuICAgICAgICBvbkJsdXI9e3RoaXMub25JbnB1dH1cclxuICAgICAgICBvbkNsaWNrPXt0aGlzLm9uQ2xpY2t9XHJcbiAgICAgID5cclxuICAgICAgICB7dGhpcy5sb2NTdHIucmVuZGVyZWRIdG1sfVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXHJcbiAgTG9jYWxpemFibGVTdHJpbmcuZWRpdGFibGVSZW5kZXJlcixcclxuICAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ0VkaXRvciwgcHJvcHMpO1xyXG4gIH1cclxuKTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5TG9jU3RyaW5nVmlld2VyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gIH1cclxuICBwcml2YXRlIGdldCBsb2NTdHIoKTogTG9jYWxpemFibGVTdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyO1xyXG4gIH1cclxuICBwcml2YXRlIGdldCBzdHlsZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3R5bGU7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHRoaXMubG9jU3RyLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHt9O1xyXG4gIH1cclxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XHJcbiAgICBpZighIXByZXZQcm9wcy5sb2NTdHIpIHtcclxuICAgICAgcHJldlByb3BzLmxvY1N0ci5vbkNoYW5nZWQgPSAoKSA9PiB7fTtcclxuICAgIH1cclxuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSByZWFjdE9uU3RyQ2hhbmdlZCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHRoaXMubG9jU3RyLm9uQ2hhbmdlZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNoYW5nZWQ6ICEhdGhpcy5zdGF0ZSAmJiB0aGlzLnN0YXRlLmNoYW5nZWQgPyB0aGlzLnN0YXRlLmNoYW5nZWQgKyAxIDogMSB9KTtcclxuICAgIH07XHJcbiAgfVxyXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm4gbnVsbDtcclxuICAgIGlmICh0aGlzLmxvY1N0ci5oYXNIdG1sKSB7XHJcbiAgICAgIGxldCBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5sb2NTdHIucmVuZGVyZWRIdG1sIH07XHJcbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJzdi1zdHJpbmctdmlld2VyXCIgc3R5bGU9e3RoaXMuc3R5bGV9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cInN2LXN0cmluZy12aWV3ZXJcIiBzdHlsZT17dGhpcy5zdHlsZX0+e3RoaXMubG9jU3RyLnJlbmRlcmVkSHRtbH08L3NwYW4+O1xyXG4gIH1cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXHJcbiAgTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdFJlbmRlcmVyLFxyXG4gIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TG9jU3RyaW5nVmlld2VyLCBwcm9wcyk7XHJcbiAgfVxyXG4pO1xyXG4iLCIvKipcbiAqIEdsb2JhbCBzdXJ2ZXkgc2V0dGluZ3NcbiAqL1xuZXhwb3J0IHZhciBzZXR0aW5ncyA9IHtcbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIFN1cnZleUpTIGNvbXBhcmF0b3IuIEJ5IGRlZmF1bHQgd2UgdHJpbSBzdHJpbmdzIGFuZCBjb21wYXJlIHRoZW0gYXMgY2FzZSBpbnNlbnNpdGl2ZS4gVG8gY2hhbmdlIHRoZSBiZWhhdmlvciB5b3UgY2FuIHVzZSBmb2xsb3dpbmcgY29kZTpcbiAgICogc2V0dGluZ3MuY29tcGFyYXRvci50cmltU3RyaW5ncyA9IGZhbHNlOyAvL1wiYWJjIFwiIHdpbGwgbm90IGVxdWFsIHRvIFwiYWJjXCIuIFRoZXkgYXJlIGVxdWFsIGJ5IGRlZmF1bHQuXG4gICAqIHNldHRpbmdzLmNvbXBhcmF0b3IuY2FzZVNlbnNpdGl2ZSA9IHRydWU7IC8vXCJhYmMgXCIgd2lsbCBub3QgZXF1YWwgdG8gXCJBYmNcIi4gVGhleSBhcmUgZXF1YWwgYnkgZGVmYXVsdC5cbiAgICovXG4gIGNvbXBhcmF0b3I6IHtcbiAgICB0cmltU3RyaW5nczogdHJ1ZSxcbiAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZVxuICB9LFxuICAvKipcbiAgICogVGhlIHByZWZpeCB0aGF0IHVzZXMgdG8gc3RvcmUgdGhlIHF1ZXN0aW9uIGNvbW1lbnQsIGFzIHtxdWVzdGlvbk5hbWV9ICsge2NvbW1lbnRQcmVmaXh9LlxuICAgKiBUaGUgZGVmYXVsdFxuICAgKi9cbiAgY29tbWVudFByZWZpeDogXCItQ29tbWVudFwiLFxuICAvKipcbiAgICogRW5jb2RlIHBhcmFtZXRlciBvbiBjYWxsaW5nIHJlc3RmdWwgd2ViIEFQSVxuICAgKi9cbiAgd2Vic2VydmljZUVuY29kZVBhcmFtZXRlcnM6IHRydWUsXG4gIC8qKlxuICAgKiBDYWNoZSB0aGUgcmVzdWx0IGZvciBjaG9pY2VzIGdldHRpbmcgZnJvbSB3ZWIgc2VydmljZXMuIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlLCB0byBkaXNhYmxlIHRoZSBjYWNoaW5nLlxuICAgKi9cbiAgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsOiB0cnVlLFxuICBnZXQgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsbCgpIHtcbiAgICByZXR1cm4gc2V0dGluZ3MudXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsO1xuICB9LFxuICBzZXQgdXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsbCh2YWw6IGJvb2xlYW4pIHtcbiAgICBzZXR0aW5ncy51c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWwgPSB2YWw7XG4gIH0sXG4gIC8qKlxuICAgKiBTdXJ2ZXlKUyB3ZWIgc2VydmljZSBBUEkgdXJsXG4gICAqL1xuICBzdXJ2ZXlTZXJ2aWNlVXJsOiBcImh0dHBzOi8vYXBpLnN1cnZleWpzLmlvL3B1YmxpYy92MS9TdXJ2ZXlcIixcbiAgLyoqXG4gICAqIHNlcGFyYXRvciB0aGF0IGNhbiBhbGxvdyB0byBzZXQgdmFsdWUgYW5kIHRleHQgb2YgSXRlbVZhbHVlIG9iamVjdCBpbiBvbmUgc3RyaW5nIGFzOiBcInZhbHVlfHRleHRcIlxuICAgKi9cbiAgaXRlbVZhbHVlU2VwYXJhdG9yOiBcInxcIixcbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIHNlcmlhbGl6ZSBpdGVtdmFsdWUgaW5zdGFuY2UgYWx3YXlzIGFzIG9iamVjdCBldmVuIGlmIHRleHQgcHJvcGVydHkgaXMgZW1wdHlcbiAgICogY29uc3QgaXRlbSA9IG5ldyBTdXJ2ZXkuSXRlbVZhbHVlKDUpO1xuICAgKiBpdGVtLnRvSlNPTigpOyAvL3dpbGwgcmV0dXJuIHt2YWx1ZTogNX0sIGluc3RlYWQgb2YgNSBieSBkZWZhdWx0LlxuICAgKi9cbiAgaXRlbVZhbHVlQWx3YXlzU2VyaWFsaXplQXNPYmplY3Q6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gc2VyaWFsaXplIGl0ZW12YWx1ZSB0ZXh0IHByb3BlcnR5LCBldmVuIGlmIGl0IGlzIGVtcHR5IG9yIGVxdWFscyB0byB2YWx1ZVxuICAgKiBjb25zdCBpdGVtID0gbmV3IFN1cnZleS5JdGVtVmFsdWUoXCJpdGVtMVwiKTtcbiAgICogaXRlbS50b0pTT04oKTsgLy93aWxsIHJldHVybiB7dmFsdWU6IGl0ZW0xLCB0ZXh0OiBcIml0ZW0xXCJ9LCBpbnN0ZWFkIG9mIFwiaXRlbTFcIiBieSBkZWZhdWx0LlxuICAgKi9cbiAgaXRlbVZhbHVlQWx3YXlzU2VyaWFsaXplVGV4dDogZmFsc2UsXG4gIC8qKlxuICAgKiBkZWZhdWx0IGxvY2FsZSBuYW1lIGZvciBsb2NhbGl6YWJsZSBzdHJpbmdzIHRoYXQgdXNlcyBkdXJpbmcgc2VyaWFsaXphdGlvbiwge1wiZGVmYXVsdFwiOiBcIk15IHRleHRcIiwgXCJkZVwiOiBcIk1laW4gVGV4dFwifVxuICAgKi9cbiAgZGVmYXVsdExvY2FsZU5hbWU6IFwiZGVmYXVsdFwiLFxuICAvKipcbiAgICogRGVmYXVsdCByb3cgbmFtZSBmb3IgbWF0cml4IChzaW5nbGUgY2hvaWNlKVxuICAgKi9cbiAgbWF0cml4RGVmYXVsdFJvd05hbWU6IFwiZGVmYXVsdFwiLFxuICAvKipcbiAgICogRGVmYXVsdCBjZWxsIHR5cGUgZm9yIGRyb3Bkb3duIGFuZCBkeW5hbWljIG1hdHJpY2VzXG4gICAqL1xuICBtYXRyaXhEZWZhdWx0Q2VsbFR5cGU6IFwiZHJvcGRvd25cIixcbiAgLyoqXG4gICAqIFRvdGFsIHZhbHVlIHBvc3RmaXggZm9yIGRyb3Bkb3duIGFuZCBkeW5hbWljIG1hdHJpY2VzLiBUaGUgdG90YWwgdmFsdWUgc3RvcmVzIGFzOiB7bWF0cml4TmFtZX0gKyB7cG9zdGZpeH1cbiAgICovXG4gIG1hdHJpeFRvdGFsVmFsdWVQb3N0Rml4OiBcIi10b3RhbFwiLFxuICAvKipcbiAgICogTWF4aW11bSByb3cgY291bnQgaW4gZHluYW1pYyBtYXRyaXhcbiAgICovXG4gIG1hdHJpeE1heGltdW1Sb3dDb3VudDogMTAwMCxcbiAgLyoqXG4gICAqIE1heGltdW0gcm93Q291bnQgdGhhdCByZXR1cm5zIGluIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQgZnVuY3Rpb25cbiAgICovXG4gIG1hdHJpeE1heFJvd0NvdW50SW5Db25kaXRpb246IDEsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHBhbmVsIGNvdW50IGluIGR5bmFtaWMgcGFuZWxcbiAgICovXG4gIHBhbmVsTWF4aW11bVBhbmVsQ291bnQ6IDEwMCxcbiAgLyoqXG4gICAqIE1heGltdW0gcmF0ZSB2YWx1ZSBjb3VudCBpbiByYXRpbmcgcXVlc3Rpb25cbiAgICovXG4gIHJhdGluZ01heGltdW1SYXRlVmFsdWVDb3VudDogMjAsXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBxdWVzdGlvbiB3aGlsZSBjaG9pY2VzIGFyZSBnZXR0aW5nIGZyb20gdGhlIHdlYiBzZXJ2aWNlXG4gICAqL1xuICBkaXNhYmxlT25HZXR0aW5nQ2hvaWNlc0Zyb21XZWI6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gYWx3YXlzIHNlcmlhbGl6ZSB0aGUgbG9jYWxpemF0aW9uIHN0cmluZyBhcyBvYmplY3QgZXZlbiBpZiB0aGVyZSBpcyBvbmx5IG9uZSB2YWx1ZSBmb3IgZGVmYXVsdCBsb2NhbGUuIEluc3RlYWQgb2Ygc3RyaW5nIFwiTXlTdHJcIiBzZXJpYWxpemUgYXMge2RlZmF1bHQ6IFwiTXlTdHJcIn1cbiAgICovXG4gIHNlcmlhbGl6ZUxvY2FsaXphYmxlU3RyaW5nQXNPYmplY3Q6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRvIGZhbHNlIHRvIGhpZGUgZW1wdHkgcGFnZSB0aXRsZSBhbmQgZGVzY3JpcHRpb24gaW4gZGVzaWduIG1vZGVcbiAgICovXG4gIGFsbG93U2hvd0VtcHR5VGl0bGVJbkRlc2lnbk1vZGU6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBlbXB0eSBwYWdlIGRlc2NyaXB0aW9uIGluIGRlc2lnbiBtb2RlXG4gICAqL1xuICBhbGxvd1Nob3dFbXB0eURlc2NyaXB0aW9uSW5EZXNpZ25Nb2RlOiB0cnVlLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBleGVjdXRlIHRoZSBjb21wbGV0ZSB0cmlnZ2VyIG9uIHZhbHVlIGNoYW5nZSBpbnN0ZWFkIG9mIG9uIG5leHQgcGFnZS5cbiAgICovXG4gIGV4ZWN1dGVDb21wbGV0ZVRyaWdnZXJPblZhbHVlQ2hhbmdlZDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBleGVjdXRlIHRoZSBza2lwIHRyaWdnZXIgb24gbmV4dCBwYWdlIGluc3RlYWQgb2Ygb24gdmFsdWUgY2hhbmdlLlxuICAgKi9cbiAgZXhlY3V0ZVNraXBUcmlnZ2VyT25WYWx1ZUNoYW5nZWQ6IHRydWUsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IHRoZSBpbnB1dCBmaWVsZCBvZiBbQ29tbWVudF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb25jb21tZW50bW9kZWwpIHF1ZXN0aW9ucyBpcyByZW5kZXJlZCBpbiB0aGUgcmVhZC1vbmx5IG1vZGUuXG4gICAqIEF2YWlsYWJsZSB2YWx1ZXM6XG4gICAqIFwidGV4dGFyZWFcIiAoZGVmYXVsdCkgLSBBICd0ZXh0YXJlYScgZWxlbWVudCBpcyB1c2VkIHRvIHJlbmRlciBhIENvbW1lbnQgcXVlc3Rpb24ncyBpbnB1dCBmaWVsZC5cbiAgICogXCJkaXZcIiAtIEEgJ2RpdicgZWxlbWVudCBpcyB1c2VkIHRvIHJlbmRlciBhIENvbW1lbnQgcXVlc3Rpb24ncyBpbnB1dCBmaWVsZC5cbiAgICovXG4gIHJlYWRPbmx5Q29tbWVudFJlbmRlck1vZGU6IFwidGV4dGFyZWFcIixcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBob3cgdGhlIGlucHV0IGZpZWxkIG9mIFtUZXh0XShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbnRleHRtb2RlbCkgcXVlc3Rpb25zIGlzIHJlbmRlcmVkIGluIHRoZSByZWFkLW9ubHkgbW9kZS5cbiAgICogQXZhaWxhYmxlIHZhbHVlczpcbiAgICogXCJpbnB1dFwiIChkZWZhdWx0KSAtIEFuICdpbnB1dCcgZWxlbWVudCBpcyB1c2VkIHRvIHJlbmRlciBhIFRleHQgcXVlc3Rpb24ncyBpbnB1dCBmaWVsZC5cbiAgICogXCJkaXZcIiAtIEEgJ2RpdicgZWxlbWVudCBpcyB1c2VkIHRvIHJlbmRlciBhIFRleHQgcXVlc3Rpb24ncyBpbnB1dCBmaWVsZC5cbiAgICovXG4gIHJlYWRPbmx5VGV4dFJlbmRlck1vZGU6IFwiaW5wdXRcIixcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoaXMgZnVuY3Rpb24sIHNldCB5b3VyIGZ1bmN0aW9uLCBpZiB5b3Ugd2FudCB0byBzaG93IHlvdXIgb3duIGRpYWxvZyBjb25maXJtIHdpbmRvdyBpbnN0ZWFkIG9mIHN0YW5kYXJkIGJyb3dzZXIgd2luZG93LlxuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKi9cbiAgY29uZmlybUFjdGlvbkZ1bmM6IGZ1bmN0aW9uIChtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbiAgfSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgbWluV2lkdGggY29uc3RyYWludFxuICAgKi9cbiAgbWluV2lkdGg6IFwiMzAwcHhcIixcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgbWluV2lkdGggY29uc3RyYWludFxuICAgKi9cbiAgbWF4V2lkdGg6IFwiaW5pdGlhbFwiLFxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSB0ZWxscyBob3cgbWFueSB0aW1lcyBzdXJ2ZXkgcmUtcnVuIGV4cHJlc3Npb25zIG9uIHZhbHVlIGNoYW5nZXMgZHVyaW5nIGNvbmRpdGlvbiBydW5uaW5nLiBXZSBuZWVkIGl0IHRvIGF2b2lkIHJlY3Vyc2lvbnMgaW4gdGhlIGV4cHJlc3Npb25zXG4gICAqL1xuICBtYXhpbXVtQ29uZGl0aW9uUnVuQ291bnRPblZhbHVlQ2hhbmdlZDogMTAsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHZpc2libGVJbmRleCBmb3IgcXVlc3Rpb24gd2l0aCB0aXRsZUxvY2F0aW9uID0gXCJoaWRkZW5cIiBpcyAtMSwgYW5kIHN1cnZleSBkb2Vzbid0IGNvdW50IHRoZXNlIHF1ZXN0aW9ucyB3aGVuIHNldCBxdWVzdGlvbnMgbnVtYmVycy5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBhIHF1ZXN0aW9uIG5leHQgdG8gYSBxdWVzdGlvbiB3aXRoIGhpZGRlbiB0aXRsZSB3aWxsIGluY3JlYXNlIGl0J3MgbnVtYmVyLlxuICAgKi9cbiAgc2V0UXVlc3Rpb25WaXNpYmxlSW5kZXhGb3JIaWRkZW5UaXRsZTogZmFsc2UsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHZpc2libGVJbmRleCBmb3IgcXVlc3Rpb24gd2l0aCBoaWRlTnVtYmVyID0gdHJ1ZSBpcyAtMSwgYW5kIHN1cnZleSBkb2Vzbid0IGNvdW50IHRoZXNlIHF1ZXN0aW9ucyB3aGVuIHNldCBxdWVzdGlvbnMgbnVtYmVycy5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBhIHF1ZXN0aW9uIG5leHQgdG8gYSBxdWVzdGlvbiB3aXRoIGhpZGRlbiB0aXRsZSBudW1iZXIgd2lsbCBpbmNyZWFzZSBpdCdzIG51bWJlci5cbiAgICovXG4gIHNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuTnVtYmVyOiBmYWxzZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgYWxsIHJvd3MgYXJlIHJlbmRlcmVkIG5vIG1hdHRlcnMgd2h3dGhlciB0aGV5IGFyZSB2aXNpYmxlLlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIHN1cnZleSBtYXJrdXAgcm93cyB3aWxsIGJlIHJlbmRlcmVkIG9ubHkgaWYgdGhleSBhcmUgdmlzaWJsZSBpbiB2aWV3cG9ydC5cbiAgICogVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1hbnRhbCBhbmQgbWlnaHQgZG8gbm90IHN1cHBvcnQgYWxsIHRoZSB1c2UgY2FzZXMuXG4gICAqL1xuICBsYXp5Um93c1JlbmRlcmluZzogZmFsc2UsXG4gIGxhenlSb3dzUmVuZGVyaW5nU3RhcnRSb3c6IDMsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGNoZWNrYm94IGFuZCByYWRpb2dyb3VwIGl0ZW1zIGFyZSBvcmRlcmVkIGluIHJvd3MuXG4gICAqIFNldCBpdCBcImNvbHVtblwiLCBhbmQgaXRlbXMgd2lsbCBiZSBvcmRlcmVkIGluIGNvbHVtbnMuXG4gICAqL1xuICBzaG93SXRlbXNJbk9yZGVyOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIFN1cHBvcnRlZCB2YWxpZGF0b3JzIGJ5IHF1ZXN0aW9uIHR5cGVzLiBZb3UgY2FuIG1vZGlmeSB0aGlzIHZhcmlhYmxlIHRvIGFkZCB2YWxpZGF0b3JzIGZvciBuZXcgcXVlc3Rpb24gdHlwZXMgb3IgYWRkL3JlbW92ZSBmb3IgZXhpc3RpbmcgcXVlc3Rpb24gdHlwZXMuXG4gICAqL1xuICBzdXBwb3J0ZWRWYWxpZGF0b3JzOiB7XG4gICAgcXVlc3Rpb246IFtcImV4cHJlc3Npb25cIl0sXG4gICAgY29tbWVudDogW1widGV4dFwiLCBcInJlZ2V4XCJdLFxuICAgIHRleHQ6IFtcIm51bWVyaWNcIiwgXCJ0ZXh0XCIsIFwicmVnZXhcIiwgXCJlbWFpbFwiXSxcbiAgICBjaGVja2JveDogW1wiYW5zd2VyY291bnRcIl0sXG4gICAgaW1hZ2VwaWNrZXI6IFtcImFuc3dlcmNvdW50XCJdLFxuICB9LFxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBhcyBzdHJpbmcgXCJ5eXl5LW1tLWRkXCIuIHRleHQgcXVlc3Rpb25zIHdpdGggaW5wdXRUeXBlIFwiZGF0ZVwiIHdpbGwgbm90IGFsbG93IHRvIHNldCB0byBzdXJ2ZXkgZGF0ZSB0aGF0IGxlc3MgdGhhbiB0aGlzIHZhbHVlXG4gICAqL1xuICBtaW5EYXRlOiBcIlwiLFxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBhcyBzdHJpbmcgXCJ5eXl5LW1tLWRkXCIuIHRleHQgcXVlc3Rpb25zIHdpdGggaW5wdXRUeXBlIFwiZGF0ZVwiIHdpbGwgbm90IGFsbG93IHRvIHNldCB0byBzdXJ2ZXkgZGF0ZSB0aGF0IGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlXG4gICAqL1xuICBtYXhEYXRlOiBcIlwiLFxuICBzaG93TW9kYWw6IDxcbiAgICAoXG4gICAgICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gICAgICBkYXRhOiBhbnksXG4gICAgICBvbkFwcGx5OiAoKSA9PiBib29sZWFuLFxuICAgICAgb25DYW5jZWw/OiAoKSA9PiB2b2lkLFxuICAgICAgY3NzQ2xhc3M/OiBzdHJpbmcsXG4gICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgIGRpc3BsYXlNb2RlPzogXCJwb3B1cFwiIHwgXCJvdmVybGF5XCJcbiAgICApID0+IHZvaWRcbiAgICA+dW5kZWZpbmVkLFxuICBzdXBwb3J0Q3JlYXRvclYyOiBmYWxzZSxcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIGxpc3Qgb2YgY3VzdG9tIGljb25zLlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZXBsYWNlIFN1cnZleUpTIGRlZmF1bHQgaWNvbnMgKGRpc3BsYXllZCBpbiBVSSBlbGVtZW50cyBvZiBTdXJ2ZXlKUyBMaWJyYXJ5IG9yIENyZWF0b3IpIHdpdGggeW91ciBjdXN0b20gaWNvbnMuXG4gICAqIEZvciBldmVyeSBkZWZhdWx0IGljb24gdG8gcmVwbGFjZSwgYWRkIGEga2V5L3ZhbHVlIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IGljb24ncyBuYW1lIGFzIGEga2V5IGFuZCB0aGUgbmFtZSBvZiB5b3VyIGN1c3RvbSBpY29uIGFzIGEgdmFsdWUuXG4gICAqIEZvciBleGFtcGxlOiBTdXJ2ZXkuc2V0dGluZ3MuY3VzdG9tSWNvbnNbXCJpY29uLXJlZG9cIl0gPSBcIm15LW93bi1yZWRvLWljb25cIlxuICAgKi9cbiAgY3VzdG9tSWNvbnM6IHt9LFxuICB0aXRsZVRhZ3M6IHtcbiAgICBzdXJ2ZXk6IFwiaDNcIixcbiAgICBwYWdlOiBcImg0XCIsXG4gICAgcGFuZWw6IFwiaDRcIixcbiAgICBxdWVzdGlvbjogXCJoNVwiLFxuICB9XG59O1xuIiwiaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWN0aW9uXCI7XG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuLi9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lclwiO1xuXG5pbnRlcmZhY2UgSURpbWVuc2lvbnMge1xuICBzY3JvbGw6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBSZXNwb25zaXZpdHlNYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgbWluRGltZW5zaW9uQ29uc3QgPSA1NjtcbiAgcHJpdmF0ZSBzZXBhcmF0b3JTaXplID0gMTc7XG4gIHByaXZhdGUgc2VwYXJhdG9yQWRkQ29uc3QgPSAxO1xuICBwcml2YXRlIHBhZGRpbmdTaXplQ29uc3QgPSA4O1xuICBwcm90ZWN0ZWQgcmVjYWxjTWluRGltZW5zaW9uQ29uc3QgPSB0cnVlO1xuXG4gIHB1YmxpYyBnZXRDb21wdXRlZFN0eWxlOiAoXG4gICAgZWx0OiBFbGVtZW50XG4gICkgPT4gQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLmJpbmQod2luZG93KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCxcbiAgICBwcml2YXRlIG1vZGVsOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcixcbiAgICBwcml2YXRlIGl0ZW1zU2VsZWN0b3I6IHN0cmluZyxcbiAgICBwcml2YXRlIGRvdHNJdGVtU2l6ZTogbnVtYmVyID0gNDgsXG4gICkge1xuXG4gICAgdGhpcy5tb2RlbC51cGRhdGVDYWxsYmFjayA9IChpc1Jlc2V0SW5pdGlhbGl6ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmKGlzUmVzZXRJbml0aWFsaXplZClcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucHJvY2VzcygpO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoXykgPT4gdGhpcy5wcm9jZXNzKCkpO1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGFpbmVyLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaW1lbnNpb25zKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSURpbWVuc2lvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGw6IGVsZW1lbnQuc2Nyb2xsV2lkdGgsXG4gICAgICBvZmZzZXQ6IGVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBdmFpbGFibGVTcGFjZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuY29udGFpbmVyKTtcbiAgICBsZXQgc3BhY2UgPSB0aGlzLmNvbnRhaW5lci5vZmZzZXRXaWR0aDtcbiAgICBpZiAoc3R5bGUuYm94U2l6aW5nID09PSBcImJvcmRlci1ib3hcIikge1xuICAgICAgc3BhY2UgLT0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nTGVmdCkgKyBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdSaWdodCk7XG4gICAgfVxuICAgIHJldHVybiBzcGFjZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYWxjSXRlbVNpemUoaXRlbTogSFRNTERpdkVsZW1lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBpdGVtLm9mZnNldFdpZHRoO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjTWluRGltZW5zaW9uKGN1cnJlbnRBY3Rpb246IEFjdGlvbikge1xuICAgIGxldCBtaW5EaW1lbnNpb25Db25zdCA9IHRoaXMubWluRGltZW5zaW9uQ29uc3Q7XG4gICAgaWYoY3VycmVudEFjdGlvbi5pY29uU2l6ZSAmJiB0aGlzLnJlY2FsY01pbkRpbWVuc2lvbkNvbnN0KSB7XG4gICAgICBtaW5EaW1lbnNpb25Db25zdCA9IDIgKiBjdXJyZW50QWN0aW9uLmljb25TaXplICsgdGhpcy5wYWRkaW5nU2l6ZUNvbnN0O1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudEFjdGlvbi5jYW5TaHJpbmtcbiAgICAgID8gbWluRGltZW5zaW9uQ29uc3QgK1xuICAgICAgKGN1cnJlbnRBY3Rpb24ubmVlZFNlcGFyYXRvciA/IHRoaXMuc2VwYXJhdG9yU2l6ZSA6IDApXG4gICAgICA6IGN1cnJlbnRBY3Rpb24ubWF4RGltZW5zaW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjSXRlbXNTaXplcygpIHtcbiAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5tb2RlbC5hY3Rpb25zO1xuICAgIHRoaXMuY29udGFpbmVyXG4gICAgICAucXVlcnlTZWxlY3RvckFsbCh0aGlzLml0ZW1zU2VsZWN0b3IpXG4gICAgICAuZm9yRWFjaCgoaXRlbTogSFRNTERpdkVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgbGV0IGN1cnJlbnRBY3Rpb24gPSBhY3Rpb25zW2luZGV4XTtcbiAgICAgICAgY3VycmVudEFjdGlvbi5tYXhEaW1lbnNpb24gPSB0aGlzLmNhbGNJdGVtU2l6ZShpdGVtKTtcbiAgICAgICAgY3VycmVudEFjdGlvbi5taW5EaW1lbnNpb24gPSB0aGlzLmNhbGNNaW5EaW1lbnNpb24oY3VycmVudEFjdGlvbik7XG4gICAgICB9KTtcbiAgfVxuICBwcml2YXRlIGdldCBpc0NvbnRhaW5lclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKFxuICAgICAgdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGggfHxcbiAgICAgIHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCB8fFxuICAgICAgdGhpcy5jb250YWluZXIuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGhcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcHJvY2VzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NvbnRhaW5lclZpc2libGUpIHtcbiAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMubW9kZWwuYWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IChhY3Rpb24ubW9kZSA9IFwibGFyZ2VcIikpO1xuICAgICAgICB0aGlzLmNhbGNJdGVtc1NpemVzKCk7XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLm1vZGVsLmZpdCh0aGlzLmdldEF2YWlsYWJsZVNwYWNlKCksIHRoaXMuZG90c0l0ZW1TaXplKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsLnVwZGF0ZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIGlmICghIXRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyIGV4dGVuZHMgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICAgIGl0ZW1zU2VsZWN0b3I6IHN0cmluZyxcbiAgICBkb3RzSXRlbVNpemU/OiBudW1iZXJcbiAgKSB7XG4gICAgc3VwZXIoY29udGFpbmVyLCBtb2RlbCwgaXRlbXNTZWxlY3RvciwgZG90c0l0ZW1TaXplKTtcbiAgICB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0ID0gNDA7XG4gICAgdGhpcy5yZWNhbGNNaW5EaW1lbnNpb25Db25zdCA9IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpbWVuc2lvbnMoKTogSURpbWVuc2lvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGw6IHRoaXMuY29udGFpbmVyLnNjcm9sbEhlaWdodCxcbiAgICAgIG9mZnNldDogdGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0LFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QXZhaWxhYmxlU3BhY2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgbGV0IHNwYWNlOiBudW1iZXIgPSB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgaWYgKHN0eWxlLmJveFNpemluZyA9PT0gXCJib3JkZXItYm94XCIpIHtcbiAgICAgIHNwYWNlIC09IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1RvcCkgKyBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdCb3R0b20pO1xuICAgIH1cbiAgICByZXR1cm4gc3BhY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FsY0l0ZW1TaXplKGl0ZW06IEhUTUxEaXZFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXRlbS5vZmZzZXRIZWlnaHQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vLi4vc2V0dGluZ3NcIjtcbmZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyhhOiBhbnksIGI6IGFueSkge1xuICBjb25zdCByZWdFeFN0cmlwMDogUmVnRXhwID0gLyhcXC4wKykrJC87XG4gIGNvbnN0IHNlZ21lbnRzQTogc3RyaW5nW10gPSBhLnJlcGxhY2UocmVnRXhTdHJpcDAsIFwiXCIpLnNwbGl0KFwiLlwiKTtcbiAgY29uc3Qgc2VnbWVudHNCOiBzdHJpbmdbXSA9IGIucmVwbGFjZShyZWdFeFN0cmlwMCwgXCJcIikuc3BsaXQoXCIuXCIpO1xuICBjb25zdCBsZW46IG51bWJlciA9IE1hdGgubWluKHNlZ21lbnRzQS5sZW5ndGgsIHNlZ21lbnRzQi5sZW5ndGgpO1xuICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBkaWZmOiBudW1iZXIgPVxuICAgICAgcGFyc2VJbnQoc2VnbWVudHNBW2ldLCAxMCkgLSBwYXJzZUludChzZWdtZW50c0JbaV0sIDEwKTtcbiAgICBpZiAoZGlmZikge1xuICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZWdtZW50c0EubGVuZ3RoIC0gc2VnbWVudHNCLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGNvbmZpcm1BY3Rpb24obWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghIXNldHRpbmdzICYmICEhc2V0dGluZ3MuY29uZmlybUFjdGlvbkZ1bmMpXG4gICAgcmV0dXJuIHNldHRpbmdzLmNvbmZpcm1BY3Rpb25GdW5jKG1lc3NhZ2UpO1xuICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGRldGVjdElFQnJvd3NlcigpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgdWE6IHN0cmluZyA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICBjb25zdCBvbGRJZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICBjb25zdCBlbGV2ZW5JZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICByZXR1cm4gb2xkSWUgPiAtMSB8fCBlbGV2ZW5JZSA+IC0xO1xufVxuZnVuY3Rpb24gZGV0ZWN0SUVPckVkZ2UoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjb25zdCB1YTogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICAgIGNvbnN0IHRyaWRlbnQ6IG51bWJlciA9IHVhLmluZGV4T2YoXCJUcmlkZW50L1wiKTtcbiAgICBjb25zdCBlZGdlOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiRWRnZS9cIik7XG4gICAgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPSBlZGdlID4gMCB8fCB0cmlkZW50ID4gMCB8fCBtc2llID4gMDtcbiAgfVxuICByZXR1cm4gKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2U7XG59XG5mdW5jdGlvbiBsb2FkRmlsZUZyb21CYXNlNjQoYjY0RGF0YTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYnl0ZVN0cmluZzogc3RyaW5nID0gYXRvYihiNjREYXRhLnNwbGl0KFwiLFwiKVsxXSk7XG5cbiAgICAvLyBzZXBhcmF0ZSBvdXQgdGhlIG1pbWUgY29tcG9uZW50XG4gICAgY29uc3QgbWltZVN0cmluZzogc3RyaW5nID0gYjY0RGF0YVxuICAgICAgLnNwbGl0KFwiLFwiKVswXVxuICAgICAgLnNwbGl0KFwiOlwiKVsxXVxuICAgICAgLnNwbGl0KFwiO1wiKVswXTtcblxuICAgIC8vIHdyaXRlIHRoZSBieXRlcyBvZiB0aGUgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyXG4gICAgY29uc3QgYWI6IEFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICBjb25zdCBpYTogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICAvLyB3cml0ZSB0aGUgQXJyYXlCdWZmZXIgdG8gYSBibG9iLCBhbmQgeW91J3JlIGRvbmVcbiAgICBjb25zdCBiYjogQmxvYiA9IG5ldyBCbG9iKFthYl0sIHsgdHlwZTogbWltZVN0cmluZyB9KTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICB3aW5kb3cubmF2aWdhdG9yICYmXG4gICAgICAoPGFueT53aW5kb3cubmF2aWdhdG9yKVtcIm1zU2F2ZUJsb2JcIl1cbiAgICApIHtcbiAgICAgICg8YW55PndpbmRvdy5uYXZpZ2F0b3IpW1wibXNTYXZlT3JPcGVuQmxvYlwiXShiYiwgZmlsZU5hbWUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7IH1cbn1cbmZ1bmN0aW9uIGlzTW9iaWxlKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5vcmllbnRhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnRWaXNpYmxlKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgdGhyZXNob2xkOiBudW1iZXIgPSAwXG4pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBlbGVtZW50UmVjdDogRE9NUmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHZpZXdIZWlnaHQ6IG51bWJlciA9IE1hdGgubWF4KFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgd2luZG93LmlubmVySGVpZ2h0XG4gICk7XG4gIGNvbnN0IHRvcFdpbjogbnVtYmVyID0gLXRocmVzaG9sZDtcbiAgY29uc3QgYm90dG9tV2luOiBudW1iZXIgPSB2aWV3SGVpZ2h0ICsgdGhyZXNob2xkO1xuICBjb25zdCB0b3BFbDogbnVtYmVyID0gZWxlbWVudFJlY3QudG9wO1xuICBjb25zdCBib3R0b21FbDogbnVtYmVyID0gZWxlbWVudFJlY3QuYm90dG9tO1xuXG4gIGNvbnN0IG1heFRvcDogbnVtYmVyID0gTWF0aC5tYXgodG9wV2luLCB0b3BFbCk7XG4gIGNvbnN0IG1pbkJvdHRvbTogbnVtYmVyID0gTWF0aC5taW4oYm90dG9tV2luLCBib3R0b21FbCk7XG4gIHJldHVybiBtYXhUb3AgPD0gbWluQm90dG9tO1xufVxuXG5mdW5jdGlvbiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuICBpZiAoXG4gICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBlbGVtZW50LmNsaWVudEhlaWdodCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WSA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1kgPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGlmIChcbiAgICBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WCA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1ggPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxFbGVtZW50QnlDaGlsZElkKGlkOiBzdHJpbmcpIHtcbiAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICBjb25zdCBzY3JvbGxhYmxlRWwgPSBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbCk7XG4gIGlmICghIXNjcm9sbGFibGVFbCkge1xuICAgIHNjcm9sbGFibGVFbC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNjcm9sbFwiKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SWNvbk5hbWVGcm9tUHJveHkoaWNvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaWNvbk5hbWUpIHJldHVybiBpY29uTmFtZTtcbiAgdmFyIHByb3h5TmFtZSA9ICg8YW55PnNldHRpbmdzLmN1c3RvbUljb25zKVtpY29uTmFtZV07XG4gIHJldHVybiAhIXByb3h5TmFtZSA/IHByb3h5TmFtZSA6IGljb25OYW1lO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdmcoXG4gIHNpemU6IG51bWJlciB8IHN0cmluZyxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGljb25OYW1lOiBzdHJpbmcsXG4gIHN2Z0VsZW06IGFueVxuKSB7XG4gIGlmKHNpemUgIT09IFwiYXV0b1wiKSB7XG4gICAgc3ZnRWxlbS5zdHlsZS53aWR0aCA9IChzaXplIHx8IHdpZHRoIHx8IDE2KSArIFwicHhcIjtcbiAgICBzdmdFbGVtLnN0eWxlLmhlaWdodCA9IChzaXplIHx8IGhlaWdodCB8fCAxNikgKyBcInB4XCI7XG4gIH1cbiAgY29uc3Qgbm9kZTogYW55ID0gc3ZnRWxlbS5jaGlsZE5vZGVzWzBdO1xuICBjb25zdCByZWFsSWNvbk5hbWUgPSBnZXRJY29uTmFtZUZyb21Qcm94eShpY29uTmFtZSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlTlMoXG4gICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgXCJ4bGluazpocmVmXCIsXG4gICAgXCIjXCIgKyByZWFsSWNvbk5hbWVcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcDxUPih2YWx1ZTogVCB8ICgoKSA9PiBUKSk6IFQge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICg8KCkgPT4gVD52YWx1ZSkoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2l6ZSh2YWx1ZTogYW55KSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gXCJcIiArIHZhbHVlICsgXCJweFwiO1xuICB9XG4gIGlmICghIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbGFzdFN5bWJvbDogc3RyaW5nID0gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV07XG4gICAgaWYgKChsYXN0U3ltYm9sID49IFwiMFwiICYmIGxhc3RTeW1ib2wgPD0gXCI5XCIpIHx8IGxhc3RTeW1ib2wgPT0gXCIuXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG51bTogbnVtYmVyID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBcIlwiICsgbnVtICsgXCJweFwiO1xuICAgICAgfSBjYXRjaCB7IH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBkb0tleTJDbGlja1VwKGV2dDogS2V5Ym9hcmRFdmVudCwgb3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSB9KTogdm9pZCB7XG4gIGlmICghIWV2dC50YXJnZXQgJiYgKDxhbnk+ZXZ0LnRhcmdldClbXCJjb250ZW50RWRpdGFibGVcIl0gPT09IFwidHJ1ZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGVsZW1lbnQ6IGFueSA9IGV2dC50YXJnZXQ7XG4gIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICBjb25zdCBjaGFyOiBudW1iZXIgPSBldnQud2hpY2ggfHwgZXZ0LmtleUNvZGU7XG4gIGlmIChjaGFyID09PSAxMyB8fCBjaGFyID09PSAzMikge1xuICAgIGlmIChlbGVtZW50LmNsaWNrKSBlbGVtZW50LmNsaWNrKCk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5wcm9jZXNzRXNjICYmIGNoYXIgPT09IDI3KSB7XG4gICAgaWYgKGVsZW1lbnQuYmx1cikgZWxlbWVudC5ibHVyKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRvS2V5MkNsaWNrRG93bihldnQ6IEtleWJvYXJkRXZlbnQsIG9wdGlvbnMgPSB7IHByb2Nlc3NFc2M6IHRydWUgfSk6IHZvaWQge1xuICBpZiAoISFldnQudGFyZ2V0ICYmICg8YW55PmV2dC50YXJnZXQpW1wiY29udGVudEVkaXRhYmxlXCJdID09PSBcInRydWVcIikge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY2hhciA9IGV2dC53aGljaCB8fCBldnQua2V5Q29kZTtcbiAgY29uc3Qgc3VwcG9ydGVkQ29kZXMgPSBbMTMsIDMyXTtcbiAgaWYgKG9wdGlvbnMucHJvY2Vzc0VzYykge1xuICAgIHN1cHBvcnRlZENvZGVzLnB1c2goMjcpO1xuICB9XG4gIGlmIChzdXBwb3J0ZWRDb2Rlcy5pbmRleE9mKGNoYXIpICE9PSAtMSkge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG5mdW5jdGlvbiBpbmNyZWFzZUhlaWdodEJ5Q29udGVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgZ2V0Q29tcHV0ZWRTdHlsZT86IChlbHQ6IEVsZW1lbnQpID0+IGFueSkge1xuICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgaWYgKCFnZXRDb21wdXRlZFN0eWxlKSBnZXRDb21wdXRlZFN0eWxlID0gKGVsdDogRWxlbWVudCkgPT4geyByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWx0KTsgfTtcblxuICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7XG4gIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gKGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICsgcGFyc2VGbG9hdChzdHlsZS5ib3JkZXJUb3BXaWR0aCkgKyBwYXJzZUZsb2F0KHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKSkgKyBcInB4XCI7XG59XG5mdW5jdGlvbiBnZXRPcmlnaW5hbEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgcmV0dXJuIGV2ZW50Lm9yaWdpbmFsRXZlbnQgfHwgZXZlbnQ7XG59XG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdHMoZXZlbnQ6IGFueSkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IHtcbiAgY29tcGFyZVZlcnNpb25zLFxuICBjb25maXJtQWN0aW9uLFxuICBkZXRlY3RJRU9yRWRnZSxcbiAgZGV0ZWN0SUVCcm93c2VyLFxuICBsb2FkRmlsZUZyb21CYXNlNjQsXG4gIGlzTW9iaWxlLFxuICBpc0VsZW1lbnRWaXNpYmxlLFxuICBmaW5kU2Nyb2xsYWJsZVBhcmVudCxcbiAgc2Nyb2xsRWxlbWVudEJ5Q2hpbGRJZCxcbiAgY3JlYXRlU3ZnLFxuICBkb0tleTJDbGlja1VwLFxuICBkb0tleTJDbGlja0Rvd24sXG4gIGdldEljb25OYW1lRnJvbVByb3h5LFxuICBpbmNyZWFzZUhlaWdodEJ5Q29udGVudCxcbiAgZ2V0T3JpZ2luYWxFdmVudCxcbiAgcHJldmVudERlZmF1bHRzXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fOyJdLCJzb3VyY2VSb290IjoiIn0=