@kepler.gl/components 3.3.0-alpha.7 → 3.3.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/common/data-table/grid.js +2 -2
- package/dist/cjs/common/data-table/index.js +3 -3
- package/dist/cjs/common/file-uploader/file-upload.js +251 -40
- package/dist/cjs/common/icons/circle.js +54 -0
- package/dist/cjs/common/icons/index.js +8 -1
- package/dist/cjs/common/item-selector/item-selector.js +2 -2
- package/dist/cjs/common/portaled.js +3 -3
- package/dist/cjs/common/time-range-slider.js +2 -2
- package/dist/cjs/common/timeline-slider.js +2 -2
- package/dist/cjs/editor/editor.js +2 -2
- package/dist/cjs/effects/effect-configurator.js +2 -2
- package/dist/cjs/effects/effect-manager.js +32 -17
- package/dist/cjs/effects/effect-time-configurator.js +110 -42
- package/dist/cjs/filters/filter-panels/polygon-filter-panel.js +2 -2
- package/dist/cjs/filters/time-widget.js +2 -2
- package/dist/cjs/kepler-gl.js +6 -2
- package/dist/cjs/map/layer-hover-info.js +2 -2
- package/dist/cjs/map/map-control.js +2 -2
- package/dist/cjs/map/map-draw-panel.js +10 -1
- package/dist/cjs/map-container.js +2 -2
- package/dist/cjs/map-view-state-context.js +3 -3
- package/dist/cjs/modal-container.js +2 -2
- package/dist/cjs/modals/cloud-components/cloud-storage-disclaimer.js +24 -0
- package/dist/cjs/modals/cloud-tile.js +39 -10
- package/dist/cjs/modals/export-map-modal/components.js +16 -7
- package/dist/cjs/modals/export-map-modal/export-html-map.js +5 -9
- package/dist/cjs/modals/export-map-modal/export-json-map.js +4 -8
- package/dist/cjs/modals/export-map-modal/export-map-modal.js +21 -16
- package/dist/cjs/modals/image-modal-container.js +2 -2
- package/dist/cjs/modals/load-data-modal.js +3 -3
- package/dist/cjs/modals/load-storage-map.js +9 -6
- package/dist/cjs/modals/save-map-modal.js +4 -3
- package/dist/cjs/modals/share-map-modal.js +5 -4
- package/dist/cjs/modals/swipe-export-video-preview.js +2 -2
- package/dist/cjs/notification-panel/notification-item.js +58 -12
- package/dist/cjs/plot-container.js +12 -5
- package/dist/cjs/remote-dataset-refresh-controller.js +50 -0
- package/dist/cjs/side-panel/common/dataset-info.js +187 -8
- package/dist/cjs/side-panel/common/dataset-refresh-progress.js +63 -0
- package/dist/cjs/side-panel/common/dataset-title.js +76 -13
- package/dist/cjs/side-panel/common/source-data-catalog.js +31 -6
- package/dist/cjs/side-panel/filter-manager.js +7 -3
- package/dist/cjs/side-panel/filter-panel/filter-panel.js +2 -2
- package/dist/cjs/side-panel/layer-manager.js +14 -4
- package/dist/cjs/side-panel/layer-panel/custom-palette.js +2 -2
- package/dist/cjs/side-panel/layer-panel/dataset-layer-section.js +14 -4
- package/dist/cjs/side-panel/layer-panel/dataset-section.js +7 -3
- package/dist/cjs/side-panel/layer-panel/layer-configurator.js +49 -35
- package/dist/cjs/side-panel/layer-panel/vector-tile-layer-configurator.js +4 -3
- package/dist/common/icons/circle.d.ts +10 -0
- package/dist/common/icons/index.d.ts +1 -0
- package/dist/effects/effect-manager.d.ts +1 -1
- package/dist/esm/common/data-table/grid.js +2 -2
- package/dist/esm/common/data-table/index.js +3 -3
- package/dist/esm/common/file-uploader/file-upload.js +252 -41
- package/dist/esm/common/icons/circle.js +48 -0
- package/dist/esm/common/icons/index.js +2 -1
- package/dist/esm/common/item-selector/item-selector.js +2 -2
- package/dist/esm/common/portaled.js +3 -3
- package/dist/esm/common/time-range-slider.js +2 -2
- package/dist/esm/common/timeline-slider.js +2 -2
- package/dist/esm/editor/editor.js +2 -2
- package/dist/esm/effects/effect-configurator.js +2 -2
- package/dist/esm/effects/effect-manager.js +34 -19
- package/dist/esm/effects/effect-time-configurator.js +111 -43
- package/dist/esm/filters/filter-panels/polygon-filter-panel.js +2 -2
- package/dist/esm/filters/time-widget.js +2 -2
- package/dist/esm/kepler-gl.js +6 -2
- package/dist/esm/map/layer-hover-info.js +2 -2
- package/dist/esm/map/map-control.js +2 -2
- package/dist/esm/map/map-draw-panel.js +11 -2
- package/dist/esm/map-container.js +2 -2
- package/dist/esm/map-view-state-context.js +3 -3
- package/dist/esm/modal-container.js +2 -2
- package/dist/esm/modals/cloud-components/cloud-storage-disclaimer.js +19 -0
- package/dist/esm/modals/cloud-tile.js +39 -10
- package/dist/esm/modals/export-map-modal/components.js +16 -7
- package/dist/esm/modals/export-map-modal/export-html-map.js +6 -10
- package/dist/esm/modals/export-map-modal/export-json-map.js +5 -9
- package/dist/esm/modals/export-map-modal/export-map-modal.js +21 -14
- package/dist/esm/modals/image-modal-container.js +2 -2
- package/dist/esm/modals/load-data-modal.js +3 -3
- package/dist/esm/modals/load-storage-map.js +8 -3
- package/dist/esm/modals/save-map-modal.js +4 -3
- package/dist/esm/modals/share-map-modal.js +5 -4
- package/dist/esm/modals/swipe-export-video-preview.js +2 -2
- package/dist/esm/notification-panel/notification-item.js +60 -14
- package/dist/esm/plot-container.js +12 -5
- package/dist/esm/remote-dataset-refresh-controller.js +44 -0
- package/dist/esm/side-panel/common/dataset-info.js +186 -9
- package/dist/esm/side-panel/common/dataset-refresh-progress.js +56 -0
- package/dist/esm/side-panel/common/dataset-title.js +77 -14
- package/dist/esm/side-panel/common/source-data-catalog.js +29 -6
- package/dist/esm/side-panel/filter-manager.js +7 -3
- package/dist/esm/side-panel/filter-panel/filter-panel.js +2 -2
- package/dist/esm/side-panel/layer-manager.js +14 -4
- package/dist/esm/side-panel/layer-panel/custom-palette.js +2 -2
- package/dist/esm/side-panel/layer-panel/dataset-layer-section.js +14 -4
- package/dist/esm/side-panel/layer-panel/dataset-section.js +7 -3
- package/dist/esm/side-panel/layer-panel/layer-configurator.js +49 -35
- package/dist/esm/side-panel/layer-panel/vector-tile-layer-configurator.js +4 -3
- package/dist/kepler-gl.d.ts +1 -0
- package/dist/modals/cloud-components/cloud-storage-disclaimer.d.ts +2 -0
- package/dist/modals/export-map-modal/components.d.ts +14 -0
- package/dist/remote-dataset-refresh-controller.d.ts +11 -0
- package/dist/side-panel/common/dataset-info.d.ts +10 -0
- package/dist/side-panel/common/dataset-refresh-progress.d.ts +11 -0
- package/dist/side-panel/common/dataset-title.d.ts +5 -0
- package/dist/side-panel/common/source-data-catalog.d.ts +3 -0
- package/dist/side-panel/layer-panel/dataset-section.d.ts +2 -0
- package/package.json +17 -18
|
@@ -49,7 +49,7 @@ var _core = require("@deck.gl/core");
|
|
|
49
49
|
var _react2 = _interopRequireDefault(require("@deck.gl/react"));
|
|
50
50
|
var _reselect = require("reselect");
|
|
51
51
|
var _core2 = require("@dnd-kit/core");
|
|
52
|
-
var _debounce = _interopRequireDefault(require("
|
|
52
|
+
var _debounce = _interopRequireDefault(require("es-toolkit/compat/debounce"));
|
|
53
53
|
var _mapPopover = _interopRequireDefault(require("./map/map-popover"));
|
|
54
54
|
var _mapControl = _interopRequireDefault(require("./map/map-control"));
|
|
55
55
|
var _mapScale = _interopRequireDefault(require("./map/map-scale"));
|
|
@@ -1330,4 +1330,4 @@ function MapContainerFactory(MapPopover, MapControl, Editor, MapScale) {
|
|
|
1330
1330
|
});
|
|
1331
1331
|
return (0, _styledComponents.withTheme)(MapContainer);
|
|
1332
1332
|
}
|
|
1333
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9tYXBib3hMZWdhY3kiLCJfcmVhY3RNYXBsaWJyZSIsIl9jb3JlIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVzZWxlY3QiLCJfY29yZTIiLCJfZGVib3VuY2UiLCJfbWFwUG9wb3ZlciIsIl9tYXBDb250cm9sIiwiX21hcFNjYWxlIiwiX3N0eWxlZENvbXBvbmVudHMyIiwiX2F0dHJpYnV0aW9uIiwiX2VkaXRvciIsIl9maWx0ZXJGZWF0dXJlQmFkZ2VzIiwiX2Fubm90YXRpb25zIiwiX2xheWVycyIsIl91dGlscyIsIl9jb25zdGFudHMiLCJfZGVja2dsTGF5ZXJzIiwiX2RuZExheWVySXRlbXMiLCJfbWFwVmlld1N0YXRlQ29udGV4dCIsIl9lcnJvckJvdW5kYXJ5IiwiX2xvY2FsaXphdGlvbiIsIl9yZWR1Y2VycyIsIl9sb2FkaW5nSW5kaWNhdG9yIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIkRFQk9VTkNFX1ZJRVdQT1JUX1BST1BBR0FURSIsIkRFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFIiwiREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUiLCJNQVBfU1RZTEUiLCJjb250YWluZXIiLCJkaXNwbGF5IiwicG9zaXRpb24iLCJ3aWR0aCIsImhlaWdodCIsInRvcCIsInBvaW50ZXJFdmVudHMiLCJMT0NBTEVfQ09ERVNfQVJSQVkiLCJMT0NBTEVfQ09ERVMiLCJTdHlsZWRNYXAiLCJzdHlsZWQiLCJTdHlsZWRNYXBDb250YWluZXIiLCJfcmVmIiwiX3JlZiQkbWl4QmxlbmRNb2RlIiwiJG1peEJsZW5kTW9kZSIsIiRtYXBMaWJDc3NDbGFzcyIsImNvbmNhdCIsIk1BUEJPWEdMX1NUWUxFX1VQREFURSIsIk1BUEJPWEdMX1JFTkRFUiIsIk9TTV9BVFRSSUJVVElPTl9IVE1MIiwiU3R5bGVkRHJvcHBhYmxlIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsIiRpc092ZXIiLCJ0aGVtZSIsImRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJTdHlsZWRNYXBTY2FsZUNvbnRhaW5lciIsInNpZGVQYW5lbCIsIm1hcmdpbiIsImxlZnQiLCIkYm90dG9tT2Zmc2V0IiwiJGxlZnQiLCJpc1NwbGl0U2VsZWN0b3IiLCJleHBvcnRzIiwidmlzU3RhdGUiLCJzcGxpdE1hcHMiLCJEcm9wcGFibGUiLCJfcmVmMiIsImNvbnRhaW5lcklkIiwiX3VzZURyb3BwYWJsZSIsInVzZURyb3BwYWJsZSIsImlkIiwiZGF0YSIsInR5cGUiLCJEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFIiwiaW5kZXgiLCJkaXNhYmxlZCIsImlzT3ZlciIsInNldE5vZGVSZWYiLCJjcmVhdGVFbGVtZW50IiwicmVmIiwiTWFwQ29udGFpbmVyRmFjdG9yeSIsImRlcHMiLCJNYXBQb3BvdmVyRmFjdG9yeSIsIk1hcENvbnRyb2xGYWN0b3J5IiwiRWRpdG9yRmFjdG9yeSIsIk1hcFNjYWxlRmFjdG9yeSIsIk1hcFBvcG92ZXIiLCJNYXBDb250cm9sIiwiRWRpdG9yIiwiTWFwU2NhbGUiLCJNYXBDb250YWluZXIiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwic2hvd0Jhc2VNYXBMaWJMb2dvIiwiYmFzZW1hcEF0dHJpYnV0aW9ucyIsImNyZWF0ZVJlZiIsIm9uTWFwUmVuZGVyIiwiX21hcCIsImRpbWVuc2lvbnMiLCJfdGhpcyRwcm9wcyIsInByaW1hcnkiLCJtYXBTdGF0ZUFjdGlvbnMiLCJ1cGRhdGVNYXAiLCJsYXllcnMiLCJsYXllckRhdGEiLCJjcmVhdGVTZWxlY3RvciIsInNwbGl0TWFwU2VsZWN0b3IiLCJzcGxpdE1hcEluZGV4U2VsZWN0b3IiLCJnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzIiwibGF5ZXJPcmRlciIsImxheWVyc1NlbGVjdG9yIiwibGF5ZXJEYXRhU2VsZWN0b3IiLCJtYXBMYXllcnNTZWxlY3RvciIsInByZXBhcmVMYXllcnNUb1JlbmRlciIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwiZmlsdGVycyIsImZpbHRlcnNTZWxlY3RvciIsIkZJTFRFUl9UWVBFUyIsInBvbHlnb24iLCJlbmFibGVkIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJwb2x5Z29uRmlsdGVyc1NlbGVjdG9yIiwiZmVhdHVyZXNTZWxlY3RvciIsInBvbHlnb25GaWx0ZXJzIiwibWFwIiwidmFsdWUiLCJmZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yIiwic2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IiLCJjb2xsZWN0aW9uIiwiZmluZEluZGV4IiwiX3Byb3BzJGdlbmVyYXRlTWFwYm94IiwiZ2VuZXJhdGVNYXBib3hMYXllcnMiLCJsYXllck9yZGVyU2VsZWN0b3IiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yIiwibGF5ZXIiLCJsYXllcnNUb1JlbmRlciIsImdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QiLCJtYXBTdHlsZSIsInN0eWxlVHlwZSIsImJhY2tncm91bmRDb2xvciIsIl9wcm9wcyRtYXBTdGF0ZSIsIm1hcFN0YXRlIiwiZ2xvYmUiLCJfcHJvcHMkbWFwU3RhdGUyIiwiY29uZmlnIiwiX3Byb3BzJG1hcFN0YXRlMyIsInN0YXJzIiwibWFwU3R5bGVUeXBlU2VsZWN0b3IiLCJtYXBTdHlsZUJhY2tncm91bmRDb2xvclNlbGVjdG9yIiwiZ2xvYmVNb2RlU2VsZWN0b3IiLCJnbG9iZUJhY2tncm91bmRDb2xvclNlbGVjdG9yIiwiZ2xvYmVTdGFyc1NlbGVjdG9yIiwiaXNHbG9iZU1vZGUiLCJnbG9iZUJhY2tncm91bmRDb2xvciIsImdsb2JlU3RhcnMiLCJOT19NQVBfSUQiLCJyZ2JUb0hleCIsImdldEdsb2JlQ2xlYXJDb2xvciIsInNsaWNlIiwiYmFja2dyb3VuZEltYWdlIiwiZ2V0U3RhcnNCYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUmVwZWF0IiwidmlzU3RhdGVBY3Rpb25zIiwib25MYXllckNsaWNrIiwiX2lkeCIsImluZm8iLCJvbkxheWVySG92ZXIiLCJpZHgiLCJBcnJheSIsImlzQXJyYXkiLCJjb2xvckRvbWFpbiIsImRvbWFpbiIsImFnZ3JlZ2F0ZWRCaW5zIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJfdGhpcyRwcm9wczIiLCJib3VuZHMiLCJmaXRCb3VuZHMiLCJldmVudCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIndtc0ZlYXR1cmVJbmZvIiwiZmVhdHVyZUluZm8iLCJjb29yZGluYXRlIiwibGF5ZXJJZCIsIl90aGlzJHByb3BzMyIsIl90aGlzJHByb3BzMyRpbmRleCIsIm1hcEluZGV4IiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJ1cGRhdGUiLCJwcmV2aW91c0xheWVycyIsIl91cGRhdGVNYXBib3hMYXllcnMiLCJfdXBkYXRlQXR0cmlidXRpb24iLCJvbk1hcFN0eWxlTG9hZGVkIiwiX3RoaXMkcHJvcHMkbWFwU3R5bGUiLCJfdGhpcyRwcm9wcyRtYXBTdHlsZTIiLCJfcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzIiwic3R5bGVPYmoiLCJzdHlsZSIsIl90aGlzJF9tYXAkaXNTdHlsZUxvYSIsIl90aGlzJF9tYXAiLCJfdGhpcyRfbWFwJGdldFN0eWxlIiwiX3RoaXMkX21hcDIiLCJyYXdTdHlsZSIsImlzU3R5bGVMb2FkZWQiLCJnZXRTdHlsZSIsInN0eWxlc2hlZXQiLCJfdW51c2VkIiwidXNlc01hcGJveCIsImlzU3R5bGVVc2luZ01hcGJveFRpbGVzIiwidXNlc09zbSIsImlzU3R5bGVVc2luZ09wZW5TdHJlZXRNYXBUaWxlcyIsImdldEJhc2VNYXBBdHRyaWJ1dGlvbnMiLCJjdXJyZW50U3R5bGUiLCJtYXBTdHlsZXMiLCJpc1VzZXJDdXN0b21TdHlsZSIsImN1c3RvbSIsInNldFN0YXRlIiwiX2NvbGxlY3RCYXNlbWFwQXR0cmlidXRpb25zIiwiX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIiLCJvZmYiLCJfYmFzZW1hcElkbGVMaXN0ZW5lciIsImF0dGVtcHRzIiwiTUFYX0FUVEVNUFRTIiwidHJ5Q29sbGVjdCIsIm9uU291cmNlRGF0YSIsImlzU291cmNlTG9hZGVkIiwic291cmNlRGF0YVR5cGUiLCJvbklkbGUiLCJvbiIsIm1hcFJlZiIsImdldE1hcCIsIl9vbk1hcGJveFN0eWxlVXBkYXRlIiwiX29uTWFwUmVuZGVyIiwiZ2V0TWFwYm94UmVmIiwiZXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwibGF5ZXJNZXNzYWdlIiwiZXJyb3JNZXNzYWdlRnVsbCIsImxhc3RTaG93biIsIl9kZWNrR0xFcnJvcnNFbGFwc2VkIiwiRGF0ZSIsIm5vdyIsIlRIUk9UVExFX05PVElGSUNBVElPTl9USU1FIiwiZXh0cmFMYXllck1lc3NhZ2UiLCJfdG9wTW9zdExheWVyJHByb3BzIiwidG9wTW9zdExheWVyIiwicGFyZW50IiwibGF5ZXJTZXRJc1ZhbGlkIiwidWlTdGF0ZUFjdGlvbnMiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsImRlYm91bmNlIiwiX3RoaXMkY29udGV4dCIsInZpZXdTdGF0ZSIsImNvbnRleHQiLCJnZXRJbnRlcm5hbFZpZXdTdGF0ZSIsIm9uVmlld1BvcnRDaGFuZ2UiLCJvblZpZXdTdGF0ZUNoYW5nZSIsInZpZXdwb3J0IiwiX3RoaXMkcHJvcHMkbWFwU3RhdGUiLCJpbnRlcmFjdGlvblN0YXRlIiwiaXNFeHBvcnQiLCJzZXRJbnRlcm5hbFZpZXdTdGF0ZSIsIl93YXNJbnRlcmFjdGluZyIsIl9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkIiwiaXNVc2VySW50ZXJhY3Rpb24iLCJpc1pvb21pbmciLCJpc1Bhbm5pbmciLCJpc1JvdGF0aW5nIiwiaXNEcmFnZ2luZyIsImluVHJhbnNpdGlvbiIsImlzSW50ZXJhY3Rpb25TZXR0bGUiLCJzZXRUaW1lb3V0Iiwib25Nb3VzZU1vdmUiLCJub3JtYWxpemVFdmVudCIsInNldExvYWRpbmdJbmRpY2F0b3IiLCJjaGFuZ2UiLCJpc1Zpc2libGUiLCJwYW5lbElkIiwiX3RoaXMkcHJvcHM0IiwidG9nZ2xlTWFwQ29udHJvbCIsIk51bWJlciIsInBhdGNoRGVja1JlbmRlcmVyRm9yUG9zdFByb2Nlc3NpbmciLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImNvbXBvbmVudERpZE1vdW50IiwiY3VycmVudCIsIm9ic2VydmVEaW1lbnNpb25zIiwiX2hhbmRsZVJlc2l6ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwidW5vYnNlcnZlRGltZW5zaW9ucyIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsIl9vbkRlY2tJbml0aWFsaXplZCIsImRldmljZSIsIm9uRGVja0luaXRpYWxpemVkIiwiX2RlY2siLCJfaXNPS1RvUmVuZGVyRWZmZWN0cyIsInZpZXdJbmRleCIsIl90aGlzJF9kZWNrIiwidmlld01hbmFnZXIiLCJfdmlld3BvcnRzIiwiX2dldEFubm90YXRpb25WaWV3cG9ydCIsImludGVybmFsVmlld1N0YXRlIiwiX2ludGVybmFsVmlld1N0YXRlJGxvIiwiX2ludGVybmFsVmlld1N0YXRlJGxhIiwiX2ludGVybmFsVmlld1N0YXRlJHpvIiwiX3JlZjMiLCJfaW50ZXJuYWxWaWV3U3RhdGUkcGkiLCJfcmVmNCIsIl9pbnRlcm5hbFZpZXdTdGF0ZSRiZSIsIl90aGlzJF9hbm5vdGF0aW9uVmlldyIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiem9vbSIsInBpdGNoIiwiYmVhcmluZyIsIl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZSIsIm1lcmdlZFN0YXRlIiwidnAiLCJnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZSIsInByb2plY3QiLCJsbmdMYXQiLCJ1bnByb2plY3QiLCJ4eSIsIl9yZW5kZXJNYXBQb3BvdmVyIiwiX3RoaXMkcHJvcHMkdmlzU3RhdGUkIiwiaG92ZXJJbmZvIiwiX3RoaXMkcHJvcHM1IiwiX3RoaXMkcHJvcHM1JHZpc1N0YXRlIiwiY2xpY2tlZCIsImRhdGFzZXRzIiwiaW50ZXJhY3Rpb25Db25maWciLCJhbmltYXRpb25Db25maWciLCJfdGhpcyRwcm9wczUkdmlzU3RhdGUyIiwibW91c2VQb3MiLCJtb3VzZVBvc2l0aW9uIiwicGlubmVkIiwidG9vbHRpcCIsImxheWVySG92ZXJQcm9wIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJjb21wYXJlTW9kZSIsInBpbm5lZFBvc2l0aW9uIiwieCIsInkiLCJsYXllclBpbm5lZFByb3AiLCJfZ2V0SG92ZXJYWSIsInByaW1hcnlEYXRhIiwiY29tcGFyZVR5cGUiLCJjb21tb25Qcm9wIiwib25DbG9zZSIsIl9vbkNsb3NlTWFwUG9wb3ZlciIsImNhbnZhcyIsInVuZGVmaW5lZCIsIl9leHRlbmRzMiIsImZyb3plbiIsImlzQmFzZSIsIm9uU2V0RmVhdHVyZXMiLCJzZXRGZWF0dXJlcyIsInNldFNlbGVjdGVkRmVhdHVyZSIsImZlYXR1cmVDb2xsZWN0aW9uIiwic2NyZWVuQ29vcmQiLCJfcmVuZGVyRGVja092ZXJsYXkiLCJsYXllcnNGb3JEZWNrIiwiX3RoaXMkY29udGV4dDIiLCJfbWFwU3RhdGUkZ2xvYmUiLCJfbWFwU3R5bGUkbWFwU3R5bGVzIiwiX3RoaXMyIiwiX3RoaXMkcHJvcHMkbWFwU3RhdGUkIiwib3B0aW9ucyIsInByaW1hcnlNYXAiLCJfdGhpcyRwcm9wczYiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsImRlY2tHbFByb3BzIiwibWFwQ29udHJvbHMiLCJkZWNrUmVuZGVyQ2FsbGJhY2tzIiwiZ2VuZXJhdGVEZWNrR0xMYXllcnMiLCJpc0ludGVyYWN0aXZlIiwiY2hpbGRyZW4iLCJtYXBEcmF3IiwiX3JlZjUiLCJfcmVmNSRhY3RpdmUiLCJhY3RpdmUiLCJlZGl0b3JNZW51QWN0aXZlIiwiaXNFZGl0b3JEcmF3aW5nTW9kZSIsIkVkaXRvckxheWVyVXRpbHMiLCJpc0RyYXdpbmdBY3RpdmUiLCJtb2RlIiwiaW50ZXJuYWxNYXBTdGF0ZSIsImVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4Iiwic2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3RvciIsImdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kIiwiY29tcHV0ZURlY2tMYXllcnMiLCJleHRyYURlY2tQYXJhbXMiLCJnZXRUb29sdGlwIiwiaXNOYU4iLCJnZXRDdXJzb3IiLCJfcmVmNiIsImVkaXRvckN1cnNvciIsImVmZmVjdHMiLCJjb21wdXRlRGVja0VmZmVjdHMiLCJsYXllckJsZW5kaW5nUGFyYW1zIiwibGF5ZXJCbGVuZGluZyIsImdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzIiwiZGVja0xheWVyc01hcFN0YXRlIiwibGF5ZXJQYXJhbWV0ZXJzIiwiZGVja0dsTGF5ZXJzIiwiZWRpdG9ySW5mbyIsIm9uQXBwbHlQb2x5Z29uRmlsdGVyQWxsIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVycyIsInNlbGVjdGVkRmVhdHVyZUluZGV4ZXMiLCJzZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IiLCJfb25MYXllckhvdmVyIiwib25TZXRMYXllckRvbWFpbiIsIl9vbkxheWVyU2V0RG9tYWluIiwib25GaWx0ZXJlZEl0ZW1zQ2hhbmdlIiwiX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlIiwib25XTVNGZWF0dXJlSW5mbyIsIl9vbldNU0ZlYXR1cmVJbmZvIiwib25SZWRyYXdOZWVkZWQiLCJfb25SZWRyYXdOZWVkZWQiLCJvbkZpdEJvdW5kcyIsIl9vbkZpdEJvdW5kcyIsImdsb2JlQmFzZW1hcFByb3ZpZGVyIiwicmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyIiwiZ2V0QmFzZU1hcExpYnJhcnkiLCJnbG9iZUJhc2VMYXllcnMiLCJnZXRHbG9iZUJhc2VMYXllcnMiLCJtYXBTdHlsZVR5cGUiLCJiYXNlbWFwUHJvdmlkZXIiLCJnbG9iZVRvcExheWVycyIsImdldEdsb2JlVG9wTGF5ZXJzIiwiZmluYWxEZWNrR2xMYXllcnMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwidmlld3MiLCJLZXBsZXJHbG9iZVZpZXciLCJyZXNvbHV0aW9uIiwiY2xlYXIiLCJjbGVhckNvbG9yIiwiTWFwVmlldyIsImZhclpNdWx0aXBsaWVyIiwiYWxsRGVja0dsUHJvcHMiLCJwaWNraW5nUmFkaXVzIiwiREVGQVVMVF9QSUNLSU5HX1JBRElVUyIsInBhcmFtZXRlcnMiLCJjdWxsIiwib25EZWNrUmVuZGVyIiwiX29uTW91c2VNb3ZlRGVib3VuY2VkIiwib25Mb2FkIiwib25EZWNrTG9hZCIsImNvbnRyb2xsZXIiLCJkb3VibGVDbGlja1pvb20iLCJkcmFnUm90YXRlIiwibWF4UGl0Y2giLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsIm1pblpvb20iLCJHTE9CRV9NSU5fWk9PTSIsIm1heFpvb20iLCJHTE9CRV9NQVhfWk9PTSIsIm9uQmVmb3JlUmVuZGVyIiwiX29uQmVmb3JlUmVuZGVyIiwiX29uVmlld3BvcnRDaGFuZ2UiLCJvbkhvdmVyIiwicmVzIiwiX29uTGF5ZXJIb3ZlckRlYm91bmNlZCIsIm9uQ2xpY2siLCJzcmNFdmVudCIsImFsaWduaW5nTGF5ZXIiLCJmaW5kIiwibCIsImFsaWduV2FpdGluZ0Zvck1hcCIsIm9uQWxpZ25NYXBDbGljayIsIm9uRXJyb3IiLCJfb25EZWNrRXJyb3IiLCJjb21wIiwiZGVjayIsIm9uRGV2aWNlSW5pdGlhbGl6ZWQiLCJvbkFmdGVyUmVuZGVyIiwib25EZWNrQWZ0ZXJSZW5kZXIiLCJhbnlBY3RpdmVMYXllckxvYWRpbmciLCJhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyIsIl9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlIiwibWFwYm94TGF5ZXJzIiwibWFwYm94TGF5ZXJzU2VsZWN0b3IiLCJ1cGRhdGVNYXBib3hMYXllcnMiLCJfcmVuZGVyTWFwYm94T3ZlcmxheXMiLCJfcmVuZGVyTWFwIiwiX21hcFN0eWxlJG1hcFN0eWxlczIiLCJfdGhpcyRwcm9wcyRNYXBDb21wb24iLCJfdGhpcyRjb250ZXh0MyIsIl9tYXBTdGF0ZSRtYXhQaXRjaCIsIl90aGlzJHByb3BzJGlzRXhwb3J0IiwiX21hcFN0YXRlJGdsb2JlMiIsIl9tYXBTdHlsZSRib3R0b21NYXBTdCIsIl9tYXBTdGF0ZSRnbG9iZTMiLCJfbWFwQ29udHJvbHMkYW5ub3RhdGkiLCJfbWFwU3RhdGUkZ2xvYmU0IiwiX21hcFN0YXRlJGdsb2JlNSIsIl90aGVtZSRzaWRlUGFuZWwkbWFyZyIsIl90aGVtZSRzaWRlUGFuZWwiLCJfdGhlbWUkc2lkZVBhbmVsJG1hcmcyIiwiX3RoZW1lJHNpZGVQYW5lbDIiLCJfdGhpcyRwcm9wczciLCJsb2NhbGUiLCJ1aVRoZW1lIiwiYm90dG9tTWFwQ29udGFpbmVyUHJvcHMiLCJ0b3BNYXBDb250YWluZXJQcm9wcyIsIl90aGlzJHByb3BzNyRkYXRhc2V0QSIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJfdGhpcyRwcm9wczckYXR0cmlidXQiLCJhdHRyaWJ1dGlvbkxvZ29zIiwiX3RoaXMkcHJvcHM3JGNvbnRhaW5lIiwiaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSIsImFjdGl2ZVNpZGVQYW5lbCIsInNpZGVQYW5lbFdpZHRoIiwibGF5ZXJzRm9yRGVja1NlbGVjdG9yIiwiYmFzZU1hcExpYnJhcnlOYW1lIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJSZXNvbHZlZE1hcENvbXBvbmVudCIsIk1hcENvbXBvbmVudCIsIk1BUF9MSUJfT1BUSU9OUyIsIk1BUEJPWCIsIk1hcGJveExlZ2FjeU1hcCIsIk1hcGxpYnJlTWFwIiwidXNlTWFwYm94QWRhcHRlciIsImNvbmZpZ01heFBpdGNoIiwiZWZmZWN0aXZlTWF4UGl0Y2giLCJNYXRoIiwibWluIiwiTUFQQk9YX01BWF9QSVRDSCIsIm1hcFByb3BzIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwibWFwYm94QWNjZXNzVG9rZW4iLCJhY2Nlc3NUb2tlbiIsInRyYW5zZm9ybVJlcXVlc3QiLCJSVExUZXh0UGx1Z2luIiwibWFwYm94Q29uZmlnIiwibWFwTGliIiwiZ2V0TWFwTGliIiwiaGFzR2VvY29kZXJMYXllciIsIkdFT0NPREVSX0xBWUVSX0lEIiwiaXNTcGxpdCIsIkVNUFRZX01BUEJPWF9TVFlMRSIsImJvdHRvbU1hcFN0eWxlIiwiX3NldE1hcFJlZiIsInNob3dNYXBDb250cm9sIiwiRnJhZ21lbnQiLCJhdmFpbGFibGVMb2NhbGVzIiwicmVhZE9ubHkiLCJzY2FsZSIsImxvZ29Db21wb25lbnQiLCJnZW9jb2RlciIsIm1hcENvbnRyb2xUb3AiLCJ0aGVtZU5hbWUiLCJvblRvZ2dsZVBlcnNwZWN0aXZlIiwidG9nZ2xlUGVyc3BlY3RpdmUiLCJvblNldE1hcFZpZXdNb2RlIiwic2V0TWFwVmlld01vZGUiLCJtYXBWaWV3TW9kZSIsIm9uVG9nZ2xlU3BsaXRNYXAiLCJ0b2dnbGVTcGxpdE1hcCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIiLCJvblRvZ2dsZU1hcENvbnRyb2wiLCJfdG9nZ2xlTWFwQ29udHJvbCIsIm9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsInRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvblNldEVkaXRvck1vZGUiLCJzZXRFZGl0b3JNb2RlIiwib25TZXRMb2NhbGUiLCJzZXRMb2NhbGUiLCJvblNldFRoZW1lIiwic2V0VGhlbWUiLCJvblRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5Iiwib25Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllciIsIm9uTGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIm9uVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5IiwiX2hhbmRsZVRvZ2dsZUxheWVyVmlzaWJpbGl0eSIsIm1hcEhlaWdodCIsInNldE1hcENvbnRyb2xTZXR0aW5ncyIsIm9uVG9nZ2xlTGF5ZXJGb3JNYXAiLCJvbkRlbGV0ZUZlYXR1cmUiLCJkZWxldGVGZWF0dXJlIiwib25TZXRGZWF0dXJlUHJvcGVydGllcyIsInNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzIiwib25TZWxlY3QiLCJvblRvZ2dsZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJ2aXNpYmxlIiwiaXNHbG9iZUVuYWJsZWQiLCJBbm5vdGF0aW9uT3ZlcmxheSIsImFubm90YXRpb25zIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImlzQW5ub3RhdGlvbk1vZGUiLCJhbm5vdGF0aW9uIiwidXBkYXRlQW5ub3RhdGlvbiIsInNldFNlbGVjdGVkQW5ub3RhdGlvbiIsInRvcE1hcFN0eWxlIiwiaGFzQXR0cmlidXRpb25Mb2dvcyIsImhhc01hcFNjYWxlIiwiZW5hYmxlTWFwU2NhbGUiLCJBdHRyaWJ1dGlvbiIsInN0YXRlIiwiZ2xvYmVBdHRyaWJ1dGlvbnMiLCJnZXRHbG9iZUJhc2VtYXBBdHRyaWJ1dGlvbnMiLCJBdHRyaWJ1dGlvbkxvZ29zIiwibG9nb3MiLCJyZW5kZXIiLCJfbWFwU3R5bGUkbWFwU3R5bGVzMyIsIl90aGlzJHByb3BzOCIsIm1hcENvbnRlbnQiLCJzdHlsZVNlbGVjdG9yIiwib25Db250ZXh0TWVudSIsInByZXZlbnREZWZhdWx0Iiwib3ZlcmxheUJsZW5kaW5nIiwibWFwTGliQ3NzQ2xhc3MiLCJDb21wb25lbnQiLCJNYXBWaWV3U3RhdGVDb250ZXh0Iiwid2l0aFRoZW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC1jb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGxpYnJhcmllc1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQsIHt3aXRoVGhlbWV9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7TWFwIGFzIE1hcGJveExlZ2FjeU1hcCwgTWFwUmVmfSBmcm9tICdyZWFjdC1tYXAtZ2wvbWFwYm94LWxlZ2FjeSc7XG5pbXBvcnQge01hcCBhcyBNYXBsaWJyZU1hcH0gZnJvbSAnQHZpcy5nbC9yZWFjdC1tYXBsaWJyZSc7XG5pbXBvcnQge1BpY2tpbmdJbmZvLCBNYXBWaWV3fSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCBEZWNrR0wgZnJvbSAnQGRlY2suZ2wvcmVhY3QnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3RvciwgU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7dXNlRHJvcHBhYmxlfSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuXG5pbXBvcnQge1Zpc1N0YXRlQWN0aW9ucywgTWFwU3RhdGVBY3Rpb25zLCBVSVN0YXRlQWN0aW9uc30gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IE1hcFBvcG92ZXJGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1wb3BvdmVyJztcbmltcG9ydCBNYXBDb250cm9sRmFjdG9yeSBmcm9tICcuL21hcC9tYXAtY29udHJvbCc7XG5pbXBvcnQgTWFwU2NhbGVGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1zY2FsZSc7XG5pbXBvcnQge1N0eWxlZE1hcENvbnRhaW5lcn0gZnJvbSAnLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRpb24sXG4gIEF0dHJpYnV0aW9uTG9nb3MsXG4gIHJlbmRlckJhc2VtYXBBdHRyaWJ1dGlvbixcbiAgZGVkdXBlQmFzZW1hcEF0dHJpYnV0aW9uc1xufSBmcm9tICcuL21hcC9hdHRyaWJ1dGlvbic7XG5cbmltcG9ydCBFZGl0b3JGYWN0b3J5IGZyb20gJy4vZWRpdG9yL2VkaXRvcic7XG5pbXBvcnQgRmlsdGVyRmVhdHVyZUJhZGdlcyBmcm9tICcuL2VkaXRvci9maWx0ZXItZmVhdHVyZS1iYWRnZXMnO1xuaW1wb3J0IHtBbm5vdGF0aW9uT3ZlcmxheX0gZnJvbSAnLi9hbm5vdGF0aW9ucyc7XG5cbi8vIHV0aWxzXG5pbXBvcnQge1xuICBnZW5lcmF0ZU1hcGJveExheWVycyxcbiAgdXBkYXRlTWFwYm94TGF5ZXJzLFxuICBMYXllcixcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICBWaXN1YWxDaGFubmVsRG9tYWluLFxuICBFZGl0b3JMYXllclV0aWxzLFxuICBBZ2dyZWdhdGVkQmluXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0aW9uV2l0aFN0eWxlLFxuICBEYXRhc2V0QXR0cmlidXRpb24sXG4gIE1hcFN0YXRlLFxuICBNYXBDb250cm9scyxcbiAgVmlld3BvcnQsXG4gIFNwbGl0TWFwLFxuICBTcGxpdE1hcExheWVyc1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBpc1N0eWxlVXNpbmdNYXBib3hUaWxlcyxcbiAgaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzLFxuICBnZXRCYXNlTWFwQXR0cmlidXRpb25zLFxuICBnZXRCYXNlTWFwTGlicmFyeSxcbiAgdHJhbnNmb3JtUmVxdWVzdCxcbiAgb2JzZXJ2ZURpbWVuc2lvbnMsXG4gIHVub2JzZXJ2ZURpbWVuc2lvbnMsXG4gIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsXG4gIG9uVmlld1BvcnRDaGFuZ2UsXG4gIGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlLFxuICBub3JtYWxpemVFdmVudCxcbiAgcmdiVG9IZXgsXG4gIGNvbXB1dGVEZWNrRWZmZWN0cyxcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIEdldE1hcFJlZixcbiAgZ2V0TGF5ZXJCbGVuZGluZ1BhcmFtZXRlcnMsXG4gIHBhdGNoRGVja1JlbmRlcmVyRm9yUG9zdFByb2Nlc3Npbmdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbi8vIGRlZmF1bHQtc2V0dGluZ3NcbmltcG9ydCB7XG4gIEZJTFRFUl9UWVBFUyxcbiAgR0VPQ09ERVJfTEFZRVJfSUQsXG4gIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FLFxuICBERUZBVUxUX1BJQ0tJTkdfUkFESVVTLFxuICBOT19NQVBfSUQsXG4gIEVNUFRZX01BUEJPWF9TVFlMRSxcbiAgTUFQQk9YX01BWF9QSVRDSCxcbiAgTUFQX0xJQl9PUFRJT05TLFxuICBHTE9CRV9NSU5fWk9PTSxcbiAgR0xPQkVfTUFYX1pPT01cbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5pbXBvcnQge1xuICBnZXRHbG9iZUJhc2VMYXllcnMsXG4gIGdldEdsb2JlVG9wTGF5ZXJzLFxuICBnZXRHbG9iZUNsZWFyQ29sb3IsXG4gIGdldEdsb2JlQmFzZW1hcEF0dHJpYnV0aW9ucyxcbiAgcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyLFxuICBnZXRTdGFyc0JhY2tncm91bmRJbWFnZSxcbiAgS2VwbGVyR2xvYmVWaWV3XG59IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWxheWVycyc7XG5cbmltcG9ydCB7RFJPUFBBQkxFX01BUF9DT05UQUlORVJfVFlQRX0gZnJvbSAnLi9jb21tb24vZG5kLWxheWVyLWl0ZW1zJztcbi8vIENvbnRleHRzXG5pbXBvcnQge01hcFZpZXdTdGF0ZUNvbnRleHR9IGZyb20gJy4vbWFwLXZpZXctc3RhdGUtY29udGV4dCc7XG5cbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gJy4vY29tbW9uL2Vycm9yLWJvdW5kYXJ5JztcbmltcG9ydCB7TE9DQUxFX0NPREVTfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge1xuICBNYXBTdHlsZSxcbiAgYXJlQW55RGVja0xheWVyc0xvYWRpbmcsXG4gIGNvbXB1dGVEZWNrTGF5ZXJzLFxuICBnZXRMYXllckhvdmVyUHJvcCxcbiAgTGF5ZXJIb3ZlclByb3AsXG4gIHByZXBhcmVMYXllcnNGb3JEZWNrLFxuICBwcmVwYXJlTGF5ZXJzVG9SZW5kZXIsXG4gIExheWVyc1RvUmVuZGVyXG59IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IExvYWRpbmdJbmRpY2F0b3IgZnJvbSAnLi9sb2FkaW5nLWluZGljYXRvcic7XG5cbi8vIERlYm91bmNlIHRoZSBwcm9wYWdhdGlvbiBvZiB2aWV3cG9ydCBjaGFuZ2UgYW5kIG1vdXNlIG1vdmVzIHRvIHJlZHV4IHN0b3JlLlxuLy8gVGhpcyBpcyB0byBhdm9pZCB0b28gbWFueSByZW5kZXJzIG9mIG90aGVyIGNvbXBvbmVudHMgd2hlbiB0aGUgbWFwIGlzXG4vLyBiZWluZyBwYW5uZWQvem9vbWVkIChsZWFkaW5nIHRvIGxhZ2d5IGJhc2VtYXAvZGVjayBzeW5jaW5nKS5cbmNvbnN0IERFQk9VTkNFX1ZJRVdQT1JUX1BST1BBR0FURSA9IDEwO1xuY29uc3QgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUgPSAxMDtcblxuLy8gSG93IGxvbmcgc2hvdWxkIHdlIHdhaXQgYmV0d2VlbiBsYXllciBsb2FkaW5nIHN0YXRlIGNoYW5nZXMgYmVmb3JlIHRyaWdnZXJpbmcgYSBVSSB1cGRhdGVcbmNvbnN0IERFQk9VTkNFX0xPQURJTkdfU1RBVEVfUFJPUEFHQVRFID0gMTAwO1xuXG5jb25zdCBNQVBfU1RZTEU6IHtba2V5OiBzdHJpbmddOiBSZWFjdC5DU1NQcm9wZXJ0aWVzfSA9IHtcbiAgY29udGFpbmVyOiB7XG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJ1xuICB9LFxuICB0b3A6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICBwb2ludGVyRXZlbnRzOiAnbm9uZSdcbiAgfVxufTtcblxuY29uc3QgTE9DQUxFX0NPREVTX0FSUkFZID0gT2JqZWN0LmtleXMoTE9DQUxFX0NPREVTKTtcblxuaW50ZXJmYWNlIFN0eWxlZE1hcENvbnRhaW5lclByb3BzIHtcbiAgJG1peEJsZW5kTW9kZT86IHN0cmluZztcbiAgJG1hcExpYkNzc0NsYXNzOiBzdHJpbmc7XG59XG5cbmNvbnN0IFN0eWxlZE1hcCA9IHN0eWxlZChTdHlsZWRNYXBDb250YWluZXIpPFN0eWxlZE1hcENvbnRhaW5lclByb3BzPihcbiAgKHskbWl4QmxlbmRNb2RlID0gJ25vcm1hbCcsICRtYXBMaWJDc3NDbGFzc30pID0+IGBcbiAgI2RlZmF1bHQtZGVja2dsLW92ZXJsYXkge1xuICAgIG1peC1ibGVuZC1tb2RlOiAkeyRtaXhCbGVuZE1vZGV9O1xuICB9O1xuICAqWyR7JG1hcExpYkNzc0NsYXNzfS1jaGlsZHJlbl0ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuYFxuKTtcblxuY29uc3QgTUFQQk9YR0xfU1RZTEVfVVBEQVRFID0gJ3N0eWxlLmxvYWQnO1xuY29uc3QgTUFQQk9YR0xfUkVOREVSID0gJ3JlbmRlcic7XG5cbi8vIENhbm9uaWNhbCBPcGVuU3RyZWV0TWFwIGF0dHJpYnV0aW9uLCBpbmplY3RlZCBpbnRvIHRoZSBjb2xsZWN0ZWQgbGlzdCB3aGVuIGFcbi8vIHN0eWxlIGlzIGRldGVjdGVkIHRvIHVzZSBPU00gdGlsZXMgYnV0IHRoZSByZXNvbHZlZCBzb3VyY2VzIGhhdmVuJ3QgeWllbGRlZFxuLy8gYW4gYXR0cmlidXRpb24gc3RyaW5nIG9mIHRoZWlyIG93biAoZS5nLiByYXcgc3R5bGUgZGVjbGFyZXMgT1NNIGJ1dCB0aGVcbi8vIFRpbGVKU09OIGhhc24ndCBleHBvc2VkIGl0KS4gUmVuZGVyZWQgdGhyb3VnaCB0aGUgc2FtZSBzYWZlIGxpbmsgcGFyc2VyIGFzXG4vLyBldmVyeSBvdGhlciBjb2xsZWN0ZWQgYXR0cmlidXRpb24uXG5jb25zdCBPU01fQVRUUklCVVRJT05fSFRNTCA9XG4gICfCqSA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4nO1xuXG5pbnRlcmZhY2UgU3R5bGVkRHJvcHBhYmxlUHJvcHMge1xuICAkaXNPdmVyOiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWREcm9wcGFibGUgPSBzdHlsZWQuZGl2PFN0eWxlZERyb3BwYWJsZVByb3BzPmBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuJGlzT3ZlciA/IHByb3BzLnRoZW1lLmRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IgOiAnbm9uZScpfTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XG5cbmNvbnN0IFN0eWxlZE1hcFNjYWxlQ29udGFpbmVyID0gc3R5bGVkLmRpdjx7JGxlZnQ6IG51bWJlcjsgJGJvdHRvbU9mZnNldDogbnVtYmVyfT5gXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNpZGVQYW5lbC5tYXJnaW4ubGVmdCArIHByb3BzLiRib3R0b21PZmZzZXR9cHg7XG4gIGxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMuJGxlZnR9cHg7XG4gIHotaW5kZXg6IDE7XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuYDtcblxuZXhwb3J0IGNvbnN0IGlzU3BsaXRTZWxlY3RvciA9IHByb3BzID0+XG4gIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcyAmJiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMTtcblxuZXhwb3J0IGNvbnN0IERyb3BwYWJsZSA9ICh7Y29udGFpbmVySWR9KSA9PiB7XG4gIGNvbnN0IHtpc092ZXIsIHNldE5vZGVSZWZ9ID0gdXNlRHJvcHBhYmxlKHtcbiAgICBpZDogY29udGFpbmVySWQsXG4gICAgZGF0YToge3R5cGU6IERST1BQQUJMRV9NQVBfQ09OVEFJTkVSX1RZUEUsIGluZGV4OiBjb250YWluZXJJZH0sXG4gICAgZGlzYWJsZWQ6ICFjb250YWluZXJJZFxuICB9KTtcblxuICByZXR1cm4gPFN0eWxlZERyb3BwYWJsZSByZWY9e3NldE5vZGVSZWZ9ICRpc092ZXI9e2lzT3Zlcn0gLz47XG59O1xuXG4vLyBBdHRyaWJ1dGlvbiBVSSAocGFyc2VyICsgY29tcG9uZW50cykgbGl2ZXMgaW4gLi9tYXAvYXR0cmlidXRpb24gYW5kIGlzXG4vLyByZS1leHBvcnRlZCBoZXJlIHRvIHByZXNlcnZlIHRoZSBwdWJsaWMgaW1wb3J0IHBhdGggKEBrZXBsZXIuZ2wvY29tcG9uZW50cykuXG5leHBvcnQge0F0dHJpYnV0aW9uLCBBdHRyaWJ1dGlvbkxvZ29zLCByZW5kZXJCYXNlbWFwQXR0cmlidXRpb24sIGRlZHVwZUJhc2VtYXBBdHRyaWJ1dGlvbnN9O1xuXG5NYXBDb250YWluZXJGYWN0b3J5LmRlcHMgPSBbTWFwUG9wb3ZlckZhY3RvcnksIE1hcENvbnRyb2xGYWN0b3J5LCBFZGl0b3JGYWN0b3J5LCBNYXBTY2FsZUZhY3RvcnldO1xuXG50eXBlIE1hcGJveFN0eWxlID0gc3RyaW5nIHwgb2JqZWN0IHwgdW5kZWZpbmVkO1xudHlwZSBQcm9wU2VsZWN0b3I8Uj4gPSBTZWxlY3RvcjxNYXBDb250YWluZXJQcm9wcywgUj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwQ29udGFpbmVyUHJvcHMge1xuICB2aXNTdGF0ZTogVmlzU3RhdGU7XG4gIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbiAgbWFwQ29udHJvbHM6IE1hcENvbnRyb2xzO1xuICBtYXBTdHlsZToge2JvdHRvbU1hcFN0eWxlPzogTWFwYm94U3R5bGU7IHRvcE1hcFN0eWxlPzogTWFwYm94U3R5bGV9ICYgTWFwU3R5bGU7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybDogc3RyaW5nO1xuICB2aXNTdGF0ZUFjdGlvbnM6IHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0YXRlQWN0aW9uczogdHlwZW9mIE1hcFN0YXRlQWN0aW9ucztcbiAgdWlTdGF0ZUFjdGlvbnM6IHR5cGVvZiBVSVN0YXRlQWN0aW9ucztcblxuICAvLyBvcHRpb25hbFxuICBwcmltYXJ5PzogYm9vbGVhbjsgLy8gcHJpbWFyeSBvbmUgd2lsbCBiZSByZXBvcnRpbmcgaXRzIHNpemUgdG8gYXBwU3RhdGVcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBpc0V4cG9ydD86IGJvb2xlYW47XG4gIC8vIG9uTWFwU3R5bGVMb2FkZWQ/OiAobWFwOiBtYXBsaWJyZWdsLk1hcCB8IFJldHVyblR5cGU8TWFwUmVmWydnZXRNYXAnXT4gfCBudWxsKSA9PiB2b2lkO1xuICBvbk1hcFN0eWxlTG9hZGVkPzogKG1hcDogR2V0TWFwUmVmIHwgbnVsbCkgPT4gdm9pZDtcbiAgb25NYXBSZW5kZXI/OiAobWFwOiBHZXRNYXBSZWYgfCBudWxsKSA9PiB2b2lkO1xuICBnZXRNYXBib3hSZWY/OiAobWFwYm94PzogTWFwUmVmIHwgbnVsbCwgaW5kZXg/OiBudW1iZXIpID0+IHZvaWQ7XG4gIGluZGV4PzogbnVtYmVyO1xuICBkZWxldGVNYXBMYWJlbHM/OiAoY29udGFpbmVySWQ6IHN0cmluZywgbGF5ZXJJZDogc3RyaW5nKSA9PiB2b2lkO1xuICBjb250YWluZXJJZD86IG51bWJlcjtcblxuICBpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlPzogYm9vbGVhbjtcbiAgYWN0aXZlU2lkZVBhbmVsOiBzdHJpbmcgfCBudWxsO1xuICBzaWRlUGFuZWxXaWR0aD86IG51bWJlcjtcblxuICBsb2NhbGU/OiBhbnk7XG4gIHVpVGhlbWU/OiBzdHJpbmc7XG4gIHRoZW1lPzogYW55O1xuICBlZGl0b3I/OiBhbnk7XG4gIE1hcENvbXBvbmVudD86IHR5cGVvZiBNYXBib3hMZWdhY3lNYXAgfCB0eXBlb2YgTWFwbGlicmVNYXA7XG4gIGRlY2tHbFByb3BzPzogYW55O1xuICBvbkRlY2tJbml0aWFsaXplZD86IChhOiBhbnksIGI6IGFueSkgPT4gdm9pZDtcbiAgb25WaWV3U3RhdGVDaGFuZ2U/OiAodmlld3BvcnQ6IFZpZXdwb3J0KSA9PiB2b2lkO1xuXG4gIHRvcE1hcENvbnRhaW5lclByb3BzOiBhbnk7XG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzOiBhbnk7XG4gIHRyYW5zZm9ybVJlcXVlc3Q/OiAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZT86IHN0cmluZykgPT4ge3VybDogc3RyaW5nfTtcblxuICAvKiogUGFzcyBgZmFsc2VgIHRvIGRpc2FibGUgdGhlIHJlbW90ZSBSVEwgdGV4dCBwbHVnaW4sIG9yIGEgVVJMIHN0cmluZyB0byBzZWxmLWhvc3QgaXQuICovXG4gIFJUTFRleHRQbHVnaW4/OiBzdHJpbmcgfCBmYWxzZTtcblxuICBkYXRhc2V0QXR0cmlidXRpb25zPzogRGF0YXNldEF0dHJpYnV0aW9uW107XG4gIGF0dHJpYnV0aW9uTG9nb3M/OiBBdHRyaWJ1dGlvbldpdGhTdHlsZVtdO1xuXG4gIGdlbmVyYXRlTWFwYm94TGF5ZXJzPzogdHlwZW9mIGdlbmVyYXRlTWFwYm94TGF5ZXJzO1xuICBnZW5lcmF0ZURlY2tHTExheWVycz86IHR5cGVvZiBjb21wdXRlRGVja0xheWVycztcblxuICBvbk1vdXNlTW92ZT86IChldmVudDogUmVhY3QuTW91c2VFdmVudCAmIHtsbmdMYXQ/OiBbbnVtYmVyLCBudW1iZXJdfSkgPT4gdm9pZDtcblxuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZGVja1JlbmRlckNhbGxiYWNrcz86IHtcbiAgICBvbkRlY2tMb2FkPzogKCkgPT4gdm9pZDtcbiAgICBvbkRlY2tSZW5kZXI/OiAoZGVja1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsO1xuICAgIG9uRGVja0FmdGVyUmVuZGVyPzogKGRlY2tQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IGFueTtcbiAgfTtcblxuICAvLyBPcHRpb25hbDogb3ZlcnJpZGUgbGVnZW5kIGhlYWRlciBsb2dvIGluIG1hcCBjb250cm9scyAodXNlZCBieSBpbWFnZSBleHBvcnQpXG4gIGxvZ29Db21wb25lbnQ/OiBSZWFjdC5GQyB8IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWFwQ29udGFpbmVyRmFjdG9yeShcbiAgTWFwUG9wb3ZlcjogUmV0dXJuVHlwZTx0eXBlb2YgTWFwUG9wb3ZlckZhY3Rvcnk+LFxuICBNYXBDb250cm9sOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBDb250cm9sRmFjdG9yeT4sXG4gIEVkaXRvcjogUmV0dXJuVHlwZTx0eXBlb2YgRWRpdG9yRmFjdG9yeT4sXG4gIE1hcFNjYWxlOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBTY2FsZUZhY3Rvcnk+XG4pOiBSZWFjdC5Db21wb25lbnRUeXBlPE1hcENvbnRhaW5lclByb3BzPiB7XG4gIGNsYXNzIE1hcENvbnRhaW5lciBleHRlbmRzIENvbXBvbmVudDxNYXBDb250YWluZXJQcm9wcz4ge1xuICAgIGRpc3BsYXlOYW1lID0gJ01hcENvbnRhaW5lcic7XG5cbiAgICBwcml2YXRlIGFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgc3RhdGljIGNvbnRleHRUeXBlID0gTWFwVmlld1N0YXRlQ29udGV4dDtcblxuICAgIGRlY2xhcmUgY29udGV4dDogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIE1hcFZpZXdTdGF0ZUNvbnRleHQ+O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGRlY2tHbFByb3BzOiB7fSxcbiAgICAgIGluZGV4OiAwLFxuICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgcGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZygpO1xuICAgIH1cblxuICAgIHN0YXRlID0ge1xuICAgICAgLy8gdHJ1ZSBmb3IgYnVpbHQtaW4ga2VwbGVyLmdsIHN0eWxlcyAoZGFyay1tYXR0ZXIsIHBvc2l0cm9uLCDigKYpIGFuZCB3aGVuIHRoZVxuICAgICAgLy8gYmFzZW1hcCB1c2VzIE1hcGJveC1ob3N0ZWQgdGlsZXMgKG1hcGJveDovLyBzb3VyY2VzKS5cbiAgICAgIC8vIEZvciB1c2VyLWFkZGVkIGN1c3RvbSBzdHlsZXMgKE9wZW5GcmVlTWFwLCBDQVJUTyBzZWxmLWhvc3RlZCwg4oCmKSBNYXBMaWJyZSBpc1xuICAgICAgLy8gbWVyZWx5IHRoZSByZW5kZXJpbmcgZW5naW5lLCBub3QgdGhlIHRpbGUgcHJvdmlkZXIsIHNvIHRoZSBsb2dvIGlzIGhpZGRlbiBhbmRcbiAgICAgIC8vIHRoZSBiYXNlbWFwJ3Mgb3duIFRpbGVKU09OIGF0dHJpYnV0aW9uIGlzIHNob3duIGluc3RlYWQuXG4gICAgICBzaG93QmFzZU1hcExpYkxvZ286IGZhbHNlLFxuICAgICAgLy8gYXR0cmlidXRpb24gc3RyaW5ncyBjb2xsZWN0ZWQgZnJvbSB0aGUgcmVzb2x2ZWQgbWFwIHNvdXJjZXMgKGUuZy4gQ0FSVE8sXG4gICAgICAvLyBPcGVuRnJlZU1hcCkuICBQb3B1bGF0ZWQgYWZ0ZXIgVGlsZUpTT04gcmVzb2x2ZXMuXG4gICAgICBiYXNlbWFwQXR0cmlidXRpb25zOiBbXSBhcyBzdHJpbmdbXVxuICAgIH07XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmICghdGhpcy5fcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgb2JzZXJ2ZURpbWVuc2lvbnModGhpcy5fcmVmLmN1cnJlbnQsIHRoaXMuX2hhbmRsZVJlc2l6ZSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfU1RZTEVfVVBEQVRFLCB0aGlzLl9vbk1hcGJveFN0eWxlVXBkYXRlKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9SRU5ERVIsIHRoaXMuX29uTWFwUmVuZGVyKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX3JlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVub2JzZXJ2ZURpbWVuc2lvbnModGhpcy5fcmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlICE9PSB0aGlzLnByb3BzLm1hcFN0eWxlLnN0eWxlVHlwZSkge1xuICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlID09PSBOT19NQVBfSUQpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHNob3dCYXNlTWFwTGliTG9nbzogZmFsc2UsXG4gICAgICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zOiBbXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBfZGVjazogYW55ID0gbnVsbDtcbiAgICBfbWFwOiBHZXRNYXBSZWYgfCBudWxsID0gbnVsbDtcbiAgICBfcmVmID0gY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuICAgIF9kZWNrR0xFcnJvcnNFbGFwc2VkOiB7W2lkOiBzdHJpbmddOiBudW1iZXJ9ID0ge307XG4gICAgX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXI6ICgoZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIF9iYXNlbWFwSWRsZUxpc3RlbmVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICAgIF9vbk1hcFJlbmRlciA9ICgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbk1hcFJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwUmVuZGVyKHRoaXMuX21hcCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHByZXZpb3VzTGF5ZXJzID0ge1xuICAgICAgLy8gW2xheWVycy5pZF06IG1hcGJveExheWVyQ29uZmlnXG4gICAgfTtcblxuICAgIF9oYW5kbGVSZXNpemUgPSBkaW1lbnNpb25zID0+IHtcbiAgICAgIGNvbnN0IHtwcmltYXJ5LCBpbmRleH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKHByaW1hcnkpIHtcbiAgICAgICAgY29uc3Qge21hcFN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoZGltZW5zaW9ucyAmJiBkaW1lbnNpb25zLndpZHRoID4gMCAmJiBkaW1lbnNpb25zLmhlaWdodCA+IDApIHtcbiAgICAgICAgICBtYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwKGRpbWVuc2lvbnMsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBsYXllcnNTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFZpc1N0YXRlWydsYXllcnMnXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5sYXllcnM7XG4gICAgbGF5ZXJEYXRhU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxWaXNTdGF0ZVsnbGF5ZXJzJ10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUubGF5ZXJEYXRhO1xuICAgIHNwbGl0TWFwU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxTcGxpdE1hcFtdPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcztcbiAgICBzcGxpdE1hcEluZGV4U2VsZWN0b3I6IFByb3BTZWxlY3RvcjxudW1iZXIgfCB1bmRlZmluZWQ+ID0gcHJvcHMgPT4gcHJvcHMuaW5kZXg7XG4gICAgbWFwTGF5ZXJzU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxTcGxpdE1hcExheWVycyB8IG51bGwgfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLnNwbGl0TWFwU2VsZWN0b3IsXG4gICAgICB0aGlzLnNwbGl0TWFwSW5kZXhTZWxlY3RvcixcbiAgICAgIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHNcbiAgICApO1xuICAgIGxheWVyT3JkZXJTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFZpc1N0YXRlWydsYXllck9yZGVyJ10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUubGF5ZXJPcmRlcjtcbiAgICBsYXllcnNUb1JlbmRlclNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8TGF5ZXJzVG9SZW5kZXI+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHRoaXMubWFwTGF5ZXJzU2VsZWN0b3IsXG4gICAgICBwcmVwYXJlTGF5ZXJzVG9SZW5kZXJcbiAgICApO1xuICAgIGxheWVyc0ZvckRlY2tTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICBwcmVwYXJlTGF5ZXJzRm9yRGVja1xuICAgICk7XG4gICAgZmlsdGVyc1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZmlsdGVycztcbiAgICBwb2x5Z29uRmlsdGVyc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IodGhpcy5maWx0ZXJzU2VsZWN0b3IsIGZpbHRlcnMgPT5cbiAgICAgIGZpbHRlcnMuZmlsdGVyKGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlKVxuICAgICk7XG4gICAgZmVhdHVyZXNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgICBzZWxlY3RlZEZlYXR1cmVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gICAgZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5wb2x5Z29uRmlsdGVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5mZWF0dXJlc1NlbGVjdG9yLFxuICAgICAgKHBvbHlnb25GaWx0ZXJzLCBmZWF0dXJlcykgPT4gKHtcbiAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmNvbmNhdChwb2x5Z29uRmlsdGVycy5tYXAoZiA9PiBmLnZhbHVlKSlcbiAgICAgIH0pXG4gICAgKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gTm8gb3ZlcmxvYWQgbWF0Y2hlcyB0aGlzIGNhbGxcbiAgICBzZWxlY3RlZFBvbHlnb25JbmRleFNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IsXG4gICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZVNlbGVjdG9yLFxuICAgICAgKGNvbGxlY3Rpb24sIHNlbGVjdGVkRmVhdHVyZSkgPT5cbiAgICAgICAgY29sbGVjdGlvbi5mZWF0dXJlcy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmU/LmlkKVxuICAgICk7XG4gICAgc2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAodmFsdWU6IG51bWJlcikgPT4gdmFsdWUsXG4gICAgICB2YWx1ZSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA8IDAgPyBbXSA6IFt2YWx1ZV07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2RTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmdlbmVyYXRlTWFwYm94TGF5ZXJzID8/IGdlbmVyYXRlTWFwYm94TGF5ZXJzO1xuXG4gICAgbWFwYm94TGF5ZXJzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllck9yZGVyU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IsXG4gICAgICB0aGlzLmdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2RTZWxlY3RvcixcbiAgICAgIChsYXllciwgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBsYXllcnNUb1JlbmRlciwgZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZCkgPT5cbiAgICAgICAgZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZChsYXllciwgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBsYXllcnNUb1JlbmRlcilcbiAgICApO1xuXG4gICAgLy8gbWVyZ2UgaW4gYSBiYWNrZ3JvdW5kLWNvbG9yIHN0eWxlIGlmIHRoZSBiYXNlbWFwIGNob2ljZSBpcyBOT19NQVBfSURcbiAgICAvLyB1c2VkIGJ5IDxTdHlsZWRNYXA+IGlubGluZSBzdHlsZSBwcm9wXG4gICAgbWFwU3R5bGVUeXBlU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5tYXBTdHlsZS5zdHlsZVR5cGU7XG4gICAgbWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLm1hcFN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgICBnbG9iZU1vZGVTZWxlY3RvciA9IHByb3BzID0+IEJvb2xlYW4ocHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5lbmFibGVkKTtcbiAgICBnbG9iZUJhY2tncm91bmRDb2xvclNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5jb25maWc/LmJhY2tncm91bmRDb2xvcjtcbiAgICBnbG9iZVN0YXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBCb29sZWFuKHByb3BzLm1hcFN0YXRlPy5nbG9iZT8uY29uZmlnPy5zdGFycyk7XG4gICAgc3R5bGVTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5tYXBTdHlsZVR5cGVTZWxlY3RvcixcbiAgICAgIHRoaXMubWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvcixcbiAgICAgIHRoaXMuZ2xvYmVNb2RlU2VsZWN0b3IsXG4gICAgICB0aGlzLmdsb2JlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IsXG4gICAgICB0aGlzLmdsb2JlU3RhcnNTZWxlY3RvcixcbiAgICAgIChzdHlsZVR5cGUsIGJhY2tncm91bmRDb2xvciwgaXNHbG9iZU1vZGUsIGdsb2JlQmFja2dyb3VuZENvbG9yLCBnbG9iZVN0YXJzKSA9PiAoe1xuICAgICAgICAuLi5NQVBfU1RZTEUuY29udGFpbmVyLFxuICAgICAgICAuLi4oc3R5bGVUeXBlID09PSBOT19NQVBfSUQgPyB7YmFja2dyb3VuZENvbG9yOiByZ2JUb0hleChiYWNrZ3JvdW5kQ29sb3IpfSA6IHt9KSxcbiAgICAgICAgLy8gSW4gZ2xvYmUgbW9kZSB0aGUgZGVjay5nbCBjYW52YXMgaXMgdHJhbnNwYXJlbnQgKHRoZSBnbG9iZSBWaWV3IHVzZXNcbiAgICAgICAgLy8gYGNsZWFyQ29sb3I6IGZhbHNlYCB0byBhdm9pZCBjb3JydXB0aW5nIHRoZSBwaWNraW5nIGJ1ZmZlciksIHNvIHRoZVxuICAgICAgICAvLyBiYWNrZ3JvdW5kIGFyb3VuZCB0aGUgZ2xvYmUgaXMgcGFpbnRlZCBoZXJlIG9uIHRoZSBjb250YWluZXIgaW5zdGVhZC5cbiAgICAgICAgLi4uKGlzR2xvYmVNb2RlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBnbG9iZSBiYWNrZ3JvdW5kIHdoZW4gbm9uZSBpcyBjb25maWd1cmVkLlxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHJnYlRvSGV4KFxuICAgICAgICAgICAgICAgIChnbG9iZUJhY2tncm91bmRDb2xvciBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHx8XG4gICAgICAgICAgICAgICAgICAoZ2V0R2xvYmVDbGVhckNvbG9yKCkuc2xpY2UoMCwgMykgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAvLyBPcHRpb25hbGx5IG92ZXJsYXkgYSB0aWxlYWJsZSBzdGFyLWZpZWxkIHBhdHRlcm4gb24gdGhlIGJhY2tncm91bmQuXG4gICAgICAgICAgICAgIC4uLihnbG9iZVN0YXJzXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgnJHtnZXRTdGFyc0JhY2tncm91bmRJbWFnZSgpfScpYCxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ3JlcGVhdCdcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvKiBjb21wb25lbnQgcHJpdmF0ZSBmdW5jdGlvbnMgKi9cbiAgICBfb25DbG9zZU1hcFBvcG92ZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVyQ2xpY2sobnVsbCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVySG92ZXIgPSAoX2lkeDogbnVtYmVyLCBpbmZvOiBQaWNraW5nSW5mbzxhbnk+IHwgbnVsbCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckhvdmVyKGluZm8sIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgIH07XG5cbiAgICBfb25MYXllclNldERvbWFpbiA9IChcbiAgICAgIGlkeDogbnVtYmVyLFxuICAgICAgdmFsdWU6IG51bWJlcltdIHwge2RvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjsgYWdncmVnYXRlZEJpbnM6IFJlY29yZDxudW1iZXIsIEFnZ3JlZ2F0ZWRCaW4+fVxuICAgICkgPT4ge1xuICAgICAgLy8gZGVjay5nbCA5IG5hdGl2ZSBhZ2dyZWdhdGlvbiBsYXllcnMgKEdyaWQsIEhleGFnb24pIHBhc3NcbiAgICAgIC8vIHtkb21haW4sIGFnZ3JlZ2F0ZWRCaW5zfSB2aWEgb3VyIFNjYWxlRW5oYW5jZWQqIG92ZXJyaWRlcyxcbiAgICAgIC8vIHdoaWxlIENsdXN0ZXJMYXllcidzIENQVUFnZ3JlZ2F0b3IgYWxzbyBwYXNzZXMge2RvbWFpbiwgYWdncmVnYXRlZEJpbnN9LlxuICAgICAgLy8gUGxhaW4gW21pbiwgbWF4XSBpcyBhIGZhbGxiYWNrIGlmIHRoZSBvdmVycmlkZSBpcyBieXBhc3NlZC5cbiAgICAgIGNvbnN0IGNvbmZpZyA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgID8ge2NvbG9yRG9tYWluOiB2YWx1ZSBhcyBWaXN1YWxDaGFubmVsRG9tYWlufVxuICAgICAgICA6IHtjb2xvckRvbWFpbjogdmFsdWUuZG9tYWluLCBhZ2dyZWdhdGVkQmluczogdmFsdWUuYWdncmVnYXRlZEJpbnN9O1xuXG4gICAgICBjb25zdCBsYXllciA9IHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF07XG4gICAgICBpZiAoIWxheWVyKSByZXR1cm47XG5cbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCBjb25maWcgYXMgUGFydGlhbDxMYXllckJhc2VDb25maWc+KTtcbiAgICB9O1xuXG4gICAgX29uUmVkcmF3TmVlZGVkID0gKF9pZHg6IG51bWJlcikgPT4ge1xuICAgICAgLy8gdXBkYXRlTWFwVXBkYXRlciBhbHdheXMgcmV0dXJucyBhIG5ldyBzdGF0ZSBvYmplY3QgcmVmZXJlbmNlLCB3aGljaCB0cmlnZ2VycyByZS1yZW5kZXJcbiAgICAgIGNvbnN0IHttYXBTdGF0ZUFjdGlvbnMsIGluZGV4fSA9IHRoaXMucHJvcHM7XG4gICAgICBtYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwKHt9LCBpbmRleCk7XG4gICAgfTtcblxuICAgIF9vbkZpdEJvdW5kcyA9IChfaWR4OiBudW1iZXIsIGJvdW5kczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pID0+IHtcbiAgICAgIHRoaXMucHJvcHMubWFwU3RhdGVBY3Rpb25zLmZpdEJvdW5kcyhib3VuZHMpO1xuICAgIH07XG5cbiAgICBfb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UgPSAoaWR4LCBldmVudCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMubGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlKHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF0sIGV2ZW50KTtcbiAgICB9O1xuXG4gICAgX29uV01TRmVhdHVyZUluZm8gPSAoXG4gICAgICBpZHg6IG51bWJlcixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZmVhdHVyZUluZm86IEFycmF5PHtuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmd9PiB8IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGNvb3JkaW5hdGU/OiBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbDtcbiAgICAgIH1cbiAgICApID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLndtc0ZlYXR1cmVJbmZvKFxuICAgICAgICB0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdLFxuICAgICAgICBkYXRhLmZlYXR1cmVJbmZvLFxuICAgICAgICBkYXRhLmNvb3JkaW5hdGVcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9oYW5kbGVNYXBUb2dnbGVMYXllciA9IGxheWVySWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4OiBtYXBJbmRleCA9IDAsIHZpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKTtcbiAgICB9O1xuXG4gICAgX29uTWFwYm94U3R5bGVVcGRhdGUgPSB1cGRhdGUgPT4ge1xuICAgICAgLy8gZm9yY2UgcmVmcmVzaCBtYXBib3hnbCBsYXllcnNcbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSB7fTtcbiAgICAgIHRoaXMuX3VwZGF0ZU1hcGJveExheWVycygpO1xuXG4gICAgICB0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbih1cGRhdGUpO1xuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25NYXBTdHlsZUxvYWRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwU3R5bGVMb2FkZWQodGhpcy5fbWFwKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3VwZGF0ZUF0dHJpYnV0aW9uID0gKHVwZGF0ZT86IGFueSkgPT4ge1xuICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG5cbiAgICAgIGxldCBzdHlsZU9iaiA9IHVwZGF0ZT8uc3R5bGUgfHwgbnVsbDtcbiAgICAgIGlmICghc3R5bGVPYmogJiYgdGhpcy5fbWFwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmF3U3R5bGUgPSB0aGlzLl9tYXAuaXNTdHlsZUxvYWRlZD8uKCkgPyB0aGlzLl9tYXAuZ2V0U3R5bGU/LigpIDogbnVsbDtcbiAgICAgICAgICBpZiAocmF3U3R5bGUpIHtcbiAgICAgICAgICAgIHN0eWxlT2JqID0ge3N0eWxlc2hlZXQ6IHJhd1N0eWxlfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIG1hcCBzdHlsZSBub3QgcmVhZHkgeWV0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHVzZXNNYXBib3ggPSBzdHlsZU9iaiA/IGlzU3R5bGVVc2luZ01hcGJveFRpbGVzKHN0eWxlT2JqKSA6IGZhbHNlO1xuICAgICAgY29uc3QgdXNlc09zbSA9IHN0eWxlT2JqID8gaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzKHN0eWxlT2JqKSA6IGZhbHNlO1xuICAgICAgY29uc3QgYmFzZW1hcEF0dHJpYnV0aW9ucyA9IGdldEJhc2VNYXBBdHRyaWJ1dGlvbnModGhpcy5fbWFwKTtcblxuICAgICAgLy8gaWYgT1NNIHRpbGVzIGFyZSBkZXRlY3RlZCBpbiB0aGUgcmF3IHN0eWxlIGJ1dCBubyBzb3VyY2UtbGV2ZWwgYXR0cmlidXRpb25cbiAgICAgIC8vIHN0cmluZyB3YXMgY29sbGVjdGVkIHlldCwgZm9sZCBpbiB0aGUgY2Fub25pY2FsIE9TTSBhdHRyaWJ1dGlvbiBzbyB0aGVcbiAgICAgIC8vIHJlbmRlciBwYXRoIHN0YXlzIHVuaWZvcm0gKG5vIHNlcGFyYXRlIGhhcmRjb2RlZCBmYWxsYmFjayBsaW5rKVxuICAgICAgaWYgKHVzZXNPc20gJiYgIWJhc2VtYXBBdHRyaWJ1dGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnMucHVzaChPU01fQVRUUklCVVRJT05fSFRNTCk7XG4gICAgICB9XG5cbiAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHRvIHNob3cgdGhlIFwiQmFzZW1hcCBieTogTWFwTGlicmUvTWFwYm94XCIgbG9nbzpcbiAgICAgIC8vICAtIEFsd2F5cyBzaG93IGZvciBidWlsdC1pbiBrZXBsZXIuZ2wgc3R5bGVzIChkYXJrLW1hdHRlciwgcG9zaXRyb24sIOKApik6XG4gICAgICAvLyAgICB0aGV5IGRvbid0IGNhcnJ5IHRoZWlyIG93biBcInByb3ZpZGVyXCIgYnJhbmRpbmcgc28gdGhlIHJlbmRlcmluZy1lbmdpbmVcbiAgICAgIC8vICAgIGxvZ28gYWN0cyBhcyB0aGUgYmFzZW1hcCBjcmVkaXQuXG4gICAgICAvLyAgLSBBbHdheXMgc2hvdyB3aGVuIE1hcGJveCB0aWxlcyBhcmUgaW4gdXNlIChtYXBib3g6Ly8gc291cmNlcyk6IE1hcGJveFxuICAgICAgLy8gICAgYXR0cmlidXRpb24gaXMgcmVxdWlyZWQuXG4gICAgICAvLyAgLSBIaWRlIGZvciBjdXN0b20gdXNlci1hZGRlZCBzdHlsZXMgKGN1c3RvbSA9PT0gJ0xPQ0FMJyB8ICdNQU5BR0VEJyk6XG4gICAgICAvLyAgICB0aG9zZSBzdHlsZXMgc3VwcGx5IHRoZWlyIG93biBUaWxlSlNPTiBhdHRyaWJ1dGlvbiAoZS5nLiBPcGVuRnJlZU1hcCksXG4gICAgICAvLyAgICBzbyBzaG93aW5nIFwiQmFzZW1hcCBieTogTWFwTGlicmVcIiB3b3VsZCBiZSBtaXNsZWFkaW5nLlxuICAgICAgY29uc3Qgc3R5bGVUeXBlID0gdGhpcy5wcm9wcy5tYXBTdHlsZT8uc3R5bGVUeXBlO1xuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gdGhpcy5wcm9wcy5tYXBTdHlsZT8ubWFwU3R5bGVzPy5bc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGlzVXNlckN1c3RvbVN0eWxlID0gQm9vbGVhbihjdXJyZW50U3R5bGU/LmN1c3RvbSk7XG4gICAgICBjb25zdCBzaG93QmFzZU1hcExpYkxvZ28gPSB1c2VzTWFwYm94IHx8ICFpc1VzZXJDdXN0b21TdHlsZTtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNob3dCYXNlTWFwTGliTG9nbyxcbiAgICAgICAgYmFzZW1hcEF0dHJpYnV0aW9uc1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEZvciBub24tTWFwYm94IHN0eWxlcywgVGlsZUpTT04gYXR0cmlidXRpb24gcmVzb2x2ZXMgYXN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGFmdGVyIHN0eWxlLmxvYWQuICBTdGFydCBhIGxpc3RlbmVyIHNvIHdlIGNhbiB1cGRhdGUgYmFzZW1hcEF0dHJpYnV0aW9uc1xuICAgICAgLy8gYXMgc29vbiBhcyB0aGUgc291cmNlcyByZXNvbHZlIHRoZWlyIFRpbGVKU09OLlxuICAgICAgaWYgKCF1c2VzTWFwYm94KSB7XG4gICAgICAgIHRoaXMuX2NvbGxlY3RCYXNlbWFwQXR0cmlidXRpb25zKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lciAmJiB0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignc291cmNlZGF0YScsIHRoaXMuX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIpO1xuICAgICAgICB0aGlzLl9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9iYXNlbWFwSWRsZUxpc3RlbmVyICYmIHRoaXMuX21hcCkge1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdpZGxlJywgdGhpcy5fYmFzZW1hcElkbGVMaXN0ZW5lcik7XG4gICAgICAgIHRoaXMuX2Jhc2VtYXBJZGxlTGlzdGVuZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfY29sbGVjdEJhc2VtYXBBdHRyaWJ1dGlvbnMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX21hcCkgcmV0dXJuO1xuICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgICAgLy8gQ2FwIHJldHJpZXMgc28gYSBzdHlsZSB0aGF0IG5ldmVyIHlpZWxkcyBhdHRyaWJ1dGlvbnMgZG9lc24ndCBsZWF2ZSBhXG4gICAgICAvLyBwZXJtYW5lbnQgc291cmNlZGF0YSBsaXN0ZW5lciBhdHRhY2hlZC5cbiAgICAgIGNvbnN0IE1BWF9BVFRFTVBUUyA9IDUwO1xuXG4gICAgICBjb25zdCB0cnlDb2xsZWN0ID0gKCkgPT4ge1xuICAgICAgICAvLyBUaWxlSlNPTiByZXNvbHZlcyBhc3luY2hyb25vdXNseTsgcmUtY29sbGVjdCBhdHRyaWJ1dGlvbnMgb25jZSBhXG4gICAgICAgIC8vIHNvdXJjZSdzIG1ldGFkYXRhIGlzIGF2YWlsYWJsZSBzbyBjdXN0b20gYmFzZW1hcCBhdHRyaWJ1dGlvbnMgYXJlIG5vdCBsb3N0LlxuICAgICAgICBjb25zdCBiYXNlbWFwQXR0cmlidXRpb25zID0gZ2V0QmFzZU1hcEF0dHJpYnV0aW9ucyh0aGlzLl9tYXApO1xuICAgICAgICBpZiAoYmFzZW1hcEF0dHJpYnV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgICAvLyBEb24ndCBjaGFuZ2Ugc2hvd0Jhc2VNYXBMaWJMb2dvIGhlcmUg4oCUIGl0IGlzIGZpeGVkIGF0IHN0eWxlLmxvYWQgdGltZVxuICAgICAgICAgIC8vIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHN0eWxlIHVzZXMgTWFwYm94IHRpbGVzLiAgV2Ugb25seSB1cGRhdGUgdGhlXG4gICAgICAgICAgLy8gcHJvdmlkZXIgYXR0cmlidXRpb25zIGNvbGxlY3RlZCBmcm9tIHRoZSByZXNvbHZlZCBUaWxlSlNPTi5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtiYXNlbWFwQXR0cmlidXRpb25zfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25Tb3VyY2VEYXRhID0gKGU6IGFueSkgPT4ge1xuICAgICAgICAvLyBDb2xsZWN0IGF0dHJpYnV0aW9ucyB3aGVuOlxuICAgICAgICAvLyAgIChhKSBhIHNvdXJjZSdzIFRpbGVKU09OIGhhcyBqdXN0IGJlZW4gZmV0Y2hlZCAoc291cmNlRGF0YVR5cGUgPT09ICdtZXRhZGF0YScpIOKAlFxuICAgICAgICAvLyAgICAgICB0aGlzIGlzIHRoZSBlYXJsaWVzdCBtb21lbnQgdGhlIGBhdHRyaWJ1dGlvbmAgcHJvcGVydHkgaXMgYXZhaWxhYmxlIG9uIHRoZVxuICAgICAgICAvLyAgICAgICByZXNvbHZlZCBzb3VyY2Ugb2JqZWN0LCBvclxuICAgICAgICAvLyAgIChiKSBhIHNvdXJjZSBpcyBmdWxseSBsb2FkZWQgKGlzU291cmNlTG9hZGVkID09PSB0cnVlKSDigJQgZmFsbGJhY2sgZm9yIHJhc3RlclxuICAgICAgICAvLyAgICAgICBzb3VyY2VzIG9yIHN0eWxlcyB0aGF0IHNldCBhdHRyaWJ1dGlvbiBpbmxpbmUgcmF0aGVyIHRoYW4gdmlhIFRpbGVKU09OLlxuICAgICAgICBpZiAoIWU/LmlzU291cmNlTG9hZGVkICYmIGU/LnNvdXJjZURhdGFUeXBlICE9PSAnbWV0YWRhdGEnKSByZXR1cm47XG4gICAgICAgIGF0dGVtcHRzKys7XG4gICAgICAgIHRyeUNvbGxlY3QoKTtcbiAgICAgICAgaWYgKGF0dGVtcHRzID49IE1BWF9BVFRFTVBUUykge1xuICAgICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBUaGUgYGlkbGVgIGV2ZW50IGZpcmVzIHdoZW4gdGhlIG1hcCBoYXMgZmluaXNoZWQgbG9hZGluZyBhbGwgcGVuZGluZ1xuICAgICAgLy8gcmVzb3VyY2VzICh0aWxlcywgVGlsZUpTT04sIHNwcml0ZXMpLiBBdCB0aGF0IHBvaW50IGF0dHJpYnV0aW9ucyBmcm9tXG4gICAgICAvLyBhbGwgc291cmNlcyBhcmUgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCwgc28gdGhpcyBpcyBhIHJlbGlhYmxlXG4gICAgICAvLyBvbmUtc2hvdCBmYWxsYmFjayB0aGF0IGNhdGNoZXMgY2FzZXMgd2hlcmUgdGhlIHNvdXJjZWRhdGEgbWV0YWRhdGFcbiAgICAgIC8vIGV2ZW50cyBhcmUgbWlzc2VkIG9yIHRoZSBzb3VyY2UgbmV2ZXIgcmVhY2hlcyBpc1NvdXJjZUxvYWRlZC5cbiAgICAgIGNvbnN0IG9uSWRsZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgIGNvbnN0IGJhc2VtYXBBdHRyaWJ1dGlvbnMgPSBnZXRCYXNlTWFwQXR0cmlidXRpb25zKHRoaXMuX21hcCk7XG4gICAgICAgIGlmIChiYXNlbWFwQXR0cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2Jhc2VtYXBBdHRyaWJ1dGlvbnN9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lciA9IG9uU291cmNlRGF0YTtcbiAgICAgIHRoaXMuX2Jhc2VtYXBJZGxlTGlzdGVuZXIgPSBvbklkbGU7XG4gICAgICB0aGlzLl9tYXAub24oJ3NvdXJjZWRhdGEnLCBvblNvdXJjZURhdGEpO1xuICAgICAgdGhpcy5fbWFwLm9uKCdpZGxlJywgb25JZGxlKTtcbiAgICB9O1xuXG4gICAgX3NldE1hcFJlZiA9IG1hcFJlZiA9PiB7XG4gICAgICAvLyBIYW5kbGUgY2hhbmdlIG9mIHRoZSBtYXAgbGlicmFyeVxuICAgICAgaWYgKHRoaXMuX21hcCAmJiBtYXBSZWYpIHtcbiAgICAgICAgY29uc3QgbWFwID0gbWFwUmVmLmdldE1hcCgpO1xuICAgICAgICBpZiAobWFwICYmIHRoaXMuX21hcCAhPT0gbWFwKSB7XG4gICAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIHRoaXMuX29uTWFwYm94U3R5bGVVcGRhdGUpO1xuICAgICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfUkVOREVSLCB0aGlzLl9vbk1hcFJlbmRlcik7XG4gICAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgICAgdGhpcy5fbWFwID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX21hcCAmJiBtYXBSZWYpIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwUmVmLmdldE1hcCgpO1xuICAgICAgICAvLyBpIG5vdGljZWQgaW4gY2VydGFpbiBjb250ZXh0IHdlIGRvbid0IGFjY2VzcyB0aGUgYWN0dWFsIG1hcCBlbGVtZW50XG4gICAgICAgIGlmICghdGhpcy5fbWFwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJpbmQgbWFwYm94Z2wgZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgdGhpcy5fbWFwLm9uKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgdGhpcy5fb25NYXBib3hTdHlsZVVwZGF0ZSk7XG4gICAgICAgIHRoaXMuX21hcC5vbihNQVBCT1hHTF9SRU5ERVIsIHRoaXMuX29uTWFwUmVuZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuZ2V0TWFwYm94UmVmKSB7XG4gICAgICAgIC8vIFRoZSBwYXJlbnQgY29tcG9uZW50IGNhbiBnYWluIGFjY2VzcyB0byBvdXIgTWFwYm94R2xNYXAgYnlcbiAgICAgICAgLy8gcHJvdmlkaW5nIHRoaXMgY2FsbGJhY2suIE5vdGUgdGhhdCAnbWFwYm94JyB3aWxsIGJlIG51bGwgd2hlbiB0aGVcbiAgICAgICAgLy8gcmVmIGlzIHVuc2V0IChlLmcuIHdoZW4gYSBzcGxpdCBtYXAgaXMgY2xvc2VkKS5cbiAgICAgICAgdGhpcy5wcm9wcy5nZXRNYXBib3hSZWYobWFwUmVmLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX29uRGVja0luaXRpYWxpemVkKGRldmljZSkge1xuICAgICAgaWYgKHRoaXMucHJvcHMub25EZWNrSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkRlY2tJbml0aWFsaXplZCh0aGlzLl9kZWNrLCBkZXZpY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDEpIEFsbG93IGVmZmVjdHMgb25seSBmb3IgdGhlIGZpcnN0IHZpZXcuXG4gICAgICogMikgUHJldmVudCBlZmZlY3Q6cHJlUmVuZGVyIGNhbGwgd2l0aG91dCB2YWxpZCBnZW5lcmF0ZWQgdmlld3BvcnRzLlxuICAgICAqIEBwYXJhbSB2aWV3SW5kZXggVmlldyBpbmRleC5cbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgZWZmZWN0cyBjYW4gYmUgdXNlZC5cbiAgICAgKi9cbiAgICBfaXNPS1RvUmVuZGVyRWZmZWN0cyh2aWV3SW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAhdmlld0luZGV4ICYmIEJvb2xlYW4odGhpcy5fZGVjaz8udmlld01hbmFnZXI/Ll92aWV3cG9ydHM/Lmxlbmd0aCk7XG4gICAgfVxuXG4gICAgX29uQmVmb3JlUmVuZGVyID0gKCkgPT4ge1xuICAgICAgLy8gbm8tb3BcbiAgICB9O1xuXG4gICAgX2Fubm90YXRpb25WaWV3cG9ydENhY2hlOiB7a2V5OiBzdHJpbmc7IHZpZXdwb3J0OiBhbnl9IHwgbnVsbCA9IG51bGw7XG5cbiAgICBfd2FzSW50ZXJhY3RpbmcgPSBmYWxzZTtcblxuICAgIF9nZXRBbm5vdGF0aW9uVmlld3BvcnQobWFwU3RhdGU6IGFueSwgaW50ZXJuYWxWaWV3U3RhdGU6IGFueSkge1xuICAgICAgY29uc3QgbG9uZ2l0dWRlID0gaW50ZXJuYWxWaWV3U3RhdGU/LmxvbmdpdHVkZSA/PyBtYXBTdGF0ZS5sb25naXR1ZGU7XG4gICAgICBjb25zdCBsYXRpdHVkZSA9IGludGVybmFsVmlld1N0YXRlPy5sYXRpdHVkZSA/PyBtYXBTdGF0ZS5sYXRpdHVkZTtcbiAgICAgIGNvbnN0IHpvb20gPSBpbnRlcm5hbFZpZXdTdGF0ZT8uem9vbSA/PyBtYXBTdGF0ZS56b29tO1xuICAgICAgY29uc3QgcGl0Y2ggPSBpbnRlcm5hbFZpZXdTdGF0ZT8ucGl0Y2ggPz8gbWFwU3RhdGUucGl0Y2ggPz8gMDtcbiAgICAgIGNvbnN0IGJlYXJpbmcgPSBpbnRlcm5hbFZpZXdTdGF0ZT8uYmVhcmluZyA/PyBtYXBTdGF0ZS5iZWFyaW5nID8/IDA7XG4gICAgICBjb25zdCB3aWR0aCA9IG1hcFN0YXRlLndpZHRoIHx8IDA7XG4gICAgICBjb25zdCBoZWlnaHQgPSBtYXBTdGF0ZS5oZWlnaHQgfHwgMDtcbiAgICAgIGNvbnN0IGtleSA9IGAke2xvbmdpdHVkZX0sJHtsYXRpdHVkZX0sJHt6b29tfSwke3BpdGNofSwke2JlYXJpbmd9LCR7d2lkdGh9LCR7aGVpZ2h0fWA7XG5cbiAgICAgIGlmICh0aGlzLl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZT8ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Fubm90YXRpb25WaWV3cG9ydENhY2hlLnZpZXdwb3J0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXJnZWRTdGF0ZSA9IHsuLi5tYXBTdGF0ZSwgLi4uaW50ZXJuYWxWaWV3U3RhdGUsIHdpZHRoLCBoZWlnaHR9O1xuICAgICAgY29uc3QgdnAgPSBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZShtZXJnZWRTdGF0ZSkgYXMgYW55O1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSB7XG4gICAgICAgIHByb2plY3Q6IChsbmdMYXQ6IFtudW1iZXIsIG51bWJlcl0pID0+IHZwLnByb2plY3QobG5nTGF0KSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICB1bnByb2plY3Q6ICh4eTogW251bWJlciwgbnVtYmVyXSkgPT4gdnAudW5wcm9qZWN0KHh5KSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICBsb25naXR1ZGUsXG4gICAgICAgIGxhdGl0dWRlLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICB6b29tXG4gICAgICB9O1xuICAgICAgdGhpcy5fYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGUgPSB7a2V5LCB2aWV3cG9ydH07XG4gICAgICByZXR1cm4gdmlld3BvcnQ7XG4gICAgfVxuXG4gICAgX29uRGVja0Vycm9yID0gKGVycm9yLCBsYXllcikgPT4ge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3I/Lm1lc3NhZ2UgfHwgJ3Vua25vd24tZXJyb3InO1xuICAgICAgY29uc3QgbGF5ZXJNZXNzYWdlID0gbGF5ZXI/LmlkID8gYCBpbiAke2xheWVyLmlkfSBsYXllcmAgOiAnJztcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZUZ1bGwgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09ICdXZWJHTCBjb250ZXh0IGlzIGxvc3QnXG4gICAgICAgICAgPyAnWW91ciBHUFUgd2FzIGRpc2Nvbm5lY3RlZC4gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdXIgY29tcHV0ZXIgZ29lcyB0byBzbGVlcC4gSXQgY2FuIGFsc28gb2NjdXIgZm9yIG90aGVyIHJlYXNvbnMsIHN1Y2ggYXMgaWYgeW91IGFyZSBydW5uaW5nIHRvbyBtYW55IEdQVSBhcHBsaWNhdGlvbnMuJ1xuICAgICAgICAgIDogYEFuIGVycm9yIGluIGRlY2suZ2w6ICR7ZXJyb3JNZXNzYWdlfSR7bGF5ZXJNZXNzYWdlfS5gO1xuXG4gICAgICAvLyBUaHJvdHRsZSBlcnJvciBub3RpZmljYXRpb25zLCBhcyBSZWFjdCBkb2Vzbid0IGxpa2UgdG9vIG1hbnkgc3RhdGUgY2hhbmdlcyBmcm9tIGhlcmUuXG4gICAgICBjb25zdCBsYXN0U2hvd24gPSB0aGlzLl9kZWNrR0xFcnJvcnNFbGFwc2VkW2Vycm9yTWVzc2FnZUZ1bGxdO1xuICAgICAgaWYgKCFsYXN0U2hvd24gfHwgbGFzdFNob3duIDwgRGF0ZS5ub3coKSAtIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FKSB7XG4gICAgICAgIHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWRbZXJyb3JNZXNzYWdlRnVsbF0gPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIE1hcmsgbGF5ZXIgYXMgaW52YWxpZFxuICAgICAgICBsZXQgZXh0cmFMYXllck1lc3NhZ2UgPSAnJztcbiAgICAgICAgY29uc3Qge3Zpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAobGF5ZXIpIHtcbiAgICAgICAgICBsZXQgdG9wTW9zdExheWVyID0gbGF5ZXI7XG4gICAgICAgICAgd2hpbGUgKHRvcE1vc3RMYXllci5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRvcE1vc3RMYXllciA9IHRvcE1vc3RMYXllci5wYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0b3BNb3N0TGF5ZXIucHJvcHM/LmlkKSB7XG4gICAgICAgICAgICB2aXNTdGF0ZUFjdGlvbnMubGF5ZXJTZXRJc1ZhbGlkKHRvcE1vc3RMYXllciwgZmFsc2UpO1xuICAgICAgICAgICAgZXh0cmFMYXllck1lc3NhZ2UgPSAnVGhlIGxheWVyIGhhcyBiZWVuIGRpc2FibGVkIGFuZCBoaWdobGlnaHRlZC4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBuZXcgZXJyb3Igbm90aWZpY2F0aW9uIG9yIHVwZGF0ZSBleGlzdGluZyBvbmUgd2l0aCBzYW1lIGlkLlxuICAgICAgICAvLyBVcGRhdGUgaXMgcmVxdWlyZWQgdG8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIG5vdGlmaWNhdGlvbnMgYXMgdGhleSBwcm9iYWJseSBhcmUgZ29pbmcgdG8gXCJqdW1wXCIgYmFzZWQgb24gb3JkZXIgb2YgZXJyb3JzLlxuICAgICAgICBjb25zdCB7dWlTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMuYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke2Vycm9yTWVzc2FnZUZ1bGx9ICR7ZXh0cmFMYXllck1lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiBlcnJvck1lc3NhZ2VGdWxsIC8vIHRyZWF0IHRoZSBlcnJvciBtZXNzYWdlIGFzIGlkXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyogY29tcG9uZW50IHJlbmRlciBmdW5jdGlvbnMgKi9cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbiAgICBfcmVuZGVyTWFwUG9wb3ZlcigpIHtcbiAgICAgIC8vIHRoaXMgY2hlY2sgaXMgZm9yIGxpbWl0aW5nIHRoZSBkaXNwbGF5IG9mIHRoZSBgPE1hcFBvcG92ZXI+YCB0byB0aGUgYDxNYXBDb250YWluZXI+YCB0aGUgdXNlciBpcyBpbnRlcmFjdGluZyB3aXRoXG4gICAgICAvLyB0aGUgRGVja0dMIG9uSG92ZXIgZXZlbnQgaGFuZGxlciBhZGRzIGEgYG1hcEluZGV4YCBwcm9wZXJ0eSB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIGBob3ZlckluZm9gIG9iamVjdCBvZiBgdmlzU3RhdGVgXG4gICAgICBpZiAodGhpcy5wcm9wcy5pbmRleCAhPT0gdGhpcy5wcm9wcy52aXNTdGF0ZS5ob3ZlckluZm8/Lm1hcEluZGV4KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBtb3ZlIHRoaXMgaW50byByZWR1Y2VyIHNvIGl0IGNhbiBiZSB0ZXN0ZWRcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgIHZpc1N0YXRlOiB7XG4gICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgIGNsaWNrZWQsXG4gICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICBtb3VzZVBvczoge21vdXNlUG9zaXRpb24sIGNvb3JkaW5hdGUsIHBpbm5lZH1cbiAgICAgICAgfVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBsYXllcnNUb1JlbmRlciA9IHRoaXMubGF5ZXJzVG9SZW5kZXJTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgaWYgKCFtb3VzZVBvc2l0aW9uIHx8ICFpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXllckhvdmVyUHJvcCA9IGdldExheWVySG92ZXJQcm9wKHtcbiAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICBsYXllcnMsXG4gICAgICAgIGxheWVyc1RvUmVuZGVyLFxuICAgICAgICBkYXRhc2V0c1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbXBhcmVNb2RlID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWdcbiAgICAgICAgPyBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5jb21wYXJlTW9kZVxuICAgICAgICA6IGZhbHNlO1xuXG4gICAgICBsZXQgcGlubmVkUG9zaXRpb24gPSB7eDogMCwgeTogMH07XG4gICAgICBsZXQgbGF5ZXJQaW5uZWRQcm9wOiBMYXllckhvdmVyUHJvcCB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKHBpbm5lZCB8fCBjbGlja2VkKSB7XG4gICAgICAgIC8vIHByb2plY3QgbG5nbGF0IHRvIHNjcmVlbiBzbyB0aGF0IHRvb2x0aXAgZm9sbG93cyB0aGUgb2JqZWN0IG9uIHpvb21cbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZShtYXBTdGF0ZSk7XG4gICAgICAgIGNvbnN0IGxuZ0xhdCA9IGNsaWNrZWQgPyBjbGlja2VkLmNvb3JkaW5hdGUgOiBwaW5uZWQuY29vcmRpbmF0ZTtcbiAgICAgICAgcGlubmVkUG9zaXRpb24gPSB0aGlzLl9nZXRIb3ZlclhZKHZpZXdwb3J0LCBsbmdMYXQpO1xuICAgICAgICBsYXllclBpbm5lZFByb3AgPSBnZXRMYXllckhvdmVyUHJvcCh7XG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgIGhvdmVySW5mbzogY2xpY2tlZCxcbiAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgbGF5ZXJzVG9SZW5kZXIsXG4gICAgICAgICAgZGF0YXNldHNcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChsYXllckhvdmVyUHJvcCAmJiBsYXllclBpbm5lZFByb3ApIHtcbiAgICAgICAgICBsYXllckhvdmVyUHJvcC5wcmltYXJ5RGF0YSA9IGxheWVyUGlubmVkUHJvcC5kYXRhO1xuICAgICAgICAgIGxheWVySG92ZXJQcm9wLmNvbXBhcmVUeXBlID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuY29tcGFyZVR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tbW9uUHJvcCA9IHtcbiAgICAgICAgb25DbG9zZTogdGhpcy5fb25DbG9zZU1hcFBvcG92ZXIsXG4gICAgICAgIHpvb206IG1hcFN0YXRlLnpvb20sXG4gICAgICAgIGNvbnRhaW5lcjogdGhpcy5fZGVjayA/IHRoaXMuX2RlY2suY2FudmFzIDogdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RXJyb3JCb3VuZGFyeT5cbiAgICAgICAgICB7bGF5ZXJQaW5uZWRQcm9wICYmIChcbiAgICAgICAgICAgIDxNYXBQb3BvdmVyXG4gICAgICAgICAgICAgIHsuLi5waW5uZWRQb3NpdGlvbn1cbiAgICAgICAgICAgICAgey4uLmNvbW1vblByb3B9XG4gICAgICAgICAgICAgIGxheWVySG92ZXJQcm9wPXtsYXllclBpbm5lZFByb3B9XG4gICAgICAgICAgICAgIGNvb3JkaW5hdGU9e2ludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZCAmJiAocGlubmVkIHx8IHt9KS5jb29yZGluYXRlfVxuICAgICAgICAgICAgICBmcm96ZW49e3RydWV9XG4gICAgICAgICAgICAgIGlzQmFzZT17Y29tcGFyZU1vZGV9XG4gICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldEZlYXR1cmVzfVxuICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmU9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb249e3RoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7bGF5ZXJIb3ZlclByb3AgJiYgKCFsYXllclBpbm5lZFByb3AgfHwgY29tcGFyZU1vZGUpICYmIChcbiAgICAgICAgICAgIDxNYXBQb3BvdmVyXG4gICAgICAgICAgICAgIHg9e21vdXNlUG9zaXRpb25bMF19XG4gICAgICAgICAgICAgIHk9e21vdXNlUG9zaXRpb25bMV19XG4gICAgICAgICAgICAgIHsuLi5jb21tb25Qcm9wfVxuICAgICAgICAgICAgICBsYXllckhvdmVyUHJvcD17bGF5ZXJIb3ZlclByb3B9XG4gICAgICAgICAgICAgIGZyb3plbj17ZmFsc2V9XG4gICAgICAgICAgICAgIGNvb3JkaW5hdGU9e2ludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZCAmJiBjb29yZGluYXRlfVxuICAgICAgICAgICAgICBvblNldEZlYXR1cmVzPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRGZWF0dXJlc31cbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQXJndW1lbnQgb2YgdHlwZSAnUmVhZG9ubHk8TWFwQ29udGFpbmVyUHJvcHM+JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInXG4gICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uPXt0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRXJyb3JCb3VuZGFyeT5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbiAgICBfZ2V0SG92ZXJYWSh2aWV3cG9ydCwgbG5nTGF0KSB7XG4gICAgICBjb25zdCBzY3JlZW5Db29yZCA9ICF2aWV3cG9ydCB8fCAhbG5nTGF0ID8gbnVsbCA6IHZpZXdwb3J0LnByb2plY3QobG5nTGF0KTtcbiAgICAgIHJldHVybiBzY3JlZW5Db29yZCAmJiB7eDogc2NyZWVuQ29vcmRbMF0sIHk6IHNjcmVlbkNvb3JkWzFdfTtcbiAgICB9XG5cbiAgICBfcmVuZGVyRGVja092ZXJsYXkoXG4gICAgICBsYXllcnNGb3JEZWNrLFxuICAgICAgb3B0aW9uczoge3ByaW1hcnlNYXA6IGJvb2xlYW47IGlzSW50ZXJhY3RpdmU/OiBib29sZWFuOyBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZX0gPSB7XG4gICAgICAgIHByaW1hcnlNYXA6IGZhbHNlXG4gICAgICB9XG4gICAgKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0eWxlLFxuICAgICAgICB2aXNTdGF0ZSxcbiAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgZGVja0dsUHJvcHMsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBtYXBDb250cm9scyxcbiAgICAgICAgZGVja1JlbmRlckNhbGxiYWNrcyxcbiAgICAgICAgdGhlbWUsXG4gICAgICAgIGdlbmVyYXRlRGVja0dMTGF5ZXJzLFxuICAgICAgICBvbk1vdXNlTW92ZVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IHtob3ZlckluZm8sIGVkaXRvcn0gPSB2aXNTdGF0ZTtcbiAgICAgIGNvbnN0IHtwcmltYXJ5TWFwLCBpc0ludGVyYWN0aXZlLCBjaGlsZHJlbn0gPSBvcHRpb25zO1xuXG4gICAgICAvLyBkaXNhYmxlIGRvdWJsZSBjbGljayB6b29tIHdoZW4gZWRpdG9yIGlzIGluIGFueSBkcmF3IG1vZGVcbiAgICAgIGNvbnN0IHttYXBEcmF3fSA9IG1hcENvbnRyb2xzO1xuICAgICAgY29uc3Qge2FjdGl2ZTogZWRpdG9yTWVudUFjdGl2ZSA9IGZhbHNlfSA9IG1hcERyYXcgfHwge307XG4gICAgICBjb25zdCBpc0VkaXRvckRyYXdpbmdNb2RlID0gRWRpdG9yTGF5ZXJVdGlscy5pc0RyYXdpbmdBY3RpdmUoZWRpdG9yTWVudUFjdGl2ZSwgZWRpdG9yLm1vZGUpO1xuXG4gICAgICBjb25zdCBpbnRlcm5hbFZpZXdTdGF0ZSA9IHRoaXMuY29udGV4dD8uZ2V0SW50ZXJuYWxWaWV3U3RhdGUoaW5kZXgpO1xuICAgICAgY29uc3QgaW50ZXJuYWxNYXBTdGF0ZSA9IHsuLi5tYXBTdGF0ZSwgLi4uaW50ZXJuYWxWaWV3U3RhdGV9O1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZShpbnRlcm5hbE1hcFN0YXRlKTtcblxuICAgICAgY29uc3QgZWRpdG9yRmVhdHVyZVNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkUG9seWdvbkluZGV4U2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGNvbnN0IHtzZXRGZWF0dXJlcywgb25MYXllckNsaWNrLCBzZXRTZWxlY3RlZEZlYXR1cmV9ID0gdmlzU3RhdGVBY3Rpb25zO1xuXG4gICAgICBjb25zdCBnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZCA9IGdlbmVyYXRlRGVja0dMTGF5ZXJzID8/IGNvbXB1dGVEZWNrTGF5ZXJzO1xuXG4gICAgICBjb25zdCBleHRyYURlY2tQYXJhbXM6IHtcbiAgICAgICAgZ2V0VG9vbHRpcD86IChpbmZvOiBhbnkpID0+IG9iamVjdCB8IG51bGw7XG4gICAgICAgIGdldEN1cnNvcj86ICh7aXNEcmFnZ2luZ306IHtpc0RyYWdnaW5nOiBib29sZWFufSkgPT4gc3RyaW5nO1xuICAgICAgfSA9IHt9O1xuICAgICAgaWYgKHByaW1hcnlNYXApIHtcbiAgICAgICAgLy8gT21pdCBob3ZlciB1cGRhdGVzIHdoZW4gdGhlIHBvaW50ZXIgcG9zaXRpb24gaXMgaW52YWxpZCwgaWUuIG92ZXIgVUkgb3ZlcmxheXMgb3JcbiAgICAgICAgLy8gb3V0c2lkZSB0aGUgbWFwIGNvbnRhaW5lci4gSW4gdGhvc2UgY2FzZXMgeC95IG1heSBiZSA8IDBcbiAgICAgICAgZXh0cmFEZWNrUGFyYW1zLmdldFRvb2x0aXAgPSBpbmZvID0+IHtcbiAgICAgICAgICBjb25zdCB4ID0gTnVtYmVyKGluZm8/LngpO1xuICAgICAgICAgIGNvbnN0IHkgPSBOdW1iZXIoaW5mbz8ueSk7XG4gICAgICAgICAgaWYgKE51bWJlci5pc05hTih4KSB8fCBOdW1iZXIuaXNOYU4oeSkgfHwgeCA8IDAgfHwgeSA8IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuIEVkaXRvckxheWVyVXRpbHMuZ2V0VG9vbHRpcChpbmZvLCB7XG4gICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBleHRyYURlY2tQYXJhbXMuZ2V0Q3Vyc29yID0gKHtpc0RyYWdnaW5nfToge2lzRHJhZ2dpbmc6IGJvb2xlYW59KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yQ3Vyc29yID0gRWRpdG9yTGF5ZXJVdGlscy5nZXRDdXJzb3Ioe1xuICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgIGhvdmVySW5mb1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChlZGl0b3JDdXJzb3IpIHJldHVybiBlZGl0b3JDdXJzb3I7XG5cbiAgICAgICAgICBpZiAoaXNEcmFnZ2luZykgcmV0dXJuICdncmFiYmluZyc7XG4gICAgICAgICAgaWYgKGhvdmVySW5mbz8ubGF5ZXIpIHJldHVybiAncG9pbnRlcic7XG4gICAgICAgICAgcmV0dXJuICdncmFiJztcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWZmZWN0cyA9IHRoaXMuX2lzT0tUb1JlbmRlckVmZmVjdHMoaW5kZXgpXG4gICAgICAgID8gY29tcHV0ZURlY2tFZmZlY3RzKHt2aXNTdGF0ZSwgbWFwU3RhdGUsIGlzRXhwb3J0OiB0aGlzLnByb3BzLmlzRXhwb3J0fSlcbiAgICAgICAgOiBbXTtcblxuICAgICAgY29uc3QgaXNHbG9iZU1vZGUgPSBtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZDtcblxuICAgICAgLy8gSW4gZ2xvYmUgbW9kZSB3aXRoIGEgbm9uLWRlZmF1bHQgYmxlbmQgbW9kZSwgZm9yd2FyZCBwcmUtY29tcHV0ZWQgbGF5ZXJcbiAgICAgIC8vIHJlbmRlcmluZyBwYXJhbWV0ZXJzIGludG8gbWFwU3RhdGUgc28gaW5kaXZpZHVhbCBsYXllcnMgY2FuIG1lcmdlIHRoZW0gaW50b1xuICAgICAgLy8gdGhlaXIgb3duIHBhcmFtZXRlcnMgb2JqZWN0cy4gVGhlIGdsb2JhbCBEZWNrR0wgcGFyYW1ldGVycyBjYW5ub3QgYmUgdXNlZCBpblxuICAgICAgLy8gZ2xvYmUgbW9kZSBiZWNhdXNlIHRoZXkgYXJlIG1lcmdlZCBpbnRvIGdsb2JlIHN5c3RlbSBsYXllcnMgKGF0bW9zcGhlcmUsXG4gICAgICAvLyBzdXJmYWNlLCBldGMuKSBhbmQgYWx0ZXIgdGhlaXIgY2FyZWZ1bGx5IHR1bmVkIGJsZW5kL2RlcHRoIHN0YXRlLlxuICAgICAgLy8gJ25vcm1hbCcgaXMgb21pdHRlZCDigJQgaXQgaXMgdGhlIFdlYkdMIGRlZmF1bHQgYW5kIGluamVjdGluZyBpdCB3b3VsZFxuICAgICAgLy8gb3ZlcnJpZGUgaW50ZW50aW9uYWwgYmxlbmQ6ZmFsc2Ugc2V0dGluZ3Mgb24gbGF5ZXJzIGxpa2UgdHJpcC9zY2VuZWdyYXBoLlxuICAgICAgY29uc3QgbGF5ZXJCbGVuZGluZ1BhcmFtcyA9XG4gICAgICAgIGlzR2xvYmVNb2RlICYmIHZpc1N0YXRlLmxheWVyQmxlbmRpbmcgJiYgdmlzU3RhdGUubGF5ZXJCbGVuZGluZyAhPT0gJ25vcm1hbCdcbiAgICAgICAgICA/IGdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzKHZpc1N0YXRlLmxheWVyQmxlbmRpbmcpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBkZWNrTGF5ZXJzTWFwU3RhdGUgPSBsYXllckJsZW5kaW5nUGFyYW1zXG4gICAgICAgID8gey4uLmludGVybmFsTWFwU3RhdGUsIGxheWVyUGFyYW1ldGVyczogbGF5ZXJCbGVuZGluZ1BhcmFtc31cbiAgICAgICAgOiBpbnRlcm5hbE1hcFN0YXRlO1xuXG4gICAgICBjb25zdCBkZWNrR2xMYXllcnMgPSBnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZChcbiAgICAgICAge1xuICAgICAgICAgIHZpc1N0YXRlLFxuICAgICAgICAgIG1hcFN0YXRlOiBkZWNrTGF5ZXJzTWFwU3RhdGUsXG4gICAgICAgICAgbWFwU3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG1hcEluZGV4OiBpbmRleCxcbiAgICAgICAgICBwcmltYXJ5TWFwLFxuICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgICBsYXllcnNGb3JEZWNrLFxuICAgICAgICAgIGVkaXRvckluZm86IHByaW1hcnlNYXBcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM6IHNldEZlYXR1cmVzLFxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICBvbkFwcGx5UG9seWdvbkZpbHRlckFsbDogdmlzU3RhdGVBY3Rpb25zLnNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnMsXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbjogdGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4ZXM6IHRoaXMuc2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICd1bmtub3duJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbnVtYmVyJy5cbiAgICAgICAgICAgICAgICAgIGVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB2aWV3cG9ydFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25MYXllckhvdmVyOiB0aGlzLl9vbkxheWVySG92ZXIsXG4gICAgICAgICAgb25TZXRMYXllckRvbWFpbjogdGhpcy5fb25MYXllclNldERvbWFpbixcbiAgICAgICAgICBvbkZpbHRlcmVkSXRlbXNDaGFuZ2U6IHRoaXMuX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlLFxuICAgICAgICAgIG9uV01TRmVhdHVyZUluZm86IHRoaXMuX29uV01TRmVhdHVyZUluZm8sXG4gICAgICAgICAgb25SZWRyYXdOZWVkZWQ6IHRoaXMuX29uUmVkcmF3TmVlZGVkLFxuICAgICAgICAgIG9uRml0Qm91bmRzOiB0aGlzLl9vbkZpdEJvdW5kc1xuICAgICAgICB9LFxuICAgICAgICBkZWNrR2xQcm9wc1xuICAgICAgKTtcblxuICAgICAgLy8gRm9sbG93IHRoZSBzZWxlY3RlZCBiYXNlbWFwIHN0eWxlJ3MgbGlicmFyeSBzbyB0aGUgZ2xvYmUgdXNlcyB0aGUgc2FtZVxuICAgICAgLy8gcHJvdmlkZXIgYXMgdGhlIGZsYXQgMkQgbWFwIChDQVJUTyB0aWxlcyBmb3IgTWFwTGlicmUgc3R5bGVzLCBNYXBib3hcbiAgICAgIC8vIHRpbGVzIGZvciBNYXBib3ggc3R5bGVzKS5cbiAgICAgIGNvbnN0IGdsb2JlQmFzZW1hcFByb3ZpZGVyID0gcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyKFxuICAgICAgICBnZXRCYXNlTWFwTGlicmFyeShtYXBTdHlsZT8ubWFwU3R5bGVzPy5bbWFwU3R5bGU/LnN0eWxlVHlwZV0pLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbiB8fCAnJ1xuICAgICAgKTtcblxuICAgICAgLy8gSW4gZ2xvYmUgbW9kZSwgcHJlcGVuZCBnbG9iZSBiYXNlIGxheWVycyBhbmQgYXBwZW5kIHRvcCBsYXllcnNcbiAgICAgIGNvbnN0IGdsb2JlQmFzZUxheWVycyA9XG4gICAgICAgIGlzR2xvYmVNb2RlICYmIG1hcFN0YXRlLmdsb2JlXG4gICAgICAgICAgPyBnZXRHbG9iZUJhc2VMYXllcnMoe1xuICAgICAgICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogbWFwYm94QXBpQWNjZXNzVG9rZW4gfHwgJycsXG4gICAgICAgICAgICAgIGdsb2JlOiBtYXBTdGF0ZS5nbG9iZSxcbiAgICAgICAgICAgICAgbWFwU3R5bGVUeXBlOiBtYXBTdHlsZT8uc3R5bGVUeXBlLFxuICAgICAgICAgICAgICBiYXNlbWFwUHJvdmlkZXI6IGdsb2JlQmFzZW1hcFByb3ZpZGVyLFxuICAgICAgICAgICAgICAvLyBVc2UgdGhlIGxpdmUgKGludGVybmFsKSBsYXRpdHVkZSBzbyB0aGUgdGlsZSBMT0QgY29tcGVuc2F0aW9uXG4gICAgICAgICAgICAgIC8vIHN0YXlzIGluIHN5bmMgd2l0aCB0aGUgZGVjayB2aWV3cG9ydCBkdXJpbmcgYSBkcmFnOyBtYXBTdGF0ZVxuICAgICAgICAgICAgICAvLyBsYXRpdHVkZSBsYWdzIGJlaGluZCB3aGlsZSByb3RhdGluZy5cbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGludGVybmFsTWFwU3RhdGUubGF0aXR1ZGUsXG4gICAgICAgICAgICAgIHpvb206IGludGVybmFsTWFwU3RhdGUuem9vbVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgZ2xvYmVUb3BMYXllcnMgPVxuICAgICAgICBpc0dsb2JlTW9kZSAmJiBtYXBTdGF0ZS5nbG9iZVxuICAgICAgICAgID8gZ2V0R2xvYmVUb3BMYXllcnMoe2dsb2JlOiBtYXBTdGF0ZS5nbG9iZSwgem9vbTogaW50ZXJuYWxNYXBTdGF0ZS56b29tfSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgZmluYWxEZWNrR2xMYXllcnMgPSBpc0dsb2JlTW9kZVxuICAgICAgICA/IFsuLi5nbG9iZUJhc2VMYXllcnMsIC4uLmRlY2tHbExheWVycywgLi4uZ2xvYmVUb3BMYXllcnNdXG4gICAgICAgIDogZGVja0dsTGF5ZXJzO1xuXG4gICAgICBjb25zdCB2aWV3cyA9IGRlY2tHbFByb3BzPy52aWV3c1xuICAgICAgICA/IGRlY2tHbFByb3BzPy52aWV3cygpXG4gICAgICAgIDogaXNHbG9iZU1vZGVcbiAgICAgICAgPyBuZXcgS2VwbGVyR2xvYmVWaWV3KHtcbiAgICAgICAgICAgIHJlc29sdXRpb246IDUsXG4gICAgICAgICAgICAvLyBUaGUgdmlzaWJsZSBiYWNrZ3JvdW5kIGFyb3VuZCB0aGUgZ2xvYmUgaXMgcGFpbnRlZCBieSB0aGUgbWFwXG4gICAgICAgICAgICAvLyBjb250YWluZXIncyBDU1MgYmFja2dyb3VuZCAoc2VlIHN0eWxlU2VsZWN0b3IpLCBOT1QgYnkgYSBwZXItdmlld1xuICAgICAgICAgICAgLy8gY29sb3IgY2xlYXIuIGRlY2suZ2wgYXBwbGllcyBhIFZpZXcncyBgY2xlYXJDb2xvcmAgaW4gKmV2ZXJ5KiBwYXNzLFxuICAgICAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSBwaWNraW5nIHBhc3MsIGFuZCBpdCBmb3JjZXMgdGhlIGNsZWFyZWQgYWxwaGEgdG8gMjU1XG4gICAgICAgICAgICAvLyAoYGNsZWFyQ29sb3JbM10gfHwgMjU1YCkuIEluIHRoZSBwaWNraW5nIGJ1ZmZlciB0aGUgYWxwaGEgYnl0ZSBlbmNvZGVzXG4gICAgICAgICAgICAvLyB0aGUgbGF5ZXIgaW5kZXgsIHNvIGEgMjU1IGNsZWFyIG1ha2VzIGRlY2suZ2wgZGVjb2RlIGV2ZXJ5IHBpeGVsIGFzIGFcbiAgICAgICAgICAgIC8vIG5vbi1leGlzdGVudCBsYXllciAoXCJQaWNrZWQgbm9uLWV4aXN0ZW50IGxheWVyLiBJcyBwaWNraW5nIGJ1ZmZlclxuICAgICAgICAgICAgLy8gY29ycnVwdD9cIikgb24gaG92ZXIuIGBjbGVhckNvbG9yOiBmYWxzZWAgc2tpcHMgdGhlIHBlci12aWV3IGNvbG9yXG4gICAgICAgICAgICAvLyBjbGVhciBzbyB0aGUgcGlja2luZyBidWZmZXIga2VlcHMgaXRzIDAgYWxwaGE7IHRoZSBjYW52YXMgc3RheXNcbiAgICAgICAgICAgIC8vIHRyYW5zcGFyZW50IGFuZCB0aGUgQ1NTIGJhY2tncm91bmQgc2hvd3MgdGhyb3VnaC5cbiAgICAgICAgICAgIGNsZWFyOiB0cnVlLFxuICAgICAgICAgICAgY2xlYXJDb2xvcjogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICA6IG5ldyBNYXBWaWV3KHtmYXJaTXVsdGlwbGllcjogMS4yfSk7XG5cbiAgICAgIGxldCBhbGxEZWNrR2xQcm9wcyA9IHtcbiAgICAgICAgLi4uZGVja0dsUHJvcHMsXG4gICAgICAgIHBpY2tpbmdSYWRpdXM6IERFRkFVTFRfUElDS0lOR19SQURJVVMsXG4gICAgICAgIHZpZXdzLFxuICAgICAgICBsYXllcnM6IGZpbmFsRGVja0dsTGF5ZXJzLFxuICAgICAgICBlZmZlY3RzLFxuICAgICAgICBwYXJhbWV0ZXJzOiBpc0dsb2JlTW9kZSA/IHtjdWxsOiB0cnVlfSA6IGdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzKHZpc1N0YXRlLmxheWVyQmxlbmRpbmcpXG4gICAgICB9O1xuXG4gICAgICBpZiAodHlwZW9mIGRlY2tSZW5kZXJDYWxsYmFja3M/Lm9uRGVja1JlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhbGxEZWNrR2xQcm9wcyA9IGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrUmVuZGVyKGFsbERlY2tHbFByb3BzKTtcbiAgICAgICAgaWYgKCFhbGxEZWNrR2xQcm9wcykge1xuICAgICAgICAgIC8vIGlmIG9uRGVja1JlbmRlciByZXR1cm5zIG51bGwsIGRvIG5vdCByZW5kZXIgZGVjay5nbFxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICB7Li4uKGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG9uTW91c2VNb3ZlOiBwcmltYXJ5TWFwXG4gICAgICAgICAgICAgICAgICA/IGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTW92ZT8uKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbk1vdXNlTW92ZURlYm91bmNlZChldmVudCwgdmlld3BvcnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtzdHlsZToge3BvaW50ZXJFdmVudHM6ICdub25lJ319KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxEZWNrR0xcbiAgICAgICAgICAgIGlkPVwiZGVmYXVsdC1kZWNrZ2wtb3ZlcmxheVwiXG4gICAgICAgICAgICBvbkxvYWQ9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tMb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGVja1JlbmRlckNhbGxiYWNrcy5vbkRlY2tMb2FkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB7Li4uYWxsRGVja0dsUHJvcHN9XG4gICAgICAgICAgICBjb250cm9sbGVyPXtcbiAgICAgICAgICAgICAgaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBkb3VibGVDbGlja1pvb206ICFpc0VkaXRvckRyYXdpbmdNb2RlLFxuICAgICAgICAgICAgICAgICAgICBkcmFnUm90YXRlOiB0aGlzLnByb3BzLm1hcFN0YXRlLmRyYWdSb3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIG1heFBpdGNoOiB0aGlzLnByb3BzLm1hcFN0YXRlLm1heFBpdGNoID8/IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkubWF4UGl0Y2gsXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIGdsb2JlIG1vZGUgYWxsb3cgem9vbWluZyBvdXQgZnVydGhlciB0aGFuIGRlY2suZ2wncyBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIC8vIG9mIDAgc28gdGhlIHdob2xlIGdsb2JlIGNhbiBiZSBwdWxsZWQgYmFjayBvbiBzY3JlZW4uIFNldCBvbiB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbGxlciBzbyBpdCBzdGF5cyBhdXRob3JpdGF0aXZlIHJlZ2FyZGxlc3Mgb2YgdGhlIHZpZXdTdGF0ZVxuICAgICAgICAgICAgICAgICAgICAvLyByb3VuZC10cmlwIHRocm91Z2ggUmVkdXgvbG9jYWwgY29udGV4dC4gQ2FwIHRoZSBtYXggem9vbSB0b28gc29cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGJhc2VtYXAgdGlsZXMgZG9uJ3QgYnJlYWsgZG93biBhdCBoaWdoIGdsb2JlIHpvb20uXG4gICAgICAgICAgICAgICAgICAgIC4uLihpc0dsb2JlTW9kZSA/IHttaW5ab29tOiBHTE9CRV9NSU5fWk9PTSwgbWF4Wm9vbTogR0xPQkVfTUFYX1pPT019IDoge30pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmlld1N0YXRlPXtcbiAgICAgICAgICAgICAgaXNHbG9iZU1vZGVcbiAgICAgICAgICAgICAgICA/IHsuLi5pbnRlcm5hbFZpZXdTdGF0ZSwgbWluWm9vbTogR0xPQkVfTUlOX1pPT00sIG1heFpvb206IEdMT0JFX01BWF9aT09NfVxuICAgICAgICAgICAgICAgIDogaW50ZXJuYWxWaWV3U3RhdGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uQmVmb3JlUmVuZGVyPXt0aGlzLl9vbkJlZm9yZVJlbmRlcn1cbiAgICAgICAgICAgIG9uVmlld1N0YXRlQ2hhbmdlPXtpc0ludGVyYWN0aXZlID8gdGhpcy5fb25WaWV3cG9ydENoYW5nZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHsuLi5leHRyYURlY2tQYXJhbXN9XG4gICAgICAgICAgICBvbkhvdmVyPXtcbiAgICAgICAgICAgICAgaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICAgID8gZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IEVkaXRvckxheWVyVXRpbHMub25Ib3ZlcihkYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgaG92ZXJJbmZvXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25MYXllckhvdmVyRGVib3VuY2VkKGRhdGEsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhkYXRhLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZUV2ZW50KGV2ZW50LnNyY0V2ZW50LCB2aWV3cG9ydCk7XG5cbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGJpdG1hcCBsYXllciBhbGlnbm1lbnQgbW9kZTogaWYgYSBiaXRtYXAgbGF5ZXIgaXMgd2FpdGluZ1xuICAgICAgICAgICAgICAvLyBmb3IgYSBtYXAgY2xpY2ssIHJvdXRlIHRoZSBjbGljayBjb29yZGluYXRlIHRvIGl0XG4gICAgICAgICAgICAgIGlmIChkYXRhLmNvb3JkaW5hdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGlnbmluZ0xheWVyID0gdmlzU3RhdGUubGF5ZXJzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAobDogYW55KSA9PiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuYWxpZ25XYWl0aW5nRm9yTWFwICYmIGwuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWduaW5nTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgIChhbGlnbmluZ0xheWVyIGFzIGFueSkub25BbGlnbk1hcENsaWNrKGRhdGEuY29vcmRpbmF0ZSBhcyBbbnVtYmVyLCBudW1iZXJdKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX29uUmVkcmF3TmVlZGVkKDApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJlcyA9IEVkaXRvckxheWVyVXRpbHMub25DbGljayhkYXRhLCBldmVudCwge1xuICAgICAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgIG9uTGF5ZXJDbGljayxcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgbWFwSW5kZXg6IGluZGV4XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAocmVzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJDbGljayhkYXRhKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkVycm9yPXt0aGlzLl9vbkRlY2tFcnJvcn1cbiAgICAgICAgICAgIHJlZj17Y29tcCA9PiB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgaWYgKGNvbXAgJiYgY29tcC5kZWNrICYmICF0aGlzLl9kZWNrKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHRoaXMuX2RlY2sgPSBjb21wLmRlY2s7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkRldmljZUluaXRpYWxpemVkPXtkZXZpY2UgPT4gdGhpcy5fb25EZWNrSW5pdGlhbGl6ZWQoZGV2aWNlKX1cbiAgICAgICAgICAgIG9uQWZ0ZXJSZW5kZXI9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tBZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrQWZ0ZXJSZW5kZXIoYWxsRGVja0dsUHJvcHMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgYW55QWN0aXZlTGF5ZXJMb2FkaW5nID0gYXJlQW55RGVja0xheWVyc0xvYWRpbmcoYWxsRGVja0dsUHJvcHMubGF5ZXJzKTtcbiAgICAgICAgICAgICAgaWYgKGFueUFjdGl2ZUxheWVyTG9hZGluZyAhPT0gdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcgPSBhbnlBY3RpdmVMYXllckxvYWRpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgIDwvRGVja0dMPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZU1hcGJveExheWVycygpIHtcbiAgICAgIGNvbnN0IG1hcGJveExheWVycyA9IHRoaXMubWFwYm94TGF5ZXJzU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBpZiAoIU9iamVjdC5rZXlzKG1hcGJveExheWVycykubGVuZ3RoICYmICFPYmplY3Qua2V5cyh0aGlzLnByZXZpb3VzTGF5ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVNYXBib3hMYXllcnModGhpcy5fbWFwLCBtYXBib3hMYXllcnMsIHRoaXMucHJldmlvdXNMYXllcnMpO1xuXG4gICAgICB0aGlzLnByZXZpb3VzTGF5ZXJzID0gbWFwYm94TGF5ZXJzO1xuICAgIH1cblxuICAgIF9yZW5kZXJNYXBib3hPdmVybGF5cygpIHtcbiAgICAgIGlmICh0aGlzLl9tYXAgJiYgdGhpcy5fbWFwLmlzU3R5bGVMb2FkZWQoKSkge1xuICAgICAgICB0aGlzLl91cGRhdGVNYXBib3hMYXllcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICBjb25zdCB2aWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgb25WaWV3UG9ydENoYW5nZShcbiAgICAgICAgdmlld1N0YXRlLFxuICAgICAgICB0aGlzLnByb3BzLm1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAsXG4gICAgICAgIHRoaXMucHJvcHMub25WaWV3U3RhdGVDaGFuZ2UsXG4gICAgICAgIHRoaXMucHJvcHMucHJpbWFyeSxcbiAgICAgICAgdGhpcy5wcm9wcy5pbmRleFxuICAgICAgKTtcbiAgICB9LCBERUJPVU5DRV9WSUVXUE9SVF9QUk9QQUdBVEUpO1xuXG4gICAgX29uVmlld3BvcnRDaGFuZ2UgPSB2aWV3cG9ydCA9PiB7XG4gICAgICBjb25zdCB7dmlld1N0YXRlLCBpbnRlcmFjdGlvblN0YXRlfSA9IHZpZXdwb3J0O1xuICAgICAgaWYgKHRoaXMucHJvcHMuaXNFeHBvcnQpIHtcbiAgICAgICAgLy8gSW1hZ2UgZXhwb3J0IG1hcCBzaG91bGRuJ3QgYmUgaW50ZXJhY3RpdmUgKG90aGVyd2lzZSB0aGlzIGNhbGxiYWNrIGNhblxuICAgICAgICAvLyBsZWFkIHRvIGluYWR2ZXJ0ZW50IGNoYW5nZXMgdG8gdGhlIHN0YXRlIG9mIHRoZSBtYWluIG1hcClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qge3NldEludGVybmFsVmlld1N0YXRlfSA9IHRoaXMuY29udGV4dDtcblxuICAgICAgLy8gRmxhdCBtYXAgKDJELzNEKToga2VlcCB0aGUgb3JpZ2luYWwsIGFsd2F5cy1zeW5jaHJvbm91cyBiZWhhdmlvci4gVGhlXG4gICAgICAvLyBpbnRlcmFjdGlvbi1hd2FyZSB0aW1pbmcgYmVsb3cgZXhpc3RzIHB1cmVseSB0byBmaXggZ2xvYmUtc3BlY2lmaWNcbiAgICAgIC8vIGNvbnRyb2xsZWQtdmlld1N0YXRlLCBzbyBpdCBtdXN0IG5vdCBjaGFuZ2UgdGhlIG1haW4gMkQgbG9naWMuXG4gICAgICBpZiAoIXRoaXMucHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5lbmFibGVkKSB7XG4gICAgICAgIHNldEludGVybmFsVmlld1N0YXRlKHZpZXdTdGF0ZSwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICAgIHRoaXMuX3dhc0ludGVyYWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc1VzZXJJbnRlcmFjdGlvbiA9XG4gICAgICAgIGludGVyYWN0aW9uU3RhdGUgJiZcbiAgICAgICAgKGludGVyYWN0aW9uU3RhdGUuaXNab29taW5nIHx8XG4gICAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZS5pc1Bhbm5pbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmlzUm90YXRpbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmlzRHJhZ2dpbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmluVHJhbnNpdGlvbik7XG4gICAgICAvLyBUaGUgZW1pdCB0aGF0IGVuZHMgYSBnZXN0dXJlIChwYW5lbmQvcm90YXRlRW5kLCBvciBhIGZsaW5nIHRyYW5zaXRpb25cbiAgICAgIC8vIGVuZGluZykgYXJyaXZlcyB3aXRoIGFsbCBpbnRlcmFjdGlvbiBmbGFncyBmYWxzZS4gSWYgd2UgZGVmZXIgaXQsIHRoZVxuICAgICAgLy8gY29udHJvbGxlZCBgdmlld1N0YXRlYCBmZWQgYmFjayB0byBkZWNrIGxhZ3MgYSBmcmFtZSBiZWhpbmQgdGhlXG4gICAgICAvLyBjb250cm9sbGVyJ3MgY29tbWl0dGVkIHN0YXRlIGFuZCBkZWNrIHJlLXNlZWRzIGZyb20gdGhlIHN0YWxlIHZhbHVlLFxuICAgICAgLy8gbWFraW5nIHRoZSBnbG9iZSB2aXNpYmx5IFwianVtcCBiYWNrXCIgdG8gd2hlcmUgdGhlIGRyYWcgd2FzIHJlbGVhc2VkIC1cbiAgICAgIC8vIG1vc3Qgbm90aWNlYWJsZSBvbiBhIHRocm93L2ZsaW5nIHJlbGVhc2UuIFRyZWF0IHRoZSBmaXJzdCBhbGwtZmFsc2UgZW1pdFxuICAgICAgLy8gcmlnaHQgYWZ0ZXIgYW4gYWN0aXZlIGdlc3R1cmUgYXMgcGFydCBvZiB0aGF0IGdlc3R1cmUgYW5kIGFwcGx5IGl0XG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRvby5cbiAgICAgIGNvbnN0IGlzSW50ZXJhY3Rpb25TZXR0bGUgPSAhaXNVc2VySW50ZXJhY3Rpb24gJiYgdGhpcy5fd2FzSW50ZXJhY3Rpbmc7XG4gICAgICB0aGlzLl93YXNJbnRlcmFjdGluZyA9IEJvb2xlYW4oaXNVc2VySW50ZXJhY3Rpb24pO1xuICAgICAgaWYgKGlzVXNlckludGVyYWN0aW9uIHx8IGlzSW50ZXJhY3Rpb25TZXR0bGUpIHtcbiAgICAgICAgLy8gRm9yIGludGVyYWN0aXZlIGdlc3R1cmVzIChwYW4vem9vbS9yb3RhdGUpIGFuZCB0aGVpciBlbmQtb2YtZ2VzdHVyZVxuICAgICAgICAvLyBzZXR0bGUsIHVwZGF0ZSBzeW5jaHJvbm91c2x5IHNvIHRoZSBjb250cm9sbGVkIGB2aWV3U3RhdGVgIHN0YXlzIGluXG4gICAgICAgIC8vIGxvY2tzdGVwIHdpdGggdGhlIGNvbnRyb2xsZXIgYW5kIHRoZXJlJ3Mgbm8gc3RhbGUgcmUtc2VlZC5cbiAgICAgICAgc2V0SW50ZXJuYWxWaWV3U3RhdGUodmlld1N0YXRlLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlY2suZ2wgY2FuIGZpcmUgb25WaWV3U3RhdGVDaGFuZ2Ugc3luY2hyb25vdXNseSBkdXJpbmcgaXRzIG93biByZW5kZXJcbiAgICAgICAgLy8gKGUuZy4gd2hlbiBzd2l0Y2hpbmcgdmlldyB0eXBlcyBsaWtlIE1hcFZpZXcgLT4gR2xvYmVWaWV3KS4gVXBkYXRpbmcgUmVhY3RcbiAgICAgICAgLy8gc3RhdGUgZHVyaW5nIHJlbmRlciB0aHJvd3MgYSB3YXJuaW5nLCBzbyBkZWZlciBub24taW50ZXJhY3RpdmUgdXBkYXRlcy5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgc2V0SW50ZXJuYWxWaWV3U3RhdGUodmlld1N0YXRlLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkKCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVySG92ZXJEZWJvdW5jZWQgPSBkZWJvdW5jZSgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJIb3ZlcihkYXRhLCBpbmRleCk7XG4gICAgfSwgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUpO1xuXG4gICAgX29uTW91c2VNb3ZlRGVib3VuY2VkID0gZGVib3VuY2UoKGV2ZW50LCB2aWV3cG9ydCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25Nb3VzZU1vdmUobm9ybWFsaXplRXZlbnQoZXZlbnQsIHZpZXdwb3J0KSk7XG4gICAgfSwgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUpO1xuXG4gICAgX29uTGF5ZXJMb2FkaW5nU3RhdGVDaGFuZ2UgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAvLyB0cmlnZ2VyIGxvYWRpbmcgaW5kaWNhdG9yIHVwZGF0ZSB3aXRob3V0IGFueSBjaGFuZ2UgdG8gdXBkYXRlIFVJXG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRMb2FkaW5nSW5kaWNhdG9yKHtjaGFuZ2U6IDB9KTtcbiAgICB9LCBERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSk7XG5cbiAgICBfaGFuZGxlVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5ID0gKGxheWVyOiBMYXllcikgPT4ge1xuICAgICAgY29uc3Qge3Zpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiAhbGF5ZXIuY29uZmlnLmlzVmlzaWJsZX0pO1xuICAgIH07XG5cbiAgICBfdG9nZ2xlTWFwQ29udHJvbCA9IHBhbmVsSWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4LCB1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuXG4gICAgICB1aVN0YXRlQWN0aW9ucy50b2dnbGVNYXBDb250cm9sKHBhbmVsSWQsIE51bWJlcihpbmRleCkpO1xuICAgIH07XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4gICAgX3JlbmRlck1hcCgpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgbWFwU3RhdGVBY3Rpb25zLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgLy8gbWFwYm94QXBpVXJsLFxuICAgICAgICBtYXBDb250cm9scyxcbiAgICAgICAgaXNFeHBvcnQsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgdWlUaGVtZSxcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHByaW1hcnksXG4gICAgICAgIGJvdHRvbU1hcENvbnRhaW5lclByb3BzLFxuICAgICAgICB0b3BNYXBDb250YWluZXJQcm9wcyxcbiAgICAgICAgdGhlbWUsXG4gICAgICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnMgPSBbXSxcbiAgICAgICAgYXR0cmlidXRpb25Mb2dvcyA9IFtdLFxuICAgICAgICBjb250YWluZXJJZCA9IDAsXG4gICAgICAgIGlzTG9hZGluZ0luZGljYXRvclZpc2libGUsXG4gICAgICAgIGFjdGl2ZVNpZGVQYW5lbCxcbiAgICAgICAgc2lkZVBhbmVsV2lkdGhcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCB7bGF5ZXJzLCBkYXRhc2V0cywgZWRpdG9yLCBpbnRlcmFjdGlvbkNvbmZpZywgbGF5ZXJPcmRlcn0gPSB2aXNTdGF0ZTtcblxuICAgICAgY29uc3QgbGF5ZXJzVG9SZW5kZXIgPSB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBsYXllcnNGb3JEZWNrID0gdGhpcy5sYXllcnNGb3JEZWNrU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIC8vIEN1cnJlbnQgc3R5bGUgY2FuIGJlIGEgY3VzdG9tIHN0eWxlLCBmcm9tIHdoaWNoIHdlIHB1bGwgdGhlIG1hcGJveCBBUEkgYWNjY2VzcyB0b2tlblxuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5TmFtZSA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSk7XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeUNvbmZpZyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbYmFzZU1hcExpYnJhcnlOYW1lXTtcblxuICAgICAgLy8gU2VsZWN0IHRoZSBjb3JyZWN0IE1hcCBhZGFwdGVyIGJhc2VkIG9uIHRoZSBhY3RpdmUgYmFzZSBtYXAgbGlicmFyeS5cbiAgICAgIC8vIFVzaW5nIHRoZSBuYXRpdmUgYWRhcHRlciBmb3IgZWFjaCBsaWJyYXJ5IGF2b2lkcyBUcmFuc2Zvcm0gQVBJXG4gICAgICAvLyBpbmNvbXBhdGliaWxpdGllcyAoZS5nLiBtYXBib3gtbGVnYWN5J3MgY2xvbmVUcmFuc2Zvcm0gd2l0aCBNYXBMaWJyZSB2NSkuXG4gICAgICBjb25zdCBSZXNvbHZlZE1hcENvbXBvbmVudCA9XG4gICAgICAgIHRoaXMucHJvcHMuTWFwQ29tcG9uZW50ID8/XG4gICAgICAgIChiYXNlTWFwTGlicmFyeU5hbWUgPT09IE1BUF9MSUJfT1BUSU9OUy5NQVBCT1ggPyBNYXBib3hMZWdhY3lNYXAgOiBNYXBsaWJyZU1hcCk7XG5cbiAgICAgIGNvbnN0IHVzZU1hcGJveEFkYXB0ZXIgPSBSZXNvbHZlZE1hcENvbXBvbmVudCA9PT0gTWFwYm94TGVnYWN5TWFwO1xuXG4gICAgICBjb25zdCBpbnRlcm5hbFZpZXdTdGF0ZSA9IHRoaXMuY29udGV4dD8uZ2V0SW50ZXJuYWxWaWV3U3RhdGUoaW5kZXgpO1xuICAgICAgY29uc3QgY29uZmlnTWF4UGl0Y2ggPSBtYXBTdGF0ZS5tYXhQaXRjaCA/PyBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLm1heFBpdGNoO1xuICAgICAgY29uc3QgZWZmZWN0aXZlTWF4UGl0Y2ggPSB1c2VNYXBib3hBZGFwdGVyXG4gICAgICAgID8gTWF0aC5taW4oY29uZmlnTWF4UGl0Y2gsIE1BUEJPWF9NQVhfUElUQ0gpXG4gICAgICAgIDogY29uZmlnTWF4UGl0Y2g7XG4gICAgICBjb25zdCBtYXBQcm9wczogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgICAgLi4uaW50ZXJuYWxWaWV3U3RhdGUsXG4gICAgICAgIG1heFBpdGNoOiBlZmZlY3RpdmVNYXhQaXRjaCxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLnByb3BzLmlzRXhwb3J0ID8/IGZhbHNlLFxuICAgICAgICBtYXBib3hBY2Nlc3NUb2tlbjogY3VycmVudFN0eWxlPy5hY2Nlc3NUb2tlbiB8fCBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgLy8gYmFzZUFwaVVybDogbWFwYm94QXBpVXJsLFxuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0OlxuICAgICAgICAgIHRoaXMucHJvcHMudHJhbnNmb3JtUmVxdWVzdCB8fFxuICAgICAgICAgIHRyYW5zZm9ybVJlcXVlc3QoY3VycmVudFN0eWxlPy5hY2Nlc3NUb2tlbiB8fCBtYXBib3hBcGlBY2Nlc3NUb2tlbilcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLlJUTFRleHRQbHVnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtYXBQcm9wcy5SVExUZXh0UGx1Z2luID0gdGhpcy5wcm9wcy5SVExUZXh0UGx1Z2luO1xuICAgICAgfVxuXG4gICAgICBpZiAodXNlTWFwYm94QWRhcHRlcikge1xuICAgICAgICBjb25zdCBtYXBib3hDb25maWcgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmJhc2VNYXBMaWJyYXJ5Q29uZmlnW01BUF9MSUJfT1BUSU9OUy5NQVBCT1hdO1xuICAgICAgICBtYXBQcm9wcy5tYXBMaWIgPSBtYXBib3hDb25maWcuZ2V0TWFwTGliKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc0dlb2NvZGVyTGF5ZXIgPSBCb29sZWFuKGxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gR0VPQ09ERVJfTEFZRVJfSUQpKTtcbiAgICAgIGNvbnN0IGlzU3BsaXQgPSBCb29sZWFuKG1hcFN0YXRlLmlzU3BsaXQpO1xuXG4gICAgICBjb25zdCBkZWNrID0gdGhpcy5fcmVuZGVyRGVja092ZXJsYXkobGF5ZXJzRm9yRGVjaywge1xuICAgICAgICBwcmltYXJ5TWFwOiB0cnVlLFxuICAgICAgICBpc0ludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogKFxuICAgICAgICAgIDxSZXNvbHZlZE1hcENvbXBvbmVudFxuICAgICAgICAgICAga2V5PXtgYm90dG9tLSR7YmFzZU1hcExpYnJhcnlOYW1lfWB9XG4gICAgICAgICAgICB7Li4ubWFwUHJvcHN9XG4gICAgICAgICAgICBtYXBTdHlsZT17XG4gICAgICAgICAgICAgIG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkXG4gICAgICAgICAgICAgICAgPyBFTVBUWV9NQVBCT1hfU1RZTEVcbiAgICAgICAgICAgICAgICA6IG1hcFN0eWxlLmJvdHRvbU1hcFN0eWxlID8/IEVNUFRZX01BUEJPWF9TVFlMRVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgey4uLmJvdHRvbU1hcENvbnRhaW5lclByb3BzfVxuICAgICAgICAgICAgcmVmPXt0aGlzLl9zZXRNYXBSZWZ9XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWRlY2spIHtcbiAgICAgICAgLy8gZGVja092ZXJsYXkgY2FuIGJlIG51bGwgaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgdGhlIG1hcFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIEluIHNwbGl0IChkdWFsKSB2aWV3IG1vZGUsIG9ubHkgcmVuZGVyIHRoZSBtYXAgY29udHJvbCBidXR0b25zIG9uIHRoZVxuICAgICAgLy8gcmlnaHQtc2lkZSBtYXAgKHByaW1hcnkgPT09IHRydWUsIGkuZS4gaW5kZXggPT09IDEpLiBPdGhlcndpc2UgdGhlIHNhbWVcbiAgICAgIC8vIGJ1dHRvbnMgYXJlIGR1cGxpY2F0ZWQgb24gYm90aCBtYXBzIGFuZCBhbnkgb3BlbmVkIG1lbnUgYXBwZWFycyBtaXJyb3JlZC5cbiAgICAgIGNvbnN0IHNob3dNYXBDb250cm9sID0gIWlzU3BsaXQgfHwgQm9vbGVhbihwcmltYXJ5KTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3Nob3dNYXBDb250cm9sICYmIChcbiAgICAgICAgICAgIDxNYXBDb250cm9sXG4gICAgICAgICAgICAgIG1hcFN0YXRlPXttYXBTdGF0ZX1cbiAgICAgICAgICAgICAgbWFwU3RhdGVBY3Rpb25zPXttYXBTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcz17TE9DQUxFX0NPREVTX0FSUkFZfVxuICAgICAgICAgICAgICBkcmFnUm90YXRlPXttYXBTdGF0ZS5kcmFnUm90YXRlfVxuICAgICAgICAgICAgICBpc1NwbGl0PXtpc1NwbGl0fVxuICAgICAgICAgICAgICBwcmltYXJ5PXtCb29sZWFuKHByaW1hcnkpfVxuICAgICAgICAgICAgICBpc0V4cG9ydD17aXNFeHBvcnR9XG4gICAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgICBsYXllck9yZGVyPXtsYXllck9yZGVyfVxuICAgICAgICAgICAgICBsYXllcnNUb1JlbmRlcj17bGF5ZXJzVG9SZW5kZXJ9XG4gICAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgICBtYXBDb250cm9scz17bWFwQ29udHJvbHN9XG4gICAgICAgICAgICAgIHJlYWRPbmx5PXt0aGlzLnByb3BzLnJlYWRPbmx5fVxuICAgICAgICAgICAgICBzY2FsZT17bWFwU3RhdGUuc2NhbGUgfHwgMX1cbiAgICAgICAgICAgICAgbG9nb0NvbXBvbmVudD17dGhpcy5wcm9wcy5sb2dvQ29tcG9uZW50fVxuICAgICAgICAgICAgICB0b3A9e1xuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyICYmIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWRcbiAgICAgICAgICAgICAgICAgID8gdGhlbWUubWFwQ29udHJvbFRvcFxuICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgICAgICAgICB0aGVtZU5hbWU9e3VpVGhlbWV9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlUGVyc3BlY3RpdmU9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVQZXJzcGVjdGl2ZX1cbiAgICAgICAgICAgICAgb25TZXRNYXBWaWV3TW9kZT17bWFwU3RhdGVBY3Rpb25zLnNldE1hcFZpZXdNb2RlfVxuICAgICAgICAgICAgICBtYXBWaWV3TW9kZT17bWFwU3RhdGUubWFwVmlld01vZGV9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlU3BsaXRNYXA9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVTcGxpdE1hcH1cbiAgICAgICAgICAgICAgb25NYXBUb2dnbGVMYXllcj17dGhpcy5faGFuZGxlTWFwVG9nZ2xlTGF5ZXJ9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlTWFwQ29udHJvbD17dGhpcy5fdG9nZ2xlTWFwQ29udHJvbH1cbiAgICAgICAgICAgICAgb25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0PXttYXBTdGF0ZUFjdGlvbnMudG9nZ2xlU3BsaXRNYXBWaWV3cG9ydH1cbiAgICAgICAgICAgICAgb25TZXRFZGl0b3JNb2RlPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RWRpdG9yTW9kZX1cbiAgICAgICAgICAgICAgb25TZXRMb2NhbGU9e3VpU3RhdGVBY3Rpb25zLnNldExvY2FsZX1cbiAgICAgICAgICAgICAgb25TZXRUaGVtZT17dWlTdGF0ZUFjdGlvbnMuc2V0VGhlbWV9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eT17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUVkaXRvclZpc2liaWxpdHl9XG4gICAgICAgICAgICAgIG9uQ29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllcj17dmlzU3RhdGVBY3Rpb25zLmNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJ9XG4gICAgICAgICAgICAgIG9uTGF5ZXJWaXNDb25maWdDaGFuZ2U9e3Zpc1N0YXRlQWN0aW9ucy5sYXllclZpc0NvbmZpZ0NoYW5nZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVMYXllclZpc2liaWxpdHk9e3RoaXMuX2hhbmRsZVRvZ2dsZUxheWVyVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgbWFwSGVpZ2h0PXttYXBTdGF0ZS5oZWlnaHR9XG4gICAgICAgICAgICAgIHNldE1hcENvbnRyb2xTZXR0aW5ncz17dWlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFNldHRpbmdzfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e2FjdGl2ZVNpZGVQYW5lbH1cbiAgICAgICAgICAgICAgc3BsaXRNYXBzPXt0aGlzLnByb3BzLnZpc1N0YXRlLnNwbGl0TWFwc31cbiAgICAgICAgICAgICAgb25Ub2dnbGVMYXllckZvck1hcD17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpc1NwbGl0U2VsZWN0b3IodGhpcy5wcm9wcykgJiYgPERyb3BwYWJsZSBjb250YWluZXJJZD17Y29udGFpbmVySWR9IC8+fVxuXG4gICAgICAgICAge2RlY2t9XG4gICAgICAgICAge3RoaXMuX3JlbmRlck1hcGJveE92ZXJsYXlzKCl9XG4gICAgICAgICAgPEVkaXRvclxuICAgICAgICAgICAgaW5kZXg9e2luZGV4IHx8IDB9XG4gICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgIGZpbHRlcnM9e3RoaXMucG9seWdvbkZpbHRlcnNTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgb25EZWxldGVGZWF0dXJlPXt2aXNTdGF0ZUFjdGlvbnMuZGVsZXRlRmVhdHVyZX1cbiAgICAgICAgICAgIG9uU2V0RmVhdHVyZVByb3BlcnRpZXM9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc31cbiAgICAgICAgICAgIG9uU2VsZWN0PXt2aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgb25Ub2dnbGVQb2x5Z29uRmlsdGVyPXt2aXNTdGF0ZUFjdGlvbnMuc2V0UG9seWdvbkZpbHRlckxheWVyfVxuICAgICAgICAgICAgb25TZXRFZGl0b3JNb2RlPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RWRpdG9yTW9kZX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdhbGwnLFxuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgZGlzcGxheTogZWRpdG9yLnZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2VkaXRvci52aXNpYmxlID8gKFxuICAgICAgICAgICAgPEZpbHRlckZlYXR1cmVCYWRnZXNcbiAgICAgICAgICAgICAgZmlsdGVycz17dGhpcy5wb2x5Z29uRmlsdGVyc1NlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgICB2aWV3cG9ydD17dGhpcy5fZ2V0QW5ub3RhdGlvblZpZXdwb3J0KG1hcFN0YXRlLCBpbnRlcm5hbFZpZXdTdGF0ZSl9XG4gICAgICAgICAgICAgIGlzR2xvYmVFbmFibGVkPXtCb29sZWFuKG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKX1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3Zpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxBbm5vdGF0aW9uT3ZlcmxheVxuICAgICAgICAgICAgYW5ub3RhdGlvbnM9e3Zpc1N0YXRlLmFubm90YXRpb25zfVxuICAgICAgICAgICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ9e3Zpc1N0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkfVxuICAgICAgICAgICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ9e3Zpc1N0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0fVxuICAgICAgICAgICAgaXNBbm5vdGF0aW9uTW9kZT17Qm9vbGVhbihtYXBDb250cm9scz8uYW5ub3RhdGlvbj8uYWN0aXZlKX1cbiAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgdmlld3BvcnQ9e3RoaXMuX2dldEFubm90YXRpb25WaWV3cG9ydChtYXBTdGF0ZSwgaW50ZXJuYWxWaWV3U3RhdGUpfVxuICAgICAgICAgICAgaXNHbG9iZUVuYWJsZWQ9e0Jvb2xlYW4obWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpfVxuICAgICAgICAgICAgdXBkYXRlQW5ub3RhdGlvbj17dmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUFubm90YXRpb259XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEFubm90YXRpb249e3Zpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEFubm90YXRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICB7bWFwU3R5bGUudG9wTWFwU3R5bGUgJiYgIW1hcFN0YXRlLmdsb2JlPy5lbmFibGVkID8gKFxuICAgICAgICAgICAgPFJlc29sdmVkTWFwQ29tcG9uZW50XG4gICAgICAgICAgICAgIGtleT17YHRvcC0ke2Jhc2VNYXBMaWJyYXJ5TmFtZX1gfVxuICAgICAgICAgICAgICB2aWV3U3RhdGU9e2ludGVybmFsVmlld1N0YXRlfVxuICAgICAgICAgICAgICBtYXhQaXRjaD17ZWZmZWN0aXZlTWF4UGl0Y2h9XG4gICAgICAgICAgICAgIG1hcFN0eWxlPXttYXBTdHlsZS50b3BNYXBTdHlsZX1cbiAgICAgICAgICAgICAgc3R5bGU9e01BUF9TVFlMRS50b3B9XG4gICAgICAgICAgICAgIG1hcGJveEFjY2Vzc1Rva2VuPXttYXBQcm9wcy5tYXBib3hBY2Nlc3NUb2tlbn1cbiAgICAgICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD17bWFwUHJvcHMudHJhbnNmb3JtUmVxdWVzdH1cbiAgICAgICAgICAgICAgey4uLihtYXBQcm9wcy5SVExUZXh0UGx1Z2luICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHtSVExUZXh0UGx1Z2luOiBtYXBQcm9wcy5SVExUZXh0UGx1Z2lufVxuICAgICAgICAgICAgICAgIDoge30pfVxuICAgICAgICAgICAgICB7Li4uKHVzZU1hcGJveEFkYXB0ZXJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgbWFwTGliOlxuICAgICAgICAgICAgICAgICAgICAgIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbXG4gICAgICAgICAgICAgICAgICAgICAgICBNQVBfTElCX09QVElPTlMuTUFQQk9YXG4gICAgICAgICAgICAgICAgICAgICAgXS5nZXRNYXBMaWIoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pfVxuICAgICAgICAgICAgICB7Li4udG9wTWFwQ29udGFpbmVyUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAge2hhc0dlb2NvZGVyTGF5ZXJcbiAgICAgICAgICAgID8gdGhpcy5fcmVuZGVyRGVja092ZXJsYXkoXG4gICAgICAgICAgICAgICAge1tHRU9DT0RFUl9MQVlFUl9JRF06IGhhc0dlb2NvZGVyTGF5ZXJ9LFxuICAgICAgICAgICAgICAgIHtwcmltYXJ5TWFwOiBmYWxzZSwgaXNJbnRlcmFjdGl2ZTogZmFsc2V9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5fcmVuZGVyTWFwUG9wb3ZlcigpfVxuICAgICAgICAgIHshaXNFeHBvcnQgJiYgcHJpbWFyeSAhPT0gaXNTcGxpdCA/IChcbiAgICAgICAgICAgIDxMb2FkaW5nSW5kaWNhdG9yXG4gICAgICAgICAgICAgIGlzVmlzaWJsZT17Qm9vbGVhbihpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlIHx8IHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nKX1cbiAgICAgICAgICAgICAgYWN0aXZlU2lkZVBhbmVsPXtCb29sZWFuKGFjdGl2ZVNpZGVQYW5lbCl9XG4gICAgICAgICAgICAgIHNpZGVQYW5lbFdpZHRoPXtzaWRlUGFuZWxXaWR0aH1cbiAgICAgICAgICAgICAgaGFzQXR0cmlidXRpb25Mb2dvcz17YXR0cmlidXRpb25Mb2dvcy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgICBoYXNNYXBTY2FsZT17Z2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVNYXBTY2FsZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3RoaXMucHJvcHMucHJpbWFyeSA/IChcbiAgICAgICAgICAgIDxBdHRyaWJ1dGlvblxuICAgICAgICAgICAgICBzaG93QmFzZU1hcExpYkxvZ289e3RoaXMuc3RhdGUuc2hvd0Jhc2VNYXBMaWJMb2dvfVxuICAgICAgICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zPXt0aGlzLnN0YXRlLmJhc2VtYXBBdHRyaWJ1dGlvbnN9XG4gICAgICAgICAgICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnM9e2RhdGFzZXRBdHRyaWJ1dGlvbnN9XG4gICAgICAgICAgICAgIGJhc2VNYXBMaWJyYXJ5Q29uZmlnPXtiYXNlTWFwTGlicmFyeUNvbmZpZ31cbiAgICAgICAgICAgICAgZ2xvYmVBdHRyaWJ1dGlvbnM9e2dldEdsb2JlQmFzZW1hcEF0dHJpYnV0aW9ucyh7XG4gICAgICAgICAgICAgICAgZ2xvYmU6IG1hcFN0YXRlLmdsb2JlLFxuICAgICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgIG1hcFN0eWxlVHlwZTogbWFwU3R5bGU/LnN0eWxlVHlwZSxcbiAgICAgICAgICAgICAgICBiYXNlbWFwUHJvdmlkZXI6IHJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlcihcbiAgICAgICAgICAgICAgICAgIGJhc2VNYXBMaWJyYXJ5TmFtZSxcbiAgICAgICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3RoaXMucHJvcHMucHJpbWFyeSA/IChcbiAgICAgICAgICAgIDxBdHRyaWJ1dGlvbkxvZ29zXG4gICAgICAgICAgICAgIGxvZ29zPXthdHRyaWJ1dGlvbkxvZ29zfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e0Jvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKX1cbiAgICAgICAgICAgICAgc2lkZVBhbmVsV2lkdGg9e3NpZGVQYW5lbFdpZHRofVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7IWlzRXhwb3J0ICYmIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlTWFwU2NhbGUgPyAoXG4gICAgICAgICAgICA8U3R5bGVkTWFwU2NhbGVDb250YWluZXJcbiAgICAgICAgICAgICAgJGxlZnQ9e1xuICAgICAgICAgICAgICAgIHByaW1hcnkgJiYgYWN0aXZlU2lkZVBhbmVsXG4gICAgICAgICAgICAgICAgICA/IChzaWRlUGFuZWxXaWR0aCB8fCAwKSArICh0aGVtZT8uc2lkZVBhbmVsPy5tYXJnaW4/LmxlZnQgPz8gOSlcbiAgICAgICAgICAgICAgICAgIDogdGhlbWU/LnNpZGVQYW5lbD8ubWFyZ2luPy5sZWZ0ID8/IDlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAkYm90dG9tT2Zmc2V0PXtwcmltYXJ5ICYmIGF0dHJpYnV0aW9uTG9nb3MubGVuZ3RoID4gMCA/IDI0IDogMH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPE1hcFNjYWxlIG1hcFN0YXRlPXttYXBTdGF0ZX0gbWFwSW5kZXg9e2luZGV4ID8/IDB9IC8+XG4gICAgICAgICAgICA8L1N0eWxlZE1hcFNjYWxlQ29udGFpbmVyPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge3Zpc1N0YXRlLCBtYXBTdHlsZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbWFwQ29udGVudCA9IHRoaXMuX3JlbmRlck1hcCgpO1xuICAgICAgaWYgKCFtYXBDb250ZW50KSB7XG4gICAgICAgIC8vIG1hcENvbnRlbnQgY2FuIGJlIG51bGwgaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgdGhlIG1hcFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5TmFtZSA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSk7XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeUNvbmZpZyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbYmFzZU1hcExpYnJhcnlOYW1lXTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZE1hcFxuICAgICAgICAgIHJlZj17dGhpcy5fcmVmfVxuICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxlU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgb25Db250ZXh0TWVudT17ZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgICAkbWl4QmxlbmRNb2RlPXt2aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmd9XG4gICAgICAgICAgJG1hcExpYkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJDc3NDbGFzc31cbiAgICAgICAgPlxuICAgICAgICAgIHttYXBDb250ZW50fVxuICAgICAgICA8L1N0eWxlZE1hcD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhUaGVtZShNYXBDb250YWluZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUYsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLGFBQUEs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
|
|
1333
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9tYXBib3hMZWdhY3kiLCJfcmVhY3RNYXBsaWJyZSIsIl9jb3JlIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVzZWxlY3QiLCJfY29yZTIiLCJfZGVib3VuY2UiLCJfbWFwUG9wb3ZlciIsIl9tYXBDb250cm9sIiwiX21hcFNjYWxlIiwiX3N0eWxlZENvbXBvbmVudHMyIiwiX2F0dHJpYnV0aW9uIiwiX2VkaXRvciIsIl9maWx0ZXJGZWF0dXJlQmFkZ2VzIiwiX2Fubm90YXRpb25zIiwiX2xheWVycyIsIl91dGlscyIsIl9jb25zdGFudHMiLCJfZGVja2dsTGF5ZXJzIiwiX2RuZExheWVySXRlbXMiLCJfbWFwVmlld1N0YXRlQ29udGV4dCIsIl9lcnJvckJvdW5kYXJ5IiwiX2xvY2FsaXphdGlvbiIsIl9yZWR1Y2VycyIsIl9sb2FkaW5nSW5kaWNhdG9yIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIkRFQk9VTkNFX1ZJRVdQT1JUX1BST1BBR0FURSIsIkRFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFIiwiREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUiLCJNQVBfU1RZTEUiLCJjb250YWluZXIiLCJkaXNwbGF5IiwicG9zaXRpb24iLCJ3aWR0aCIsImhlaWdodCIsInRvcCIsInBvaW50ZXJFdmVudHMiLCJMT0NBTEVfQ09ERVNfQVJSQVkiLCJMT0NBTEVfQ09ERVMiLCJTdHlsZWRNYXAiLCJzdHlsZWQiLCJTdHlsZWRNYXBDb250YWluZXIiLCJfcmVmIiwiX3JlZiQkbWl4QmxlbmRNb2RlIiwiJG1peEJsZW5kTW9kZSIsIiRtYXBMaWJDc3NDbGFzcyIsImNvbmNhdCIsIk1BUEJPWEdMX1NUWUxFX1VQREFURSIsIk1BUEJPWEdMX1JFTkRFUiIsIk9TTV9BVFRSSUJVVElPTl9IVE1MIiwiU3R5bGVkRHJvcHBhYmxlIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsIiRpc092ZXIiLCJ0aGVtZSIsImRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJTdHlsZWRNYXBTY2FsZUNvbnRhaW5lciIsInNpZGVQYW5lbCIsIm1hcmdpbiIsImxlZnQiLCIkYm90dG9tT2Zmc2V0IiwiJGxlZnQiLCJpc1NwbGl0U2VsZWN0b3IiLCJleHBvcnRzIiwidmlzU3RhdGUiLCJzcGxpdE1hcHMiLCJEcm9wcGFibGUiLCJfcmVmMiIsImNvbnRhaW5lcklkIiwiX3VzZURyb3BwYWJsZSIsInVzZURyb3BwYWJsZSIsImlkIiwiZGF0YSIsInR5cGUiLCJEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFIiwiaW5kZXgiLCJkaXNhYmxlZCIsImlzT3ZlciIsInNldE5vZGVSZWYiLCJjcmVhdGVFbGVtZW50IiwicmVmIiwiTWFwQ29udGFpbmVyRmFjdG9yeSIsImRlcHMiLCJNYXBQb3BvdmVyRmFjdG9yeSIsIk1hcENvbnRyb2xGYWN0b3J5IiwiRWRpdG9yRmFjdG9yeSIsIk1hcFNjYWxlRmFjdG9yeSIsIk1hcFBvcG92ZXIiLCJNYXBDb250cm9sIiwiRWRpdG9yIiwiTWFwU2NhbGUiLCJNYXBDb250YWluZXIiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwic2hvd0Jhc2VNYXBMaWJMb2dvIiwiYmFzZW1hcEF0dHJpYnV0aW9ucyIsImNyZWF0ZVJlZiIsIm9uTWFwUmVuZGVyIiwiX21hcCIsImRpbWVuc2lvbnMiLCJfdGhpcyRwcm9wcyIsInByaW1hcnkiLCJtYXBTdGF0ZUFjdGlvbnMiLCJ1cGRhdGVNYXAiLCJsYXllcnMiLCJsYXllckRhdGEiLCJjcmVhdGVTZWxlY3RvciIsInNwbGl0TWFwU2VsZWN0b3IiLCJzcGxpdE1hcEluZGV4U2VsZWN0b3IiLCJnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzIiwibGF5ZXJPcmRlciIsImxheWVyc1NlbGVjdG9yIiwibGF5ZXJEYXRhU2VsZWN0b3IiLCJtYXBMYXllcnNTZWxlY3RvciIsInByZXBhcmVMYXllcnNUb1JlbmRlciIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwiZmlsdGVycyIsImZpbHRlcnNTZWxlY3RvciIsIkZJTFRFUl9UWVBFUyIsInBvbHlnb24iLCJlbmFibGVkIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJwb2x5Z29uRmlsdGVyc1NlbGVjdG9yIiwiZmVhdHVyZXNTZWxlY3RvciIsInBvbHlnb25GaWx0ZXJzIiwibWFwIiwidmFsdWUiLCJmZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yIiwic2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IiLCJjb2xsZWN0aW9uIiwiZmluZEluZGV4IiwiX3Byb3BzJGdlbmVyYXRlTWFwYm94IiwiZ2VuZXJhdGVNYXBib3hMYXllcnMiLCJsYXllck9yZGVyU2VsZWN0b3IiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yIiwibGF5ZXIiLCJsYXllcnNUb1JlbmRlciIsImdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QiLCJtYXBTdHlsZSIsInN0eWxlVHlwZSIsImJhY2tncm91bmRDb2xvciIsIl9wcm9wcyRtYXBTdGF0ZSIsIm1hcFN0YXRlIiwiZ2xvYmUiLCJfcHJvcHMkbWFwU3RhdGUyIiwiY29uZmlnIiwiX3Byb3BzJG1hcFN0YXRlMyIsInN0YXJzIiwibWFwU3R5bGVUeXBlU2VsZWN0b3IiLCJtYXBTdHlsZUJhY2tncm91bmRDb2xvclNlbGVjdG9yIiwiZ2xvYmVNb2RlU2VsZWN0b3IiLCJnbG9iZUJhY2tncm91bmRDb2xvclNlbGVjdG9yIiwiZ2xvYmVTdGFyc1NlbGVjdG9yIiwiaXNHbG9iZU1vZGUiLCJnbG9iZUJhY2tncm91bmRDb2xvciIsImdsb2JlU3RhcnMiLCJOT19NQVBfSUQiLCJyZ2JUb0hleCIsImdldEdsb2JlQ2xlYXJDb2xvciIsInNsaWNlIiwiYmFja2dyb3VuZEltYWdlIiwiZ2V0U3RhcnNCYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUmVwZWF0IiwidmlzU3RhdGVBY3Rpb25zIiwib25MYXllckNsaWNrIiwiX2lkeCIsImluZm8iLCJvbkxheWVySG92ZXIiLCJpZHgiLCJBcnJheSIsImlzQXJyYXkiLCJjb2xvckRvbWFpbiIsImRvbWFpbiIsImFnZ3JlZ2F0ZWRCaW5zIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJfdGhpcyRwcm9wczIiLCJib3VuZHMiLCJmaXRCb3VuZHMiLCJldmVudCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIndtc0ZlYXR1cmVJbmZvIiwiZmVhdHVyZUluZm8iLCJjb29yZGluYXRlIiwibGF5ZXJJZCIsIl90aGlzJHByb3BzMyIsIl90aGlzJHByb3BzMyRpbmRleCIsIm1hcEluZGV4IiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJ1cGRhdGUiLCJwcmV2aW91c0xheWVycyIsIl91cGRhdGVNYXBib3hMYXllcnMiLCJfdXBkYXRlQXR0cmlidXRpb24iLCJvbk1hcFN0eWxlTG9hZGVkIiwiX3RoaXMkcHJvcHMkbWFwU3R5bGUiLCJfdGhpcyRwcm9wcyRtYXBTdHlsZTIiLCJfcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzIiwic3R5bGVPYmoiLCJzdHlsZSIsIl90aGlzJF9tYXAkaXNTdHlsZUxvYSIsIl90aGlzJF9tYXAiLCJfdGhpcyRfbWFwJGdldFN0eWxlIiwiX3RoaXMkX21hcDIiLCJyYXdTdHlsZSIsImlzU3R5bGVMb2FkZWQiLCJnZXRTdHlsZSIsInN0eWxlc2hlZXQiLCJfdW51c2VkIiwidXNlc01hcGJveCIsImlzU3R5bGVVc2luZ01hcGJveFRpbGVzIiwidXNlc09zbSIsImlzU3R5bGVVc2luZ09wZW5TdHJlZXRNYXBUaWxlcyIsImdldEJhc2VNYXBBdHRyaWJ1dGlvbnMiLCJjdXJyZW50U3R5bGUiLCJtYXBTdHlsZXMiLCJpc1VzZXJDdXN0b21TdHlsZSIsImN1c3RvbSIsInNldFN0YXRlIiwiX2NvbGxlY3RCYXNlbWFwQXR0cmlidXRpb25zIiwiX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIiLCJvZmYiLCJfYmFzZW1hcElkbGVMaXN0ZW5lciIsImF0dGVtcHRzIiwiTUFYX0FUVEVNUFRTIiwidHJ5Q29sbGVjdCIsIm9uU291cmNlRGF0YSIsImlzU291cmNlTG9hZGVkIiwic291cmNlRGF0YVR5cGUiLCJvbklkbGUiLCJvbiIsIm1hcFJlZiIsImdldE1hcCIsIl9vbk1hcGJveFN0eWxlVXBkYXRlIiwiX29uTWFwUmVuZGVyIiwiZ2V0TWFwYm94UmVmIiwiZXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwibGF5ZXJNZXNzYWdlIiwiZXJyb3JNZXNzYWdlRnVsbCIsImxhc3RTaG93biIsIl9kZWNrR0xFcnJvcnNFbGFwc2VkIiwiRGF0ZSIsIm5vdyIsIlRIUk9UVExFX05PVElGSUNBVElPTl9USU1FIiwiZXh0cmFMYXllck1lc3NhZ2UiLCJfdG9wTW9zdExheWVyJHByb3BzIiwidG9wTW9zdExheWVyIiwicGFyZW50IiwibGF5ZXJTZXRJc1ZhbGlkIiwidWlTdGF0ZUFjdGlvbnMiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsImRlYm91bmNlIiwiX3RoaXMkY29udGV4dCIsInZpZXdTdGF0ZSIsImNvbnRleHQiLCJnZXRJbnRlcm5hbFZpZXdTdGF0ZSIsIm9uVmlld1BvcnRDaGFuZ2UiLCJvblZpZXdTdGF0ZUNoYW5nZSIsInZpZXdwb3J0IiwiX3RoaXMkcHJvcHMkbWFwU3RhdGUiLCJpbnRlcmFjdGlvblN0YXRlIiwiaXNFeHBvcnQiLCJzZXRJbnRlcm5hbFZpZXdTdGF0ZSIsIl93YXNJbnRlcmFjdGluZyIsIl9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkIiwiaXNVc2VySW50ZXJhY3Rpb24iLCJpc1pvb21pbmciLCJpc1Bhbm5pbmciLCJpc1JvdGF0aW5nIiwiaXNEcmFnZ2luZyIsImluVHJhbnNpdGlvbiIsImlzSW50ZXJhY3Rpb25TZXR0bGUiLCJzZXRUaW1lb3V0Iiwib25Nb3VzZU1vdmUiLCJub3JtYWxpemVFdmVudCIsInNldExvYWRpbmdJbmRpY2F0b3IiLCJjaGFuZ2UiLCJpc1Zpc2libGUiLCJwYW5lbElkIiwiX3RoaXMkcHJvcHM0IiwidG9nZ2xlTWFwQ29udHJvbCIsIk51bWJlciIsInBhdGNoRGVja1JlbmRlcmVyRm9yUG9zdFByb2Nlc3NpbmciLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImNvbXBvbmVudERpZE1vdW50IiwiY3VycmVudCIsIm9ic2VydmVEaW1lbnNpb25zIiwiX2hhbmRsZVJlc2l6ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwidW5vYnNlcnZlRGltZW5zaW9ucyIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsIl9vbkRlY2tJbml0aWFsaXplZCIsImRldmljZSIsIm9uRGVja0luaXRpYWxpemVkIiwiX2RlY2siLCJfaXNPS1RvUmVuZGVyRWZmZWN0cyIsInZpZXdJbmRleCIsIl90aGlzJF9kZWNrIiwidmlld01hbmFnZXIiLCJfdmlld3BvcnRzIiwiX2dldEFubm90YXRpb25WaWV3cG9ydCIsImludGVybmFsVmlld1N0YXRlIiwiX2ludGVybmFsVmlld1N0YXRlJGxvIiwiX2ludGVybmFsVmlld1N0YXRlJGxhIiwiX2ludGVybmFsVmlld1N0YXRlJHpvIiwiX3JlZjMiLCJfaW50ZXJuYWxWaWV3U3RhdGUkcGkiLCJfcmVmNCIsIl9pbnRlcm5hbFZpZXdTdGF0ZSRiZSIsIl90aGlzJF9hbm5vdGF0aW9uVmlldyIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiem9vbSIsInBpdGNoIiwiYmVhcmluZyIsIl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZSIsIm1lcmdlZFN0YXRlIiwidnAiLCJnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZSIsInByb2plY3QiLCJsbmdMYXQiLCJ1bnByb2plY3QiLCJ4eSIsIl9yZW5kZXJNYXBQb3BvdmVyIiwiX3RoaXMkcHJvcHMkdmlzU3RhdGUkIiwiaG92ZXJJbmZvIiwiX3RoaXMkcHJvcHM1IiwiX3RoaXMkcHJvcHM1JHZpc1N0YXRlIiwiY2xpY2tlZCIsImRhdGFzZXRzIiwiaW50ZXJhY3Rpb25Db25maWciLCJhbmltYXRpb25Db25maWciLCJfdGhpcyRwcm9wczUkdmlzU3RhdGUyIiwibW91c2VQb3MiLCJtb3VzZVBvc2l0aW9uIiwicGlubmVkIiwidG9vbHRpcCIsImxheWVySG92ZXJQcm9wIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJjb21wYXJlTW9kZSIsInBpbm5lZFBvc2l0aW9uIiwieCIsInkiLCJsYXllclBpbm5lZFByb3AiLCJfZ2V0SG92ZXJYWSIsInByaW1hcnlEYXRhIiwiY29tcGFyZVR5cGUiLCJjb21tb25Qcm9wIiwib25DbG9zZSIsIl9vbkNsb3NlTWFwUG9wb3ZlciIsImNhbnZhcyIsInVuZGVmaW5lZCIsIl9leHRlbmRzMiIsImZyb3plbiIsImlzQmFzZSIsIm9uU2V0RmVhdHVyZXMiLCJzZXRGZWF0dXJlcyIsInNldFNlbGVjdGVkRmVhdHVyZSIsImZlYXR1cmVDb2xsZWN0aW9uIiwic2NyZWVuQ29vcmQiLCJfcmVuZGVyRGVja092ZXJsYXkiLCJsYXllcnNGb3JEZWNrIiwiX3RoaXMkY29udGV4dDIiLCJfbWFwU3RhdGUkZ2xvYmUiLCJfbWFwU3R5bGUkbWFwU3R5bGVzIiwiX3RoaXMyIiwiX3RoaXMkcHJvcHMkbWFwU3RhdGUkIiwib3B0aW9ucyIsInByaW1hcnlNYXAiLCJfdGhpcyRwcm9wczYiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsImRlY2tHbFByb3BzIiwibWFwQ29udHJvbHMiLCJkZWNrUmVuZGVyQ2FsbGJhY2tzIiwiZ2VuZXJhdGVEZWNrR0xMYXllcnMiLCJpc0ludGVyYWN0aXZlIiwiY2hpbGRyZW4iLCJtYXBEcmF3IiwiX3JlZjUiLCJfcmVmNSRhY3RpdmUiLCJhY3RpdmUiLCJlZGl0b3JNZW51QWN0aXZlIiwiaXNFZGl0b3JEcmF3aW5nTW9kZSIsIkVkaXRvckxheWVyVXRpbHMiLCJpc0RyYXdpbmdBY3RpdmUiLCJtb2RlIiwiaW50ZXJuYWxNYXBTdGF0ZSIsImVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4Iiwic2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3RvciIsImdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kIiwiY29tcHV0ZURlY2tMYXllcnMiLCJleHRyYURlY2tQYXJhbXMiLCJnZXRUb29sdGlwIiwiaXNOYU4iLCJnZXRDdXJzb3IiLCJfcmVmNiIsImVkaXRvckN1cnNvciIsImVmZmVjdHMiLCJjb21wdXRlRGVja0VmZmVjdHMiLCJsYXllckJsZW5kaW5nUGFyYW1zIiwibGF5ZXJCbGVuZGluZyIsImdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzIiwiZGVja0xheWVyc01hcFN0YXRlIiwibGF5ZXJQYXJhbWV0ZXJzIiwiZGVja0dsTGF5ZXJzIiwiZWRpdG9ySW5mbyIsIm9uQXBwbHlQb2x5Z29uRmlsdGVyQWxsIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVycyIsInNlbGVjdGVkRmVhdHVyZUluZGV4ZXMiLCJzZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IiLCJfb25MYXllckhvdmVyIiwib25TZXRMYXllckRvbWFpbiIsIl9vbkxheWVyU2V0RG9tYWluIiwib25GaWx0ZXJlZEl0ZW1zQ2hhbmdlIiwiX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlIiwib25XTVNGZWF0dXJlSW5mbyIsIl9vbldNU0ZlYXR1cmVJbmZvIiwib25SZWRyYXdOZWVkZWQiLCJfb25SZWRyYXdOZWVkZWQiLCJvbkZpdEJvdW5kcyIsIl9vbkZpdEJvdW5kcyIsImdsb2JlQmFzZW1hcFByb3ZpZGVyIiwicmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyIiwiZ2V0QmFzZU1hcExpYnJhcnkiLCJnbG9iZUJhc2VMYXllcnMiLCJnZXRHbG9iZUJhc2VMYXllcnMiLCJtYXBTdHlsZVR5cGUiLCJiYXNlbWFwUHJvdmlkZXIiLCJnbG9iZVRvcExheWVycyIsImdldEdsb2JlVG9wTGF5ZXJzIiwiZmluYWxEZWNrR2xMYXllcnMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwidmlld3MiLCJLZXBsZXJHbG9iZVZpZXciLCJyZXNvbHV0aW9uIiwiY2xlYXIiLCJjbGVhckNvbG9yIiwiTWFwVmlldyIsImZhclpNdWx0aXBsaWVyIiwiYWxsRGVja0dsUHJvcHMiLCJwaWNraW5nUmFkaXVzIiwiREVGQVVMVF9QSUNLSU5HX1JBRElVUyIsInBhcmFtZXRlcnMiLCJjdWxsIiwib25EZWNrUmVuZGVyIiwiX29uTW91c2VNb3ZlRGVib3VuY2VkIiwib25Mb2FkIiwib25EZWNrTG9hZCIsImNvbnRyb2xsZXIiLCJkb3VibGVDbGlja1pvb20iLCJkcmFnUm90YXRlIiwibWF4UGl0Y2giLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsIm1pblpvb20iLCJHTE9CRV9NSU5fWk9PTSIsIm1heFpvb20iLCJHTE9CRV9NQVhfWk9PTSIsIm9uQmVmb3JlUmVuZGVyIiwiX29uQmVmb3JlUmVuZGVyIiwiX29uVmlld3BvcnRDaGFuZ2UiLCJvbkhvdmVyIiwicmVzIiwiX29uTGF5ZXJIb3ZlckRlYm91bmNlZCIsIm9uQ2xpY2siLCJzcmNFdmVudCIsImFsaWduaW5nTGF5ZXIiLCJmaW5kIiwibCIsImFsaWduV2FpdGluZ0Zvck1hcCIsIm9uQWxpZ25NYXBDbGljayIsIm9uRXJyb3IiLCJfb25EZWNrRXJyb3IiLCJjb21wIiwiZGVjayIsIm9uRGV2aWNlSW5pdGlhbGl6ZWQiLCJvbkFmdGVyUmVuZGVyIiwib25EZWNrQWZ0ZXJSZW5kZXIiLCJhbnlBY3RpdmVMYXllckxvYWRpbmciLCJhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyIsIl9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlIiwibWFwYm94TGF5ZXJzIiwibWFwYm94TGF5ZXJzU2VsZWN0b3IiLCJ1cGRhdGVNYXBib3hMYXllcnMiLCJfcmVuZGVyTWFwYm94T3ZlcmxheXMiLCJfcmVuZGVyTWFwIiwiX21hcFN0eWxlJG1hcFN0eWxlczIiLCJfdGhpcyRwcm9wcyRNYXBDb21wb24iLCJfdGhpcyRjb250ZXh0MyIsIl9tYXBTdGF0ZSRtYXhQaXRjaCIsIl90aGlzJHByb3BzJGlzRXhwb3J0IiwiX21hcFN0YXRlJGdsb2JlMiIsIl9tYXBTdHlsZSRib3R0b21NYXBTdCIsIl9tYXBTdGF0ZSRnbG9iZTMiLCJfbWFwQ29udHJvbHMkYW5ub3RhdGkiLCJfbWFwU3RhdGUkZ2xvYmU0IiwiX21hcFN0YXRlJGdsb2JlNSIsIl90aGVtZSRzaWRlUGFuZWwkbWFyZyIsIl90aGVtZSRzaWRlUGFuZWwiLCJfdGhlbWUkc2lkZVBhbmVsJG1hcmcyIiwiX3RoZW1lJHNpZGVQYW5lbDIiLCJfdGhpcyRwcm9wczciLCJsb2NhbGUiLCJ1aVRoZW1lIiwiYm90dG9tTWFwQ29udGFpbmVyUHJvcHMiLCJ0b3BNYXBDb250YWluZXJQcm9wcyIsIl90aGlzJHByb3BzNyRkYXRhc2V0QSIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJfdGhpcyRwcm9wczckYXR0cmlidXQiLCJhdHRyaWJ1dGlvbkxvZ29zIiwiX3RoaXMkcHJvcHM3JGNvbnRhaW5lIiwiaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSIsImFjdGl2ZVNpZGVQYW5lbCIsInNpZGVQYW5lbFdpZHRoIiwibGF5ZXJzRm9yRGVja1NlbGVjdG9yIiwiYmFzZU1hcExpYnJhcnlOYW1lIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJSZXNvbHZlZE1hcENvbXBvbmVudCIsIk1hcENvbXBvbmVudCIsIk1BUF9MSUJfT1BUSU9OUyIsIk1BUEJPWCIsIk1hcGJveExlZ2FjeU1hcCIsIk1hcGxpYnJlTWFwIiwidXNlTWFwYm94QWRhcHRlciIsImNvbmZpZ01heFBpdGNoIiwiZWZmZWN0aXZlTWF4UGl0Y2giLCJNYXRoIiwibWluIiwiTUFQQk9YX01BWF9QSVRDSCIsIm1hcFByb3BzIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwibWFwYm94QWNjZXNzVG9rZW4iLCJhY2Nlc3NUb2tlbiIsInRyYW5zZm9ybVJlcXVlc3QiLCJSVExUZXh0UGx1Z2luIiwibWFwYm94Q29uZmlnIiwibWFwTGliIiwiZ2V0TWFwTGliIiwiaGFzR2VvY29kZXJMYXllciIsIkdFT0NPREVSX0xBWUVSX0lEIiwiaXNTcGxpdCIsIkVNUFRZX01BUEJPWF9TVFlMRSIsImJvdHRvbU1hcFN0eWxlIiwiX3NldE1hcFJlZiIsInNob3dNYXBDb250cm9sIiwiRnJhZ21lbnQiLCJhdmFpbGFibGVMb2NhbGVzIiwicmVhZE9ubHkiLCJzY2FsZSIsImxvZ29Db21wb25lbnQiLCJnZW9jb2RlciIsIm1hcENvbnRyb2xUb3AiLCJ0aGVtZU5hbWUiLCJvblRvZ2dsZVBlcnNwZWN0aXZlIiwidG9nZ2xlUGVyc3BlY3RpdmUiLCJvblNldE1hcFZpZXdNb2RlIiwic2V0TWFwVmlld01vZGUiLCJtYXBWaWV3TW9kZSIsIm9uVG9nZ2xlU3BsaXRNYXAiLCJ0b2dnbGVTcGxpdE1hcCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIiLCJvblRvZ2dsZU1hcENvbnRyb2wiLCJfdG9nZ2xlTWFwQ29udHJvbCIsIm9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsInRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvblNldEVkaXRvck1vZGUiLCJzZXRFZGl0b3JNb2RlIiwib25TZXRMb2NhbGUiLCJzZXRMb2NhbGUiLCJvblNldFRoZW1lIiwic2V0VGhlbWUiLCJvblRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5Iiwib25Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllciIsIm9uTGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIm9uVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5IiwiX2hhbmRsZVRvZ2dsZUxheWVyVmlzaWJpbGl0eSIsIm1hcEhlaWdodCIsInNldE1hcENvbnRyb2xTZXR0aW5ncyIsIm9uVG9nZ2xlTGF5ZXJGb3JNYXAiLCJvbkRlbGV0ZUZlYXR1cmUiLCJkZWxldGVGZWF0dXJlIiwib25TZXRGZWF0dXJlUHJvcGVydGllcyIsInNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzIiwib25TZWxlY3QiLCJvblRvZ2dsZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJ2aXNpYmxlIiwiaXNHbG9iZUVuYWJsZWQiLCJBbm5vdGF0aW9uT3ZlcmxheSIsImFubm90YXRpb25zIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImlzQW5ub3RhdGlvbk1vZGUiLCJhbm5vdGF0aW9uIiwidXBkYXRlQW5ub3RhdGlvbiIsInNldFNlbGVjdGVkQW5ub3RhdGlvbiIsInRvcE1hcFN0eWxlIiwiaGFzQXR0cmlidXRpb25Mb2dvcyIsImhhc01hcFNjYWxlIiwiZW5hYmxlTWFwU2NhbGUiLCJBdHRyaWJ1dGlvbiIsInN0YXRlIiwiZ2xvYmVBdHRyaWJ1dGlvbnMiLCJnZXRHbG9iZUJhc2VtYXBBdHRyaWJ1dGlvbnMiLCJBdHRyaWJ1dGlvbkxvZ29zIiwibG9nb3MiLCJyZW5kZXIiLCJfbWFwU3R5bGUkbWFwU3R5bGVzMyIsIl90aGlzJHByb3BzOCIsIm1hcENvbnRlbnQiLCJzdHlsZVNlbGVjdG9yIiwib25Db250ZXh0TWVudSIsInByZXZlbnREZWZhdWx0Iiwib3ZlcmxheUJsZW5kaW5nIiwibWFwTGliQ3NzQ2xhc3MiLCJDb21wb25lbnQiLCJNYXBWaWV3U3RhdGVDb250ZXh0Iiwid2l0aFRoZW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC1jb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGxpYnJhcmllc1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQsIHt3aXRoVGhlbWV9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7TWFwIGFzIE1hcGJveExlZ2FjeU1hcCwgTWFwUmVmfSBmcm9tICdyZWFjdC1tYXAtZ2wvbWFwYm94LWxlZ2FjeSc7XG5pbXBvcnQge01hcCBhcyBNYXBsaWJyZU1hcH0gZnJvbSAnQHZpcy5nbC9yZWFjdC1tYXBsaWJyZSc7XG5pbXBvcnQge1BpY2tpbmdJbmZvLCBNYXBWaWV3fSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCBEZWNrR0wgZnJvbSAnQGRlY2suZ2wvcmVhY3QnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3RvciwgU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7dXNlRHJvcHBhYmxlfSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9kZWJvdW5jZSc7XG5cbmltcG9ydCB7VmlzU3RhdGVBY3Rpb25zLCBNYXBTdGF0ZUFjdGlvbnMsIFVJU3RhdGVBY3Rpb25zfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBjb21wb25lbnRzXG5pbXBvcnQgTWFwUG9wb3ZlckZhY3RvcnkgZnJvbSAnLi9tYXAvbWFwLXBvcG92ZXInO1xuaW1wb3J0IE1hcENvbnRyb2xGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1jb250cm9sJztcbmltcG9ydCBNYXBTY2FsZUZhY3RvcnkgZnJvbSAnLi9tYXAvbWFwLXNjYWxlJztcbmltcG9ydCB7U3R5bGVkTWFwQ29udGFpbmVyfSBmcm9tICcuL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGlvbixcbiAgQXR0cmlidXRpb25Mb2dvcyxcbiAgcmVuZGVyQmFzZW1hcEF0dHJpYnV0aW9uLFxuICBkZWR1cGVCYXNlbWFwQXR0cmlidXRpb25zXG59IGZyb20gJy4vbWFwL2F0dHJpYnV0aW9uJztcblxuaW1wb3J0IEVkaXRvckZhY3RvcnkgZnJvbSAnLi9lZGl0b3IvZWRpdG9yJztcbmltcG9ydCBGaWx0ZXJGZWF0dXJlQmFkZ2VzIGZyb20gJy4vZWRpdG9yL2ZpbHRlci1mZWF0dXJlLWJhZGdlcyc7XG5pbXBvcnQge0Fubm90YXRpb25PdmVybGF5fSBmcm9tICcuL2Fubm90YXRpb25zJztcblxuLy8gdXRpbHNcbmltcG9ydCB7XG4gIGdlbmVyYXRlTWFwYm94TGF5ZXJzLFxuICB1cGRhdGVNYXBib3hMYXllcnMsXG4gIExheWVyLFxuICBMYXllckJhc2VDb25maWcsXG4gIFZpc3VhbENoYW5uZWxEb21haW4sXG4gIEVkaXRvckxheWVyVXRpbHMsXG4gIEFnZ3JlZ2F0ZWRCaW5cbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRpb25XaXRoU3R5bGUsXG4gIERhdGFzZXRBdHRyaWJ1dGlvbixcbiAgTWFwU3RhdGUsXG4gIE1hcENvbnRyb2xzLFxuICBWaWV3cG9ydCxcbiAgU3BsaXRNYXAsXG4gIFNwbGl0TWFwTGF5ZXJzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGlzU3R5bGVVc2luZ01hcGJveFRpbGVzLFxuICBpc1N0eWxlVXNpbmdPcGVuU3RyZWV0TWFwVGlsZXMsXG4gIGdldEJhc2VNYXBBdHRyaWJ1dGlvbnMsXG4gIGdldEJhc2VNYXBMaWJyYXJ5LFxuICB0cmFuc2Zvcm1SZXF1ZXN0LFxuICBvYnNlcnZlRGltZW5zaW9ucyxcbiAgdW5vYnNlcnZlRGltZW5zaW9ucyxcbiAgZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyxcbiAgb25WaWV3UG9ydENoYW5nZSxcbiAgZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUsXG4gIG5vcm1hbGl6ZUV2ZW50LFxuICByZ2JUb0hleCxcbiAgY29tcHV0ZURlY2tFZmZlY3RzLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgR2V0TWFwUmVmLFxuICBnZXRMYXllckJsZW5kaW5nUGFyYW1ldGVycyxcbiAgcGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZ1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuLy8gZGVmYXVsdC1zZXR0aW5nc1xuaW1wb3J0IHtcbiAgRklMVEVSX1RZUEVTLFxuICBHRU9DT0RFUl9MQVlFUl9JRCxcbiAgVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUsXG4gIERFRkFVTFRfUElDS0lOR19SQURJVVMsXG4gIE5PX01BUF9JRCxcbiAgRU1QVFlfTUFQQk9YX1NUWUxFLFxuICBNQVBCT1hfTUFYX1BJVENILFxuICBNQVBfTElCX09QVElPTlMsXG4gIEdMT0JFX01JTl9aT09NLFxuICBHTE9CRV9NQVhfWk9PTVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7XG4gIGdldEdsb2JlQmFzZUxheWVycyxcbiAgZ2V0R2xvYmVUb3BMYXllcnMsXG4gIGdldEdsb2JlQ2xlYXJDb2xvcixcbiAgZ2V0R2xvYmVCYXNlbWFwQXR0cmlidXRpb25zLFxuICByZXNvbHZlR2xvYmVCYXNlbWFwUHJvdmlkZXIsXG4gIGdldFN0YXJzQmFja2dyb3VuZEltYWdlLFxuICBLZXBsZXJHbG9iZVZpZXdcbn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuaW1wb3J0IHtEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFfSBmcm9tICcuL2NvbW1vbi9kbmQtbGF5ZXItaXRlbXMnO1xuLy8gQ29udGV4dHNcbmltcG9ydCB7TWFwVmlld1N0YXRlQ29udGV4dH0gZnJvbSAnLi9tYXAtdmlldy1zdGF0ZS1jb250ZXh0JztcblxuaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSAnLi9jb21tb24vZXJyb3ItYm91bmRhcnknO1xuaW1wb3J0IHtMT0NBTEVfQ09ERVN9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7XG4gIE1hcFN0eWxlLFxuICBhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyxcbiAgY29tcHV0ZURlY2tMYXllcnMsXG4gIGdldExheWVySG92ZXJQcm9wLFxuICBMYXllckhvdmVyUHJvcCxcbiAgcHJlcGFyZUxheWVyc0ZvckRlY2ssXG4gIHByZXBhcmVMYXllcnNUb1JlbmRlcixcbiAgTGF5ZXJzVG9SZW5kZXJcbn0gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQgTG9hZGluZ0luZGljYXRvciBmcm9tICcuL2xvYWRpbmctaW5kaWNhdG9yJztcblxuLy8gRGVib3VuY2UgdGhlIHByb3BhZ2F0aW9uIG9mIHZpZXdwb3J0IGNoYW5nZSBhbmQgbW91c2UgbW92ZXMgdG8gcmVkdXggc3RvcmUuXG4vLyBUaGlzIGlzIHRvIGF2b2lkIHRvbyBtYW55IHJlbmRlcnMgb2Ygb3RoZXIgY29tcG9uZW50cyB3aGVuIHRoZSBtYXAgaXNcbi8vIGJlaW5nIHBhbm5lZC96b29tZWQgKGxlYWRpbmcgdG8gbGFnZ3kgYmFzZW1hcC9kZWNrIHN5bmNpbmcpLlxuY29uc3QgREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFID0gMTA7XG5jb25zdCBERUJPVU5DRV9NT1VTRV9NT1ZFX1BST1BBR0FURSA9IDEwO1xuXG4vLyBIb3cgbG9uZyBzaG91bGQgd2Ugd2FpdCBiZXR3ZWVuIGxheWVyIGxvYWRpbmcgc3RhdGUgY2hhbmdlcyBiZWZvcmUgdHJpZ2dlcmluZyBhIFVJIHVwZGF0ZVxuY29uc3QgREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUgPSAxMDA7XG5cbmNvbnN0IE1BUF9TVFlMRToge1trZXk6IHN0cmluZ106IFJlYWN0LkNTU1Byb3BlcnRpZXN9ID0ge1xuICBjb250YWluZXI6IHtcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnXG4gIH0sXG4gIHRvcDoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICB9XG59O1xuXG5jb25zdCBMT0NBTEVfQ09ERVNfQVJSQVkgPSBPYmplY3Qua2V5cyhMT0NBTEVfQ09ERVMpO1xuXG5pbnRlcmZhY2UgU3R5bGVkTWFwQ29udGFpbmVyUHJvcHMge1xuICAkbWl4QmxlbmRNb2RlPzogc3RyaW5nO1xuICAkbWFwTGliQ3NzQ2xhc3M6IHN0cmluZztcbn1cblxuY29uc3QgU3R5bGVkTWFwID0gc3R5bGVkKFN0eWxlZE1hcENvbnRhaW5lcik8U3R5bGVkTWFwQ29udGFpbmVyUHJvcHM+KFxuICAoeyRtaXhCbGVuZE1vZGUgPSAnbm9ybWFsJywgJG1hcExpYkNzc0NsYXNzfSkgPT4gYFxuICAjZGVmYXVsdC1kZWNrZ2wtb3ZlcmxheSB7XG4gICAgbWl4LWJsZW5kLW1vZGU6ICR7JG1peEJsZW5kTW9kZX07XG4gIH07XG4gICpbJHskbWFwTGliQ3NzQ2xhc3N9LWNoaWxkcmVuXSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG5gXG4pO1xuXG5jb25zdCBNQVBCT1hHTF9TVFlMRV9VUERBVEUgPSAnc3R5bGUubG9hZCc7XG5jb25zdCBNQVBCT1hHTF9SRU5ERVIgPSAncmVuZGVyJztcblxuLy8gQ2Fub25pY2FsIE9wZW5TdHJlZXRNYXAgYXR0cmlidXRpb24sIGluamVjdGVkIGludG8gdGhlIGNvbGxlY3RlZCBsaXN0IHdoZW4gYVxuLy8gc3R5bGUgaXMgZGV0ZWN0ZWQgdG8gdXNlIE9TTSB0aWxlcyBidXQgdGhlIHJlc29sdmVkIHNvdXJjZXMgaGF2ZW4ndCB5aWVsZGVkXG4vLyBhbiBhdHRyaWJ1dGlvbiBzdHJpbmcgb2YgdGhlaXIgb3duIChlLmcuIHJhdyBzdHlsZSBkZWNsYXJlcyBPU00gYnV0IHRoZVxuLy8gVGlsZUpTT04gaGFzbid0IGV4cG9zZWQgaXQpLiBSZW5kZXJlZCB0aHJvdWdoIHRoZSBzYW1lIHNhZmUgbGluayBwYXJzZXIgYXNcbi8vIGV2ZXJ5IG90aGVyIGNvbGxlY3RlZCBhdHRyaWJ1dGlvbi5cbmNvbnN0IE9TTV9BVFRSSUJVVElPTl9IVE1MID1cbiAgJ8KpIDxhIGhyZWY9XCJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIj5PcGVuU3RyZWV0TWFwPC9hPic7XG5cbmludGVyZmFjZSBTdHlsZWREcm9wcGFibGVQcm9wcyB7XG4gICRpc092ZXI6IGJvb2xlYW47XG59XG5cbmNvbnN0IFN0eWxlZERyb3BwYWJsZSA9IHN0eWxlZC5kaXY8U3R5bGVkRHJvcHBhYmxlUHJvcHM+YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IChwcm9wcy4kaXNPdmVyID8gcHJvcHMudGhlbWUuZG5kT3ZlckJhY2tncm91bmRDb2xvciA6ICdub25lJyl9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB6LWluZGV4OiAxO1xuYDtcblxuY29uc3QgU3R5bGVkTWFwU2NhbGVDb250YWluZXIgPSBzdHlsZWQuZGl2PHskbGVmdDogbnVtYmVyOyAkYm90dG9tT2Zmc2V0OiBudW1iZXJ9PmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2lkZVBhbmVsLm1hcmdpbi5sZWZ0ICsgcHJvcHMuJGJvdHRvbU9mZnNldH1weDtcbiAgbGVmdDogJHtwcm9wcyA9PiBwcm9wcy4kbGVmdH1weDtcbiAgei1pbmRleDogMTtcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XG5gO1xuXG5leHBvcnQgY29uc3QgaXNTcGxpdFNlbGVjdG9yID0gcHJvcHMgPT5cbiAgcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzICYmIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggPiAxO1xuXG5leHBvcnQgY29uc3QgRHJvcHBhYmxlID0gKHtjb250YWluZXJJZH0pID0+IHtcbiAgY29uc3Qge2lzT3Zlciwgc2V0Tm9kZVJlZn0gPSB1c2VEcm9wcGFibGUoe1xuICAgIGlkOiBjb250YWluZXJJZCxcbiAgICBkYXRhOiB7dHlwZTogRFJPUFBBQkxFX01BUF9DT05UQUlORVJfVFlQRSwgaW5kZXg6IGNvbnRhaW5lcklkfSxcbiAgICBkaXNhYmxlZDogIWNvbnRhaW5lcklkXG4gIH0pO1xuXG4gIHJldHVybiA8U3R5bGVkRHJvcHBhYmxlIHJlZj17c2V0Tm9kZVJlZn0gJGlzT3Zlcj17aXNPdmVyfSAvPjtcbn07XG5cbi8vIEF0dHJpYnV0aW9uIFVJIChwYXJzZXIgKyBjb21wb25lbnRzKSBsaXZlcyBpbiAuL21hcC9hdHRyaWJ1dGlvbiBhbmQgaXNcbi8vIHJlLWV4cG9ydGVkIGhlcmUgdG8gcHJlc2VydmUgdGhlIHB1YmxpYyBpbXBvcnQgcGF0aCAoQGtlcGxlci5nbC9jb21wb25lbnRzKS5cbmV4cG9ydCB7QXR0cmlidXRpb24sIEF0dHJpYnV0aW9uTG9nb3MsIHJlbmRlckJhc2VtYXBBdHRyaWJ1dGlvbiwgZGVkdXBlQmFzZW1hcEF0dHJpYnV0aW9uc307XG5cbk1hcENvbnRhaW5lckZhY3RvcnkuZGVwcyA9IFtNYXBQb3BvdmVyRmFjdG9yeSwgTWFwQ29udHJvbEZhY3RvcnksIEVkaXRvckZhY3RvcnksIE1hcFNjYWxlRmFjdG9yeV07XG5cbnR5cGUgTWFwYm94U3R5bGUgPSBzdHJpbmcgfCBvYmplY3QgfCB1bmRlZmluZWQ7XG50eXBlIFByb3BTZWxlY3RvcjxSPiA9IFNlbGVjdG9yPE1hcENvbnRhaW5lclByb3BzLCBSPjtcblxuZXhwb3J0IGludGVyZmFjZSBNYXBDb250YWluZXJQcm9wcyB7XG4gIHZpc1N0YXRlOiBWaXNTdGF0ZTtcbiAgbWFwU3RhdGU6IE1hcFN0YXRlO1xuICBtYXBDb250cm9sczogTWFwQ29udHJvbHM7XG4gIG1hcFN0eWxlOiB7Ym90dG9tTWFwU3R5bGU/OiBNYXBib3hTdHlsZTsgdG9wTWFwU3R5bGU/OiBNYXBib3hTdHlsZX0gJiBNYXBTdHlsZTtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHN0cmluZztcbiAgbWFwYm94QXBpVXJsOiBzdHJpbmc7XG4gIHZpc1N0YXRlQWN0aW9uczogdHlwZW9mIFZpc1N0YXRlQWN0aW9ucztcbiAgbWFwU3RhdGVBY3Rpb25zOiB0eXBlb2YgTWFwU3RhdGVBY3Rpb25zO1xuICB1aVN0YXRlQWN0aW9uczogdHlwZW9mIFVJU3RhdGVBY3Rpb25zO1xuXG4gIC8vIG9wdGlvbmFsXG4gIHByaW1hcnk/OiBib29sZWFuOyAvLyBwcmltYXJ5IG9uZSB3aWxsIGJlIHJlcG9ydGluZyBpdHMgc2l6ZSB0byBhcHBTdGF0ZVxuICByZWFkT25seT86IGJvb2xlYW47XG4gIGlzRXhwb3J0PzogYm9vbGVhbjtcbiAgLy8gb25NYXBTdHlsZUxvYWRlZD86IChtYXA6IG1hcGxpYnJlZ2wuTWFwIHwgUmV0dXJuVHlwZTxNYXBSZWZbJ2dldE1hcCddPiB8IG51bGwpID0+IHZvaWQ7XG4gIG9uTWFwU3R5bGVMb2FkZWQ/OiAobWFwOiBHZXRNYXBSZWYgfCBudWxsKSA9PiB2b2lkO1xuICBvbk1hcFJlbmRlcj86IChtYXA6IEdldE1hcFJlZiB8IG51bGwpID0+IHZvaWQ7XG4gIGdldE1hcGJveFJlZj86IChtYXBib3g/OiBNYXBSZWYgfCBudWxsLCBpbmRleD86IG51bWJlcikgPT4gdm9pZDtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIGRlbGV0ZU1hcExhYmVscz86IChjb250YWluZXJJZDogc3RyaW5nLCBsYXllcklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNvbnRhaW5lcklkPzogbnVtYmVyO1xuXG4gIGlzTG9hZGluZ0luZGljYXRvclZpc2libGU/OiBib29sZWFuO1xuICBhY3RpdmVTaWRlUGFuZWw6IHN0cmluZyB8IG51bGw7XG4gIHNpZGVQYW5lbFdpZHRoPzogbnVtYmVyO1xuXG4gIGxvY2FsZT86IGFueTtcbiAgdWlUaGVtZT86IHN0cmluZztcbiAgdGhlbWU/OiBhbnk7XG4gIGVkaXRvcj86IGFueTtcbiAgTWFwQ29tcG9uZW50PzogdHlwZW9mIE1hcGJveExlZ2FjeU1hcCB8IHR5cGVvZiBNYXBsaWJyZU1hcDtcbiAgZGVja0dsUHJvcHM/OiBhbnk7XG4gIG9uRGVja0luaXRpYWxpemVkPzogKGE6IGFueSwgYjogYW55KSA9PiB2b2lkO1xuICBvblZpZXdTdGF0ZUNoYW5nZT86ICh2aWV3cG9ydDogVmlld3BvcnQpID0+IHZvaWQ7XG5cbiAgdG9wTWFwQ29udGFpbmVyUHJvcHM6IGFueTtcbiAgYm90dG9tTWFwQ29udGFpbmVyUHJvcHM6IGFueTtcbiAgdHJhbnNmb3JtUmVxdWVzdD86ICh1cmw6IHN0cmluZywgcmVzb3VyY2VUeXBlPzogc3RyaW5nKSA9PiB7dXJsOiBzdHJpbmd9O1xuXG4gIC8qKiBQYXNzIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGUgcmVtb3RlIFJUTCB0ZXh0IHBsdWdpbiwgb3IgYSBVUkwgc3RyaW5nIHRvIHNlbGYtaG9zdCBpdC4gKi9cbiAgUlRMVGV4dFBsdWdpbj86IHN0cmluZyB8IGZhbHNlO1xuXG4gIGRhdGFzZXRBdHRyaWJ1dGlvbnM/OiBEYXRhc2V0QXR0cmlidXRpb25bXTtcbiAgYXR0cmlidXRpb25Mb2dvcz86IEF0dHJpYnV0aW9uV2l0aFN0eWxlW107XG5cbiAgZ2VuZXJhdGVNYXBib3hMYXllcnM/OiB0eXBlb2YgZ2VuZXJhdGVNYXBib3hMYXllcnM7XG4gIGdlbmVyYXRlRGVja0dMTGF5ZXJzPzogdHlwZW9mIGNvbXB1dGVEZWNrTGF5ZXJzO1xuXG4gIG9uTW91c2VNb3ZlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50ICYge2xuZ0xhdD86IFtudW1iZXIsIG51bWJlcl19KSA9PiB2b2lkO1xuXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBkZWNrUmVuZGVyQ2FsbGJhY2tzPzoge1xuICAgIG9uRGVja0xvYWQ/OiAoKSA9PiB2b2lkO1xuICAgIG9uRGVja1JlbmRlcj86IChkZWNrUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw7XG4gICAgb25EZWNrQWZ0ZXJSZW5kZXI/OiAoZGVja1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gYW55O1xuICB9O1xuXG4gIC8vIE9wdGlvbmFsOiBvdmVycmlkZSBsZWdlbmQgaGVhZGVyIGxvZ28gaW4gbWFwIGNvbnRyb2xzICh1c2VkIGJ5IGltYWdlIGV4cG9ydClcbiAgbG9nb0NvbXBvbmVudD86IFJlYWN0LkZDIHwgUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNYXBDb250YWluZXJGYWN0b3J5KFxuICBNYXBQb3BvdmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBQb3BvdmVyRmFjdG9yeT4sXG4gIE1hcENvbnRyb2w6IFJldHVyblR5cGU8dHlwZW9mIE1hcENvbnRyb2xGYWN0b3J5PixcbiAgRWRpdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBFZGl0b3JGYWN0b3J5PixcbiAgTWFwU2NhbGU6IFJldHVyblR5cGU8dHlwZW9mIE1hcFNjYWxlRmFjdG9yeT5cbik6IFJlYWN0LkNvbXBvbmVudFR5cGU8TWFwQ29udGFpbmVyUHJvcHM+IHtcbiAgY2xhc3MgTWFwQ29udGFpbmVyIGV4dGVuZHMgQ29tcG9uZW50PE1hcENvbnRhaW5lclByb3BzPiB7XG4gICAgZGlzcGxheU5hbWUgPSAnTWFwQ29udGFpbmVyJztcblxuICAgIHByaXZhdGUgYW55QWN0aXZlTGF5ZXJMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBNYXBWaWV3U3RhdGVDb250ZXh0O1xuXG4gICAgZGVjbGFyZSBjb250ZXh0OiBSZWFjdC5Db250ZXh0VHlwZTx0eXBlb2YgTWFwVmlld1N0YXRlQ29udGV4dD47XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGVja0dsUHJvcHM6IHt9LFxuICAgICAgaW5kZXg6IDAsXG4gICAgICBwcmltYXJ5OiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICBwYXRjaERlY2tSZW5kZXJlckZvclBvc3RQcm9jZXNzaW5nKCk7XG4gICAgfVxuXG4gICAgc3RhdGUgPSB7XG4gICAgICAvLyB0cnVlIGZvciBidWlsdC1pbiBrZXBsZXIuZ2wgc3R5bGVzIChkYXJrLW1hdHRlciwgcG9zaXRyb24sIOKApikgYW5kIHdoZW4gdGhlXG4gICAgICAvLyBiYXNlbWFwIHVzZXMgTWFwYm94LWhvc3RlZCB0aWxlcyAobWFwYm94Oi8vIHNvdXJjZXMpLlxuICAgICAgLy8gRm9yIHVzZXItYWRkZWQgY3VzdG9tIHN0eWxlcyAoT3BlbkZyZWVNYXAsIENBUlRPIHNlbGYtaG9zdGVkLCDigKYpIE1hcExpYnJlIGlzXG4gICAgICAvLyBtZXJlbHkgdGhlIHJlbmRlcmluZyBlbmdpbmUsIG5vdCB0aGUgdGlsZSBwcm92aWRlciwgc28gdGhlIGxvZ28gaXMgaGlkZGVuIGFuZFxuICAgICAgLy8gdGhlIGJhc2VtYXAncyBvd24gVGlsZUpTT04gYXR0cmlidXRpb24gaXMgc2hvd24gaW5zdGVhZC5cbiAgICAgIHNob3dCYXNlTWFwTGliTG9nbzogZmFsc2UsXG4gICAgICAvLyBhdHRyaWJ1dGlvbiBzdHJpbmdzIGNvbGxlY3RlZCBmcm9tIHRoZSByZXNvbHZlZCBtYXAgc291cmNlcyAoZS5nLiBDQVJUTyxcbiAgICAgIC8vIE9wZW5GcmVlTWFwKS4gIFBvcHVsYXRlZCBhZnRlciBUaWxlSlNPTiByZXNvbHZlcy5cbiAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnM6IFtdIGFzIHN0cmluZ1tdXG4gICAgfTtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKCF0aGlzLl9yZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBvYnNlcnZlRGltZW5zaW9ucyh0aGlzLl9yZWYuY3VycmVudCwgdGhpcy5faGFuZGxlUmVzaXplKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIHRoaXMuX29uTWFwYm94U3R5bGVVcGRhdGUpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKE1BUEJPWEdMX1JFTkRFUiwgdGhpcy5fb25NYXBSZW5kZXIpO1xuICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdW5vYnNlcnZlRGltZW5zaW9ucyh0aGlzLl9yZWYuY3VycmVudCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKHByZXZQcm9wcy5tYXBTdHlsZS5zdHlsZVR5cGUgIT09IHRoaXMucHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5tYXBTdHlsZS5zdHlsZVR5cGUgPT09IE5PX01BUF9JRCkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc2hvd0Jhc2VNYXBMaWJMb2dvOiBmYWxzZSxcbiAgICAgICAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnM6IFtdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlQXR0cmlidXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIF9kZWNrOiBhbnkgPSBudWxsO1xuICAgIF9tYXA6IEdldE1hcFJlZiB8IG51bGwgPSBudWxsO1xuICAgIF9yZWYgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG4gICAgX2RlY2tHTEVycm9yc0VsYXBzZWQ6IHtbaWQ6IHN0cmluZ106IG51bWJlcn0gPSB7fTtcbiAgICBfYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lcjogKChlOiBhbnkpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgX2Jhc2VtYXBJZGxlTGlzdGVuZXI6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gICAgX29uTWFwUmVuZGVyID0gKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uTWFwUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25NYXBSZW5kZXIodGhpcy5fbWFwKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJldmlvdXNMYXllcnMgPSB7XG4gICAgICAvLyBbbGF5ZXJzLmlkXTogbWFwYm94TGF5ZXJDb25maWdcbiAgICB9O1xuXG4gICAgX2hhbmRsZVJlc2l6ZSA9IGRpbWVuc2lvbnMgPT4ge1xuICAgICAgY29uc3Qge3ByaW1hcnksIGluZGV4fSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAocHJpbWFyeSkge1xuICAgICAgICBjb25zdCB7bWFwU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMud2lkdGggPiAwICYmIGRpbWVuc2lvbnMuaGVpZ2h0ID4gMCkge1xuICAgICAgICAgIG1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAoZGltZW5zaW9ucywgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxheWVyc1NlbGVjdG9yOiBQcm9wU2VsZWN0b3I8VmlzU3RhdGVbJ2xheWVycyddPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmxheWVycztcbiAgICBsYXllckRhdGFTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFZpc1N0YXRlWydsYXllcnMnXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5sYXllckRhdGE7XG4gICAgc3BsaXRNYXBTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFNwbGl0TWFwW10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzO1xuICAgIHNwbGl0TWFwSW5kZXhTZWxlY3RvcjogUHJvcFNlbGVjdG9yPG51bWJlciB8IHVuZGVmaW5lZD4gPSBwcm9wcyA9PiBwcm9wcy5pbmRleDtcbiAgICBtYXBMYXllcnNTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFNwbGl0TWFwTGF5ZXJzIHwgbnVsbCB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuc3BsaXRNYXBTZWxlY3RvcixcbiAgICAgIHRoaXMuc3BsaXRNYXBJbmRleFNlbGVjdG9yLFxuICAgICAgZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwc1xuICAgICk7XG4gICAgbGF5ZXJPcmRlclNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8VmlzU3RhdGVbJ2xheWVyT3JkZXInXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5sYXllck9yZGVyO1xuICAgIGxheWVyc1RvUmVuZGVyU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxMYXllcnNUb1JlbmRlcj4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgdGhpcy5tYXBMYXllcnNTZWxlY3RvcixcbiAgICAgIHByZXBhcmVMYXllcnNUb1JlbmRlclxuICAgICk7XG4gICAgbGF5ZXJzRm9yRGVja1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHByZXBhcmVMYXllcnNGb3JEZWNrXG4gICAgKTtcbiAgICBmaWx0ZXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5maWx0ZXJzO1xuICAgIHBvbHlnb25GaWx0ZXJzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLmZpbHRlcnNTZWxlY3RvciwgZmlsdGVycyA9PlxuICAgICAgZmlsdGVycy5maWx0ZXIoZiA9PiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmIGYuZW5hYmxlZCAhPT0gZmFsc2UpXG4gICAgKTtcbiAgICBmZWF0dXJlc1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZWRpdG9yLmZlYXR1cmVzO1xuICAgIHNlbGVjdGVkRmVhdHVyZVNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgICBmZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLnBvbHlnb25GaWx0ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmZlYXR1cmVzU2VsZWN0b3IsXG4gICAgICAocG9seWdvbkZpbHRlcnMsIGZlYXR1cmVzKSA9PiAoe1xuICAgICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICBmZWF0dXJlczogZmVhdHVyZXMuY29uY2F0KHBvbHlnb25GaWx0ZXJzLm1hcChmID0+IGYudmFsdWUpKVxuICAgICAgfSlcbiAgICApO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBObyBvdmVybG9hZCBtYXRjaGVzIHRoaXMgY2FsbFxuICAgIHNlbGVjdGVkUG9seWdvbkluZGV4U2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3RvcixcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IsXG4gICAgICAoY29sbGVjdGlvbiwgc2VsZWN0ZWRGZWF0dXJlKSA9PlxuICAgICAgICBjb2xsZWN0aW9uLmZlYXR1cmVzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZT8uaWQpXG4gICAgKTtcbiAgICBzZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgICh2YWx1ZTogbnVtYmVyKSA9PiB2YWx1ZSxcbiAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgMCA/IFtdIDogW3ZhbHVlXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMuZ2VuZXJhdGVNYXBib3hMYXllcnMgPz8gZ2VuZXJhdGVNYXBib3hMYXllcnM7XG5cbiAgICBtYXBib3hMYXllcnNTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyT3JkZXJTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJzVG9SZW5kZXJTZWxlY3RvcixcbiAgICAgIHRoaXMuZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yLFxuICAgICAgKGxheWVyLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGxheWVyc1RvUmVuZGVyLCBnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kKSA9PlxuICAgICAgICBnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kKGxheWVyLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGxheWVyc1RvUmVuZGVyKVxuICAgICk7XG5cbiAgICAvLyBtZXJnZSBpbiBhIGJhY2tncm91bmQtY29sb3Igc3R5bGUgaWYgdGhlIGJhc2VtYXAgY2hvaWNlIGlzIE5PX01BUF9JRFxuICAgIC8vIHVzZWQgYnkgPFN0eWxlZE1hcD4gaW5saW5lIHN0eWxlIHByb3BcbiAgICBtYXBTdHlsZVR5cGVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLm1hcFN0eWxlLnN0eWxlVHlwZTtcbiAgICBtYXBTdHlsZUJhY2tncm91bmRDb2xvclNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubWFwU3R5bGUuYmFja2dyb3VuZENvbG9yO1xuICAgIGdsb2JlTW9kZVNlbGVjdG9yID0gcHJvcHMgPT4gQm9vbGVhbihwcm9wcy5tYXBTdGF0ZT8uZ2xvYmU/LmVuYWJsZWQpO1xuICAgIGdsb2JlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5tYXBTdGF0ZT8uZ2xvYmU/LmNvbmZpZz8uYmFja2dyb3VuZENvbG9yO1xuICAgIGdsb2JlU3RhcnNTZWxlY3RvciA9IHByb3BzID0+IEJvb2xlYW4ocHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5jb25maWc/LnN0YXJzKTtcbiAgICBzdHlsZVNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLm1hcFN0eWxlVHlwZVNlbGVjdG9yLFxuICAgICAgdGhpcy5tYXBTdHlsZUJhY2tncm91bmRDb2xvclNlbGVjdG9yLFxuICAgICAgdGhpcy5nbG9iZU1vZGVTZWxlY3RvcixcbiAgICAgIHRoaXMuZ2xvYmVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvcixcbiAgICAgIHRoaXMuZ2xvYmVTdGFyc1NlbGVjdG9yLFxuICAgICAgKHN0eWxlVHlwZSwgYmFja2dyb3VuZENvbG9yLCBpc0dsb2JlTW9kZSwgZ2xvYmVCYWNrZ3JvdW5kQ29sb3IsIGdsb2JlU3RhcnMpID0+ICh7XG4gICAgICAgIC4uLk1BUF9TVFlMRS5jb250YWluZXIsXG4gICAgICAgIC4uLihzdHlsZVR5cGUgPT09IE5PX01BUF9JRCA/IHtiYWNrZ3JvdW5kQ29sb3I6IHJnYlRvSGV4KGJhY2tncm91bmRDb2xvcil9IDoge30pLFxuICAgICAgICAvLyBJbiBnbG9iZSBtb2RlIHRoZSBkZWNrLmdsIGNhbnZhcyBpcyB0cmFuc3BhcmVudCAodGhlIGdsb2JlIFZpZXcgdXNlc1xuICAgICAgICAvLyBgY2xlYXJDb2xvcjogZmFsc2VgIHRvIGF2b2lkIGNvcnJ1cHRpbmcgdGhlIHBpY2tpbmcgYnVmZmVyKSwgc28gdGhlXG4gICAgICAgIC8vIGJhY2tncm91bmQgYXJvdW5kIHRoZSBnbG9iZSBpcyBwYWludGVkIGhlcmUgb24gdGhlIGNvbnRhaW5lciBpbnN0ZWFkLlxuICAgICAgICAuLi4oaXNHbG9iZU1vZGVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGdsb2JlIGJhY2tncm91bmQgd2hlbiBub25lIGlzIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcmdiVG9IZXgoXG4gICAgICAgICAgICAgICAgKGdsb2JlQmFja2dyb3VuZENvbG9yIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSkgfHxcbiAgICAgICAgICAgICAgICAgIChnZXRHbG9iZUNsZWFyQ29sb3IoKS5zbGljZSgwLCAzKSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC8vIE9wdGlvbmFsbHkgb3ZlcmxheSBhIHRpbGVhYmxlIHN0YXItZmllbGQgcGF0dGVybiBvbiB0aGUgYmFja2dyb3VuZC5cbiAgICAgICAgICAgICAgLi4uKGdsb2JlU3RhcnNcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCcke2dldFN0YXJzQmFja2dyb3VuZEltYWdlKCl9JylgLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVwZWF0OiAncmVwZWF0J1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSlcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8qIGNvbXBvbmVudCBwcml2YXRlIGZ1bmN0aW9ucyAqL1xuICAgIF9vbkNsb3NlTWFwUG9wb3ZlciA9ICgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJDbGljayhudWxsKTtcbiAgICB9O1xuXG4gICAgX29uTGF5ZXJIb3ZlciA9IChfaWR4OiBudW1iZXIsIGluZm86IFBpY2tpbmdJbmZvPGFueT4gfCBudWxsKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVySG92ZXIoaW5mbywgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVyU2V0RG9tYWluID0gKFxuICAgICAgaWR4OiBudW1iZXIsXG4gICAgICB2YWx1ZTogbnVtYmVyW10gfCB7ZG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluOyBhZ2dyZWdhdGVkQmluczogUmVjb3JkPG51bWJlciwgQWdncmVnYXRlZEJpbj59XG4gICAgKSA9PiB7XG4gICAgICAvLyBkZWNrLmdsIDkgbmF0aXZlIGFnZ3JlZ2F0aW9uIGxheWVycyAoR3JpZCwgSGV4YWdvbikgcGFzc1xuICAgICAgLy8ge2RvbWFpbiwgYWdncmVnYXRlZEJpbnN9IHZpYSBvdXIgU2NhbGVFbmhhbmNlZCogb3ZlcnJpZGVzLFxuICAgICAgLy8gd2hpbGUgQ2x1c3RlckxheWVyJ3MgQ1BVQWdncmVnYXRvciBhbHNvIHBhc3NlcyB7ZG9tYWluLCBhZ2dyZWdhdGVkQmluc30uXG4gICAgICAvLyBQbGFpbiBbbWluLCBtYXhdIGlzIGEgZmFsbGJhY2sgaWYgdGhlIG92ZXJyaWRlIGlzIGJ5cGFzc2VkLlxuICAgICAgY29uc3QgY29uZmlnID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB7Y29sb3JEb21haW46IHZhbHVlIGFzIFZpc3VhbENoYW5uZWxEb21haW59XG4gICAgICAgIDoge2NvbG9yRG9tYWluOiB2YWx1ZS5kb21haW4sIGFnZ3JlZ2F0ZWRCaW5zOiB2YWx1ZS5hZ2dyZWdhdGVkQmluc307XG5cbiAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5wcm9wcy52aXNTdGF0ZS5sYXllcnNbaWR4XTtcbiAgICAgIGlmICghbGF5ZXIpIHJldHVybjtcblxuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMubGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIGNvbmZpZyBhcyBQYXJ0aWFsPExheWVyQmFzZUNvbmZpZz4pO1xuICAgIH07XG5cbiAgICBfb25SZWRyYXdOZWVkZWQgPSAoX2lkeDogbnVtYmVyKSA9PiB7XG4gICAgICAvLyB1cGRhdGVNYXBVcGRhdGVyIGFsd2F5cyByZXR1cm5zIGEgbmV3IHN0YXRlIG9iamVjdCByZWZlcmVuY2UsIHdoaWNoIHRyaWdnZXJzIHJlLXJlbmRlclxuICAgICAgY29uc3Qge21hcFN0YXRlQWN0aW9ucywgaW5kZXh9ID0gdGhpcy5wcm9wcztcbiAgICAgIG1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAoe30sIGluZGV4KTtcbiAgICB9O1xuXG4gICAgX29uRml0Qm91bmRzID0gKF9pZHg6IG51bWJlciwgYm91bmRzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5tYXBTdGF0ZUFjdGlvbnMuZml0Qm91bmRzKGJvdW5kcyk7XG4gICAgfTtcblxuICAgIF9vbkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSA9IChpZHgsIGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5sYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UodGhpcy5wcm9wcy52aXNTdGF0ZS5sYXllcnNbaWR4XSwgZXZlbnQpO1xuICAgIH07XG5cbiAgICBfb25XTVNGZWF0dXJlSW5mbyA9IChcbiAgICAgIGlkeDogbnVtYmVyLFxuICAgICAgZGF0YToge1xuICAgICAgICBmZWF0dXJlSW5mbzogQXJyYXk8e25hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZ30+IHwgc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgY29vcmRpbmF0ZT86IFtudW1iZXIsIG51bWJlcl0gfCBudWxsO1xuICAgICAgfVxuICAgICkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMud21zRmVhdHVyZUluZm8oXG4gICAgICAgIHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF0sXG4gICAgICAgIGRhdGEuZmVhdHVyZUluZm8sXG4gICAgICAgIGRhdGEuY29vcmRpbmF0ZVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgX2hhbmRsZU1hcFRvZ2dsZUxheWVyID0gbGF5ZXJJZCA9PiB7XG4gICAgICBjb25zdCB7aW5kZXg6IG1hcEluZGV4ID0gMCwgdmlzU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICB2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpO1xuICAgIH07XG5cbiAgICBfb25NYXBib3hTdHlsZVVwZGF0ZSA9IHVwZGF0ZSA9PiB7XG4gICAgICAvLyBmb3JjZSByZWZyZXNoIG1hcGJveGdsIGxheWVyc1xuICAgICAgdGhpcy5wcmV2aW91c0xheWVycyA9IHt9O1xuICAgICAgdGhpcy5fdXBkYXRlTWFwYm94TGF5ZXJzKCk7XG5cbiAgICAgIHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9uKHVwZGF0ZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbk1hcFN0eWxlTG9hZGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25NYXBTdHlsZUxvYWRlZCh0aGlzLl9tYXApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdXBkYXRlQXR0cmlidXRpb24gPSAodXBkYXRlPzogYW55KSA9PiB7XG4gICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcblxuICAgICAgbGV0IHN0eWxlT2JqID0gdXBkYXRlPy5zdHlsZSB8fCBudWxsO1xuICAgICAgaWYgKCFzdHlsZU9iaiAmJiB0aGlzLl9tYXApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByYXdTdHlsZSA9IHRoaXMuX21hcC5pc1N0eWxlTG9hZGVkPy4oKSA/IHRoaXMuX21hcC5nZXRTdHlsZT8uKCkgOiBudWxsO1xuICAgICAgICAgIGlmIChyYXdTdHlsZSkge1xuICAgICAgICAgICAgc3R5bGVPYmogPSB7c3R5bGVzaGVldDogcmF3U3R5bGV9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gbWFwIHN0eWxlIG5vdCByZWFkeSB5ZXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdXNlc01hcGJveCA9IHN0eWxlT2JqID8gaXNTdHlsZVVzaW5nTWFwYm94VGlsZXMoc3R5bGVPYmopIDogZmFsc2U7XG4gICAgICBjb25zdCB1c2VzT3NtID0gc3R5bGVPYmogPyBpc1N0eWxlVXNpbmdPcGVuU3RyZWV0TWFwVGlsZXMoc3R5bGVPYmopIDogZmFsc2U7XG4gICAgICBjb25zdCBiYXNlbWFwQXR0cmlidXRpb25zID0gZ2V0QmFzZU1hcEF0dHJpYnV0aW9ucyh0aGlzLl9tYXApO1xuXG4gICAgICAvLyBpZiBPU00gdGlsZXMgYXJlIGRldGVjdGVkIGluIHRoZSByYXcgc3R5bGUgYnV0IG5vIHNvdXJjZS1sZXZlbCBhdHRyaWJ1dGlvblxuICAgICAgLy8gc3RyaW5nIHdhcyBjb2xsZWN0ZWQgeWV0LCBmb2xkIGluIHRoZSBjYW5vbmljYWwgT1NNIGF0dHJpYnV0aW9uIHNvIHRoZVxuICAgICAgLy8gcmVuZGVyIHBhdGggc3RheXMgdW5pZm9ybSAobm8gc2VwYXJhdGUgaGFyZGNvZGVkIGZhbGxiYWNrIGxpbmspXG4gICAgICBpZiAodXNlc09zbSAmJiAhYmFzZW1hcEF0dHJpYnV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgYmFzZW1hcEF0dHJpYnV0aW9ucy5wdXNoKE9TTV9BVFRSSUJVVElPTl9IVE1MKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2hvdyB0aGUgXCJCYXNlbWFwIGJ5OiBNYXBMaWJyZS9NYXBib3hcIiBsb2dvOlxuICAgICAgLy8gIC0gQWx3YXlzIHNob3cgZm9yIGJ1aWx0LWluIGtlcGxlci5nbCBzdHlsZXMgKGRhcmstbWF0dGVyLCBwb3NpdHJvbiwg4oCmKTpcbiAgICAgIC8vICAgIHRoZXkgZG9uJ3QgY2FycnkgdGhlaXIgb3duIFwicHJvdmlkZXJcIiBicmFuZGluZyBzbyB0aGUgcmVuZGVyaW5nLWVuZ2luZVxuICAgICAgLy8gICAgbG9nbyBhY3RzIGFzIHRoZSBiYXNlbWFwIGNyZWRpdC5cbiAgICAgIC8vICAtIEFsd2F5cyBzaG93IHdoZW4gTWFwYm94IHRpbGVzIGFyZSBpbiB1c2UgKG1hcGJveDovLyBzb3VyY2VzKTogTWFwYm94XG4gICAgICAvLyAgICBhdHRyaWJ1dGlvbiBpcyByZXF1aXJlZC5cbiAgICAgIC8vICAtIEhpZGUgZm9yIGN1c3RvbSB1c2VyLWFkZGVkIHN0eWxlcyAoY3VzdG9tID09PSAnTE9DQUwnIHwgJ01BTkFHRUQnKTpcbiAgICAgIC8vICAgIHRob3NlIHN0eWxlcyBzdXBwbHkgdGhlaXIgb3duIFRpbGVKU09OIGF0dHJpYnV0aW9uIChlLmcuIE9wZW5GcmVlTWFwKSxcbiAgICAgIC8vICAgIHNvIHNob3dpbmcgXCJCYXNlbWFwIGJ5OiBNYXBMaWJyZVwiIHdvdWxkIGJlIG1pc2xlYWRpbmcuXG4gICAgICBjb25zdCBzdHlsZVR5cGUgPSB0aGlzLnByb3BzLm1hcFN0eWxlPy5zdHlsZVR5cGU7XG4gICAgICBjb25zdCBjdXJyZW50U3R5bGUgPSB0aGlzLnByb3BzLm1hcFN0eWxlPy5tYXBTdHlsZXM/LltzdHlsZVR5cGVdO1xuICAgICAgY29uc3QgaXNVc2VyQ3VzdG9tU3R5bGUgPSBCb29sZWFuKGN1cnJlbnRTdHlsZT8uY3VzdG9tKTtcbiAgICAgIGNvbnN0IHNob3dCYXNlTWFwTGliTG9nbyA9IHVzZXNNYXBib3ggfHwgIWlzVXNlckN1c3RvbVN0eWxlO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2hvd0Jhc2VNYXBMaWJMb2dvLFxuICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zXG4gICAgICB9KTtcblxuICAgICAgLy8gRm9yIG5vbi1NYXBib3ggc3R5bGVzLCBUaWxlSlNPTiBhdHRyaWJ1dGlvbiByZXNvbHZlcyBhc3luY2hyb25vdXNseVxuICAgICAgLy8gYWZ0ZXIgc3R5bGUubG9hZC4gIFN0YXJ0IGEgbGlzdGVuZXIgc28gd2UgY2FuIHVwZGF0ZSBiYXNlbWFwQXR0cmlidXRpb25zXG4gICAgICAvLyBhcyBzb29uIGFzIHRoZSBzb3VyY2VzIHJlc29sdmUgdGhlaXIgVGlsZUpTT04uXG4gICAgICBpZiAoIXVzZXNNYXBib3gpIHtcbiAgICAgICAgdGhpcy5fY29sbGVjdEJhc2VtYXBBdHRyaWJ1dGlvbnMoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyICYmIHRoaXMuX21hcCkge1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdzb3VyY2VkYXRhJywgdGhpcy5fYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lcik7XG4gICAgICAgIHRoaXMuX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Jhc2VtYXBJZGxlTGlzdGVuZXIgJiYgdGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ2lkbGUnLCB0aGlzLl9iYXNlbWFwSWRsZUxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy5fYmFzZW1hcElkbGVMaXN0ZW5lciA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9jb2xsZWN0QmFzZW1hcEF0dHJpYnV0aW9ucyA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fbWFwKSByZXR1cm47XG4gICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgIGxldCBhdHRlbXB0cyA9IDA7XG4gICAgICAvLyBDYXAgcmV0cmllcyBzbyBhIHN0eWxlIHRoYXQgbmV2ZXIgeWllbGRzIGF0dHJpYnV0aW9ucyBkb2Vzbid0IGxlYXZlIGFcbiAgICAgIC8vIHBlcm1hbmVudCBzb3VyY2VkYXRhIGxpc3RlbmVyIGF0dGFjaGVkLlxuICAgICAgY29uc3QgTUFYX0FUVEVNUFRTID0gNTA7XG5cbiAgICAgIGNvbnN0IHRyeUNvbGxlY3QgPSAoKSA9PiB7XG4gICAgICAgIC8vIFRpbGVKU09OIHJlc29sdmVzIGFzeW5jaHJvbm91c2x5OyByZS1jb2xsZWN0IGF0dHJpYnV0aW9ucyBvbmNlIGFcbiAgICAgICAgLy8gc291cmNlJ3MgbWV0YWRhdGEgaXMgYXZhaWxhYmxlIHNvIGN1c3RvbSBiYXNlbWFwIGF0dHJpYnV0aW9ucyBhcmUgbm90IGxvc3QuXG4gICAgICAgIGNvbnN0IGJhc2VtYXBBdHRyaWJ1dGlvbnMgPSBnZXRCYXNlTWFwQXR0cmlidXRpb25zKHRoaXMuX21hcCk7XG4gICAgICAgIGlmIChiYXNlbWFwQXR0cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgICAgIC8vIERvbid0IGNoYW5nZSBzaG93QmFzZU1hcExpYkxvZ28gaGVyZSDigJQgaXQgaXMgZml4ZWQgYXQgc3R5bGUubG9hZCB0aW1lXG4gICAgICAgICAgLy8gYmFzZWQgb24gd2hldGhlciB0aGUgc3R5bGUgdXNlcyBNYXBib3ggdGlsZXMuICBXZSBvbmx5IHVwZGF0ZSB0aGVcbiAgICAgICAgICAvLyBwcm92aWRlciBhdHRyaWJ1dGlvbnMgY29sbGVjdGVkIGZyb20gdGhlIHJlc29sdmVkIFRpbGVKU09OLlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2Jhc2VtYXBBdHRyaWJ1dGlvbnN9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblNvdXJjZURhdGEgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIC8vIENvbGxlY3QgYXR0cmlidXRpb25zIHdoZW46XG4gICAgICAgIC8vICAgKGEpIGEgc291cmNlJ3MgVGlsZUpTT04gaGFzIGp1c3QgYmVlbiBmZXRjaGVkIChzb3VyY2VEYXRhVHlwZSA9PT0gJ21ldGFkYXRhJykg4oCUXG4gICAgICAgIC8vICAgICAgIHRoaXMgaXMgdGhlIGVhcmxpZXN0IG1vbWVudCB0aGUgYGF0dHJpYnV0aW9uYCBwcm9wZXJ0eSBpcyBhdmFpbGFibGUgb24gdGhlXG4gICAgICAgIC8vICAgICAgIHJlc29sdmVkIHNvdXJjZSBvYmplY3QsIG9yXG4gICAgICAgIC8vICAgKGIpIGEgc291cmNlIGlzIGZ1bGx5IGxvYWRlZCAoaXNTb3VyY2VMb2FkZWQgPT09IHRydWUpIOKAlCBmYWxsYmFjayBmb3IgcmFzdGVyXG4gICAgICAgIC8vICAgICAgIHNvdXJjZXMgb3Igc3R5bGVzIHRoYXQgc2V0IGF0dHJpYnV0aW9uIGlubGluZSByYXRoZXIgdGhhbiB2aWEgVGlsZUpTT04uXG4gICAgICAgIGlmICghZT8uaXNTb3VyY2VMb2FkZWQgJiYgZT8uc291cmNlRGF0YVR5cGUgIT09ICdtZXRhZGF0YScpIHJldHVybjtcbiAgICAgICAgYXR0ZW1wdHMrKztcbiAgICAgICAgdHJ5Q29sbGVjdCgpO1xuICAgICAgICBpZiAoYXR0ZW1wdHMgPj0gTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIFRoZSBgaWRsZWAgZXZlbnQgZmlyZXMgd2hlbiB0aGUgbWFwIGhhcyBmaW5pc2hlZCBsb2FkaW5nIGFsbCBwZW5kaW5nXG4gICAgICAvLyByZXNvdXJjZXMgKHRpbGVzLCBUaWxlSlNPTiwgc3ByaXRlcykuIEF0IHRoYXQgcG9pbnQgYXR0cmlidXRpb25zIGZyb21cbiAgICAgIC8vIGFsbCBzb3VyY2VzIGFyZSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkLCBzbyB0aGlzIGlzIGEgcmVsaWFibGVcbiAgICAgIC8vIG9uZS1zaG90IGZhbGxiYWNrIHRoYXQgY2F0Y2hlcyBjYXNlcyB3aGVyZSB0aGUgc291cmNlZGF0YSBtZXRhZGF0YVxuICAgICAgLy8gZXZlbnRzIGFyZSBtaXNzZWQgb3IgdGhlIHNvdXJjZSBuZXZlciByZWFjaGVzIGlzU291cmNlTG9hZGVkLlxuICAgICAgY29uc3Qgb25JZGxlID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgY29uc3QgYmFzZW1hcEF0dHJpYnV0aW9ucyA9IGdldEJhc2VNYXBBdHRyaWJ1dGlvbnModGhpcy5fbWFwKTtcbiAgICAgICAgaWYgKGJhc2VtYXBBdHRyaWJ1dGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YmFzZW1hcEF0dHJpYnV0aW9uc30pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyID0gb25Tb3VyY2VEYXRhO1xuICAgICAgdGhpcy5fYmFzZW1hcElkbGVMaXN0ZW5lciA9IG9uSWRsZTtcbiAgICAgIHRoaXMuX21hcC5vbignc291cmNlZGF0YScsIG9uU291cmNlRGF0YSk7XG4gICAgICB0aGlzLl9tYXAub24oJ2lkbGUnLCBvbklkbGUpO1xuICAgIH07XG5cbiAgICBfc2V0TWFwUmVmID0gbWFwUmVmID0+IHtcbiAgICAgIC8vIEhhbmRsZSBjaGFuZ2Ugb2YgdGhlIG1hcCBsaWJyYXJ5XG4gICAgICBpZiAodGhpcy5fbWFwICYmIG1hcFJlZikge1xuICAgICAgICBjb25zdCBtYXAgPSBtYXBSZWYuZ2V0TWFwKCk7XG4gICAgICAgIGlmIChtYXAgJiYgdGhpcy5fbWFwICE9PSBtYXApIHtcbiAgICAgICAgICB0aGlzLl9tYXAub2ZmKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgdGhpcy5fb25NYXBib3hTdHlsZVVwZGF0ZSk7XG4gICAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9SRU5ERVIsIHRoaXMuX29uTWFwUmVuZGVyKTtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgICB0aGlzLl9tYXAgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fbWFwICYmIG1hcFJlZikge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXBSZWYuZ2V0TWFwKCk7XG4gICAgICAgIC8vIGkgbm90aWNlZCBpbiBjZXJ0YWluIGNvbnRleHQgd2UgZG9uJ3QgYWNjZXNzIHRoZSBhY3R1YWwgbWFwIGVsZW1lbnRcbiAgICAgICAgaWYgKCF0aGlzLl9tYXApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gYmluZCBtYXBib3hnbCBldmVudCBsaXN0ZW5lclxuICAgICAgICB0aGlzLl9tYXAub24oTUFQQk9YR0xfU1RZTEVfVVBEQVRFLCB0aGlzLl9vbk1hcGJveFN0eWxlVXBkYXRlKTtcbiAgICAgICAgdGhpcy5fbWFwLm9uKE1BUEJPWEdMX1JFTkRFUiwgdGhpcy5fb25NYXBSZW5kZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5nZXRNYXBib3hSZWYpIHtcbiAgICAgICAgLy8gVGhlIHBhcmVudCBjb21wb25lbnQgY2FuIGdhaW4gYWNjZXNzIHRvIG91ciBNYXBib3hHbE1hcCBieVxuICAgICAgICAvLyBwcm92aWRpbmcgdGhpcyBjYWxsYmFjay4gTm90ZSB0aGF0ICdtYXBib3gnIHdpbGwgYmUgbnVsbCB3aGVuIHRoZVxuICAgICAgICAvLyByZWYgaXMgdW5zZXQgKGUuZy4gd2hlbiBhIHNwbGl0IG1hcCBpcyBjbG9zZWQpLlxuICAgICAgICB0aGlzLnByb3BzLmdldE1hcGJveFJlZihtYXBSZWYsIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfb25EZWNrSW5pdGlhbGl6ZWQoZGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkRlY2tJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLnByb3BzLm9uRGVja0luaXRpYWxpemVkKHRoaXMuX2RlY2ssIGRldmljZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogMSkgQWxsb3cgZWZmZWN0cyBvbmx5IGZvciB0aGUgZmlyc3Qgdmlldy5cbiAgICAgKiAyKSBQcmV2ZW50IGVmZmVjdDpwcmVSZW5kZXIgY2FsbCB3aXRob3V0IHZhbGlkIGdlbmVyYXRlZCB2aWV3cG9ydHMuXG4gICAgICogQHBhcmFtIHZpZXdJbmRleCBWaWV3IGluZGV4LlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBlZmZlY3RzIGNhbiBiZSB1c2VkLlxuICAgICAqL1xuICAgIF9pc09LVG9SZW5kZXJFZmZlY3RzKHZpZXdJbmRleD86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuICF2aWV3SW5kZXggJiYgQm9vbGVhbih0aGlzLl9kZWNrPy52aWV3TWFuYWdlcj8uX3ZpZXdwb3J0cz8ubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBfb25CZWZvcmVSZW5kZXIgPSAoKSA9PiB7XG4gICAgICAvLyBuby1vcFxuICAgIH07XG5cbiAgICBfYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGU6IHtrZXk6IHN0cmluZzsgdmlld3BvcnQ6IGFueX0gfCBudWxsID0gbnVsbDtcblxuICAgIF93YXNJbnRlcmFjdGluZyA9IGZhbHNlO1xuXG4gICAgX2dldEFubm90YXRpb25WaWV3cG9ydChtYXBTdGF0ZTogYW55LCBpbnRlcm5hbFZpZXdTdGF0ZTogYW55KSB7XG4gICAgICBjb25zdCBsb25naXR1ZGUgPSBpbnRlcm5hbFZpZXdTdGF0ZT8ubG9uZ2l0dWRlID8/IG1hcFN0YXRlLmxvbmdpdHVkZTtcbiAgICAgIGNvbnN0IGxhdGl0dWRlID0gaW50ZXJuYWxWaWV3U3RhdGU/LmxhdGl0dWRlID8/IG1hcFN0YXRlLmxhdGl0dWRlO1xuICAgICAgY29uc3Qgem9vbSA9IGludGVybmFsVmlld1N0YXRlPy56b29tID8/IG1hcFN0YXRlLnpvb207XG4gICAgICBjb25zdCBwaXRjaCA9IGludGVybmFsVmlld1N0YXRlPy5waXRjaCA/PyBtYXBTdGF0ZS5waXRjaCA/PyAwO1xuICAgICAgY29uc3QgYmVhcmluZyA9IGludGVybmFsVmlld1N0YXRlPy5iZWFyaW5nID8/IG1hcFN0YXRlLmJlYXJpbmcgPz8gMDtcbiAgICAgIGNvbnN0IHdpZHRoID0gbWFwU3RhdGUud2lkdGggfHwgMDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IG1hcFN0YXRlLmhlaWdodCB8fCAwO1xuICAgICAgY29uc3Qga2V5ID0gYCR7bG9uZ2l0dWRlfSwke2xhdGl0dWRlfSwke3pvb219LCR7cGl0Y2h9LCR7YmVhcmluZ30sJHt3aWR0aH0sJHtoZWlnaHR9YDtcblxuICAgICAgaWYgKHRoaXMuX2Fubm90YXRpb25WaWV3cG9ydENhY2hlPy5rZXkgPT09IGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGUudmlld3BvcnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lcmdlZFN0YXRlID0gey4uLm1hcFN0YXRlLCAuLi5pbnRlcm5hbFZpZXdTdGF0ZSwgd2lkdGgsIGhlaWdodH07XG4gICAgICBjb25zdCB2cCA9IGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlKG1lcmdlZFN0YXRlKSBhcyBhbnk7XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IHtcbiAgICAgICAgcHJvamVjdDogKGxuZ0xhdDogW251bWJlciwgbnVtYmVyXSkgPT4gdnAucHJvamVjdChsbmdMYXQpIGFzIFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgIHVucHJvamVjdDogKHh5OiBbbnVtYmVyLCBudW1iZXJdKSA9PiB2cC51bnByb2plY3QoeHkpIGFzIFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgIGxvbmdpdHVkZSxcbiAgICAgICAgbGF0aXR1ZGUsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHpvb21cbiAgICAgIH07XG4gICAgICB0aGlzLl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZSA9IHtrZXksIHZpZXdwb3J0fTtcbiAgICAgIHJldHVybiB2aWV3cG9ydDtcbiAgICB9XG5cbiAgICBfb25EZWNrRXJyb3IgPSAoZXJyb3IsIGxheWVyKSA9PiB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8ubWVzc2FnZSB8fCAndW5rbm93bi1lcnJvcic7XG4gICAgICBjb25zdCBsYXllck1lc3NhZ2UgPSBsYXllcj8uaWQgPyBgIGluICR7bGF5ZXIuaWR9IGxheWVyYCA6ICcnO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlRnVsbCA9XG4gICAgICAgIGVycm9yTWVzc2FnZSA9PT0gJ1dlYkdMIGNvbnRleHQgaXMgbG9zdCdcbiAgICAgICAgICA/ICdZb3VyIEdQVSB3YXMgZGlzY29ubmVjdGVkLiBUaGlzIGNhbiBoYXBwZW4gaWYgeW91ciBjb21wdXRlciBnb2VzIHRvIHNsZWVwLiBJdCBjYW4gYWxzbyBvY2N1ciBmb3Igb3RoZXIgcmVhc29ucywgc3VjaCBhcyBpZiB5b3UgYXJlIHJ1bm5pbmcgdG9vIG1hbnkgR1BVIGFwcGxpY2F0aW9ucy4nXG4gICAgICAgICAgOiBgQW4gZXJyb3IgaW4gZGVjay5nbDogJHtlcnJvck1lc3NhZ2V9JHtsYXllck1lc3NhZ2V9LmA7XG5cbiAgICAgIC8vIFRocm90dGxlIGVycm9yIG5vdGlmaWNhdGlvbnMsIGFzIFJlYWN0IGRvZXNuJ3QgbGlrZSB0b28gbWFueSBzdGF0ZSBjaGFuZ2VzIGZyb20gaGVyZS5cbiAgICAgIGNvbnN0IGxhc3RTaG93biA9IHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWRbZXJyb3JNZXNzYWdlRnVsbF07XG4gICAgICBpZiAoIWxhc3RTaG93biB8fCBsYXN0U2hvd24gPCBEYXRlLm5vdygpIC0gVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUpIHtcbiAgICAgICAgdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZFtlcnJvck1lc3NhZ2VGdWxsXSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgLy8gTWFyayBsYXllciBhcyBpbnZhbGlkXG4gICAgICAgIGxldCBleHRyYUxheWVyTWVzc2FnZSA9ICcnO1xuICAgICAgICBjb25zdCB7dmlzU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChsYXllcikge1xuICAgICAgICAgIGxldCB0b3BNb3N0TGF5ZXIgPSBsYXllcjtcbiAgICAgICAgICB3aGlsZSAodG9wTW9zdExheWVyLnBhcmVudCkge1xuICAgICAgICAgICAgdG9wTW9zdExheWVyID0gdG9wTW9zdExheWVyLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRvcE1vc3RMYXllci5wcm9wcz8uaWQpIHtcbiAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucy5sYXllclNldElzVmFsaWQodG9wTW9zdExheWVyLCBmYWxzZSk7XG4gICAgICAgICAgICBleHRyYUxheWVyTWVzc2FnZSA9ICdUaGUgbGF5ZXIgaGFzIGJlZW4gZGlzYWJsZWQgYW5kIGhpZ2hsaWdodGVkLic7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBlcnJvciBub3RpZmljYXRpb24gb3IgdXBkYXRlIGV4aXN0aW5nIG9uZSB3aXRoIHNhbWUgaWQuXG4gICAgICAgIC8vIFVwZGF0ZSBpcyByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2Ygbm90aWZpY2F0aW9ucyBhcyB0aGV5IHByb2JhYmx5IGFyZSBnb2luZyB0byBcImp1bXBcIiBiYXNlZCBvbiBvcmRlciBvZiBlcnJvcnMuXG4gICAgICAgIGNvbnN0IHt1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICB1aVN0YXRlQWN0aW9ucy5hZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYCR7ZXJyb3JNZXNzYWdlRnVsbH0gJHtleHRyYUxheWVyTWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6IGVycm9yTWVzc2FnZUZ1bGwgLy8gdHJlYXQgdGhlIGVycm9yIG1lc3NhZ2UgYXMgaWRcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKiBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9ucyAqL1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXBQb3BvdmVyKCkge1xuICAgICAgLy8gdGhpcyBjaGVjayBpcyBmb3IgbGltaXRpbmcgdGhlIGRpc3BsYXkgb2YgdGhlIGA8TWFwUG9wb3Zlcj5gIHRvIHRoZSBgPE1hcENvbnRhaW5lcj5gIHRoZSB1c2VyIGlzIGludGVyYWN0aW5nIHdpdGhcbiAgICAgIC8vIHRoZSBEZWNrR0wgb25Ib3ZlciBldmVudCBoYW5kbGVyIGFkZHMgYSBgbWFwSW5kZXhgIHByb3BlcnR5IHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgYGhvdmVySW5mb2Agb2JqZWN0IG9mIGB2aXNTdGF0ZWBcbiAgICAgIGlmICh0aGlzLnByb3BzLmluZGV4ICE9PSB0aGlzLnByb3BzLnZpc1N0YXRlLmhvdmVySW5mbz8ubWFwSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IG1vdmUgdGhpcyBpbnRvIHJlZHVjZXIgc28gaXQgY2FuIGJlIHRlc3RlZFxuICAgICAgY29uc3Qge1xuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgdmlzU3RhdGU6IHtcbiAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgIG1vdXNlUG9zOiB7bW91c2VQb3NpdGlvbiwgY29vcmRpbmF0ZSwgcGlubmVkfVxuICAgICAgICB9XG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGxheWVyc1RvUmVuZGVyID0gdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICBpZiAoIW1vdXNlUG9zaXRpb24gfHwgIWludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxheWVySG92ZXJQcm9wID0gZ2V0TGF5ZXJIb3ZlclByb3Aoe1xuICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICBob3ZlckluZm8sXG4gICAgICAgIGxheWVycyxcbiAgICAgICAgbGF5ZXJzVG9SZW5kZXIsXG4gICAgICAgIGRhdGFzZXRzXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29tcGFyZU1vZGUgPSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZ1xuICAgICAgICA/IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmNvbXBhcmVNb2RlXG4gICAgICAgIDogZmFsc2U7XG5cbiAgICAgIGxldCBwaW5uZWRQb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcbiAgICAgIGxldCBsYXllclBpbm5lZFByb3A6IExheWVySG92ZXJQcm9wIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAocGlubmVkIHx8IGNsaWNrZWQpIHtcbiAgICAgICAgLy8gcHJvamVjdCBsbmdsYXQgdG8gc2NyZWVuIHNvIHRoYXQgdG9vbHRpcCBmb2xsb3dzIHRoZSBvYmplY3Qgb24gem9vbVxuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlKG1hcFN0YXRlKTtcbiAgICAgICAgY29uc3QgbG5nTGF0ID0gY2xpY2tlZCA/IGNsaWNrZWQuY29vcmRpbmF0ZSA6IHBpbm5lZC5jb29yZGluYXRlO1xuICAgICAgICBwaW5uZWRQb3NpdGlvbiA9IHRoaXMuX2dldEhvdmVyWFkodmlld3BvcnQsIGxuZ0xhdCk7XG4gICAgICAgIGxheWVyUGlubmVkUHJvcCA9IGdldExheWVySG92ZXJQcm9wKHtcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgaG92ZXJJbmZvOiBjbGlja2VkLFxuICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICBsYXllcnNUb1JlbmRlcixcbiAgICAgICAgICBkYXRhc2V0c1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGxheWVySG92ZXJQcm9wICYmIGxheWVyUGlubmVkUHJvcCkge1xuICAgICAgICAgIGxheWVySG92ZXJQcm9wLnByaW1hcnlEYXRhID0gbGF5ZXJQaW5uZWRQcm9wLmRhdGE7XG4gICAgICAgICAgbGF5ZXJIb3ZlclByb3AuY29tcGFyZVR5cGUgPSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5jb21wYXJlVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21tb25Qcm9wID0ge1xuICAgICAgICBvbkNsb3NlOiB0aGlzLl9vbkNsb3NlTWFwUG9wb3ZlcixcbiAgICAgICAgem9vbTogbWFwU3RhdGUuem9vbSxcbiAgICAgICAgY29udGFpbmVyOiB0aGlzLl9kZWNrID8gdGhpcy5fZGVjay5jYW52YXMgOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgIHtsYXllclBpbm5lZFByb3AgJiYgKFxuICAgICAgICAgICAgPE1hcFBvcG92ZXJcbiAgICAgICAgICAgICAgey4uLnBpbm5lZFBvc2l0aW9ufVxuICAgICAgICAgICAgICB7Li4uY29tbW9uUHJvcH1cbiAgICAgICAgICAgICAgbGF5ZXJIb3ZlclByb3A9e2xheWVyUGlubmVkUHJvcH1cbiAgICAgICAgICAgICAgY29vcmRpbmF0ZT17aW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkICYmIChwaW5uZWQgfHwge30pLmNvb3JkaW5hdGV9XG4gICAgICAgICAgICAgIGZyb3plbj17dHJ1ZX1cbiAgICAgICAgICAgICAgaXNCYXNlPXtjb21wYXJlTW9kZX1cbiAgICAgICAgICAgICAgb25TZXRGZWF0dXJlcz17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0RmVhdHVyZXN9XG4gICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZT17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PE1hcENvbnRhaW5lclByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbj17dGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtsYXllckhvdmVyUHJvcCAmJiAoIWxheWVyUGlubmVkUHJvcCB8fCBjb21wYXJlTW9kZSkgJiYgKFxuICAgICAgICAgICAgPE1hcFBvcG92ZXJcbiAgICAgICAgICAgICAgeD17bW91c2VQb3NpdGlvblswXX1cbiAgICAgICAgICAgICAgeT17bW91c2VQb3NpdGlvblsxXX1cbiAgICAgICAgICAgICAgey4uLmNvbW1vblByb3B9XG4gICAgICAgICAgICAgIGxheWVySG92ZXJQcm9wPXtsYXllckhvdmVyUHJvcH1cbiAgICAgICAgICAgICAgZnJvemVuPXtmYWxzZX1cbiAgICAgICAgICAgICAgY29vcmRpbmF0ZT17aW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkICYmIGNvb3JkaW5hdGV9XG4gICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldEZlYXR1cmVzfVxuICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmU9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb249e3RoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIF9nZXRIb3ZlclhZKHZpZXdwb3J0LCBsbmdMYXQpIHtcbiAgICAgIGNvbnN0IHNjcmVlbkNvb3JkID0gIXZpZXdwb3J0IHx8ICFsbmdMYXQgPyBudWxsIDogdmlld3BvcnQucHJvamVjdChsbmdMYXQpO1xuICAgICAgcmV0dXJuIHNjcmVlbkNvb3JkICYmIHt4OiBzY3JlZW5Db29yZFswXSwgeTogc2NyZWVuQ29vcmRbMV19O1xuICAgIH1cblxuICAgIF9yZW5kZXJEZWNrT3ZlcmxheShcbiAgICAgIGxheWVyc0ZvckRlY2ssXG4gICAgICBvcHRpb25zOiB7cHJpbWFyeU1hcDogYm9vbGVhbjsgaXNJbnRlcmFjdGl2ZT86IGJvb2xlYW47IGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlfSA9IHtcbiAgICAgICAgcHJpbWFyeU1hcDogZmFsc2VcbiAgICAgIH1cbiAgICApIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFwU3R5bGUsXG4gICAgICAgIHZpc1N0YXRlLFxuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICBkZWNrR2xQcm9wcyxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIG1hcENvbnRyb2xzLFxuICAgICAgICBkZWNrUmVuZGVyQ2FsbGJhY2tzLFxuICAgICAgICB0aGVtZSxcbiAgICAgICAgZ2VuZXJhdGVEZWNrR0xMYXllcnMsXG4gICAgICAgIG9uTW91c2VNb3ZlXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3Qge2hvdmVySW5mbywgZWRpdG9yfSA9IHZpc1N0YXRlO1xuICAgICAgY29uc3Qge3ByaW1hcnlNYXAsIGlzSW50ZXJhY3RpdmUsIGNoaWxkcmVufSA9IG9wdGlvbnM7XG5cbiAgICAgIC8vIGRpc2FibGUgZG91YmxlIGNsaWNrIHpvb20gd2hlbiBlZGl0b3IgaXMgaW4gYW55IGRyYXcgbW9kZVxuICAgICAgY29uc3Qge21hcERyYXd9ID0gbWFwQ29udHJvbHM7XG4gICAgICBjb25zdCB7YWN0aXZlOiBlZGl0b3JNZW51QWN0aXZlID0gZmFsc2V9ID0gbWFwRHJhdyB8fCB7fTtcbiAgICAgIGNvbnN0IGlzRWRpdG9yRHJhd2luZ01vZGUgPSBFZGl0b3JMYXllclV0aWxzLmlzRHJhd2luZ0FjdGl2ZShlZGl0b3JNZW51QWN0aXZlLCBlZGl0b3IubW9kZSk7XG5cbiAgICAgIGNvbnN0IGludGVybmFsVmlld1N0YXRlID0gdGhpcy5jb250ZXh0Py5nZXRJbnRlcm5hbFZpZXdTdGF0ZShpbmRleCk7XG4gICAgICBjb25zdCBpbnRlcm5hbE1hcFN0YXRlID0gey4uLm1hcFN0YXRlLCAuLi5pbnRlcm5hbFZpZXdTdGF0ZX07XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlKGludGVybmFsTWFwU3RhdGUpO1xuXG4gICAgICBjb25zdCBlZGl0b3JGZWF0dXJlU2VsZWN0ZWRJbmRleCA9IHRoaXMuc2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgY29uc3Qge3NldEZlYXR1cmVzLCBvbkxheWVyQ2xpY2ssIHNldFNlbGVjdGVkRmVhdHVyZX0gPSB2aXNTdGF0ZUFjdGlvbnM7XG5cbiAgICAgIGNvbnN0IGdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kID0gZ2VuZXJhdGVEZWNrR0xMYXllcnMgPz8gY29tcHV0ZURlY2tMYXllcnM7XG5cbiAgICAgIGNvbnN0IGV4dHJhRGVja1BhcmFtczoge1xuICAgICAgICBnZXRUb29sdGlwPzogKGluZm86IGFueSkgPT4gb2JqZWN0IHwgbnVsbDtcbiAgICAgICAgZ2V0Q3Vyc29yPzogKHtpc0RyYWdnaW5nfToge2lzRHJhZ2dpbmc6IGJvb2xlYW59KSA9PiBzdHJpbmc7XG4gICAgICB9ID0ge307XG4gICAgICBpZiAocHJpbWFyeU1hcCkge1xuICAgICAgICAvLyBPbWl0IGhvdmVyIHVwZGF0ZXMgd2hlbiB0aGUgcG9pbnRlciBwb3NpdGlvbiBpcyBpbnZhbGlkLCBpZS4gb3ZlciBVSSBvdmVybGF5cyBvclxuICAgICAgICAvLyBvdXRzaWRlIHRoZSBtYXAgY29udGFpbmVyLiBJbiB0aG9zZSBjYXNlcyB4L3kgbWF5IGJlIDwgMFxuICAgICAgICBleHRyYURlY2tQYXJhbXMuZ2V0VG9vbHRpcCA9IGluZm8gPT4ge1xuICAgICAgICAgIGNvbnN0IHggPSBOdW1iZXIoaW5mbz8ueCk7XG4gICAgICAgICAgY29uc3QgeSA9IE51bWJlcihpbmZvPy55KTtcbiAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHgpIHx8IE51bWJlci5pc05hTih5KSB8fCB4IDwgMCB8fCB5IDwgMCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICByZXR1cm4gRWRpdG9yTGF5ZXJVdGlscy5nZXRUb29sdGlwKGluZm8sIHtcbiAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICB0aGVtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGV4dHJhRGVja1BhcmFtcy5nZXRDdXJzb3IgPSAoe2lzRHJhZ2dpbmd9OiB7aXNEcmFnZ2luZzogYm9vbGVhbn0pID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3JDdXJzb3IgPSBFZGl0b3JMYXllclV0aWxzLmdldEN1cnNvcih7XG4gICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgaG92ZXJJbmZvXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGVkaXRvckN1cnNvcikgcmV0dXJuIGVkaXRvckN1cnNvcjtcblxuICAgICAgICAgIGlmIChpc0RyYWdnaW5nKSByZXR1cm4gJ2dyYWJiaW5nJztcbiAgICAgICAgICBpZiAoaG92ZXJJbmZvPy5sYXllcikgcmV0dXJuICdwb2ludGVyJztcbiAgICAgICAgICByZXR1cm4gJ2dyYWInO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZmZlY3RzID0gdGhpcy5faXNPS1RvUmVuZGVyRWZmZWN0cyhpbmRleClcbiAgICAgICAgPyBjb21wdXRlRGVja0VmZmVjdHMoe3Zpc1N0YXRlLCBtYXBTdGF0ZSwgaXNFeHBvcnQ6IHRoaXMucHJvcHMuaXNFeHBvcnR9KVxuICAgICAgICA6IFtdO1xuXG4gICAgICBjb25zdCBpc0dsb2JlTW9kZSA9IG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkO1xuXG4gICAgICAvLyBJbiBnbG9iZSBtb2RlIHdpdGggYSBub24tZGVmYXVsdCBibGVuZCBtb2RlLCBmb3J3YXJkIHByZS1jb21wdXRlZCBsYXllclxuICAgICAgLy8gcmVuZGVyaW5nIHBhcmFtZXRlcnMgaW50byBtYXBTdGF0ZSBzbyBpbmRpdmlkdWFsIGxheWVycyBjYW4gbWVyZ2UgdGhlbSBpbnRvXG4gICAgICAvLyB0aGVpciBvd24gcGFyYW1ldGVycyBvYmplY3RzLiBUaGUgZ2xvYmFsIERlY2tHTCBwYXJhbWV0ZXJzIGNhbm5vdCBiZSB1c2VkIGluXG4gICAgICAvLyBnbG9iZSBtb2RlIGJlY2F1c2UgdGhleSBhcmUgbWVyZ2VkIGludG8gZ2xvYmUgc3lzdGVtIGxheWVycyAoYXRtb3NwaGVyZSxcbiAgICAgIC8vIHN1cmZhY2UsIGV0Yy4pIGFuZCBhbHRlciB0aGVpciBjYXJlZnVsbHkgdHVuZWQgYmxlbmQvZGVwdGggc3RhdGUuXG4gICAgICAvLyAnbm9ybWFsJyBpcyBvbWl0dGVkIOKAlCBpdCBpcyB0aGUgV2ViR0wgZGVmYXVsdCBhbmQgaW5qZWN0aW5nIGl0IHdvdWxkXG4gICAgICAvLyBvdmVycmlkZSBpbnRlbnRpb25hbCBibGVuZDpmYWxzZSBzZXR0aW5ncyBvbiBsYXllcnMgbGlrZSB0cmlwL3NjZW5lZ3JhcGguXG4gICAgICBjb25zdCBsYXllckJsZW5kaW5nUGFyYW1zID1cbiAgICAgICAgaXNHbG9iZU1vZGUgJiYgdmlzU3RhdGUubGF5ZXJCbGVuZGluZyAmJiB2aXNTdGF0ZS5sYXllckJsZW5kaW5nICE9PSAnbm9ybWFsJ1xuICAgICAgICAgID8gZ2V0TGF5ZXJCbGVuZGluZ1BhcmFtZXRlcnModmlzU3RhdGUubGF5ZXJCbGVuZGluZylcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGRlY2tMYXllcnNNYXBTdGF0ZSA9IGxheWVyQmxlbmRpbmdQYXJhbXNcbiAgICAgICAgPyB7Li4uaW50ZXJuYWxNYXBTdGF0ZSwgbGF5ZXJQYXJhbWV0ZXJzOiBsYXllckJsZW5kaW5nUGFyYW1zfVxuICAgICAgICA6IGludGVybmFsTWFwU3RhdGU7XG5cbiAgICAgIGNvbnN0IGRlY2tHbExheWVycyA9IGdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kKFxuICAgICAgICB7XG4gICAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgICAgbWFwU3RhdGU6IGRlY2tMYXllcnNNYXBTdGF0ZSxcbiAgICAgICAgICBtYXBTdHlsZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbWFwSW5kZXg6IGluZGV4LFxuICAgICAgICAgIHByaW1hcnlNYXAsXG4gICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICAgIGxheWVyc0ZvckRlY2ssXG4gICAgICAgICAgZWRpdG9ySW5mbzogcHJpbWFyeU1hcFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICAgICAgb25TZXRGZWF0dXJlczogc2V0RmVhdHVyZXMsXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgICAgICAgICAgIG9uQXBwbHlQb2x5Z29uRmlsdGVyQWxsOiB2aXNTdGF0ZUFjdGlvbnMuc2V0UG9seWdvbkZpbHRlckFsbExheWVycyxcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PE1hcENvbnRhaW5lclByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uOiB0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IodGhpcy5wcm9wcyksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlSW5kZXhlczogdGhpcy5zZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ3Vua25vd24nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdudW1iZXInLlxuICAgICAgICAgICAgICAgICAgZWRpdG9yRmVhdHVyZVNlbGVjdGVkSW5kZXhcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHZpZXdwb3J0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkxheWVySG92ZXI6IHRoaXMuX29uTGF5ZXJIb3ZlcixcbiAgICAgICAgICBvblNldExheWVyRG9tYWluOiB0aGlzLl9vbkxheWVyU2V0RG9tYWluLFxuICAgICAgICAgIG9uRmlsdGVyZWRJdGVtc0NoYW5nZTogdGhpcy5fb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UsXG4gICAgICAgICAgb25XTVNGZWF0dXJlSW5mbzogdGhpcy5fb25XTVNGZWF0dXJlSW5mbyxcbiAgICAgICAgICBvblJlZHJhd05lZWRlZDogdGhpcy5fb25SZWRyYXdOZWVkZWQsXG4gICAgICAgICAgb25GaXRCb3VuZHM6IHRoaXMuX29uRml0Qm91bmRzXG4gICAgICAgIH0sXG4gICAgICAgIGRlY2tHbFByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBGb2xsb3cgdGhlIHNlbGVjdGVkIGJhc2VtYXAgc3R5bGUncyBsaWJyYXJ5IHNvIHRoZSBnbG9iZSB1c2VzIHRoZSBzYW1lXG4gICAgICAvLyBwcm92aWRlciBhcyB0aGUgZmxhdCAyRCBtYXAgKENBUlRPIHRpbGVzIGZvciBNYXBMaWJyZSBzdHlsZXMsIE1hcGJveFxuICAgICAgLy8gdGlsZXMgZm9yIE1hcGJveCBzdHlsZXMpLlxuICAgICAgY29uc3QgZ2xvYmVCYXNlbWFwUHJvdmlkZXIgPSByZXNvbHZlR2xvYmVCYXNlbWFwUHJvdmlkZXIoXG4gICAgICAgIGdldEJhc2VNYXBMaWJyYXJ5KG1hcFN0eWxlPy5tYXBTdHlsZXM/LlttYXBTdHlsZT8uc3R5bGVUeXBlXSksXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuIHx8ICcnXG4gICAgICApO1xuXG4gICAgICAvLyBJbiBnbG9iZSBtb2RlLCBwcmVwZW5kIGdsb2JlIGJhc2UgbGF5ZXJzIGFuZCBhcHBlbmQgdG9wIGxheWVyc1xuICAgICAgY29uc3QgZ2xvYmVCYXNlTGF5ZXJzID1cbiAgICAgICAgaXNHbG9iZU1vZGUgJiYgbWFwU3RhdGUuZ2xvYmVcbiAgICAgICAgICA/IGdldEdsb2JlQmFzZUxheWVycyh7XG4gICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBtYXBib3hBcGlBY2Nlc3NUb2tlbiB8fCAnJyxcbiAgICAgICAgICAgICAgZ2xvYmU6IG1hcFN0YXRlLmdsb2JlLFxuICAgICAgICAgICAgICBtYXBTdHlsZVR5cGU6IG1hcFN0eWxlPy5zdHlsZVR5cGUsXG4gICAgICAgICAgICAgIGJhc2VtYXBQcm92aWRlcjogZ2xvYmVCYXNlbWFwUHJvdmlkZXIsXG4gICAgICAgICAgICAgIC8vIFVzZSB0aGUgbGl2ZSAoaW50ZXJuYWwpIGxhdGl0dWRlIHNvIHRoZSB0aWxlIExPRCBjb21wZW5zYXRpb25cbiAgICAgICAgICAgICAgLy8gc3RheXMgaW4gc3luYyB3aXRoIHRoZSBkZWNrIHZpZXdwb3J0IGR1cmluZyBhIGRyYWc7IG1hcFN0YXRlXG4gICAgICAgICAgICAgIC8vIGxhdGl0dWRlIGxhZ3MgYmVoaW5kIHdoaWxlIHJvdGF0aW5nLlxuICAgICAgICAgICAgICBsYXRpdHVkZTogaW50ZXJuYWxNYXBTdGF0ZS5sYXRpdHVkZSxcbiAgICAgICAgICAgICAgem9vbTogaW50ZXJuYWxNYXBTdGF0ZS56b29tXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogW107XG4gICAgICBjb25zdCBnbG9iZVRvcExheWVycyA9XG4gICAgICAgIGlzR2xvYmVNb2RlICYmIG1hcFN0YXRlLmdsb2JlXG4gICAgICAgICAgPyBnZXRHbG9iZVRvcExheWVycyh7Z2xvYmU6IG1hcFN0YXRlLmdsb2JlLCB6b29tOiBpbnRlcm5hbE1hcFN0YXRlLnpvb219KVxuICAgICAgICAgIDogW107XG4gICAgICBjb25zdCBmaW5hbERlY2tHbExheWVycyA9IGlzR2xvYmVNb2RlXG4gICAgICAgID8gWy4uLmdsb2JlQmFzZUxheWVycywgLi4uZGVja0dsTGF5ZXJzLCAuLi5nbG9iZVRvcExheWVyc11cbiAgICAgICAgOiBkZWNrR2xMYXllcnM7XG5cbiAgICAgIGNvbnN0IHZpZXdzID0gZGVja0dsUHJvcHM/LnZpZXdzXG4gICAgICAgID8gZGVja0dsUHJvcHM/LnZpZXdzKClcbiAgICAgICAgOiBpc0dsb2JlTW9kZVxuICAgICAgICA/IG5ldyBLZXBsZXJHbG9iZVZpZXcoe1xuICAgICAgICAgICAgcmVzb2x1dGlvbjogNSxcbiAgICAgICAgICAgIC8vIFRoZSB2aXNpYmxlIGJhY2tncm91bmQgYXJvdW5kIHRoZSBnbG9iZSBpcyBwYWludGVkIGJ5IHRoZSBtYXBcbiAgICAgICAgICAgIC8vIGNvbnRhaW5lcidzIENTUyBiYWNrZ3JvdW5kIChzZWUgc3R5bGVTZWxlY3RvciksIE5PVCBieSBhIHBlci12aWV3XG4gICAgICAgICAgICAvLyBjb2xvciBjbGVhci4gZGVjay5nbCBhcHBsaWVzIGEgVmlldydzIGBjbGVhckNvbG9yYCBpbiAqZXZlcnkqIHBhc3MsXG4gICAgICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIHBpY2tpbmcgcGFzcywgYW5kIGl0IGZvcmNlcyB0aGUgY2xlYXJlZCBhbHBoYSB0byAyNTVcbiAgICAgICAgICAgIC8vIChgY2xlYXJDb2xvclszXSB8fCAyNTVgKS4gSW4gdGhlIHBpY2tpbmcgYnVmZmVyIHRoZSBhbHBoYSBieXRlIGVuY29kZXNcbiAgICAgICAgICAgIC8vIHRoZSBsYXllciBpbmRleCwgc28gYSAyNTUgY2xlYXIgbWFrZXMgZGVjay5nbCBkZWNvZGUgZXZlcnkgcGl4ZWwgYXMgYVxuICAgICAgICAgICAgLy8gbm9uLWV4aXN0ZW50IGxheWVyIChcIlBpY2tlZCBub24tZXhpc3RlbnQgbGF5ZXIuIElzIHBpY2tpbmcgYnVmZmVyXG4gICAgICAgICAgICAvLyBjb3JydXB0P1wiKSBvbiBob3Zlci4gYGNsZWFyQ29sb3I6IGZhbHNlYCBza2lwcyB0aGUgcGVyLXZpZXcgY29sb3JcbiAgICAgICAgICAgIC8vIGNsZWFyIHNvIHRoZSBwaWNraW5nIGJ1ZmZlciBrZWVwcyBpdHMgMCBhbHBoYTsgdGhlIGNhbnZhcyBzdGF5c1xuICAgICAgICAgICAgLy8gdHJhbnNwYXJlbnQgYW5kIHRoZSBDU1MgYmFja2dyb3VuZCBzaG93cyB0aHJvdWdoLlxuICAgICAgICAgICAgY2xlYXI6IHRydWUsXG4gICAgICAgICAgICBjbGVhckNvbG9yOiBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbmV3IE1hcFZpZXcoe2ZhclpNdWx0aXBsaWVyOiAxLjJ9KTtcblxuICAgICAgbGV0IGFsbERlY2tHbFByb3BzID0ge1xuICAgICAgICAuLi5kZWNrR2xQcm9wcyxcbiAgICAgICAgcGlja2luZ1JhZGl1czogREVGQVVMVF9QSUNLSU5HX1JBRElVUyxcbiAgICAgICAgdmlld3MsXG4gICAgICAgIGxheWVyczogZmluYWxEZWNrR2xMYXllcnMsXG4gICAgICAgIGVmZmVjdHMsXG4gICAgICAgIHBhcmFtZXRlcnM6IGlzR2xvYmVNb2RlID8ge2N1bGw6IHRydWV9IDogZ2V0TGF5ZXJCbGVuZGluZ1BhcmFtZXRlcnModmlzU3RhdGUubGF5ZXJCbGVuZGluZylcbiAgICAgIH07XG5cbiAgICAgIGlmICh0eXBlb2YgZGVja1JlbmRlckNhbGxiYWNrcz8ub25EZWNrUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFsbERlY2tHbFByb3BzID0gZGVja1JlbmRlckNhbGxiYWNrcy5vbkRlY2tSZW5kZXIoYWxsRGVja0dsUHJvcHMpO1xuICAgICAgICBpZiAoIWFsbERlY2tHbFByb3BzKSB7XG4gICAgICAgICAgLy8gaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbCwgZG8gbm90IHJlbmRlciBkZWNrLmdsXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIHsuLi4oaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgb25Nb3VzZU1vdmU6IHByaW1hcnlNYXBcbiAgICAgICAgICAgICAgICAgID8gZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VNb3ZlPy4oZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uTW91c2VNb3ZlRGVib3VuY2VkKGV2ZW50LCB2aWV3cG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge3N0eWxlOiB7cG9pbnRlckV2ZW50czogJ25vbmUnfX0pfVxuICAgICAgICA+XG4gICAgICAgICAgPERlY2tHTFxuICAgICAgICAgICAgaWQ9XCJkZWZhdWx0LWRlY2tnbC1vdmVybGF5XCJcbiAgICAgICAgICAgIG9uTG9hZD17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlY2tSZW5kZXJDYWxsYmFja3M/Lm9uRGVja0xvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkZWNrUmVuZGVyQ2FsbGJhY2tzLm9uRGVja0xvYWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHsuLi5hbGxEZWNrR2xQcm9wc31cbiAgICAgICAgICAgIGNvbnRyb2xsZXI9e1xuICAgICAgICAgICAgICBpc0ludGVyYWN0aXZlXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGRvdWJsZUNsaWNrWm9vbTogIWlzRWRpdG9yRHJhd2luZ01vZGUsXG4gICAgICAgICAgICAgICAgICAgIGRyYWdSb3RhdGU6IHRoaXMucHJvcHMubWFwU3RhdGUuZHJhZ1JvdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbWF4UGl0Y2g6IHRoaXMucHJvcHMubWFwU3RhdGUubWF4UGl0Y2ggPz8gZ2V0QXBwbGljYXRpb25Db25maWcoKS5tYXhQaXRjaCxcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gZ2xvYmUgbW9kZSBhbGxvdyB6b29taW5nIG91dCBmdXJ0aGVyIHRoYW4gZGVjay5nbCdzIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgLy8gb2YgMCBzbyB0aGUgd2hvbGUgZ2xvYmUgY2FuIGJlIHB1bGxlZCBiYWNrIG9uIHNjcmVlbi4gU2V0IG9uIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sbGVyIHNvIGl0IHN0YXlzIGF1dGhvcml0YXRpdmUgcmVnYXJkbGVzcyBvZiB0aGUgdmlld1N0YXRlXG4gICAgICAgICAgICAgICAgICAgIC8vIHJvdW5kLXRyaXAgdGhyb3VnaCBSZWR1eC9sb2NhbCBjb250ZXh0LiBDYXAgdGhlIG1heCB6b29tIHRvbyBzb1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYmFzZW1hcCB0aWxlcyBkb24ndCBicmVhayBkb3duIGF0IGhpZ2ggZ2xvYmUgem9vbS5cbiAgICAgICAgICAgICAgICAgICAgLi4uKGlzR2xvYmVNb2RlID8ge21pblpvb206IEdMT0JFX01JTl9aT09NLCBtYXhab29tOiBHTE9CRV9NQVhfWk9PTX0gOiB7fSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2aWV3U3RhdGU9e1xuICAgICAgICAgICAgICBpc0dsb2JlTW9kZVxuICAgICAgICAgICAgICAgID8gey4uLmludGVybmFsVmlld1N0YXRlLCBtaW5ab29tOiBHTE9CRV9NSU5fWk9PTSwgbWF4Wm9vbTogR0xPQkVfTUFYX1pPT019XG4gICAgICAgICAgICAgICAgOiBpbnRlcm5hbFZpZXdTdGF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25CZWZvcmVSZW5kZXI9e3RoaXMuX29uQmVmb3JlUmVuZGVyfVxuICAgICAgICAgICAgb25WaWV3U3RhdGVDaGFuZ2U9e2lzSW50ZXJhY3RpdmUgPyB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgey4uLmV4dHJhRGVja1BhcmFtc31cbiAgICAgICAgICAgIG9uSG92ZXI9e1xuICAgICAgICAgICAgICBpc0ludGVyYWN0aXZlXG4gICAgICAgICAgICAgICAgPyBkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gRWRpdG9yTGF5ZXJVdGlscy5vbkhvdmVyKGRhdGEsIHtcbiAgICAgICAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICBob3ZlckluZm9cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbkxheWVySG92ZXJEZWJvdW5jZWQoZGF0YSwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25DbGljaz17KGRhdGEsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgbm9ybWFsaXplRXZlbnQoZXZlbnQuc3JjRXZlbnQsIHZpZXdwb3J0KTtcblxuICAgICAgICAgICAgICAvLyBIYW5kbGUgYml0bWFwIGxheWVyIGFsaWdubWVudCBtb2RlOiBpZiBhIGJpdG1hcCBsYXllciBpcyB3YWl0aW5nXG4gICAgICAgICAgICAgIC8vIGZvciBhIG1hcCBjbGljaywgcm91dGUgdGhlIGNsaWNrIGNvb3JkaW5hdGUgdG8gaXRcbiAgICAgICAgICAgICAgaWYgKGRhdGEuY29vcmRpbmF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFsaWduaW5nTGF5ZXIgPSB2aXNTdGF0ZS5sYXllcnMuZmluZChcbiAgICAgICAgICAgICAgICAgIChsOiBhbnkpID0+IGwudHlwZSA9PT0gJ2JpdG1hcCcgJiYgbC5hbGlnbldhaXRpbmdGb3JNYXAgJiYgbC5jb25maWcuaXNWaXNpYmxlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxpZ25pbmdMYXllcikge1xuICAgICAgICAgICAgICAgICAgKGFsaWduaW5nTGF5ZXIgYXMgYW55KS5vbkFsaWduTWFwQ2xpY2soZGF0YS5jb29yZGluYXRlIGFzIFtudW1iZXIsIG51bWJlcl0pO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fb25SZWRyYXdOZWVkZWQoMCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmVzID0gRWRpdG9yTGF5ZXJVdGlscy5vbkNsaWNrKGRhdGEsIGV2ZW50LCB7XG4gICAgICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgb25MYXllckNsaWNrLFxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICBtYXBJbmRleDogaW5kZXhcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChyZXMpIHJldHVybjtcblxuICAgICAgICAgICAgICB2aXNTdGF0ZUFjdGlvbnMub25MYXllckNsaWNrKGRhdGEpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uRXJyb3I9e3RoaXMuX29uRGVja0Vycm9yfVxuICAgICAgICAgICAgcmVmPXtjb21wID0+IHtcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICBpZiAoY29tcCAmJiBjb21wLmRlY2sgJiYgIXRoaXMuX2RlY2spIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVjayA9IGNvbXAuZGVjaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uRGV2aWNlSW5pdGlhbGl6ZWQ9e2RldmljZSA9PiB0aGlzLl9vbkRlY2tJbml0aWFsaXplZChkZXZpY2UpfVxuICAgICAgICAgICAgb25BZnRlclJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlY2tSZW5kZXJDYWxsYmFja3M/Lm9uRGVja0FmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGVja1JlbmRlckNhbGxiYWNrcy5vbkRlY2tBZnRlclJlbmRlcihhbGxEZWNrR2xQcm9wcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBhbnlBY3RpdmVMYXllckxvYWRpbmcgPSBhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyhhbGxEZWNrR2xQcm9wcy5sYXllcnMpO1xuICAgICAgICAgICAgICBpZiAoYW55QWN0aXZlTGF5ZXJMb2FkaW5nICE9PSB0aGlzLmFueUFjdGl2ZUxheWVyTG9hZGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX29uTGF5ZXJMb2FkaW5nU3RhdGVDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGFueUFjdGl2ZUxheWVyTG9hZGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9EZWNrR0w+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlTWFwYm94TGF5ZXJzKCkge1xuICAgICAgY29uc3QgbWFwYm94TGF5ZXJzID0gdGhpcy5tYXBib3hMYXllcnNTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGlmICghT2JqZWN0LmtleXMobWFwYm94TGF5ZXJzKS5sZW5ndGggJiYgIU9iamVjdC5rZXlzKHRoaXMucHJldmlvdXNMYXllcnMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZU1hcGJveExheWVycyh0aGlzLl9tYXAsIG1hcGJveExheWVycywgdGhpcy5wcmV2aW91c0xheWVycyk7XG5cbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSBtYXBib3hMYXllcnM7XG4gICAgfVxuXG4gICAgX3JlbmRlck1hcGJveE92ZXJsYXlzKCkge1xuICAgICAgaWYgKHRoaXMuX21hcCAmJiB0aGlzLl9tYXAuaXNTdHlsZUxvYWRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU1hcGJveExheWVycygpO1xuICAgICAgfVxuICAgIH1cbiAgICBfb25WaWV3cG9ydENoYW5nZVByb3BhZ2F0ZURlYm91bmNlZCA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgIGNvbnN0IHZpZXdTdGF0ZSA9IHRoaXMuY29udGV4dD8uZ2V0SW50ZXJuYWxWaWV3U3RhdGUodGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICBvblZpZXdQb3J0Q2hhbmdlKFxuICAgICAgICB2aWV3U3RhdGUsXG4gICAgICAgIHRoaXMucHJvcHMubWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcCxcbiAgICAgICAgdGhpcy5wcm9wcy5vblZpZXdTdGF0ZUNoYW5nZSxcbiAgICAgICAgdGhpcy5wcm9wcy5wcmltYXJ5LFxuICAgICAgICB0aGlzLnByb3BzLmluZGV4XG4gICAgICApO1xuICAgIH0sIERFQk9VTkNFX1ZJRVdQT1JUX1BST1BBR0FURSk7XG5cbiAgICBfb25WaWV3cG9ydENoYW5nZSA9IHZpZXdwb3J0ID0+IHtcbiAgICAgIGNvbnN0IHt2aWV3U3RhdGUsIGludGVyYWN0aW9uU3RhdGV9ID0gdmlld3BvcnQ7XG4gICAgICBpZiAodGhpcy5wcm9wcy5pc0V4cG9ydCkge1xuICAgICAgICAvLyBJbWFnZSBleHBvcnQgbWFwIHNob3VsZG4ndCBiZSBpbnRlcmFjdGl2ZSAob3RoZXJ3aXNlIHRoaXMgY2FsbGJhY2sgY2FuXG4gICAgICAgIC8vIGxlYWQgdG8gaW5hZHZlcnRlbnQgY2hhbmdlcyB0byB0aGUgc3RhdGUgb2YgdGhlIG1haW4gbWFwKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7c2V0SW50ZXJuYWxWaWV3U3RhdGV9ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgICAvLyBGbGF0IG1hcCAoMkQvM0QpOiBrZWVwIHRoZSBvcmlnaW5hbCwgYWx3YXlzLXN5bmNocm9ub3VzIGJlaGF2aW9yLiBUaGVcbiAgICAgIC8vIGludGVyYWN0aW9uLWF3YXJlIHRpbWluZyBiZWxvdyBleGlzdHMgcHVyZWx5IHRvIGZpeCBnbG9iZS1zcGVjaWZpY1xuICAgICAgLy8gY29udHJvbGxlZC12aWV3U3RhdGUsIHNvIGl0IG11c3Qgbm90IGNoYW5nZSB0aGUgbWFpbiAyRCBsb2dpYy5cbiAgICAgIGlmICghdGhpcy5wcm9wcy5tYXBTdGF0ZT8uZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICAgICAgc2V0SW50ZXJuYWxWaWV3U3RhdGUodmlld1N0YXRlLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgICAgdGhpcy5fd2FzSW50ZXJhY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fb25WaWV3cG9ydENoYW5nZVByb3BhZ2F0ZURlYm91bmNlZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzVXNlckludGVyYWN0aW9uID1cbiAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZSAmJlxuICAgICAgICAoaW50ZXJhY3Rpb25TdGF0ZS5pc1pvb21pbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmlzUGFubmluZyB8fFxuICAgICAgICAgIGludGVyYWN0aW9uU3RhdGUuaXNSb3RhdGluZyB8fFxuICAgICAgICAgIGludGVyYWN0aW9uU3RhdGUuaXNEcmFnZ2luZyB8fFxuICAgICAgICAgIGludGVyYWN0aW9uU3RhdGUuaW5UcmFuc2l0aW9uKTtcbiAgICAgIC8vIFRoZSBlbWl0IHRoYXQgZW5kcyBhIGdlc3R1cmUgKHBhbmVuZC9yb3RhdGVFbmQsIG9yIGEgZmxpbmcgdHJhbnNpdGlvblxuICAgICAgLy8gZW5kaW5nKSBhcnJpdmVzIHdpdGggYWxsIGludGVyYWN0aW9uIGZsYWdzIGZhbHNlLiBJZiB3ZSBkZWZlciBpdCwgdGhlXG4gICAgICAvLyBjb250cm9sbGVkIGB2aWV3U3RhdGVgIGZlZCBiYWNrIHRvIGRlY2sgbGFncyBhIGZyYW1lIGJlaGluZCB0aGVcbiAgICAgIC8vIGNvbnRyb2xsZXIncyBjb21taXR0ZWQgc3RhdGUgYW5kIGRlY2sgcmUtc2VlZHMgZnJvbSB0aGUgc3RhbGUgdmFsdWUsXG4gICAgICAvLyBtYWtpbmcgdGhlIGdsb2JlIHZpc2libHkgXCJqdW1wIGJhY2tcIiB0byB3aGVyZSB0aGUgZHJhZyB3YXMgcmVsZWFzZWQgLVxuICAgICAgLy8gbW9zdCBub3RpY2VhYmxlIG9uIGEgdGhyb3cvZmxpbmcgcmVsZWFzZS4gVHJlYXQgdGhlIGZpcnN0IGFsbC1mYWxzZSBlbWl0XG4gICAgICAvLyByaWdodCBhZnRlciBhbiBhY3RpdmUgZ2VzdHVyZSBhcyBwYXJ0IG9mIHRoYXQgZ2VzdHVyZSBhbmQgYXBwbHkgaXRcbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgdG9vLlxuICAgICAgY29uc3QgaXNJbnRlcmFjdGlvblNldHRsZSA9ICFpc1VzZXJJbnRlcmFjdGlvbiAmJiB0aGlzLl93YXNJbnRlcmFjdGluZztcbiAgICAgIHRoaXMuX3dhc0ludGVyYWN0aW5nID0gQm9vbGVhbihpc1VzZXJJbnRlcmFjdGlvbik7XG4gICAgICBpZiAoaXNVc2VySW50ZXJhY3Rpb24gfHwgaXNJbnRlcmFjdGlvblNldHRsZSkge1xuICAgICAgICAvLyBGb3IgaW50ZXJhY3RpdmUgZ2VzdHVyZXMgKHBhbi96b29tL3JvdGF0ZSkgYW5kIHRoZWlyIGVuZC1vZi1nZXN0dXJlXG4gICAgICAgIC8vIHNldHRsZSwgdXBkYXRlIHN5bmNocm9ub3VzbHkgc28gdGhlIGNvbnRyb2xsZWQgYHZpZXdTdGF0ZWAgc3RheXMgaW5cbiAgICAgICAgLy8gbG9ja3N0ZXAgd2l0aCB0aGUgY29udHJvbGxlciBhbmQgdGhlcmUncyBubyBzdGFsZSByZS1zZWVkLlxuICAgICAgICBzZXRJbnRlcm5hbFZpZXdTdGF0ZSh2aWV3U3RhdGUsIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVjay5nbCBjYW4gZmlyZSBvblZpZXdTdGF0ZUNoYW5nZSBzeW5jaHJvbm91c2x5IGR1cmluZyBpdHMgb3duIHJlbmRlclxuICAgICAgICAvLyAoZS5nLiB3aGVuIHN3aXRjaGluZyB2aWV3IHR5cGVzIGxpa2UgTWFwVmlldyAtPiBHbG9iZVZpZXcpLiBVcGRhdGluZyBSZWFjdFxuICAgICAgICAvLyBzdGF0ZSBkdXJpbmcgcmVuZGVyIHRocm93cyBhIHdhcm5pbmcsIHNvIGRlZmVyIG5vbi1pbnRlcmFjdGl2ZSB1cGRhdGVzLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZXRJbnRlcm5hbFZpZXdTdGF0ZSh2aWV3U3RhdGUsIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQoKTtcbiAgICB9O1xuXG4gICAgX29uTGF5ZXJIb3ZlckRlYm91bmNlZCA9IGRlYm91bmNlKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckhvdmVyKGRhdGEsIGluZGV4KTtcbiAgICB9LCBERUJPVU5DRV9NT1VTRV9NT1ZFX1BST1BBR0FURSk7XG5cbiAgICBfb25Nb3VzZU1vdmVEZWJvdW5jZWQgPSBkZWJvdW5jZSgoZXZlbnQsIHZpZXdwb3J0KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbk1vdXNlTW92ZShub3JtYWxpemVFdmVudChldmVudCwgdmlld3BvcnQpKTtcbiAgICB9LCBERUJPVU5DRV9NT1VTRV9NT1ZFX1BST1BBR0FURSk7XG5cbiAgICBfb25MYXllckxvYWRpbmdTdGF0ZUNoYW5nZSA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgIC8vIHRyaWdnZXIgbG9hZGluZyBpbmRpY2F0b3IgdXBkYXRlIHdpdGhvdXQgYW55IGNoYW5nZSB0byB1cGRhdGUgVUlcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldExvYWRpbmdJbmRpY2F0b3Ioe2NoYW5nZTogMH0pO1xuICAgIH0sIERFQk9VTkNFX0xPQURJTkdfU1RBVEVfUFJPUEFHQVRFKTtcblxuICAgIF9oYW5kbGVUb2dnbGVMYXllclZpc2liaWxpdHkgPSAobGF5ZXI6IExheWVyKSA9PiB7XG4gICAgICBjb25zdCB7dmlzU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICB2aXNTdGF0ZUFjdGlvbnMubGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6ICFsYXllci5jb25maWcuaXNWaXNpYmxlfSk7XG4gICAgfTtcblxuICAgIF90b2dnbGVNYXBDb250cm9sID0gcGFuZWxJZCA9PiB7XG4gICAgICBjb25zdCB7aW5kZXgsIHVpU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIHVpU3RhdGVBY3Rpb25zLnRvZ2dsZU1hcENvbnRyb2wocGFuZWxJZCwgTnVtYmVyKGluZGV4KSk7XG4gICAgfTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbiAgICBfcmVuZGVyTWFwKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB2aXNTdGF0ZSxcbiAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgIG1hcFN0eWxlLFxuICAgICAgICBtYXBTdGF0ZUFjdGlvbnMsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAvLyBtYXBib3hBcGlVcmwsXG4gICAgICAgIG1hcENvbnRyb2xzLFxuICAgICAgICBpc0V4cG9ydCxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICB1aVRoZW1lLFxuICAgICAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgcHJpbWFyeSxcbiAgICAgICAgYm90dG9tTWFwQ29udGFpbmVyUHJvcHMsXG4gICAgICAgIHRvcE1hcENvbnRhaW5lclByb3BzLFxuICAgICAgICB0aGVtZSxcbiAgICAgICAgZGF0YXNldEF0dHJpYnV0aW9ucyA9IFtdLFxuICAgICAgICBhdHRyaWJ1dGlvbkxvZ29zID0gW10sXG4gICAgICAgIGNvbnRhaW5lcklkID0gMCxcbiAgICAgICAgaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSxcbiAgICAgICAgYWN0aXZlU2lkZVBhbmVsLFxuICAgICAgICBzaWRlUGFuZWxXaWR0aFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IHtsYXllcnMsIGRhdGFzZXRzLCBlZGl0b3IsIGludGVyYWN0aW9uQ29uZmlnLCBsYXllck9yZGVyfSA9IHZpc1N0YXRlO1xuXG4gICAgICBjb25zdCBsYXllcnNUb1JlbmRlciA9IHRoaXMubGF5ZXJzVG9SZW5kZXJTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxheWVyc0ZvckRlY2sgPSB0aGlzLmxheWVyc0ZvckRlY2tTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgLy8gQ3VycmVudCBzdHlsZSBjYW4gYmUgYSBjdXN0b20gc3R5bGUsIGZyb20gd2hpY2ggd2UgcHVsbCB0aGUgbWFwYm94IEFQSSBhY2NjZXNzIHRva2VuXG4gICAgICBjb25zdCBjdXJyZW50U3R5bGUgPSBtYXBTdHlsZS5tYXBTdHlsZXM/LlttYXBTdHlsZS5zdHlsZVR5cGVdO1xuICAgICAgY29uc3QgYmFzZU1hcExpYnJhcnlOYW1lID0gZ2V0QmFzZU1hcExpYnJhcnkoY3VycmVudFN0eWxlKTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5Q29uZmlnID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5iYXNlTWFwTGlicmFyeUNvbmZpZ1tiYXNlTWFwTGlicmFyeU5hbWVdO1xuXG4gICAgICAvLyBTZWxlY3QgdGhlIGNvcnJlY3QgTWFwIGFkYXB0ZXIgYmFzZWQgb24gdGhlIGFjdGl2ZSBiYXNlIG1hcCBsaWJyYXJ5LlxuICAgICAgLy8gVXNpbmcgdGhlIG5hdGl2ZSBhZGFwdGVyIGZvciBlYWNoIGxpYnJhcnkgYXZvaWRzIFRyYW5zZm9ybSBBUElcbiAgICAgIC8vIGluY29tcGF0aWJpbGl0aWVzIChlLmcuIG1hcGJveC1sZWdhY3kncyBjbG9uZVRyYW5zZm9ybSB3aXRoIE1hcExpYnJlIHY1KS5cbiAgICAgIGNvbnN0IFJlc29sdmVkTWFwQ29tcG9uZW50ID1cbiAgICAgICAgdGhpcy5wcm9wcy5NYXBDb21wb25lbnQgPz9cbiAgICAgICAgKGJhc2VNYXBMaWJyYXJ5TmFtZSA9PT0gTUFQX0xJQl9PUFRJT05TLk1BUEJPWCA/IE1hcGJveExlZ2FjeU1hcCA6IE1hcGxpYnJlTWFwKTtcblxuICAgICAgY29uc3QgdXNlTWFwYm94QWRhcHRlciA9IFJlc29sdmVkTWFwQ29tcG9uZW50ID09PSBNYXBib3hMZWdhY3lNYXA7XG5cbiAgICAgIGNvbnN0IGludGVybmFsVmlld1N0YXRlID0gdGhpcy5jb250ZXh0Py5nZXRJbnRlcm5hbFZpZXdTdGF0ZShpbmRleCk7XG4gICAgICBjb25zdCBjb25maWdNYXhQaXRjaCA9IG1hcFN0YXRlLm1heFBpdGNoID8/IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkubWF4UGl0Y2g7XG4gICAgICBjb25zdCBlZmZlY3RpdmVNYXhQaXRjaCA9IHVzZU1hcGJveEFkYXB0ZXJcbiAgICAgICAgPyBNYXRoLm1pbihjb25maWdNYXhQaXRjaCwgTUFQQk9YX01BWF9QSVRDSClcbiAgICAgICAgOiBjb25maWdNYXhQaXRjaDtcbiAgICAgIGNvbnN0IG1hcFByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgICAuLi5pbnRlcm5hbFZpZXdTdGF0ZSxcbiAgICAgICAgbWF4UGl0Y2g6IGVmZmVjdGl2ZU1heFBpdGNoLFxuICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRoaXMucHJvcHMuaXNFeHBvcnQgPz8gZmFsc2UsXG4gICAgICAgIG1hcGJveEFjY2Vzc1Rva2VuOiBjdXJyZW50U3R5bGU/LmFjY2Vzc1Rva2VuIHx8IG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAvLyBiYXNlQXBpVXJsOiBtYXBib3hBcGlVcmwsXG4gICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q6XG4gICAgICAgICAgdGhpcy5wcm9wcy50cmFuc2Zvcm1SZXF1ZXN0IHx8XG4gICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdChjdXJyZW50U3R5bGU/LmFjY2Vzc1Rva2VuIHx8IG1hcGJveEFwaUFjY2Vzc1Rva2VuKVxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMuUlRMVGV4dFBsdWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1hcFByb3BzLlJUTFRleHRQbHVnaW4gPSB0aGlzLnByb3BzLlJUTFRleHRQbHVnaW47XG4gICAgICB9XG5cbiAgICAgIGlmICh1c2VNYXBib3hBZGFwdGVyKSB7XG4gICAgICAgIGNvbnN0IG1hcGJveENvbmZpZyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbTUFQX0xJQl9PUFRJT05TLk1BUEJPWF07XG4gICAgICAgIG1hcFByb3BzLm1hcExpYiA9IG1hcGJveENvbmZpZy5nZXRNYXBMaWIoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFzR2VvY29kZXJMYXllciA9IEJvb2xlYW4obGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBHRU9DT0RFUl9MQVlFUl9JRCkpO1xuICAgICAgY29uc3QgaXNTcGxpdCA9IEJvb2xlYW4obWFwU3RhdGUuaXNTcGxpdCk7XG5cbiAgICAgIGNvbnN0IGRlY2sgPSB0aGlzLl9yZW5kZXJEZWNrT3ZlcmxheShsYXllcnNGb3JEZWNrLCB7XG4gICAgICAgIHByaW1hcnlNYXA6IHRydWUsXG4gICAgICAgIGlzSW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIGNoaWxkcmVuOiAoXG4gICAgICAgICAgPFJlc29sdmVkTWFwQ29tcG9uZW50XG4gICAgICAgICAgICBrZXk9e2Bib3R0b20tJHtiYXNlTWFwTGlicmFyeU5hbWV9YH1cbiAgICAgICAgICAgIHsuLi5tYXBQcm9wc31cbiAgICAgICAgICAgIG1hcFN0eWxlPXtcbiAgICAgICAgICAgICAgbWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWRcbiAgICAgICAgICAgICAgICA/IEVNUFRZX01BUEJPWF9TVFlMRVxuICAgICAgICAgICAgICAgIDogbWFwU3R5bGUuYm90dG9tTWFwU3R5bGUgPz8gRU1QVFlfTUFQQk9YX1NUWUxFXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7Li4uYm90dG9tTWFwQ29udGFpbmVyUHJvcHN9XG4gICAgICAgICAgICByZWY9e3RoaXMuX3NldE1hcFJlZn1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9KTtcbiAgICAgIGlmICghZGVjaykge1xuICAgICAgICAvLyBkZWNrT3ZlcmxheSBjYW4gYmUgbnVsbCBpZiBvbkRlY2tSZW5kZXIgcmV0dXJucyBudWxsXG4gICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIHJlbmRlciB0aGUgbWFwXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLy8gSW4gc3BsaXQgKGR1YWwpIHZpZXcgbW9kZSwgb25seSByZW5kZXIgdGhlIG1hcCBjb250cm9sIGJ1dHRvbnMgb24gdGhlXG4gICAgICAvLyByaWdodC1zaWRlIG1hcCAocHJpbWFyeSA9PT0gdHJ1ZSwgaS5lLiBpbmRleCA9PT0gMSkuIE90aGVyd2lzZSB0aGUgc2FtZVxuICAgICAgLy8gYnV0dG9ucyBhcmUgZHVwbGljYXRlZCBvbiBib3RoIG1hcHMgYW5kIGFueSBvcGVuZWQgbWVudSBhcHBlYXJzIG1pcnJvcmVkLlxuICAgICAgY29uc3Qgc2hvd01hcENvbnRyb2wgPSAhaXNTcGxpdCB8fCBCb29sZWFuKHByaW1hcnkpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7c2hvd01hcENvbnRyb2wgJiYgKFxuICAgICAgICAgICAgPE1hcENvbnRyb2xcbiAgICAgICAgICAgICAgbWFwU3RhdGU9e21hcFN0YXRlfVxuICAgICAgICAgICAgICBtYXBTdGF0ZUFjdGlvbnM9e21hcFN0YXRlQWN0aW9uc31cbiAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICBhdmFpbGFibGVMb2NhbGVzPXtMT0NBTEVfQ09ERVNfQVJSQVl9XG4gICAgICAgICAgICAgIGRyYWdSb3RhdGU9e21hcFN0YXRlLmRyYWdSb3RhdGV9XG4gICAgICAgICAgICAgIGlzU3BsaXQ9e2lzU3BsaXR9XG4gICAgICAgICAgICAgIHByaW1hcnk9e0Jvb2xlYW4ocHJpbWFyeSl9XG4gICAgICAgICAgICAgIGlzRXhwb3J0PXtpc0V4cG9ydH1cbiAgICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICAgIGxheWVyT3JkZXI9e2xheWVyT3JkZXJ9XG4gICAgICAgICAgICAgIGxheWVyc1RvUmVuZGVyPXtsYXllcnNUb1JlbmRlcn1cbiAgICAgICAgICAgICAgbWFwSW5kZXg9e2luZGV4IHx8IDB9XG4gICAgICAgICAgICAgIG1hcENvbnRyb2xzPXttYXBDb250cm9sc31cbiAgICAgICAgICAgICAgcmVhZE9ubHk9e3RoaXMucHJvcHMucmVhZE9ubHl9XG4gICAgICAgICAgICAgIHNjYWxlPXttYXBTdGF0ZS5zY2FsZSB8fCAxfVxuICAgICAgICAgICAgICBsb2dvQ29tcG9uZW50PXt0aGlzLnByb3BzLmxvZ29Db21wb25lbnR9XG4gICAgICAgICAgICAgIHRvcD17XG4gICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIgJiYgaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIuZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgPyB0aGVtZS5tYXBDb250cm9sVG9wXG4gICAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgICAgbG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgIHRoZW1lTmFtZT17dWlUaGVtZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVQZXJzcGVjdGl2ZT17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVBlcnNwZWN0aXZlfVxuICAgICAgICAgICAgICBvblNldE1hcFZpZXdNb2RlPXttYXBTdGF0ZUFjdGlvbnMuc2V0TWFwVmlld01vZGV9XG4gICAgICAgICAgICAgIG1hcFZpZXdNb2RlPXttYXBTdGF0ZS5tYXBWaWV3TW9kZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVTcGxpdE1hcD17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVNwbGl0TWFwfVxuICAgICAgICAgICAgICBvbk1hcFRvZ2dsZUxheWVyPXt0aGlzLl9oYW5kbGVNYXBUb2dnbGVMYXllcn1cbiAgICAgICAgICAgICAgb25Ub2dnbGVNYXBDb250cm9sPXt0aGlzLl90b2dnbGVNYXBDb250cm9sfVxuICAgICAgICAgICAgICBvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQ9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVTcGxpdE1hcFZpZXdwb3J0fVxuICAgICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgICBvblNldExvY2FsZT17dWlTdGF0ZUFjdGlvbnMuc2V0TG9jYWxlfVxuICAgICAgICAgICAgICBvblNldFRoZW1lPXt1aVN0YXRlQWN0aW9ucy5zZXRUaGVtZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5PXt2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlRWRpdG9yVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgb25Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyPXt2aXNTdGF0ZUFjdGlvbnMuY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllcn1cbiAgICAgICAgICAgICAgb25MYXllclZpc0NvbmZpZ0NoYW5nZT17dmlzU3RhdGVBY3Rpb25zLmxheWVyVmlzQ29uZmlnQ2hhbmdlfVxuICAgICAgICAgICAgICBvblRvZ2dsZUxheWVyVmlzaWJpbGl0eT17dGhpcy5faGFuZGxlVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5fVxuICAgICAgICAgICAgICBtYXBIZWlnaHQ9e21hcFN0YXRlLmhlaWdodH1cbiAgICAgICAgICAgICAgc2V0TWFwQ29udHJvbFNldHRpbmdzPXt1aVN0YXRlQWN0aW9ucy5zZXRNYXBDb250cm9sU2V0dGluZ3N9XG4gICAgICAgICAgICAgIGFjdGl2ZVNpZGVQYW5lbD17YWN0aXZlU2lkZVBhbmVsfVxuICAgICAgICAgICAgICBzcGxpdE1hcHM9e3RoaXMucHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzfVxuICAgICAgICAgICAgICBvblRvZ2dsZUxheWVyRm9yTWFwPXt2aXNTdGF0ZUFjdGlvbnMudG9nZ2xlTGF5ZXJGb3JNYXB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2lzU3BsaXRTZWxlY3Rvcih0aGlzLnByb3BzKSAmJiA8RHJvcHBhYmxlIGNvbnRhaW5lcklkPXtjb250YWluZXJJZH0gLz59XG5cbiAgICAgICAgICB7ZGVja31cbiAgICAgICAgICB7dGhpcy5fcmVuZGVyTWFwYm94T3ZlcmxheXMoKX1cbiAgICAgICAgICA8RWRpdG9yXG4gICAgICAgICAgICBpbmRleD17aW5kZXggfHwgMH1cbiAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgICAgICAgZmlsdGVycz17dGhpcy5wb2x5Z29uRmlsdGVyc1NlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICBvbkRlbGV0ZUZlYXR1cmU9e3Zpc1N0YXRlQWN0aW9ucy5kZWxldGVGZWF0dXJlfVxuICAgICAgICAgICAgb25TZXRGZWF0dXJlUHJvcGVydGllcz17dmlzU3RhdGVBY3Rpb25zLnNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3Zpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICBvblRvZ2dsZVBvbHlnb25GaWx0ZXI9e3Zpc1N0YXRlQWN0aW9ucy5zZXRQb2x5Z29uRmlsdGVyTGF5ZXJ9XG4gICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ2FsbCcsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBkaXNwbGF5OiBlZGl0b3IudmlzaWJsZSA/ICdibG9jaycgOiAnbm9uZSdcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7ZWRpdG9yLnZpc2libGUgPyAoXG4gICAgICAgICAgICA8RmlsdGVyRmVhdHVyZUJhZGdlc1xuICAgICAgICAgICAgICBmaWx0ZXJzPXt0aGlzLnBvbHlnb25GaWx0ZXJzU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICAgIHZpZXdwb3J0PXt0aGlzLl9nZXRBbm5vdGF0aW9uVmlld3BvcnQobWFwU3RhdGUsIGludGVybmFsVmlld1N0YXRlKX1cbiAgICAgICAgICAgICAgaXNHbG9iZUVuYWJsZWQ9e0Jvb2xlYW4obWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpfVxuICAgICAgICAgICAgICBvblNlbGVjdD17dmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPEFubm90YXRpb25PdmVybGF5XG4gICAgICAgICAgICBhbm5vdGF0aW9ucz17dmlzU3RhdGUuYW5ub3RhdGlvbnN9XG4gICAgICAgICAgICBzZWxlY3RlZEFubm90YXRpb25JZD17dmlzU3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWR9XG4gICAgICAgICAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dD17dmlzU3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHR9XG4gICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlPXtCb29sZWFuKG1hcENvbnRyb2xzPy5hbm5vdGF0aW9uPy5hY3RpdmUpfVxuICAgICAgICAgICAgbWFwSW5kZXg9e2luZGV4IHx8IDB9XG4gICAgICAgICAgICB2aWV3cG9ydD17dGhpcy5fZ2V0QW5ub3RhdGlvblZpZXdwb3J0KG1hcFN0YXRlLCBpbnRlcm5hbFZpZXdTdGF0ZSl9XG4gICAgICAgICAgICBpc0dsb2JlRW5hYmxlZD17Qm9vbGVhbihtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCl9XG4gICAgICAgICAgICB1cGRhdGVBbm5vdGF0aW9uPXt2aXNTdGF0ZUFjdGlvbnMudXBkYXRlQW5ub3RhdGlvbn1cbiAgICAgICAgICAgIHNldFNlbGVjdGVkQW5ub3RhdGlvbj17dmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkQW5ub3RhdGlvbn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgIHttYXBTdHlsZS50b3BNYXBTdHlsZSAmJiAhbWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQgPyAoXG4gICAgICAgICAgICA8UmVzb2x2ZWRNYXBDb21wb25lbnRcbiAgICAgICAgICAgICAga2V5PXtgdG9wLSR7YmFzZU1hcExpYnJhcnlOYW1lfWB9XG4gICAgICAgICAgICAgIHZpZXdTdGF0ZT17aW50ZXJuYWxWaWV3U3RhdGV9XG4gICAgICAgICAgICAgIG1heFBpdGNoPXtlZmZlY3RpdmVNYXhQaXRjaH1cbiAgICAgICAgICAgICAgbWFwU3R5bGU9e21hcFN0eWxlLnRvcE1hcFN0eWxlfVxuICAgICAgICAgICAgICBzdHlsZT17TUFQX1NUWUxFLnRvcH1cbiAgICAgICAgICAgICAgbWFwYm94QWNjZXNzVG9rZW49e21hcFByb3BzLm1hcGJveEFjY2Vzc1Rva2VufVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PXttYXBQcm9wcy50cmFuc2Zvcm1SZXF1ZXN0fVxuICAgICAgICAgICAgICB7Li4uKG1hcFByb3BzLlJUTFRleHRQbHVnaW4gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8ge1JUTFRleHRQbHVnaW46IG1hcFByb3BzLlJUTFRleHRQbHVnaW59XG4gICAgICAgICAgICAgICAgOiB7fSl9XG4gICAgICAgICAgICAgIHsuLi4odXNlTWFwYm94QWRhcHRlclxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBtYXBMaWI6XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0QXBwbGljYXRpb25Db25maWcoKS5iYXNlTWFwTGlicmFyeUNvbmZpZ1tcbiAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9MSUJfT1BUSU9OUy5NQVBCT1hcbiAgICAgICAgICAgICAgICAgICAgICBdLmdldE1hcExpYigpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSl9XG4gICAgICAgICAgICAgIHsuLi50b3BNYXBDb250YWluZXJQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7aGFzR2VvY29kZXJMYXllclxuICAgICAgICAgICAgPyB0aGlzLl9yZW5kZXJEZWNrT3ZlcmxheShcbiAgICAgICAgICAgICAgICB7W0dFT0NPREVSX0xBWUVSX0lEXTogaGFzR2VvY29kZXJMYXllcn0sXG4gICAgICAgICAgICAgICAge3ByaW1hcnlNYXA6IGZhbHNlLCBpc0ludGVyYWN0aXZlOiBmYWxzZX1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsfVxuICAgICAgICAgIHt0aGlzLl9yZW5kZXJNYXBQb3BvdmVyKCl9XG4gICAgICAgICAgeyFpc0V4cG9ydCAmJiBwcmltYXJ5ICE9PSBpc1NwbGl0ID8gKFxuICAgICAgICAgICAgPExvYWRpbmdJbmRpY2F0b3JcbiAgICAgICAgICAgICAgaXNWaXNpYmxlPXtCb29sZWFuKGlzTG9hZGluZ0luZGljYXRvclZpc2libGUgfHwgdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcpfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e0Jvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKX1cbiAgICAgICAgICAgICAgc2lkZVBhbmVsV2lkdGg9e3NpZGVQYW5lbFdpZHRofVxuICAgICAgICAgICAgICBoYXNBdHRyaWJ1dGlvbkxvZ29zPXthdHRyaWJ1dGlvbkxvZ29zLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgIGhhc01hcFNjYWxlPXtnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZU1hcFNjYWxlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wcmltYXJ5ID8gKFxuICAgICAgICAgICAgPEF0dHJpYnV0aW9uXG4gICAgICAgICAgICAgIHNob3dCYXNlTWFwTGliTG9nbz17dGhpcy5zdGF0ZS5zaG93QmFzZU1hcExpYkxvZ299XG4gICAgICAgICAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnM9e3RoaXMuc3RhdGUuYmFzZW1hcEF0dHJpYnV0aW9uc31cbiAgICAgICAgICAgICAgZGF0YXNldEF0dHJpYnV0aW9ucz17ZGF0YXNldEF0dHJpYnV0aW9uc31cbiAgICAgICAgICAgICAgYmFzZU1hcExpYnJhcnlDb25maWc9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnfVxuICAgICAgICAgICAgICBnbG9iZUF0dHJpYnV0aW9ucz17Z2V0R2xvYmVCYXNlbWFwQXR0cmlidXRpb25zKHtcbiAgICAgICAgICAgICAgICBnbG9iZTogbWFwU3RhdGUuZ2xvYmUsXG4gICAgICAgICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgbWFwU3R5bGVUeXBlOiBtYXBTdHlsZT8uc3R5bGVUeXBlLFxuICAgICAgICAgICAgICAgIGJhc2VtYXBQcm92aWRlcjogcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyKFxuICAgICAgICAgICAgICAgICAgYmFzZU1hcExpYnJhcnlOYW1lLFxuICAgICAgICAgICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wcmltYXJ5ID8gKFxuICAgICAgICAgICAgPEF0dHJpYnV0aW9uTG9nb3NcbiAgICAgICAgICAgICAgbG9nb3M9e2F0dHJpYnV0aW9uTG9nb3N9XG4gICAgICAgICAgICAgIGFjdGl2ZVNpZGVQYW5lbD17Qm9vbGVhbihhY3RpdmVTaWRlUGFuZWwpfVxuICAgICAgICAgICAgICBzaWRlUGFuZWxXaWR0aD17c2lkZVBhbmVsV2lkdGh9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHshaXNFeHBvcnQgJiYgZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVNYXBTY2FsZSA/IChcbiAgICAgICAgICAgIDxTdHlsZWRNYXBTY2FsZUNvbnRhaW5lclxuICAgICAgICAgICAgICAkbGVmdD17XG4gICAgICAgICAgICAgICAgcHJpbWFyeSAmJiBhY3RpdmVTaWRlUGFuZWxcbiAgICAgICAgICAgICAgICAgID8gKHNpZGVQYW5lbFdpZHRoIHx8IDApICsgKHRoZW1lPy5zaWRlUGFuZWw/Lm1hcmdpbj8ubGVmdCA/PyA5KVxuICAgICAgICAgICAgICAgICAgOiB0aGVtZT8uc2lkZVBhbmVsPy5tYXJnaW4/LmxlZnQgPz8gOVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRib3R0b21PZmZzZXQ9e3ByaW1hcnkgJiYgYXR0cmlidXRpb25Mb2dvcy5sZW5ndGggPiAwID8gMjQgOiAwfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TWFwU2NhbGUgbWFwU3RhdGU9e21hcFN0YXRlfSBtYXBJbmRleD17aW5kZXggPz8gMH0gLz5cbiAgICAgICAgICAgIDwvU3R5bGVkTWFwU2NhbGVDb250YWluZXI+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7dmlzU3RhdGUsIG1hcFN0eWxlfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBtYXBDb250ZW50ID0gdGhpcy5fcmVuZGVyTWFwKCk7XG4gICAgICBpZiAoIW1hcENvbnRlbnQpIHtcbiAgICAgICAgLy8gbWFwQ29udGVudCBjYW4gYmUgbnVsbCBpZiBvbkRlY2tSZW5kZXIgcmV0dXJucyBudWxsXG4gICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIHJlbmRlciB0aGUgbWFwXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50U3R5bGUgPSBtYXBTdHlsZS5tYXBTdHlsZXM/LlttYXBTdHlsZS5zdHlsZVR5cGVdO1xuICAgICAgY29uc3QgYmFzZU1hcExpYnJhcnlOYW1lID0gZ2V0QmFzZU1hcExpYnJhcnkoY3VycmVudFN0eWxlKTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5Q29uZmlnID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5iYXNlTWFwTGlicmFyeUNvbmZpZ1tiYXNlTWFwTGlicmFyeU5hbWVdO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTWFwXG4gICAgICAgICAgcmVmPXt0aGlzLl9yZWZ9XG4gICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGVTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICBvbkNvbnRleHRNZW51PXtldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpfVxuICAgICAgICAgICRtaXhCbGVuZE1vZGU9e3Zpc1N0YXRlLm92ZXJsYXlCbGVuZGluZ31cbiAgICAgICAgICAkbWFwTGliQ3NzQ2xhc3M9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnLm1hcExpYkNzc0NsYXNzfVxuICAgICAgICA+XG4gICAgICAgICAge21hcENvbnRlbnR9XG4gICAgICAgIDwvU3R5bGVkTWFwPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFRoZW1lKE1hcENvbnRhaW5lcik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBRix1QkFBQSxDQUFBQyxPQUFBO0FBQ0Es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
|