@kepler.gl/utils 3.0.0-alpha.1 → 3.0.0-alpha.2
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/aggregate-utils.js +1 -21
- package/dist/arrow-data-container.d.ts +54 -0
- package/dist/arrow-data-container.js +360 -0
- package/dist/color-utils.d.ts +4 -0
- package/dist/color-utils.js +12 -21
- package/dist/data-container-interface.d.ts +18 -0
- package/dist/data-container-interface.js +0 -20
- package/dist/data-container-utils.d.ts +1 -0
- package/dist/data-container-utils.js +10 -22
- package/dist/data-row.js +7 -22
- package/dist/data-scale-utils.js +7 -22
- package/dist/data-utils.js +3 -21
- package/dist/dataset-utils.d.ts +2 -2
- package/dist/dataset-utils.js +15 -28
- package/dist/dom-to-image.js +7 -22
- package/dist/dom-utils.js +6 -22
- package/dist/effect-utils.d.ts +12 -2
- package/dist/effect-utils.js +122 -55
- package/dist/export-map-html.js +7 -23
- package/dist/export-utils.js +1 -21
- package/dist/filter-utils.js +6 -21
- package/dist/format.js +6 -22
- package/dist/gl-utils.js +1 -21
- package/dist/h3-utils.js +6 -22
- package/dist/index.d.ts +4 -3
- package/dist/index.js +43 -26
- package/dist/indexed-data-container.js +1 -21
- package/dist/locale-utils.js +1 -21
- package/dist/map-info-utils.js +6 -22
- package/dist/map-style-utils/mapbox-gl-style-editor.js +1 -21
- package/dist/map-style-utils/mapbox-utils.js +7 -22
- package/dist/map-utils.js +1 -21
- package/dist/mapbox-utils.js +7 -22
- package/dist/noop.js +3 -21
- package/dist/notifications-utils.js +1 -21
- package/dist/observe-dimensions.d.ts +1 -1
- package/dist/observe-dimensions.js +5 -25
- package/dist/plot.js +7 -22
- package/dist/projection-utils.js +6 -22
- package/dist/row-data-container.js +1 -21
- package/dist/searcher-utils.js +7 -22
- package/dist/split-map-utils.js +1 -21
- package/dist/time.js +6 -22
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +28 -22
- package/package.json +10 -9
package/dist/filter-utils.js
CHANGED
@@ -1,23 +1,3 @@
|
|
1
|
-
// Copyright (c) 2023 Uber Technologies, Inc.
|
2
|
-
//
|
3
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
// of this software and associated documentation files (the "Software"), to deal
|
5
|
-
// in the Software without restriction, including without limitation the rights
|
6
|
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
// copies of the Software, and to permit persons to whom the Software is
|
8
|
-
// furnished to do so, subject to the following conditions:
|
9
|
-
//
|
10
|
-
// The above copyright notice and this permission notice shall be included in
|
11
|
-
// all copies or substantial portions of the Software.
|
12
|
-
//
|
13
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
// THE SOFTWARE.
|
20
|
-
|
21
1
|
"use strict";
|
22
2
|
|
23
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
@@ -472,6 +452,11 @@ var getPolygonFilterFunctor = function getPolygonFilterFunctor(layer, filter, da
|
|
472
452
|
return pos.every(Number.isFinite) && isInPolygon(pos, filter.value);
|
473
453
|
};
|
474
454
|
|
455
|
+
case _constants.LAYER_TYPES.geojson:
|
456
|
+
return function (data) {
|
457
|
+
return layer.isInPolygon(data, data.index, filter.value);
|
458
|
+
};
|
459
|
+
|
475
460
|
default:
|
476
461
|
return function () {
|
477
462
|
return true;
|
@@ -1345,4 +1330,4 @@ function getTimeWidgetHintFormatter(domain) {
|
|
1345
1330
|
function isSideFilter(filter) {
|
1346
1331
|
return filter.view === _constants.FILTER_VIEW_TYPES.side;
|
1347
1332
|
}
|
1348
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9maWx0ZXItdXRpbHMudHMiXSwibmFtZXMiOlsiZHVyYXRpb25TZWNvbmQiLCJkdXJhdGlvbk1pbnV0ZSIsImR1cmF0aW9uSG91ciIsImR1cmF0aW9uRGF5IiwiZHVyYXRpb25XZWVrIiwiZHVyYXRpb25ZZWFyIiwiVGltZXN0YW1wU3RlcE1hcCIsIm1heCIsInN0ZXAiLCJOdW1iZXIiLCJQT1NJVElWRV9JTkZJTklUWSIsImhpc3RvZ3JhbUJpbnMiLCJlbmxhcmdlZEhpc3RvZ3JhbUJpbnMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsImRhdGFJZCIsIm5hbWUiLCJsYXllcklkIiwiTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTIiwiU3VwcG9ydGVkUGxvdFR5cGUiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJBTExfRklFTERfVFlQRVMiLCJpbnRlZ2VyIiwicmVhbCIsInJhbmdlIiwiRklMVEVSX0NPTVBPTkVOVFMiLCJzZWxlY3QiLCJtdWx0aVNlbGVjdCIsInBvbHlnb24iLCJERUZBVUxUX0ZJTFRFUl9TVFJVQ1RVUkUiLCJmcmVlemUiLCJpZCIsImVuYWJsZWQiLCJmaXhlZERvbWFpbiIsInZpZXciLCJGSUxURVJfVklFV19UWVBFUyIsInNpZGUiLCJpc0FuaW1hdGluZyIsImFuaW1hdGlvbldpbmRvdyIsIkFOSU1BVElPTl9XSU5ET1ciLCJmcmVlIiwic3BlZWQiLCJ0eXBlIiwiZmllbGRJZHgiLCJkb21haW4iLCJ2YWx1ZSIsInBsb3RUeXBlIiwiUExPVF9UWVBFUyIsImhpc3RvZ3JhbSIsInlBeGlzIiwiaW50ZXJ2YWwiLCJncHUiLCJGSUxURVJfSURfTEVOR1RIIiwiTEFZRVJfRklMVEVSUyIsImdldERlZmF1bHRGaWx0ZXIiLCJzaG91bGRBcHBseUZpbHRlciIsImZpbHRlciIsImRhdGFzZXRJZCIsImRhdGFJZHMiLCJpbmNsdWRlcyIsInZhbGlkYXRlUG9seWdvbkZpbHRlciIsImRhdGFzZXQiLCJsYXllcnMiLCJmYWlsZWQiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpc1ZhbGlkRGF0YXNldCIsImxheWVyIiwiZmluZCIsImwiLCJmaWx0ZXJWYWxpZGF0b3JzIiwidmFsaWRhdGVGaWx0ZXIiLCJmaWx0ZXJEYXRhSWQiLCJmaWx0ZXJEYXRhc2V0SW5kZXgiLCJpbmRleE9mIiwiaW5pdGlhbGl6ZUZpbHRlciIsImZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwidXBkYXRlZERhdGFzZXQiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwidmFsaWRhdGVGaWx0ZXJZQXhpcyIsInZhbGlkYXRlRmlsdGVyV2l0aERhdGEiLCJoYXNPd25Qcm9wZXJ0eSIsImZpZWxkcyIsIm1hdGNoZWRBeGlzIiwiZ2V0RmlsdGVyUGxvdCIsImdldEZpbHRlclByb3BzIiwiZmllbGQiLCJmaWVsZERvbWFpbiIsImZpbHRlclByb3BzIiwiZmllbGRUeXBlIiwidHlwZU9wdGlvbnMiLCJzdHJpbmciLCJkYXRlIiwidGltZXN0YW1wIiwiZW5sYXJnZWQiLCJnZXRQb2x5Z29uRmlsdGVyRnVuY3RvciIsImRhdGFDb250YWluZXIiLCJnZXRQb3NpdGlvbiIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJMQVlFUl9UWVBFUyIsInBvaW50IiwiaWNvbiIsImRhdGEiLCJwb3MiLCJldmVyeSIsImlzRmluaXRlIiwiaXNJblBvbHlnb24iLCJhcmMiLCJsaW5lIiwiaGV4YWdvbklkIiwiZGF0YVRvRmVhdHVyZSIsImNlbnRyb2lkcyIsImNlbnRyb2lkIiwiaW5kZXgiLCJnZXRGaWx0ZXJGdW5jdGlvbiIsInZhbHVlQWNjZXNzb3IiLCJkZWZhdWx0RnVuYyIsImQiLCJpc0luUmFuZ2UiLCJtYXBwZWRWYWx1ZSIsImFjY2Vzc29yIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0IiwibGVuZ3RoIiwibGF5ZXJGaWx0ZXJGdW5jdGlvbnMiLCJtYXAiLCJjb25maWciLCJmaWx0ZXJGdW5jIiwidXBkYXRlRmlsdGVyRGF0YUlkIiwiZmlsdGVyRGF0YUJ5RmlsdGVyVHlwZXMiLCJkeW5hbWljRG9tYWluRmlsdGVycyIsImNwdUZpbHRlcnMiLCJmaWx0ZXJGdW5jcyIsImZpbHRlcmVkSW5kZXhGb3JEb21haW4iLCJmaWx0ZXJlZEluZGV4IiwiZmlsdGVyQ29udGV4dCIsImZpbHRlckZ1bmNDYWxsZXIiLCJudW1Sb3dzIiwiaSIsIm1hdGNoRm9yRG9tYWluIiwicHVzaCIsIm1hdGNoRm9yUmVuZGVyIiwiZ2V0RmlsdGVyUmVjb3JkIiwiZmlsdGVycyIsIm9wdCIsImZpbHRlclJlY29yZCIsImR5bmFtaWNEb21haW4iLCJjcHUiLCJmb3JFYWNoIiwiZiIsImlnbm9yZURvbWFpbiIsImNwdU9ubHkiLCJkaWZmRmlsdGVycyIsIm9sZEZpbHRlclJlY29yZCIsImZpbHRlckNoYW5nZWQiLCJPYmplY3QiLCJlbnRyaWVzIiwicmVjb3JkIiwiaXRlbXMiLCJvbGRGaWx0ZXIiLCJwcm9wIiwiZmlsdGVyZWRWYWx1ZSIsImdldE51bWVyaWNGaWVsZERvbWFpbiIsIm1hcEluZGV4IiwiU2NhbGVVdGlscyIsImdldExpbmVhckRvbWFpbiIsImRpZmYiLCJnZXROdW1lcmljU3RlcFNpemUiLCJmb3JtYXROdW1iZXJCeVN0ZXAiLCJnZXRIaXN0b2dyYW0iLCJlbmxhcmdlZEhpc3RvZ3JhbSIsIk1hdGgiLCJhYnMiLCJ4IiwiZXhwb25lbnRpYWxGb3JtIiwidG9FeHBvbmVudGlhbCIsImV4cG9uZW50IiwicGFyc2VGbG9hdCIsInNwbGl0IiwiRGVjaW1hbCIsInBvdyIsInRvTnVtYmVyIiwiZ2V0VGltZXN0YW1wRmllbGREb21haW4iLCJkZWZhdWx0VGltZUZvcm1hdCIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsImVudHJ5IiwiaGlzdG9ncmFtQ29uc3RydWN0IiwiYmlucyIsInRocmVzaG9sZHMiLCJiaW4iLCJjb3VudCIsIngwIiwieDEiLCJ2YWwiLCJib3VuZCIsImZsb29yIiwiY2VpbCIsImlzVmFsaWRUaW1lRG9tYWluIiwiaXNGaWx0ZXJWYWxpZFRvU2F2ZSIsInYiLCJpc05hTiIsIkJvb2xlYW4iLCJpbnB1dCIsImNvb3JkaW5hdGVzIiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJnZXRDb2x1bW5GaWVsZElkeCIsIkNvbnNvbGUiLCJ3YXJuIiwibGluZUNoYXJ0Iiwic2VyaWVzIiwicm93Iiwicm93SW5kZXgiLCJ5IiwidmFsdWVBdCIsInNvcnQiLCJhIiwiYiIsInlEb21haW4iLCJ4RG9tYWluIiwiZ2V0RGVmYXVsdEZpbHRlclBsb3RUeXBlIiwiZmlsdGVyUGxvdFR5cGVzIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsImRhdGFzZXRJZHMiLCJkYXRhc2V0cyIsInJlZHVjZSIsImFjYyIsImxheWVyc1RvRmlsdGVyIiwiYXBwbGllZEZpbHRlcnMiLCJ0YWJsZSIsImZpbHRlclRhYmxlIiwib3B0aW9uIiwiZmllbGRJbmRleCIsIm5ld0ZpbHRlciIsIm1lcmdlRmlsdGVyRG9tYWluU3RlcCIsImFzc2lnbiIsImNvbWJpbmVkRG9tYWluIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJmZWF0dXJlIiwiZmlsdGVySWQiLCJwcm9wZXJ0aWVzIiwiZ2V0RmlsdGVySWRJbkZlYXR1cmUiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJsYWJlbCIsImlzVmlzaWJsZSIsImZpbHRlckRhdGFzZXRDUFUiLCJzdGF0ZSIsImRhdGFzZXRGaWx0ZXJzIiwiY3B1RmlsdGVyZWREYXRhc2V0IiwiZmlsdGVyVGFibGVDUFUiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImZpbHRlcnNUb1ZhbGlkYXRlIiwidmFsaWRhdGVkIiwidXBkYXRlZERhdGFzZXRzIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJhdWdtZW50ZWREYXRhc2V0cyIsImFwcGx5VG9EYXRhc2V0cyIsInZhbGlkYXRlZEZpbHRlciIsImdldEludGVydmFsQmlucyIsImtleXMiLCJ2YWx1ZXMiLCJnZXRUaW1lV2lkZ2V0SGludEZvcm1hdHRlciIsInVuZGVmaW5lZCIsImlzU2lkZUZpbHRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBU0E7O0FBQ0E7O0FBdUJBOztBQUNBOztBQUNBOzs7Ozs7OztBQUVPLElBQU1BLGNBQWMsR0FBRyxJQUF2Qjs7QUFDQSxJQUFNQyxjQUFjLEdBQUdELGNBQWMsR0FBRyxFQUF4Qzs7QUFDQSxJQUFNRSxZQUFZLEdBQUdELGNBQWMsR0FBRyxFQUF0Qzs7QUFDQSxJQUFNRSxXQUFXLEdBQUdELFlBQVksR0FBRyxFQUFuQzs7QUFDQSxJQUFNRSxZQUFZLEdBQUdELFdBQVcsR0FBRyxDQUFuQzs7QUFDQSxJQUFNRSxZQUFZLEdBQUdGLFdBQVcsR0FBRyxHQUFuQzs7QUFnQkEsSUFBTUcsZ0JBQWdCLEdBQUcsQ0FDOUI7QUFBQ0MsRUFBQUEsR0FBRyxFQUFFLENBQU47QUFBU0MsRUFBQUEsSUFBSSxFQUFFO0FBQWYsQ0FEOEIsRUFFOUI7QUFBQ0QsRUFBQUEsR0FBRyxFQUFFLEVBQU47QUFBVUMsRUFBQUEsSUFBSSxFQUFFO0FBQWhCLENBRjhCLEVBRzlCO0FBQUNELEVBQUFBLEdBQUcsRUFBRSxHQUFOO0FBQVdDLEVBQUFBLElBQUksRUFBRTtBQUFqQixDQUg4QixFQUk5QjtBQUFDRCxFQUFBQSxHQUFHLEVBQUUsR0FBTjtBQUFXQyxFQUFBQSxJQUFJLEVBQUU7QUFBakIsQ0FKOEIsRUFLOUI7QUFBQ0QsRUFBQUEsR0FBRyxFQUFFLElBQU47QUFBWUMsRUFBQUEsSUFBSSxFQUFFO0FBQWxCLENBTDhCLEVBTTlCO0FBQUNELEVBQUFBLEdBQUcsRUFBRSxJQUFOO0FBQVlDLEVBQUFBLElBQUksRUFBRTtBQUFsQixDQU44QixFQU85QjtBQUFDRCxFQUFBQSxHQUFHLEVBQUVFLE1BQU0sQ0FBQ0MsaUJBQWI7QUFBZ0NGLEVBQUFBLElBQUksRUFBRTtBQUF0QyxDQVA4QixDQUF6Qjs7QUFVQSxJQUFNRyxhQUFhLEdBQUcsRUFBdEI7O0FBQ0EsSUFBTUMscUJBQXFCLEdBQUcsR0FBOUI7O0FBRUEsSUFBTUMsb0JBQW9CLEdBQUcsMkJBQVU7QUFDNUNDLEVBQUFBLE1BQU0sRUFBRSxJQURvQztBQUU1Q0MsRUFBQUEsSUFBSSxFQUFFLElBRnNDO0FBRzVDQyxFQUFBQSxPQUFPLEVBQUU7QUFIbUMsQ0FBVixDQUE3Qjs7QUFNQSxJQUFNQywyQkFBMkIsR0FBRyxnRUFDeENKLG9CQUFvQixDQUFDRSxJQURtQixFQUNaLElBRFksRUFBcEM7QUFHUDtBQUNBO0FBQ0E7OztBQUVBLElBQU1HLGlCQUFpQixrRkFDcEJDLHdCQUFhQyxTQURPO0FBRW5CLGFBQVM7QUFGVSwyREFHbEJDLDJCQUFnQkMsT0FIRSxFQUdRLFdBSFIsMkRBSWxCRCwyQkFBZ0JFLElBSkUsRUFJSyxXQUpMLGlGQU1wQkosd0JBQWFLLEtBTk87QUFPbkIsYUFBUztBQVBVLHlEQVFsQkgsMkJBQWdCQyxPQVJFLEVBUVEsV0FSUix5REFTbEJELDJCQUFnQkUsSUFURSxFQVNLLFdBVEwsNkNBQXZCO0FBYU8sSUFBTUUsaUJBQWlCLGtGQUMzQk4sd0JBQWFPLE1BRGMsRUFDTCxvQkFESyx3REFFM0JQLHdCQUFhUSxXQUZjLEVBRUEsbUJBRkEsd0RBRzNCUix3QkFBYUMsU0FIYyxFQUdGLGlCQUhFLHdEQUkzQkQsd0JBQWFLLEtBSmMsRUFJTixhQUpNLHdEQUszQkwsd0JBQWFTLE9BTGMsRUFLSixlQUxJLHNCQUF2Qjs7QUFRQSxJQUFNQyx3QkFBd0IsR0FBRztBQUN0Q2YsRUFBQUEsTUFBTSxFQUFFLEVBRDhCO0FBQzFCO0FBQ1pnQixFQUFBQSxNQUFNLEVBQUUsS0FGOEI7QUFHdENDLEVBQUFBLEVBQUUsRUFBRSxJQUhrQztBQUl0Q0MsRUFBQUEsT0FBTyxFQUFFLElBSjZCO0FBTXRDO0FBQ0FDLEVBQUFBLFdBQVcsRUFBRSxLQVB5QjtBQVF0Q0MsRUFBQUEsSUFBSSxFQUFFQyw2QkFBa0JDLElBUmM7QUFTdENDLEVBQUFBLFdBQVcsRUFBRSxLQVR5QjtBQVV0Q0MsRUFBQUEsZUFBZSxFQUFFQyw0QkFBaUJDLElBVkk7QUFXdENDLEVBQUFBLEtBQUssRUFBRSxDQVgrQjtBQWF0QztBQUNBMUIsRUFBQUEsSUFBSSxFQUFFLEVBZGdDO0FBYzVCO0FBQ1YyQixFQUFBQSxJQUFJLEVBQUUsSUFmZ0M7QUFnQnRDQyxFQUFBQSxRQUFRLEVBQUUsRUFoQjRCO0FBZ0J4QjtBQUNkQyxFQUFBQSxNQUFNLEVBQUUsSUFqQjhCO0FBa0J0Q0MsRUFBQUEsS0FBSyxFQUFFLElBbEIrQjtBQW9CdEM7QUFDQUMsRUFBQUEsUUFBUSxFQUFFQyxzQkFBV0MsU0FyQmlCO0FBc0J0Q0MsRUFBQUEsS0FBSyxFQUFFLElBdEIrQjtBQXVCdENDLEVBQUFBLFFBQVEsRUFBRSxJQXZCNEI7QUF5QnRDO0FBQ0FDLEVBQUFBLEdBQUcsRUFBRTtBQTFCaUMsQ0FBakM7O0FBNkJBLElBQU1DLGdCQUFnQixHQUFHLENBQXpCOztBQUVBLElBQU1DLGFBQWEsR0FBRyxDQUFDbEMsd0JBQWFTLE9BQWQsQ0FBdEI7QUFFUDtBQUNBO0FBQ0E7Ozs7QUFDTyxTQUFTMEIsZ0JBQVQsR0FNd0I7QUFBQSxpRkFBM0IsRUFBMkI7QUFBQSxNQUw3QnhDLE1BSzZCLFFBTDdCQSxNQUs2QjtBQUFBLE1BSjdCaUIsRUFJNkIsUUFKN0JBLEVBSTZCOztBQUM3Qix5Q0FDS0Ysd0JBREw7QUFFRTtBQUNBZixJQUFBQSxNQUFNLEVBQUVBLE1BQU0sR0FBRyxvQkFBUUEsTUFBUixDQUFILEdBQXFCLEVBSHJDO0FBSUVpQixJQUFBQSxFQUFFLEVBQUVBLEVBQUUsSUFBSSwyQkFBZXFCLGdCQUFmO0FBSlo7QUFNRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0csaUJBQVQsQ0FBMkJDLE1BQTNCLEVBQTJDQyxTQUEzQyxFQUF1RTtBQUM1RSxNQUFNQyxPQUFPLEdBQUcsb0JBQVFGLE1BQU0sQ0FBQzFDLE1BQWYsQ0FBaEI7QUFDQSxTQUFPNEMsT0FBTyxDQUFDQyxRQUFSLENBQWlCRixTQUFqQixLQUErQkQsTUFBTSxDQUFDWCxLQUFQLEtBQWlCLElBQXZEO0FBQ0Q7O0FBV0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTZSxxQkFBVCxDQUNMQyxPQURLLEVBRUxMLE1BRkssRUFHTE0sTUFISyxFQUl1QztBQUM1QyxNQUFNQyxNQUFNLEdBQUc7QUFBQ0YsSUFBQUEsT0FBTyxFQUFQQSxPQUFEO0FBQVVMLElBQUFBLE1BQU0sRUFBRTtBQUFsQixHQUFmO0FBRDRDLE1BRXJDWCxLQUZxQyxHQUVMVyxNQUZLLENBRXJDWCxLQUZxQztBQUFBLE1BRTlCN0IsT0FGOEIsR0FFTHdDLE1BRkssQ0FFOUJ4QyxPQUY4QjtBQUFBLE1BRXJCMEIsSUFGcUIsR0FFTGMsTUFGSyxDQUVyQmQsSUFGcUI7QUFBQSxNQUVmNUIsTUFGZSxHQUVMMEMsTUFGSyxDQUVmMUMsTUFGZTs7QUFJNUMsTUFBSSxDQUFDRSxPQUFELElBQVksQ0FBQ2dELGtCQUFrQixDQUFDdEIsSUFBRCxFQUFPRyxLQUFQLENBQW5DLEVBQWtEO0FBQ2hELFdBQU9rQixNQUFQO0FBQ0Q7O0FBRUQsTUFBTUUsY0FBYyxHQUFHbkQsTUFBTSxDQUFDNkMsUUFBUCxDQUFnQkUsT0FBTyxDQUFDOUIsRUFBeEIsQ0FBdkI7O0FBRUEsTUFBSSxDQUFDa0MsY0FBTCxFQUFxQjtBQUNuQixXQUFPRixNQUFQO0FBQ0Q7O0FBRUQsTUFBTUcsS0FBSyxHQUFHSixNQUFNLENBQUNLLElBQVAsQ0FBWSxVQUFBQyxDQUFDO0FBQUEsV0FBSXBELE9BQU8sQ0FBQzJDLFFBQVIsQ0FBaUJTLENBQUMsQ0FBQ3JDLEVBQW5CLENBQUo7QUFBQSxHQUFiLENBQWQ7O0FBRUEsTUFBSSxDQUFDbUMsS0FBTCxFQUFZO0FBQ1YsV0FBT0gsTUFBUDtBQUNEOztBQUVELFNBQU87QUFDTFAsSUFBQUEsTUFBTSxrQ0FDREEsTUFEQztBQUVKMUIsTUFBQUEsTUFBTSxFQUFFLElBRko7QUFHSmEsTUFBQUEsUUFBUSxFQUFFO0FBSE4sTUFERDtBQU1Ma0IsSUFBQUEsT0FBTyxFQUFQQTtBQU5LLEdBQVA7QUFRRDtBQUVEO0FBQ0E7QUFDQTs7O0FBQ0EsSUFBTVEsZ0JBQWdCLHdDQUNuQmxELHdCQUFhUyxPQURNLEVBQ0lnQyxxQkFESixDQUF0QjtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDTyxTQUFTVSxjQUFULENBQ0xULE9BREssRUFFTEwsTUFGSyxFQUdnQztBQUFBOztBQUNyQztBQUNBLE1BQU1PLE1BQU0sR0FBRztBQUFDRixJQUFBQSxPQUFPLEVBQVBBLE9BQUQ7QUFBVUwsSUFBQUEsTUFBTSxFQUFFO0FBQWxCLEdBQWY7QUFDQSxNQUFNZSxZQUFZLEdBQUcsb0JBQVFmLE1BQU0sQ0FBQzFDLE1BQWYsQ0FBckI7QUFFQSxNQUFNMEQsa0JBQWtCLEdBQUdELFlBQVksQ0FBQ0UsT0FBYixDQUFxQlosT0FBTyxDQUFDOUIsRUFBN0IsQ0FBM0I7O0FBQ0EsTUFBSXlDLGtCQUFrQixHQUFHLENBQXJCLElBQTBCLENBQUMsb0JBQVFoQixNQUFNLENBQUN6QyxJQUFmLEVBQXFCeUQsa0JBQXJCLENBQS9CLEVBQXlFO0FBQ3ZFO0FBQ0EsV0FBT1QsTUFBUDtBQUNEOztBQUVELE1BQU1XLGdCQUF3QixpREFDekJwQixnQkFBZ0IsQ0FBQztBQUFDeEMsSUFBQUEsTUFBTSxFQUFFMEMsTUFBTSxDQUFDMUM7QUFBaEIsR0FBRCxDQURTLEdBRXpCMEMsTUFGeUI7QUFHNUIxQyxJQUFBQSxNQUFNLEVBQUV5RCxZQUhvQjtBQUk1QnhELElBQUFBLElBQUksRUFBRSxvQkFBUXlDLE1BQU0sQ0FBQ3pDLElBQWY7QUFKc0IsSUFBOUI7O0FBT0EsTUFBTTRELFNBQVMsR0FBR0QsZ0JBQWdCLENBQUMzRCxJQUFqQixDQUFzQnlELGtCQUF0QixDQUFsQjs7QUFsQnFDLDhCQW1Cb0JJLG9CQUFvQixDQUMzRUYsZ0JBRDJFLEVBRTNFYixPQUYyRSxFQUczRWMsU0FIMkUsRUFJM0VILGtCQUoyRSxFQUszRTtBQUFDSyxJQUFBQSxXQUFXLEVBQUU7QUFBZCxHQUwyRSxDQW5CeEM7QUFBQSxNQW1CdEJDLGFBbkJzQix5QkFtQjlCdEIsTUFuQjhCO0FBQUEsTUFtQkV1QixjQW5CRix5QkFtQlBsQixPQW5CTzs7QUEyQnJDLE1BQUksQ0FBQ2lCLGFBQUwsRUFBb0I7QUFDbEIsV0FBT2YsTUFBUDtBQUNEOztBQUVEZSxFQUFBQSxhQUFhLENBQUNqQyxLQUFkLEdBQXNCbUMseUJBQXlCLENBQUN4QixNQUFNLENBQUNYLEtBQVIsRUFBZWlDLGFBQWYsQ0FBL0M7QUFDQUEsRUFBQUEsYUFBYSxDQUFDNUMsSUFBZCxtQkFBcUJzQixNQUFNLENBQUN0QixJQUE1Qix1REFBb0M0QyxhQUFhLENBQUM1QyxJQUFsRDs7QUFFQSxNQUFJNEMsYUFBYSxDQUFDakMsS0FBZCxLQUF3QixJQUE1QixFQUFrQztBQUNoQztBQUNBLFdBQU9rQixNQUFQO0FBQ0Q7O0FBRUQsU0FBTztBQUNMUCxJQUFBQSxNQUFNLEVBQUV5QixtQkFBbUIsQ0FBQ0gsYUFBRCxFQUFnQkMsY0FBaEIsQ0FEdEI7QUFFTGxCLElBQUFBLE9BQU8sRUFBRWtCO0FBRkosR0FBUDtBQUlEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTRyxzQkFBVCxDQUNMckIsT0FESyxFQUVMTCxNQUZLLEVBR0xNLE1BSEssRUFJeUI7QUFDOUIsU0FBT04sTUFBTSxDQUFDZCxJQUFQLElBQWUyQixnQkFBZ0IsQ0FBQ2MsY0FBakIsQ0FBZ0MzQixNQUFNLENBQUNkLElBQXZDLENBQWYsR0FDSDJCLGdCQUFnQixDQUFDYixNQUFNLENBQUNkLElBQVIsQ0FBaEIsQ0FBOEJtQixPQUE5QixFQUF1Q0wsTUFBdkMsRUFBK0NNLE1BQS9DLENBREcsR0FFSFEsY0FBYyxDQUFDVCxPQUFELEVBQVVMLE1BQVYsQ0FGbEI7QUFHRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU3lCLG1CQUFULENBQTZCekIsTUFBN0IsRUFBcUNLLE9BQXJDLEVBQThDO0FBQzVDO0FBRDRDLE1BR3JDdUIsTUFIcUMsR0FHM0J2QixPQUgyQixDQUdyQ3VCLE1BSHFDO0FBQUEsZ0JBSTVCNUIsTUFKNEI7QUFBQSxNQUlyQ1AsS0FKcUMsV0FJckNBLEtBSnFDLEVBSzVDOztBQUNBLE1BQUlBLEtBQUosRUFBVztBQUNULFFBQU1vQyxXQUFXLEdBQUdELE1BQU0sQ0FBQ2pCLElBQVAsQ0FBWTtBQUFBLFVBQUVwRCxJQUFGLFNBQUVBLElBQUY7QUFBQSxVQUFRMkIsSUFBUixTQUFRQSxJQUFSO0FBQUEsYUFBa0IzQixJQUFJLEtBQUtrQyxLQUFLLENBQUNsQyxJQUFmLElBQXVCMkIsSUFBSSxLQUFLTyxLQUFLLENBQUNQLElBQXhEO0FBQUEsS0FBWixDQUFwQjtBQUVBYyxJQUFBQSxNQUFNLEdBQUc2QixXQUFXLG1DQUVYN0IsTUFGVztBQUdkUCxNQUFBQSxLQUFLLEVBQUVvQztBQUhPLE9BSVhDLGFBQWEsaUNBQUs5QixNQUFMO0FBQWFQLE1BQUFBLEtBQUssRUFBRW9DO0FBQXBCLFFBQWtDeEIsT0FBbEMsQ0FKRixJQU1oQkwsTUFOSjtBQU9EOztBQUVELFNBQU9BLE1BQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTK0IsY0FBVCxDQUNMQyxLQURLLEVBRUxDLFdBRkssRUFHa0M7QUFDdkMsTUFBTUMsV0FBVyxtQ0FDWkQsV0FEWTtBQUVmRSxJQUFBQSxTQUFTLEVBQUVILEtBQUssQ0FBQzlDLElBRkY7QUFHZlIsSUFBQUEsSUFBSSxFQUFFQyw2QkFBa0JDO0FBSFQsSUFBakI7O0FBTUEsVUFBUW9ELEtBQUssQ0FBQzlDLElBQWQ7QUFDRSxTQUFLckIsMkJBQWdCRSxJQUFyQjtBQUNBLFNBQUtGLDJCQUFnQkMsT0FBckI7QUFDRSw2Q0FDS29FLFdBREw7QUFFRTdDLFFBQUFBLEtBQUssRUFBRTRDLFdBQVcsQ0FBQzdDLE1BRnJCO0FBR0VGLFFBQUFBLElBQUksRUFBRXZCLHdCQUFhSyxLQUhyQjtBQUlFO0FBQ0FvRSxRQUFBQSxXQUFXLEVBQUUsQ0FBQ3pFLHdCQUFhSyxLQUFkLENBTGY7QUFNRTJCLFFBQUFBLEdBQUcsRUFBRTtBQU5QOztBQVNGLFNBQUs5QixxQ0FBTDtBQUNFO0FBQ0EsNkNBQ0txRSxXQURMO0FBRUVoRCxRQUFBQSxJQUFJLEVBQUV2Qix3QkFBYU8sTUFGckI7QUFHRW1CLFFBQUFBLEtBQUssRUFBRSxJQUhUO0FBSUVNLFFBQUFBLEdBQUcsRUFBRTtBQUpQOztBQU9GLFNBQUs5QiwyQkFBZ0J3RSxNQUFyQjtBQUNBLFNBQUt4RSwyQkFBZ0J5RSxJQUFyQjtBQUNFO0FBQ0EsNkNBQ0tKLFdBREw7QUFFRWhELFFBQUFBLElBQUksRUFBRXZCLHdCQUFhUSxXQUZyQjtBQUdFa0IsUUFBQUEsS0FBSyxFQUFFLEVBSFQ7QUFJRU0sUUFBQUEsR0FBRyxFQUFFO0FBSlA7O0FBT0YsU0FBSzlCLDJCQUFnQjBFLFNBQXJCO0FBQ0U7QUFDQSw2Q0FDS0wsV0FETDtBQUVFaEQsUUFBQUEsSUFBSSxFQUFFdkIsd0JBQWFDLFNBRnJCO0FBR0VjLFFBQUFBLElBQUksRUFBRUMsNkJBQWtCNkQsUUFIMUI7QUFJRS9ELFFBQUFBLFdBQVcsRUFBRSxJQUpmO0FBS0VZLFFBQUFBLEtBQUssRUFBRTZDLFdBQVcsQ0FBQzlDLE1BTHJCO0FBTUVPLFFBQUFBLEdBQUcsRUFBRTtBQU5QOztBQVNGO0FBQ0U7QUFDQSxhQUFPLEVBQVA7QUE1Q0o7QUE4Q0Q7O0FBRU0sSUFBTThDLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBMEIsQ0FBQy9CLEtBQUQsRUFBUVYsTUFBUixFQUFnQjBDLGFBQWhCLEVBQWtDO0FBQ3ZFLE1BQU1DLFdBQVcsR0FBR2pDLEtBQUssQ0FBQ2tDLG1CQUFOLENBQTBCRixhQUExQixDQUFwQjs7QUFFQSxVQUFRaEMsS0FBSyxDQUFDeEIsSUFBZDtBQUNFLFNBQUsyRCx1QkFBWUMsS0FBakI7QUFDQSxTQUFLRCx1QkFBWUUsSUFBakI7QUFDRSxhQUFPLFVBQUFDLElBQUksRUFBSTtBQUNiLFlBQU1DLEdBQUcsR0FBR04sV0FBVyxDQUFDSyxJQUFELENBQXZCO0FBQ0EsZUFBT0MsR0FBRyxDQUFDQyxLQUFKLENBQVVqRyxNQUFNLENBQUNrRyxRQUFqQixLQUE4QkMsV0FBVyxDQUFDSCxHQUFELEVBQU1qRCxNQUFNLENBQUNYLEtBQWIsQ0FBaEQ7QUFDRCxPQUhEOztBQUlGLFNBQUt3RCx1QkFBWVEsR0FBakI7QUFDQSxTQUFLUix1QkFBWVMsSUFBakI7QUFDRSxhQUFPLFVBQUFOLElBQUksRUFBSTtBQUNiLFlBQU1DLEdBQUcsR0FBR04sV0FBVyxDQUFDSyxJQUFELENBQXZCO0FBQ0EsZUFDRUMsR0FBRyxDQUFDQyxLQUFKLENBQVVqRyxNQUFNLENBQUNrRyxRQUFqQixLQUNBLENBQ0UsQ0FBQ0YsR0FBRyxDQUFDLENBQUQsQ0FBSixFQUFTQSxHQUFHLENBQUMsQ0FBRCxDQUFaLENBREYsRUFFRSxDQUFDQSxHQUFHLENBQUMsQ0FBRCxDQUFKLEVBQVNBLEdBQUcsQ0FBQyxDQUFELENBQVosQ0FGRixFQUdFQyxLQUhGLENBR1EsVUFBQUosS0FBSztBQUFBLGlCQUFJTSxXQUFXLENBQUNOLEtBQUQsRUFBUTlDLE1BQU0sQ0FBQ1gsS0FBZixDQUFmO0FBQUEsU0FIYixDQUZGO0FBT0QsT0FURDs7QUFVRixTQUFLd0QsdUJBQVlVLFNBQWpCO0FBQ0UsVUFBSTdDLEtBQUssQ0FBQzhDLGFBQU4sSUFBdUI5QyxLQUFLLENBQUM4QyxhQUFOLENBQW9CQyxTQUEvQyxFQUEwRDtBQUN4RCxlQUFPLFVBQUFULElBQUksRUFBSTtBQUNiO0FBQ0EsY0FBTVUsUUFBUSxHQUFHaEQsS0FBSyxDQUFDOEMsYUFBTixDQUFvQkMsU0FBcEIsQ0FBOEJULElBQUksQ0FBQ1csS0FBbkMsQ0FBakI7QUFDQSxpQkFBT0QsUUFBUSxJQUFJTixXQUFXLENBQUNNLFFBQUQsRUFBVzFELE1BQU0sQ0FBQ1gsS0FBbEIsQ0FBOUI7QUFDRCxTQUpEO0FBS0Q7O0FBQ0QsYUFBTyxVQUFBMkQsSUFBSSxFQUFJO0FBQ2IsWUFBTXpFLEVBQUUsR0FBR29FLFdBQVcsQ0FBQ0ssSUFBRCxDQUF0Qjs7QUFDQSxZQUFJLENBQUMscUJBQVV6RSxFQUFWLENBQUwsRUFBb0I7QUFDbEIsaUJBQU8sS0FBUDtBQUNEOztBQUNELFlBQU0wRSxHQUFHLEdBQUcsMEJBQVk7QUFBQzFFLFVBQUFBLEVBQUUsRUFBRkE7QUFBRCxTQUFaLENBQVo7QUFDQSxlQUFPMEUsR0FBRyxDQUFDQyxLQUFKLENBQVVqRyxNQUFNLENBQUNrRyxRQUFqQixLQUE4QkMsV0FBVyxDQUFDSCxHQUFELEVBQU1qRCxNQUFNLENBQUNYLEtBQWIsQ0FBaEQ7QUFDRCxPQVBEOztBQVFGO0FBQ0UsYUFBTztBQUFBLGVBQU0sSUFBTjtBQUFBLE9BQVA7QUFwQ0o7QUFzQ0QsQ0F6Q007QUEyQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ08sU0FBU3VFLGlCQUFULENBQ0w1QixLQURLLEVBRUwxRSxNQUZLLEVBR0wwQyxNQUhLLEVBSUxNLE1BSkssRUFLTG9DLGFBTEssRUFNVztBQUNoQjtBQUNBLE1BQU1tQixhQUFhLEdBQUc3QixLQUFLLEdBQUdBLEtBQUssQ0FBQzZCLGFBQVQsR0FBeUIsVUFBQWIsSUFBSTtBQUFBLFdBQUksSUFBSjtBQUFBLEdBQXhEOztBQUNBLE1BQU1jLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUFDLENBQUM7QUFBQSxXQUFJLElBQUo7QUFBQSxHQUFyQjs7QUFFQSxNQUFJL0QsTUFBTSxDQUFDeEIsT0FBUCxLQUFtQixLQUF2QixFQUE4QjtBQUM1QixXQUFPc0YsV0FBUDtBQUNEOztBQUVELFVBQVE5RCxNQUFNLENBQUNkLElBQWY7QUFDRSxTQUFLdkIsd0JBQWFLLEtBQWxCO0FBQ0UsYUFBTyxVQUFBZ0YsSUFBSTtBQUFBLGVBQUlnQixTQUFTLENBQUNILGFBQWEsQ0FBQ2IsSUFBRCxDQUFkLEVBQXNCaEQsTUFBTSxDQUFDWCxLQUE3QixDQUFiO0FBQUEsT0FBWDs7QUFDRixTQUFLMUIsd0JBQWFRLFdBQWxCO0FBQ0UsYUFBTyxVQUFBNkUsSUFBSTtBQUFBLGVBQUloRCxNQUFNLENBQUNYLEtBQVAsQ0FBYWMsUUFBYixDQUFzQjBELGFBQWEsQ0FBQ2IsSUFBRCxDQUFuQyxDQUFKO0FBQUEsT0FBWDs7QUFDRixTQUFLckYsd0JBQWFPLE1BQWxCO0FBQ0UsYUFBTyxVQUFBOEUsSUFBSTtBQUFBLGVBQUlhLGFBQWEsQ0FBQ2IsSUFBRCxDQUFiLEtBQXdCaEQsTUFBTSxDQUFDWCxLQUFuQztBQUFBLE9BQVg7O0FBQ0YsU0FBSzFCLHdCQUFhQyxTQUFsQjtBQUNFLFVBQUksQ0FBQ29FLEtBQUwsRUFBWTtBQUNWLGVBQU84QixXQUFQO0FBQ0Q7O0FBQ0QsVUFBTUcsV0FBVyxHQUFHLHdCQUFJakMsS0FBSixFQUFXLENBQUMsYUFBRCxFQUFnQixhQUFoQixDQUFYLENBQXBCO0FBQ0EsVUFBTWtDLFFBQVEsR0FBR0MsS0FBSyxDQUFDQyxPQUFOLENBQWNILFdBQWQsSUFDYixVQUFBakIsSUFBSTtBQUFBLGVBQUlpQixXQUFXLENBQUNqQixJQUFJLENBQUNXLEtBQU4sQ0FBZjtBQUFBLE9BRFMsR0FFYixVQUFBWCxJQUFJO0FBQUEsZUFBSSxnQ0FBZ0JhLGFBQWEsQ0FBQ2IsSUFBRCxDQUE3QixFQUFxQ2hCLEtBQUssQ0FBQ3FDLE1BQTNDLENBQUo7QUFBQSxPQUZSO0FBR0EsYUFBTyxVQUFBckIsSUFBSTtBQUFBLGVBQUlnQixTQUFTLENBQUNFLFFBQVEsQ0FBQ2xCLElBQUQsQ0FBVCxFQUFpQmhELE1BQU0sQ0FBQ1gsS0FBeEIsQ0FBYjtBQUFBLE9BQVg7O0FBQ0YsU0FBSzFCLHdCQUFhUyxPQUFsQjtBQUNFLFVBQUksQ0FBQ2tDLE1BQUQsSUFBVyxDQUFDQSxNQUFNLENBQUNnRSxNQUFuQixJQUE2QixDQUFDdEUsTUFBTSxDQUFDeEMsT0FBekMsRUFBa0Q7QUFDaEQsZUFBT3NHLFdBQVA7QUFDRDs7QUFDRCxVQUFNUyxvQkFBb0IsR0FBR3ZFLE1BQU0sQ0FBQ3hDLE9BQVAsQ0FDMUJnSCxHQUQwQixDQUN0QixVQUFBakcsRUFBRTtBQUFBLGVBQUkrQixNQUFNLENBQUNLLElBQVAsQ0FBWSxVQUFBQyxDQUFDO0FBQUEsaUJBQUlBLENBQUMsQ0FBQ3JDLEVBQUYsS0FBU0EsRUFBYjtBQUFBLFNBQWIsQ0FBSjtBQUFBLE9BRG9CLEVBRTFCeUIsTUFGMEIsQ0FFbkIsVUFBQVksQ0FBQztBQUFBLGVBQUlBLENBQUMsSUFBSUEsQ0FBQyxDQUFDNkQsTUFBRixDQUFTbkgsTUFBVCxLQUFvQkEsTUFBN0I7QUFBQSxPQUZrQixFQUcxQmtILEdBSDBCLENBR3RCLFVBQUE5RCxLQUFLO0FBQUEsZUFBSStCLHVCQUF1QixDQUFDL0IsS0FBRCxFQUFRVixNQUFSLEVBQWdCMEMsYUFBaEIsQ0FBM0I7QUFBQSxPQUhpQixDQUE3QjtBQUtBLGFBQU8sVUFBQU0sSUFBSTtBQUFBLGVBQUl1QixvQkFBb0IsQ0FBQ3JCLEtBQXJCLENBQTJCLFVBQUF3QixVQUFVO0FBQUEsaUJBQUlBLFVBQVUsQ0FBQzFCLElBQUQsQ0FBZDtBQUFBLFNBQXJDLENBQUo7QUFBQSxPQUFYOztBQUNGO0FBQ0UsYUFBT2MsV0FBUDtBQTNCSjtBQTZCRDs7QUFFTSxTQUFTYSxrQkFBVCxDQUE0QnJILE1BQTVCLEVBQThFO0FBQ25GLFNBQU93QyxnQkFBZ0IsQ0FBQztBQUFDeEMsSUFBQUEsTUFBTSxFQUFOQTtBQUFELEdBQUQsQ0FBdkI7QUFDRDs7QUFFTSxTQUFTc0gsdUJBQVQsUUFZTGxDLGFBWkssRUFhUztBQUFBLE1BWFptQyxvQkFXWSxTQVhaQSxvQkFXWTtBQUFBLE1BVlpDLFVBVVksU0FWWkEsVUFVWTtBQUFBLE1BVFpDLFdBU1ksU0FUWkEsV0FTWTtBQUNkLE1BQU1DLHNCQUFnQyxHQUFHLEVBQXpDO0FBQ0EsTUFBTUMsYUFBdUIsR0FBRyxFQUFoQztBQUVBLE1BQU1DLGFBQWEsR0FBRztBQUFDdkIsSUFBQUEsS0FBSyxFQUFFLENBQUMsQ0FBVDtBQUFZakIsSUFBQUEsYUFBYSxFQUFiQTtBQUFaLEdBQXRCOztBQUNBLE1BQU15QyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQW1CLENBQUNuRixNQUFEO0FBQUEsV0FBb0IrRSxXQUFXLENBQUMvRSxNQUFNLENBQUN6QixFQUFSLENBQVgsQ0FBdUIyRyxhQUF2QixDQUFwQjtBQUFBLEdBQXpCOztBQUVBLE1BQU1FLE9BQU8sR0FBRzFDLGFBQWEsQ0FBQzBDLE9BQWQsRUFBaEI7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRCxPQUFwQixFQUE2QixFQUFFQyxDQUEvQixFQUFrQztBQUNoQ0gsSUFBQUEsYUFBYSxDQUFDdkIsS0FBZCxHQUFzQjBCLENBQXRCO0FBRUEsUUFBTUMsY0FBYyxHQUFHVCxvQkFBb0IsSUFBSUEsb0JBQW9CLENBQUMzQixLQUFyQixDQUEyQmlDLGdCQUEzQixDQUEvQzs7QUFDQSxRQUFJRyxjQUFKLEVBQW9CO0FBQ2xCTixNQUFBQSxzQkFBc0IsQ0FBQ08sSUFBdkIsQ0FBNEJMLGFBQWEsQ0FBQ3ZCLEtBQTFDO0FBQ0Q7O0FBRUQsUUFBTTZCLGNBQWMsR0FBR1YsVUFBVSxJQUFJQSxVQUFVLENBQUM1QixLQUFYLENBQWlCaUMsZ0JBQWpCLENBQXJDOztBQUNBLFFBQUlLLGNBQUosRUFBb0I7QUFDbEJQLE1BQUFBLGFBQWEsQ0FBQ00sSUFBZCxDQUFtQkwsYUFBYSxDQUFDdkIsS0FBakM7QUFDRDtBQUNGOztBQUVELHlDQUNNa0Isb0JBQW9CLEdBQUc7QUFBQ0csSUFBQUEsc0JBQXNCLEVBQXRCQTtBQUFELEdBQUgsR0FBOEIsRUFEeEQsR0FFTUYsVUFBVSxHQUFHO0FBQUNHLElBQUFBLGFBQWEsRUFBYkE7QUFBRCxHQUFILEdBQXFCLEVBRnJDO0FBSUQ7QUFFRDtBQUNBO0FBQ0E7OztBQUNPLFNBQVNRLGVBQVQsQ0FDTG5JLE1BREssRUFFTG9JLE9BRkssRUFJUztBQUFBLE1BRGRDLEdBQ2MsdUVBRFUsRUFDVjtBQUNkLE1BQU1DLFlBQTBCLEdBQUc7QUFDakNDLElBQUFBLGFBQWEsRUFBRSxFQURrQjtBQUVqQ3BILElBQUFBLFdBQVcsRUFBRSxFQUZvQjtBQUdqQ3FILElBQUFBLEdBQUcsRUFBRSxFQUg0QjtBQUlqQ25HLElBQUFBLEdBQUcsRUFBRTtBQUo0QixHQUFuQztBQU9BK0YsRUFBQUEsT0FBTyxDQUFDSyxPQUFSLENBQWdCLFVBQUFDLENBQUMsRUFBSTtBQUNuQixRQUFJeEYsa0JBQWtCLENBQUN3RixDQUFDLENBQUM5RyxJQUFILEVBQVM4RyxDQUFDLENBQUMzRyxLQUFYLENBQWxCLElBQXVDLG9CQUFRMkcsQ0FBQyxDQUFDMUksTUFBVixFQUFrQjZDLFFBQWxCLENBQTJCN0MsTUFBM0IsQ0FBM0MsRUFBK0U7QUFDN0UsT0FBQzBJLENBQUMsQ0FBQ3ZILFdBQUYsSUFBaUJrSCxHQUFHLENBQUNNLFlBQXJCLEdBQ0dMLFlBQVksQ0FBQ25ILFdBRGhCLEdBRUdtSCxZQUFZLENBQUNDLGFBRmpCLEVBR0VOLElBSEYsQ0FHT1MsQ0FIUDtBQUtBLE9BQUNBLENBQUMsQ0FBQ3JHLEdBQUYsSUFBUyxDQUFDZ0csR0FBRyxDQUFDTyxPQUFkLEdBQXdCTixZQUFZLENBQUNqRyxHQUFyQyxHQUEyQ2lHLFlBQVksQ0FBQ0UsR0FBekQsRUFBOERQLElBQTlELENBQW1FUyxDQUFuRTtBQUNEO0FBQ0YsR0FURDtBQVdBLFNBQU9KLFlBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU08sV0FBVCxDQUNMUCxZQURLLEVBR1U7QUFBQSxNQURmUSxlQUNlLHVFQURzQixFQUN0QjtBQUNmLE1BQUlDLGFBQXFDLEdBQUcsRUFBNUM7QUFFQ0MsRUFBQUEsTUFBTSxDQUFDQyxPQUFQLENBQWVYLFlBQWYsQ0FBRCxDQUF3REcsT0FBeEQsQ0FBZ0UsaUJBQXFCO0FBQUE7QUFBQSxRQUFuQlMsTUFBbUI7QUFBQSxRQUFYQyxLQUFXOztBQUNuRkEsSUFBQUEsS0FBSyxDQUFDVixPQUFOLENBQWMsVUFBQS9GLE1BQU0sRUFBSTtBQUN0QixVQUFNMEcsU0FBaUIsR0FBRyxDQUFDTixlQUFlLENBQUNJLE1BQUQsQ0FBZixJQUEyQixFQUE1QixFQUFnQzdGLElBQWhDLENBQ3hCLFVBQUNxRixDQUFEO0FBQUEsZUFBZUEsQ0FBQyxDQUFDekgsRUFBRixLQUFTeUIsTUFBTSxDQUFDekIsRUFBL0I7QUFBQSxPQUR3QixDQUExQjs7QUFJQSxVQUFJLENBQUNtSSxTQUFMLEVBQWdCO0FBQ2Q7QUFDQUwsUUFBQUEsYUFBYSxHQUFHLGdCQUFJLENBQUNHLE1BQUQsRUFBU3hHLE1BQU0sQ0FBQ3pCLEVBQWhCLENBQUosRUFBeUIsT0FBekIsRUFBa0M4SCxhQUFsQyxDQUFoQjtBQUNELE9BSEQsTUFHTztBQUNMO0FBQ0EsU0FBQyxNQUFELEVBQVMsT0FBVCxFQUFrQixRQUFsQixFQUE0Qk4sT0FBNUIsQ0FBb0MsVUFBQVksSUFBSSxFQUFJO0FBQzFDLGNBQUkzRyxNQUFNLENBQUMyRyxJQUFELENBQU4sS0FBaUJELFNBQVMsQ0FBQ0MsSUFBRCxDQUE5QixFQUFzQztBQUNwQ04sWUFBQUEsYUFBYSxHQUFHLGdCQUFJLENBQUNHLE1BQUQsRUFBU3hHLE1BQU0sQ0FBQ3pCLEVBQWhCLENBQUosWUFBNEJvSSxJQUE1QixlQUE0Q04sYUFBNUMsQ0FBaEI7QUFDRDtBQUNGLFNBSkQ7QUFLRDtBQUNGLEtBaEJEO0FBa0JBLEtBQUNELGVBQWUsQ0FBQ0ksTUFBRCxDQUFmLElBQTJCLEVBQTVCLEVBQWdDVCxPQUFoQyxDQUF3QyxVQUFDVyxTQUFELEVBQXVCO0FBQzdEO0FBQ0EsVUFBSSxDQUFDRCxLQUFLLENBQUM5RixJQUFOLENBQVcsVUFBQXFGLENBQUM7QUFBQSxlQUFJQSxDQUFDLENBQUN6SCxFQUFGLEtBQVNtSSxTQUFTLENBQUNuSSxFQUF2QjtBQUFBLE9BQVosQ0FBTCxFQUE2QztBQUMzQzhILFFBQUFBLGFBQWEsR0FBRyxnQkFBSSxDQUFDRyxNQUFELEVBQVNFLFNBQVMsQ0FBQ25JLEVBQW5CLENBQUosRUFBNEIsU0FBNUIsRUFBdUM4SCxhQUF2QyxDQUFoQjtBQUNEO0FBQ0YsS0FMRDtBQU1ELEdBekJEO0FBMkJBLHlDQUFXO0FBQUNSLElBQUFBLGFBQWEsRUFBRSxJQUFoQjtBQUFzQnBILElBQUFBLFdBQVcsRUFBRSxJQUFuQztBQUF5Q3FILElBQUFBLEdBQUcsRUFBRSxJQUE5QztBQUFvRG5HLElBQUFBLEdBQUcsRUFBRTtBQUF6RCxHQUFYLEdBQThFMEcsYUFBOUU7QUFDRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVM3RSx5QkFBVCxDQUFtQ25DLEtBQW5DLFNBQTJFO0FBQUEsTUFBZkQsTUFBZSxTQUFmQSxNQUFlO0FBQUEsTUFBUEYsSUFBTyxTQUFQQSxJQUFPOztBQUNoRixNQUFJLENBQUNBLElBQUwsRUFBVztBQUNULFdBQU8sS0FBUDtBQUNELEdBSCtFLENBSWhGO0FBQ0E7OztBQUNBLE1BQUlBLElBQUksS0FBS3ZCLHdCQUFhUyxPQUF0QixJQUFpQyxDQUFDZ0IsTUFBdEMsRUFBOEM7QUFDNUMsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsVUFBUUYsSUFBUjtBQUNFLFNBQUt2Qix3QkFBYUssS0FBbEI7QUFDQSxTQUFLTCx3QkFBYUMsU0FBbEI7QUFDRSxVQUFJLENBQUN1RyxLQUFLLENBQUNDLE9BQU4sQ0FBYy9FLEtBQWQsQ0FBRCxJQUF5QkEsS0FBSyxDQUFDaUYsTUFBTixLQUFpQixDQUE5QyxFQUFpRDtBQUMvQyxlQUFPbEYsTUFBTSxDQUFDb0YsR0FBUCxDQUFXLFVBQUFULENBQUM7QUFBQSxpQkFBSUEsQ0FBSjtBQUFBLFNBQVosQ0FBUDtBQUNEOztBQUVELGFBQU8xRSxLQUFLLENBQUNtRixHQUFOLENBQVUsVUFBQ1QsQ0FBRCxFQUFJc0IsQ0FBSjtBQUFBLGVBQVcsbUNBQW1CdEIsQ0FBbkIsS0FBeUJDLFNBQVMsQ0FBQ0QsQ0FBRCxFQUFJM0UsTUFBSixDQUFsQyxHQUFnRDJFLENBQWhELEdBQW9EM0UsTUFBTSxDQUFDaUcsQ0FBRCxDQUFyRTtBQUFBLE9BQVYsQ0FBUDs7QUFFRixTQUFLMUgsd0JBQWFRLFdBQWxCO0FBQ0UsVUFBSSxDQUFDZ0csS0FBSyxDQUFDQyxPQUFOLENBQWMvRSxLQUFkLENBQUwsRUFBMkI7QUFDekIsZUFBTyxFQUFQO0FBQ0Q7O0FBQ0QsVUFBTXVILGFBQWEsR0FBR3ZILEtBQUssQ0FBQ1csTUFBTixDQUFhLFVBQUErRCxDQUFDO0FBQUEsZUFBSTNFLE1BQU0sQ0FBQ2UsUUFBUCxDQUFnQjRELENBQWhCLENBQUo7QUFBQSxPQUFkLENBQXRCO0FBQ0EsYUFBTzZDLGFBQWEsQ0FBQ3RDLE1BQWQsR0FBdUJzQyxhQUF2QixHQUF1QyxFQUE5Qzs7QUFFRixTQUFLakosd0JBQWFPLE1BQWxCO0FBQ0UsYUFBT2tCLE1BQU0sQ0FBQ2UsUUFBUCxDQUFnQmQsS0FBaEIsSUFBeUJBLEtBQXpCLEdBQWlDLElBQXhDOztBQUNGLFNBQUsxQix3QkFBYVMsT0FBbEI7QUFDRSxhQUFPaUIsS0FBUDs7QUFFRjtBQUNFLGFBQU8sSUFBUDtBQXRCSjtBQXdCRDtBQUNEOztBQUVBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU3dILHFCQUFULENBQ0xuRSxhQURLLEVBRUxtQixhQUZLLEVBR2E7QUFDbEIsTUFBSXpFLE1BQXdCLEdBQUcsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUEvQjtBQUNBLE1BQUlwQyxJQUFJLEdBQUcsR0FBWDtBQUVBLE1BQU1pSCxXQUFXLEdBQUd2QixhQUFhLENBQUNvRSxRQUFkLENBQXVCakQsYUFBdkIsQ0FBcEI7O0FBRUEsTUFBSW5CLGFBQWEsQ0FBQzBDLE9BQWQsS0FBMEIsQ0FBOUIsRUFBaUM7QUFDL0JoRyxJQUFBQSxNQUFNLEdBQUcySCxVQUFVLENBQUNDLGVBQVgsQ0FBMkIvQyxXQUEzQixDQUFUO0FBQ0EsUUFBTWdELElBQUksR0FBRzdILE1BQU0sQ0FBQyxDQUFELENBQU4sR0FBWUEsTUFBTSxDQUFDLENBQUQsQ0FBL0IsQ0FGK0IsQ0FJL0I7O0FBQ0EsUUFBSSxDQUFDNkgsSUFBTCxFQUFXO0FBQ1Q3SCxNQUFBQSxNQUFNLENBQUMsQ0FBRCxDQUFOLEdBQVlBLE1BQU0sQ0FBQyxDQUFELENBQU4sR0FBWSxDQUF4QjtBQUNEOztBQUVEcEMsSUFBQUEsSUFBSSxHQUFHa0ssa0JBQWtCLENBQUNELElBQUQsQ0FBbEIsSUFBNEJqSyxJQUFuQztBQUNBb0MsSUFBQUEsTUFBTSxDQUFDLENBQUQsQ0FBTixHQUFZK0gsa0JBQWtCLENBQUMvSCxNQUFNLENBQUMsQ0FBRCxDQUFQLEVBQVlwQyxJQUFaLEVBQWtCLE9BQWxCLENBQTlCO0FBQ0FvQyxJQUFBQSxNQUFNLENBQUMsQ0FBRCxDQUFOLEdBQVkrSCxrQkFBa0IsQ0FBQy9ILE1BQU0sQ0FBQyxDQUFELENBQVAsRUFBWXBDLElBQVosRUFBa0IsTUFBbEIsQ0FBOUI7QUFDRDs7QUFsQmlCLHNCQW9CcUJvSyxZQUFZLENBQUNoSSxNQUFELEVBQVM2RSxXQUFULENBcEJqQztBQUFBLE1Bb0JYekUsU0FwQlcsaUJBb0JYQSxTQXBCVztBQUFBLE1Bb0JBNkgsaUJBcEJBLGlCQW9CQUEsaUJBcEJBOztBQXNCbEIsU0FBTztBQUFDakksSUFBQUEsTUFBTSxFQUFOQSxNQUFEO0FBQVNwQyxJQUFBQSxJQUFJLEVBQUpBLElBQVQ7QUFBZXdDLElBQUFBLFNBQVMsRUFBVEEsU0FBZjtBQUEwQjZILElBQUFBLGlCQUFpQixFQUFqQkE7QUFBMUIsR0FBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBOzs7QUFDTyxTQUFTSCxrQkFBVCxDQUE0QkQsSUFBNUIsRUFBa0Q7QUFDdkRBLEVBQUFBLElBQUksR0FBR0ssSUFBSSxDQUFDQyxHQUFMLENBQVNOLElBQVQsQ0FBUDs7QUFFQSxNQUFJQSxJQUFJLEdBQUcsR0FBWCxFQUFnQjtBQUNkLFdBQU8sQ0FBUDtBQUNELEdBRkQsTUFFTyxJQUFJQSxJQUFJLEdBQUcsQ0FBWCxFQUFjO0FBQ25CLFdBQU8sSUFBUDtBQUNELEdBRk0sTUFFQSxJQUFJQSxJQUFJLEdBQUcsQ0FBWCxFQUFjO0FBQ25CLFdBQU8sS0FBUDtBQUNELEdBVHNELENBVXZEO0FBQ0E7OztBQUNBLE1BQU1PLENBQUMsR0FBR1AsSUFBSSxHQUFHLElBQWpCLENBWnVELENBYXZEOztBQUVBLE1BQU1RLGVBQWUsR0FBR0QsQ0FBQyxDQUFDRSxhQUFGLEVBQXhCO0FBQ0EsTUFBTUMsUUFBUSxHQUFHQyxVQUFVLENBQUNILGVBQWUsQ0FBQ0ksS0FBaEIsQ0FBc0IsR0FBdEIsRUFBMkIsQ0FBM0IsQ0FBRCxDQUEzQixDQWhCdUQsQ0FrQnZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsU0FBTyxJQUFJQyxnQkFBSixDQUFZLEVBQVosRUFBZ0JDLEdBQWhCLENBQW9CSixRQUFwQixFQUE4QkssUUFBOUIsRUFBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBOzs7QUFDTyxTQUFTQyx1QkFBVCxDQUNMdkYsYUFESyxFQUVMbUIsYUFGSyxFQUdpQjtBQUN0QjtBQUNBO0FBRUEsTUFBTUksV0FBVyxHQUFHdkIsYUFBYSxDQUFDb0UsUUFBZCxDQUF1QmpELGFBQXZCLENBQXBCO0FBQ0EsTUFBTXpFLE1BQU0sR0FBRzJILFVBQVUsQ0FBQ0MsZUFBWCxDQUEyQi9DLFdBQTNCLENBQWY7QUFDQSxNQUFNaUUsaUJBQWlCLEdBQUdDLDJCQUEyQixDQUFDL0ksTUFBRCxDQUFyRDtBQUVBLE1BQUlwQyxJQUFJLEdBQUcsSUFBWDtBQUVBLE1BQU1pSyxJQUFJLEdBQUc3SCxNQUFNLENBQUMsQ0FBRCxDQUFOLEdBQVlBLE1BQU0sQ0FBQyxDQUFELENBQS9CLENBVnNCLENBV3RCOztBQUNBLE1BQUksQ0FBQzZILElBQUwsRUFBVztBQUNUN0gsSUFBQUEsTUFBTSxDQUFDLENBQUQsQ0FBTixHQUFZQSxNQUFNLENBQUMsQ0FBRCxDQUFOLEdBQVksSUFBeEI7QUFDRDs7QUFDRCxNQUFNZ0osS0FBSyxHQUFHdEwsZ0JBQWdCLENBQUM2RCxJQUFqQixDQUFzQixVQUFBcUYsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQ2pKLEdBQUYsSUFBU2tLLElBQWI7QUFBQSxHQUF2QixDQUFkOztBQUNBLE1BQUltQixLQUFKLEVBQVc7QUFDVHBMLElBQUFBLElBQUksR0FBR29MLEtBQUssQ0FBQ3BMLElBQWI7QUFDRDs7QUFsQnFCLHVCQW9CaUJvSyxZQUFZLENBQUNoSSxNQUFELEVBQVM2RSxXQUFULENBcEI3QjtBQUFBLE1Bb0JmekUsU0FwQmUsa0JBb0JmQSxTQXBCZTtBQUFBLE1Bb0JKNkgsaUJBcEJJLGtCQW9CSkEsaUJBcEJJOztBQXNCdEIsU0FBTztBQUNMakksSUFBQUEsTUFBTSxFQUFOQSxNQURLO0FBRUxwQyxJQUFBQSxJQUFJLEVBQUpBLElBRks7QUFHTGlILElBQUFBLFdBQVcsRUFBWEEsV0FISztBQUlMekUsSUFBQUEsU0FBUyxFQUFUQSxTQUpLO0FBS0w2SCxJQUFBQSxpQkFBaUIsRUFBakJBLGlCQUxLO0FBTUxhLElBQUFBLGlCQUFpQixFQUFqQkE7QUFOSyxHQUFQO0FBUUQ7O0FBRU0sU0FBU0csa0JBQVQsQ0FDTGpKLE1BREssRUFFTDZFLFdBRkssRUFHTHFFLElBSEssRUFJVztBQUNoQixTQUFPLDBCQUNKQyxVQURJLENBQ08sb0JBQU1uSixNQUFNLENBQUMsQ0FBRCxDQUFaLEVBQWlCQSxNQUFNLENBQUMsQ0FBRCxDQUF2QixFQUE0QmtKLElBQTVCLENBRFAsRUFFSmxKLE1BRkksQ0FFR0EsTUFGSCxFQUVXNkUsV0FGWCxFQUdKTyxHQUhJLENBR0EsVUFBQWdFLEdBQUc7QUFBQSxXQUFLO0FBQ1hDLE1BQUFBLEtBQUssRUFBRUQsR0FBRyxDQUFDbEUsTUFEQTtBQUVYa0UsTUFBQUEsR0FBRyxFQUFIQSxHQUZXO0FBR1hFLE1BQUFBLEVBQUUsRUFBRUYsR0FBRyxDQUFDRSxFQUhHO0FBSVhDLE1BQUFBLEVBQUUsRUFBRUgsR0FBRyxDQUFDRztBQUpHLEtBQUw7QUFBQSxHQUhILENBQVA7QUFTRDtBQUNEO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU3ZCLFlBQVQsQ0FDTGhJLE1BREssRUFFTDZFLFdBRkssRUFHMkQ7QUFDaEUsTUFBTXpFLFNBQVMsR0FBRzZJLGtCQUFrQixDQUFDakosTUFBRCxFQUFTNkUsV0FBVCxFQUFzQjlHLGFBQXRCLENBQXBDO0FBQ0EsTUFBTWtLLGlCQUFpQixHQUFHZ0Isa0JBQWtCLENBQUNqSixNQUFELEVBQVM2RSxXQUFULEVBQXNCN0cscUJBQXRCLENBQTVDO0FBRUEsU0FBTztBQUFDb0MsSUFBQUEsU0FBUyxFQUFUQSxTQUFEO0FBQVk2SCxJQUFBQSxpQkFBaUIsRUFBakJBO0FBQVosR0FBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0Ysa0JBQVQsQ0FBNEJ5QixHQUE1QixFQUF5QzVMLElBQXpDLEVBQXVENkwsS0FBdkQsRUFBd0Y7QUFDN0YsTUFBSUEsS0FBSyxLQUFLLE9BQWQsRUFBdUI7QUFDckIsV0FBT3ZCLElBQUksQ0FBQ3dCLEtBQUwsQ0FBV0YsR0FBRyxJQUFJLElBQUk1TCxJQUFSLENBQWQsS0FBZ0MsSUFBSUEsSUFBcEMsQ0FBUDtBQUNEOztBQUVELFNBQU9zSyxJQUFJLENBQUN5QixJQUFMLENBQVVILEdBQUcsSUFBSSxJQUFJNUwsSUFBUixDQUFiLEtBQStCLElBQUlBLElBQW5DLENBQVA7QUFDRDs7QUFFTSxTQUFTZ0gsU0FBVCxDQUFtQjRFLEdBQW5CLEVBQTZCeEosTUFBN0IsRUFBd0Q7QUFDN0QsTUFBSSxDQUFDK0UsS0FBSyxDQUFDQyxPQUFOLENBQWNoRixNQUFkLENBQUwsRUFBNEI7QUFDMUIsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsU0FBT3dKLEdBQUcsSUFBSXhKLE1BQU0sQ0FBQyxDQUFELENBQWIsSUFBb0J3SixHQUFHLElBQUl4SixNQUFNLENBQUMsQ0FBRCxDQUF4QztBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNnRSxXQUFULENBQXFCTixLQUFyQixFQUFzQzFFLE9BQXRDLEVBQTZEO0FBQ2xFLFNBQU8sK0JBQWMsb0JBQVUwRSxLQUFWLENBQWQsRUFBZ0MxRSxPQUFoQyxDQUFQO0FBQ0Q7O0FBQ00sU0FBUytKLDJCQUFULENBQXFDL0ksTUFBckMsRUFBOEU7QUFDbkYsTUFBSSxDQUFDNEosaUJBQWlCLENBQUM1SixNQUFELENBQXRCLEVBQWdDO0FBQzlCLFdBQU8sSUFBUDtBQUNEOztBQUVELE1BQU02SCxJQUFJLEdBQUc3SCxNQUFNLENBQUMsQ0FBRCxDQUFOLEdBQVlBLE1BQU0sQ0FBQyxDQUFELENBQS9CLENBTG1GLENBT25GO0FBQ0E7O0FBQ0EsU0FBTzZILElBQUksR0FBR3BLLFlBQVAsR0FBc0IsR0FBdEIsR0FBNEJvSyxJQUFJLEdBQUd0SyxXQUFQLEdBQXFCLE1BQXJCLEdBQThCLE9BQWpFO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU3NNLG1CQUFULENBQTZCakosTUFBN0IsRUFBbUQ7QUFDeEQsU0FDRSxDQUFBQSxNQUFNLFNBQU4sSUFBQUEsTUFBTSxXQUFOLFlBQUFBLE1BQU0sQ0FBRWQsSUFBUixLQUFnQmlGLEtBQUssQ0FBQ0MsT0FBTixDQUFjcEUsTUFBZCxhQUFjQSxNQUFkLHVCQUFjQSxNQUFNLENBQUV6QyxJQUF0QixDQUFoQixLQUFnRCxDQUFBeUMsTUFBTSxTQUFOLElBQUFBLE1BQU0sV0FBTixZQUFBQSxNQUFNLENBQUV6QyxJQUFSLENBQWErRyxNQUFiLE1BQXVCdEUsTUFBdkIsYUFBdUJBLE1BQXZCLHVCQUF1QkEsTUFBTSxDQUFFeEMsT0FBUixDQUFnQjhHLE1BQXZDLENBQWhELENBREY7QUFHRDtBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUNBOzs7QUFDTyxTQUFTOUQsa0JBQVQsQ0FBNEJ0QixJQUE1QixFQUFpREcsS0FBakQsRUFBc0U7QUFDM0UsTUFBSSxDQUFDSCxJQUFMLEVBQVc7QUFDVCxXQUFPLEtBQVA7QUFDRDs7QUFDRCxVQUFRQSxJQUFSO0FBQ0UsU0FBS3ZCLHdCQUFhTyxNQUFsQjtBQUNFLGFBQU9tQixLQUFLLEtBQUssSUFBVixJQUFrQkEsS0FBSyxLQUFLLEtBQW5DOztBQUVGLFNBQUsxQix3QkFBYUssS0FBbEI7QUFDQSxTQUFLTCx3QkFBYUMsU0FBbEI7QUFDRSxhQUFPdUcsS0FBSyxDQUFDQyxPQUFOLENBQWMvRSxLQUFkLEtBQXdCQSxLQUFLLENBQUM2RCxLQUFOLENBQVksVUFBQWdHLENBQUM7QUFBQSxlQUFJQSxDQUFDLEtBQUssSUFBTixJQUFjLENBQUNDLEtBQUssQ0FBQ0QsQ0FBRCxDQUF4QjtBQUFBLE9BQWIsQ0FBL0I7O0FBRUYsU0FBS3ZMLHdCQUFhUSxXQUFsQjtBQUNFLGFBQU9nRyxLQUFLLENBQUNDLE9BQU4sQ0FBYy9FLEtBQWQsS0FBd0IrSixPQUFPLENBQUMvSixLQUFLLENBQUNpRixNQUFQLENBQXRDOztBQUVGLFNBQUszRyx3QkFBYTBMLEtBQWxCO0FBQ0UsYUFBT0QsT0FBTyxDQUFDL0osS0FBSyxDQUFDaUYsTUFBUCxDQUFkOztBQUVGLFNBQUszRyx3QkFBYVMsT0FBbEI7QUFDRSxVQUFNa0wsV0FBVyxHQUFHLHdCQUFJakssS0FBSixFQUFXLENBQUMsVUFBRCxFQUFhLGFBQWIsQ0FBWCxDQUFwQjtBQUNBLGFBQU8rSixPQUFPLENBQUMvSixLQUFLLElBQUlBLEtBQUssQ0FBQ2QsRUFBZixJQUFxQitLLFdBQXRCLENBQWQ7O0FBRUY7QUFDRSxhQUFPLElBQVA7QUFuQko7QUFxQkQ7O0FBRU0sU0FBU0Msb0JBQVQsQ0FDTHZKLE1BREssRUFFTEssT0FGSyxFQUdxQztBQUMxQyxNQUFJTCxNQUFNLENBQUNWLFFBQVAsS0FBb0JDLHNCQUFXQyxTQUEvQixJQUE0QyxDQUFDUSxNQUFNLENBQUNQLEtBQXhELEVBQStEO0FBQzdEO0FBQ0EsV0FBTyxFQUFQO0FBQ0Q7O0FBSnlDLDRCQU1mTyxNQU5lLENBTW5DaUUsV0FObUM7QUFBQSxNQU1uQ0EsV0FObUMsb0NBTXJCLEVBTnFCO0FBQUEsTUFPbkN4RSxLQVBtQyxHQU8xQk8sTUFQMEIsQ0FPbkNQLEtBUG1DO0FBUTFDLE1BQU1OLFFBQVEsR0FBR2tCLE9BQU8sQ0FBQ21KLGlCQUFSLENBQTBCL0osS0FBSyxDQUFDbEMsSUFBaEMsQ0FBakI7O0FBQ0EsTUFBSTRCLFFBQVEsR0FBRyxDQUFmLEVBQWtCO0FBQ2hCc0ssd0JBQVFDLElBQVIsaUJBQXNCakssS0FBSyxDQUFDbEMsSUFBNUI7O0FBQ0EsV0FBTztBQUFDb00sTUFBQUEsU0FBUyxFQUFFLEVBQVo7QUFBZ0JsSyxNQUFBQSxLQUFLLEVBQUxBO0FBQWhCLEtBQVA7QUFDRCxHQVp5QyxDQWMxQzs7O0FBQ0EsTUFBTW1LLE1BQU0sR0FBR3ZKLE9BQU8sQ0FBQ3FDLGFBQVIsQ0FDWjhCLEdBRFksQ0FFWCxVQUFDcUYsR0FBRCxFQUFNQyxRQUFOO0FBQUEsV0FBb0I7QUFDbEJ0QyxNQUFBQSxDQUFDLEVBQUV2RCxXQUFXLENBQUM2RixRQUFELENBREk7QUFFbEJDLE1BQUFBLENBQUMsRUFBRUYsR0FBRyxDQUFDRyxPQUFKLENBQVk3SyxRQUFaO0FBRmUsS0FBcEI7QUFBQSxHQUZXLEVBTVgsSUFOVyxFQVFaYSxNQVJZLENBUUw7QUFBQSxRQUFFd0gsQ0FBRixTQUFFQSxDQUFGO0FBQUEsUUFBS3VDLENBQUwsU0FBS0EsQ0FBTDtBQUFBLFdBQVk5TSxNQUFNLENBQUNrRyxRQUFQLENBQWdCcUUsQ0FBaEIsS0FBc0J2SyxNQUFNLENBQUNrRyxRQUFQLENBQWdCNEcsQ0FBaEIsQ0FBbEM7QUFBQSxHQVJLLEVBU1pFLElBVFksQ0FTUCxVQUFDQyxDQUFELEVBQUlDLENBQUo7QUFBQSxXQUFVLHdCQUFVRCxDQUFDLENBQUMxQyxDQUFaLEVBQWUyQyxDQUFDLENBQUMzQyxDQUFqQixDQUFWO0FBQUEsR0FUTyxDQUFmO0FBV0EsTUFBTTRDLE9BQU8sR0FBRyxxQkFBT1IsTUFBUCxFQUFlLFVBQUE3RixDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDZ0csQ0FBTjtBQUFBLEdBQWhCLENBQWhCO0FBQ0EsTUFBTU0sT0FBTyxHQUFHLENBQUNULE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVXBDLENBQVgsRUFBY29DLE1BQU0sQ0FBQ0EsTUFBTSxDQUFDdEYsTUFBUCxHQUFnQixDQUFqQixDQUFOLENBQTBCa0QsQ0FBeEMsQ0FBaEI7QUFFQSxTQUFPO0FBQUNtQyxJQUFBQSxTQUFTLEVBQUU7QUFBQ0MsTUFBQUEsTUFBTSxFQUFOQSxNQUFEO0FBQVNRLE1BQUFBLE9BQU8sRUFBUEEsT0FBVDtBQUFrQkMsTUFBQUEsT0FBTyxFQUFQQTtBQUFsQixLQUFaO0FBQXdDNUssSUFBQUEsS0FBSyxFQUFMQTtBQUF4QyxHQUFQO0FBQ0Q7O0FBRU0sU0FBUzZLLHdCQUFULENBQWtDdEssTUFBbEMsRUFBaUU7QUFDdEUsTUFBTXVLLGVBQWdGLEdBQ3BGdkssTUFBTSxDQUFDZCxJQUFQLElBQWV4QixpQkFBaUIsQ0FBQ3NDLE1BQU0sQ0FBQ2QsSUFBUixDQURsQzs7QUFFQSxNQUFJLENBQUNxTCxlQUFMLEVBQXNCO0FBQ3BCLFdBQU8sSUFBUDtBQUNEOztBQUVELE1BQUksQ0FBQ3ZLLE1BQU0sQ0FBQ1AsS0FBWixFQUFtQjtBQUNqQixXQUFPOEssZUFBZSxXQUF0QjtBQUNEOztBQUVELFNBQU9BLGVBQWUsQ0FBQ3ZLLE1BQU0sQ0FBQ1AsS0FBUCxDQUFhUCxJQUFkLENBQWYsSUFBc0MsSUFBN0M7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTc0wsc0JBQVQsQ0FJTEMsVUFKSyxFQUtMQyxRQUxLLEVBTUxoRixPQU5LLEVBT0xwRixNQVBLLEVBUWM7QUFDbkIsTUFBTUosT0FBTyxHQUFHLG9CQUFRdUssVUFBUixDQUFoQjtBQUNBLFNBQU92SyxPQUFPLENBQUN5SyxNQUFSLENBQWUsVUFBQ0MsR0FBRCxFQUFNdE4sTUFBTixFQUFpQjtBQUNyQyxRQUFNdU4sY0FBYyxHQUFHLENBQUN2SyxNQUFNLElBQUksRUFBWCxFQUFlTixNQUFmLENBQXNCLFVBQUFZLENBQUM7QUFBQSxhQUFJQSxDQUFDLENBQUM2RCxNQUFGLENBQVNuSCxNQUFULEtBQW9CQSxNQUF4QjtBQUFBLEtBQXZCLENBQXZCO0FBQ0EsUUFBTXdOLGNBQWMsR0FBR3BGLE9BQU8sQ0FBQzFGLE1BQVIsQ0FBZSxVQUFBK0QsQ0FBQztBQUFBLGFBQUloRSxpQkFBaUIsQ0FBQ2dFLENBQUQsRUFBSXpHLE1BQUosQ0FBckI7QUFBQSxLQUFoQixDQUF2QjtBQUNBLFFBQU15TixLQUFLLEdBQUdMLFFBQVEsQ0FBQ3BOLE1BQUQsQ0FBdEI7QUFFQSwyQ0FDS3NOLEdBREwsNENBRUd0TixNQUZILEVBRVl5TixLQUFLLENBQUNDLFdBQU4sQ0FBa0JGLGNBQWxCLEVBQWtDRCxjQUFsQyxFQUFrRCxFQUFsRCxDQUZaO0FBSUQsR0FUTSxFQVNKSCxRQVRJLENBQVA7QUFVRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU3RKLG9CQUFULENBQ0xwQixNQURLLEVBRUxLLE9BRkssRUFHTGMsU0FISyxFQVNMO0FBQUEsTUFMQUgsa0JBS0EsdUVBTHFCLENBS3JCO0FBQUEsTUFKQWlLLE1BSUE7QUFDQTtBQUNBLE1BQU01SixXQUFXLEdBQUc0SixNQUFNLElBQUlBLE1BQU0sQ0FBQ3RKLGNBQVAsQ0FBc0IsYUFBdEIsQ0FBVixHQUFpRHNKLE1BQU0sQ0FBQzVKLFdBQXhELEdBQXNFLEtBQTFGO0FBRUEsTUFBTTZKLFVBQVUsR0FBRzdLLE9BQU8sQ0FBQ21KLGlCQUFSLENBQTBCckksU0FBMUIsQ0FBbkIsQ0FKQSxDQUtBOztBQUNBLE1BQUkrSixVQUFVLEtBQUssQ0FBQyxDQUFwQixFQUF1QjtBQUNyQjtBQUNBLFdBQU87QUFBQ2xMLE1BQUFBLE1BQU0sRUFBRSxJQUFUO0FBQWVLLE1BQUFBLE9BQU8sRUFBUEE7QUFBZixLQUFQO0FBQ0QsR0FURCxDQVdBOzs7QUFDQSxNQUFNNkIsV0FBVyxHQUFHN0IsT0FBTyxDQUFDa0osb0JBQVIsQ0FBNkJwSSxTQUE3QixDQUFwQjs7QUFFQSxNQUFNZ0ssU0FBUyxtQ0FDVDlKLFdBQVcsR0FBRytKLHFCQUFxQixDQUFDcEwsTUFBRCxFQUFTa0MsV0FBVCxDQUF4QixtQ0FBb0RsQyxNQUFwRCxHQUErRGtDLFdBQS9ELENBREY7QUFFYjNFLElBQUFBLElBQUksRUFBRStJLE1BQU0sQ0FBQytFLE1BQVAscUNBQWtCLG9CQUFRckwsTUFBTSxDQUFDekMsSUFBZixDQUFsQix3Q0FBMkN5RCxrQkFBM0MsRUFBZ0VHLFNBQWhFLEVBRk87QUFHYmhDLElBQUFBLFFBQVEsRUFBRW1ILE1BQU0sQ0FBQytFLE1BQVAscUNBQWtCLG9CQUFRckwsTUFBTSxDQUFDYixRQUFmLENBQWxCLHdDQUNQNkIsa0JBRE8sRUFDY2tLLFVBRGQsRUFIRztBQU1iO0FBQ0E1TSxJQUFBQSxNQUFNLEVBQUU7QUFQSyxJQUFmOztBQVVBLFNBQU87QUFDTDBCLElBQUFBLE1BQU0sRUFBRW1MLFNBREg7QUFFTDlLLElBQUFBLE9BQU8sRUFBUEE7QUFGSyxHQUFQO0FBSUQ7QUFFRDtBQUNBO0FBQ0E7O0FBQ0E7OztBQUNPLFNBQVMrSyxxQkFBVCxDQUNMcEwsTUFESyxFQUVMa0MsV0FGSyxFQUc4QjtBQUNuQyxNQUFJLENBQUNsQyxNQUFMLEVBQWE7QUFDWCxXQUFPLElBQVA7QUFDRDs7QUFFRCxNQUFJLENBQUNrQyxXQUFMLEVBQWtCO0FBQ2hCLFdBQU9sQyxNQUFQO0FBQ0Q7O0FBRUQsTUFBS0EsTUFBTSxDQUFDbUMsU0FBUCxJQUFvQm5DLE1BQU0sQ0FBQ21DLFNBQVAsS0FBcUJELFdBQVcsQ0FBQ0MsU0FBdEQsSUFBb0UsQ0FBQ0QsV0FBVyxDQUFDOUMsTUFBckYsRUFBNkY7QUFDM0YsV0FBT1ksTUFBUDtBQUNEOztBQUVELE1BQU1zTCxjQUFjLEdBQUcsQ0FBQ3RMLE1BQU0sQ0FBQ1osTUFBUixHQUNuQjhDLFdBQVcsQ0FBQzlDLE1BRE8sR0FFbkIsOENBQUtZLE1BQU0sQ0FBQ1osTUFBUCxJQUFpQixFQUF0Qix1Q0FBK0I4QyxXQUFXLENBQUM5QyxNQUFaLElBQXNCLEVBQXJELEdBQTBENkssSUFBMUQsQ0FBK0QsVUFBQ0MsQ0FBRCxFQUFJQyxDQUFKO0FBQUEsV0FBVUQsQ0FBQyxHQUFHQyxDQUFkO0FBQUEsR0FBL0QsQ0FGSjs7QUFJQSxNQUFNZ0IsU0FBUyxpREFDVm5MLE1BRFUsR0FFVmtDLFdBRlU7QUFHYjlDLElBQUFBLE1BQU0sRUFBRSxDQUFDa00sY0FBYyxDQUFDLENBQUQsQ0FBZixFQUFvQkEsY0FBYyxDQUFDQSxjQUFjLENBQUNoSCxNQUFmLEdBQXdCLENBQXpCLENBQWxDO0FBSEssSUFBZjs7QUFNQSxVQUFRcEMsV0FBVyxDQUFDQyxTQUFwQjtBQUNFLFNBQUt0RSwyQkFBZ0J3RSxNQUFyQjtBQUNBLFNBQUt4RSwyQkFBZ0J5RSxJQUFyQjtBQUNFLDZDQUNLNkksU0FETDtBQUVFL0wsUUFBQUEsTUFBTSxFQUFFLHVCQUFPa00sY0FBUCxFQUF1QnJCLElBQXZCO0FBRlY7O0FBS0YsU0FBS3BNLDJCQUFnQjBFLFNBQXJCO0FBQ0UsVUFBTXZGLElBQUksR0FDUGdELE1BQUQsQ0FBNEJoRCxJQUE1QixHQUFvQ2tGLFdBQUQsQ0FBc0NsRixJQUF6RSxHQUNLZ0QsTUFBRCxDQUE0QmhELElBRGhDLEdBRUtrRixXQUFELENBQXNDbEYsSUFINUM7QUFLQSw2Q0FDS21PLFNBREw7QUFFRW5PLFFBQUFBLElBQUksRUFBSkE7QUFGRjs7QUFJRixTQUFLYSwyQkFBZ0JFLElBQXJCO0FBQ0EsU0FBS0YsMkJBQWdCQyxPQUFyQjtBQUNBO0FBQ0UsYUFBT3FOLFNBQVA7QUFyQko7QUF1QkQ7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7OztBQUNPLElBQU1JLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FDbENDLE9BRGtDLEVBRWxDQyxRQUZrQyxFQUdsQ0MsVUFIa0M7QUFBQSx5Q0FLL0JGLE9BTCtCO0FBTWxDak4sSUFBQUEsRUFBRSxFQUFFaU4sT0FBTyxDQUFDak4sRUFOc0I7QUFPbENtTixJQUFBQSxVQUFVLGdEQUNMRixPQUFPLENBQUNFLFVBREgsR0FFTEEsVUFGSztBQUdSRCxNQUFBQSxRQUFRLEVBQVJBO0FBSFE7QUFQd0I7QUFBQSxDQUE3Qjs7OztBQWNBLElBQU1FLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FBQzNGLENBQUQ7QUFBQSxTQUE2Qix3QkFBSUEsQ0FBSixFQUFPLENBQUMsWUFBRCxFQUFlLFVBQWYsQ0FBUCxDQUE3QjtBQUFBLENBQTdCO0FBRVA7QUFDQTtBQUNBOzs7OztBQUNPLFNBQVM0RixxQkFBVCxDQUVMdEwsTUFGSyxFQUVRa0wsT0FGUixFQUV5QztBQUM5QyxNQUFNbE8sTUFBTSxHQUFHZ0QsTUFBTSxDQUFDa0UsR0FBUCxDQUFXLFVBQUE1RCxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDNkQsTUFBRixDQUFTbkgsTUFBYjtBQUFBLEdBQVosRUFBaUMwQyxNQUFqQyxDQUF3QzZMLDZCQUF4QyxDQUFmO0FBQ0EsTUFBTXJPLE9BQU8sR0FBRzhDLE1BQU0sQ0FBQ2tFLEdBQVAsQ0FBVyxVQUFBNUQsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQ3JDLEVBQU47QUFBQSxHQUFaLENBQWhCO0FBQ0EsTUFBTWhCLElBQUksR0FBRytDLE1BQU0sQ0FBQ2tFLEdBQVAsQ0FBVyxVQUFBNUQsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQzZELE1BQUYsQ0FBU3FILEtBQWI7QUFBQSxHQUFaLENBQWI7QUFDQSxNQUFNOUwsTUFBTSxHQUFHRixnQkFBZ0IsQ0FBQztBQUFDeEMsSUFBQUEsTUFBTSxFQUFOQTtBQUFELEdBQUQsQ0FBL0I7QUFDQSx5Q0FDSzBDLE1BREw7QUFFRXZCLElBQUFBLFdBQVcsRUFBRSxJQUZmO0FBR0VTLElBQUFBLElBQUksRUFBRXZCLHdCQUFhUyxPQUhyQjtBQUlFYixJQUFBQSxJQUFJLEVBQUpBLElBSkY7QUFLRUMsSUFBQUEsT0FBTyxFQUFQQSxPQUxGO0FBTUU2QixJQUFBQSxLQUFLLEVBQUVrTSxvQkFBb0IsQ0FBQ0MsT0FBRCxFQUFVeEwsTUFBTSxDQUFDekIsRUFBakIsRUFBcUI7QUFBQ3dOLE1BQUFBLFNBQVMsRUFBRTtBQUFaLEtBQXJCO0FBTjdCO0FBUUQ7QUFFRDtBQUNBO0FBQ0E7OztBQU9PLFNBQVNDLGdCQUFULENBQ0xDLEtBREssRUFFTDNPLE1BRkssRUFHRjtBQUNILE1BQU00TyxjQUFjLEdBQUdELEtBQUssQ0FBQ3ZHLE9BQU4sQ0FBYzFGLE1BQWQsQ0FBcUIsVUFBQWdHLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUMxSSxNQUFGLENBQVM2QyxRQUFULENBQWtCN0MsTUFBbEIsQ0FBSjtBQUFBLEdBQXRCLENBQXZCO0FBQ0EsTUFBTStDLE9BQU8sR0FBRzRMLEtBQUssQ0FBQ3ZCLFFBQU4sQ0FBZXBOLE1BQWYsQ0FBaEI7O0FBRUEsTUFBSSxDQUFDK0MsT0FBTCxFQUFjO0FBQ1osV0FBTzRMLEtBQVA7QUFDRDs7QUFFRCxNQUFNRSxrQkFBa0IsR0FBRzlMLE9BQU8sQ0FBQytMLGNBQVIsQ0FBdUJGLGNBQXZCLEVBQXVDRCxLQUFLLENBQUMzTCxNQUE3QyxDQUEzQjtBQUVBLFNBQU8sZ0JBQUksQ0FBQyxVQUFELEVBQWFoRCxNQUFiLENBQUosRUFBMEI2TyxrQkFBMUIsRUFBOENGLEtBQTlDLENBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTs7O0FBRU8sU0FBU0ksNkJBQVQsQ0FLTEosS0FMSyxFQVdMO0FBQUEsTUFMQUssaUJBS0EsdUVBTG9DLEVBS3BDO0FBQ0E7QUFDQSxNQUFNQyxTQUFnQixHQUFHLEVBQXpCO0FBQ0EsTUFBTWhNLE1BQWEsR0FBRyxFQUF0QjtBQUhBLE1BSU9tSyxRQUpQLEdBSW1CdUIsS0FKbkIsQ0FJT3ZCLFFBSlA7QUFLQSxNQUFJOEIsZUFBZSxHQUFHOUIsUUFBdEIsQ0FMQSxDQU9BOztBQUNBNEIsRUFBQUEsaUJBQWlCLENBQUN2RyxPQUFsQixDQUEwQixVQUFBL0YsTUFBTSxFQUFJO0FBQ2xDO0FBQ0EsUUFBTXlLLFVBQVUsR0FBRyxvQkFBUXpLLE1BQU0sQ0FBQzFDLE1BQWYsQ0FBbkIsQ0FGa0MsQ0FJbEM7O0FBQ0EsUUFBSW1OLFVBQVUsQ0FBQ3ZILEtBQVgsQ0FBaUIsVUFBQWEsQ0FBQztBQUFBLGFBQUkyRyxRQUFRLENBQUMzRyxDQUFELENBQVIsSUFBZSxDQUFDa0ksS0FBSyxDQUFDUSxpQkFBTixDQUF3QjFJLENBQXhCLENBQXBCO0FBQUEsS0FBbEIsQ0FBSixFQUF1RTtBQUNyRTtBQURxRSwrQkFFQzBHLFVBQVUsQ0FBQ0UsTUFBWCxDQUtwRSxVQUFDQyxHQUFELEVBQU0zSyxTQUFOLEVBQW9CO0FBQ2xCLFlBQU1JLE9BQU8sR0FBR21NLGVBQWUsQ0FBQ3ZNLFNBQUQsQ0FBL0I7QUFDQSxZQUFNSyxNQUFNLEdBQUcyTCxLQUFLLENBQUMzTCxNQUFOLENBQWFOLE1BQWIsQ0FBb0IsVUFBQVksQ0FBQztBQUFBLGlCQUFJQSxDQUFDLENBQUM2RCxNQUFGLENBQVNuSCxNQUFULEtBQW9CK0MsT0FBTyxDQUFDOUIsRUFBaEM7QUFBQSxTQUFyQixDQUFmOztBQUZrQixvQ0FHdUNtRCxzQkFBc0IsQ0FDN0VrSixHQUFHLENBQUM4QixpQkFBSixDQUFzQnpNLFNBQXRCLEtBQW9DSSxPQUR5QyxFQUU3RUwsTUFGNkUsRUFHN0VNLE1BSDZFLENBSDdEO0FBQUEsWUFHSGdCLGFBSEcseUJBR1h0QixNQUhXO0FBQUEsWUFHcUJ1QixjQUhyQix5QkFHWWxCLE9BSFo7O0FBU2xCLFlBQUlpQixhQUFKLEVBQW1CO0FBQ2pCLGlEQUNLc0osR0FETDtBQUVFO0FBQ0E1SyxZQUFBQSxNQUFNLEVBQUU0SyxHQUFHLENBQUM1SyxNQUFKLG1DQUVDNEssR0FBRyxDQUFDNUssTUFGTCxHQUlDb0wscUJBQXFCLENBQUNSLEdBQUcsQ0FBQzVLLE1BQUwsRUFBYXNCLGFBQWIsQ0FKdEIsSUFNSkEsYUFUTjtBQVdFcUwsWUFBQUEsZUFBZSxnREFBTS9CLEdBQUcsQ0FBQytCLGVBQVYsSUFBMkIxTSxTQUEzQixFQVhqQjtBQWFFeU0sWUFBQUEsaUJBQWlCLGtDQUNaOUIsR0FBRyxDQUFDOEIsaUJBRFEsNENBRWR6TSxTQUZjLEVBRUZzQixjQUZFO0FBYm5CO0FBa0JEOztBQUVELGVBQU9xSixHQUFQO0FBQ0QsT0FwQ21FLEVBcUNwRTtBQUNFNUssUUFBQUEsTUFBTSxFQUFFLElBRFY7QUFFRTJNLFFBQUFBLGVBQWUsRUFBRSxFQUZuQjtBQUdFRCxRQUFBQSxpQkFBaUIsRUFBRTtBQUhyQixPQXJDb0UsQ0FGRDtBQUFBLFVBRXRERSxlQUZzRCxzQkFFOUQ1TSxNQUY4RDtBQUFBLFVBRXJDMk0sZUFGcUMsc0JBRXJDQSxlQUZxQztBQUFBLFVBRXBCRCxpQkFGb0Isc0JBRXBCQSxpQkFGb0I7O0FBOENyRSxVQUFJRSxlQUFlLElBQUkseUJBQVFuQyxVQUFSLEVBQW9Ca0MsZUFBcEIsQ0FBdkIsRUFBNkQ7QUFDM0RKLFFBQUFBLFNBQVMsQ0FBQ2hILElBQVYsQ0FBZXFILGVBQWY7QUFDQUosUUFBQUEsZUFBZSxtQ0FDVkEsZUFEVSxHQUVWRSxpQkFGVSxDQUFmO0FBSUQsT0FORCxNQU1PO0FBQ0xuTSxRQUFBQSxNQUFNLENBQUNnRixJQUFQLENBQVl2RixNQUFaO0FBQ0Q7QUFDRixLQXZERCxNQXVETztBQUNMTyxNQUFBQSxNQUFNLENBQUNnRixJQUFQLENBQVl2RixNQUFaO0FBQ0Q7QUFDRixHQS9ERDtBQWlFQSxTQUFPO0FBQUN1TSxJQUFBQSxTQUFTLEVBQVRBLFNBQUQ7QUFBWWhNLElBQUFBLE1BQU0sRUFBTkEsTUFBWjtBQUFvQmlNLElBQUFBLGVBQWUsRUFBZkE7QUFBcEIsR0FBUDtBQUNEOztBQUVNLFNBQVMxSyxhQUFULENBQ0w5QixNQURLLEVBRUxLLE9BRkssRUFHcUM7QUFDMUMsTUFBSUwsTUFBTSxDQUFDVixRQUFQLEtBQW9CQyxzQkFBV0MsU0FBL0IsSUFBNEMsQ0FBQ1EsTUFBTSxDQUFDUCxLQUF4RCxFQUErRDtBQUM3RDtBQUNBLFdBQU8sRUFBUDtBQUNEOztBQUp5Qyw2QkFNZk8sTUFOZSxDQU1uQ2lFLFdBTm1DO0FBQUEsTUFNbkNBLFdBTm1DLHFDQU1yQixFQU5xQjtBQUFBLE1BT25DeEUsS0FQbUMsR0FPMUJPLE1BUDBCLENBT25DUCxLQVBtQztBQVExQyxNQUFNTixRQUFRLEdBQUdrQixPQUFPLENBQUNtSixpQkFBUixDQUEwQi9KLEtBQUssQ0FBQ2xDLElBQWhDLENBQWpCOztBQUNBLE1BQUk0QixRQUFRLEdBQUcsQ0FBZixFQUFrQjtBQUNoQnNLLHdCQUFRQyxJQUFSLGlCQUFzQmpLLEtBQUssQ0FBQ2xDLElBQTVCOztBQUNBLFdBQU87QUFBQ29NLE1BQUFBLFNBQVMsRUFBRSxFQUFaO0FBQWdCbEssTUFBQUEsS0FBSyxFQUFMQTtBQUFoQixLQUFQO0FBQ0QsR0FaeUMsQ0FjMUM7OztBQUNBLE1BQU1tSyxNQUFNLEdBQUd2SixPQUFPLENBQUNxQyxhQUFSLENBQ1o4QixHQURZLENBRVgsVUFBQ3FGLEdBQUQsRUFBTUMsUUFBTjtBQUFBLFdBQW9CO0FBQ2xCdEMsTUFBQUEsQ0FBQyxFQUFFdkQsV0FBVyxDQUFDNkYsUUFBRCxDQURJO0FBRWxCQyxNQUFBQSxDQUFDLEVBQUVGLEdBQUcsQ0FBQ0csT0FBSixDQUFZN0ssUUFBWjtBQUZlLEtBQXBCO0FBQUEsR0FGVyxFQU1YLElBTlcsRUFRWmEsTUFSWSxDQVFMO0FBQUEsUUFBRXdILENBQUYsU0FBRUEsQ0FBRjtBQUFBLFFBQUt1QyxDQUFMLFNBQUtBLENBQUw7QUFBQSxXQUFZOU0sTUFBTSxDQUFDa0csUUFBUCxDQUFnQnFFLENBQWhCLEtBQXNCdkssTUFBTSxDQUFDa0csUUFBUCxDQUFnQjRHLENBQWhCLENBQWxDO0FBQUEsR0FSSyxFQVNaRSxJQVRZLENBU1AsVUFBQ0MsQ0FBRCxFQUFJQyxDQUFKO0FBQUEsV0FBVSx3QkFBVUQsQ0FBQyxDQUFDMUMsQ0FBWixFQUFlMkMsQ0FBQyxDQUFDM0MsQ0FBakIsQ0FBVjtBQUFBLEdBVE8sQ0FBZjtBQVdBLE1BQU00QyxPQUFPLEdBQUcscUJBQU9SLE1BQVAsRUFBZSxVQUFBN0YsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQ2dHLENBQU47QUFBQSxHQUFoQixDQUFoQjtBQUNBLE1BQU1NLE9BQU8sR0FBRyxDQUFDVCxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVVwQyxDQUFYLEVBQWNvQyxNQUFNLENBQUNBLE1BQU0sQ0FBQ3RGLE1BQVAsR0FBZ0IsQ0FBakIsQ0FBTixDQUEwQmtELENBQXhDLENBQWhCO0FBRUEsU0FBTztBQUFDbUMsSUFBQUEsU0FBUyxFQUFFO0FBQUNDLE1BQUFBLE1BQU0sRUFBTkEsTUFBRDtBQUFTUSxNQUFBQSxPQUFPLEVBQVBBLE9BQVQ7QUFBa0JDLE1BQUFBLE9BQU8sRUFBUEE7QUFBbEIsS0FBWjtBQUF3QzVLLElBQUFBLEtBQUssRUFBTEE7QUFBeEMsR0FBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBOzs7QUFDTyxTQUFTb04sZUFBVCxDQUF5QjdNLE1BQXpCLEVBQWtEO0FBQUE7O0FBQUEsTUFDaERzSSxJQURnRCxHQUN4Q3RJLE1BRHdDLENBQ2hEc0ksSUFEZ0Q7QUFFdkQsTUFBTTVJLFFBQVEsdUJBQUdNLE1BQU0sQ0FBQ1YsUUFBVixxREFBRyxpQkFBaUJJLFFBQWxDOztBQUNBLE1BQUksQ0FBQ0EsUUFBRCxJQUFhLENBQUM0SSxJQUFkLElBQXNCaEMsTUFBTSxDQUFDd0csSUFBUCxDQUFZeEUsSUFBWixFQUFrQmhFLE1BQWxCLEtBQTZCLENBQXZELEVBQTBEO0FBQ3hELFdBQU8sSUFBUDtBQUNEOztBQUNELE1BQU15SSxNQUFNLEdBQUd6RyxNQUFNLENBQUN5RyxNQUFQLENBQWN6RSxJQUFkLENBQWY7QUFDQSxTQUFPeUUsTUFBTSxDQUFDLENBQUQsQ0FBTixHQUFZQSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVVyTixRQUFWLENBQVosR0FBa0MsSUFBekM7QUFDRDs7QUFFTSxTQUFTc0osaUJBQVQsQ0FBMkI1SixNQUEzQixFQUFtQztBQUN4QyxTQUFPK0UsS0FBSyxDQUFDQyxPQUFOLENBQWNoRixNQUFkLEtBQXlCQSxNQUFNLENBQUM4RCxLQUFQLENBQWFqRyxNQUFNLENBQUNrRyxRQUFwQixDQUFoQztBQUNEOztBQUVNLFNBQVM2SiwwQkFBVCxDQUFvQzVOLE1BQXBDLEVBQWtGO0FBQ3ZGLE1BQUksQ0FBQzRKLGlCQUFpQixDQUFDNUosTUFBRCxDQUF0QixFQUFnQztBQUM5QixXQUFPNk4sU0FBUDtBQUNEOztBQUVELE1BQU1oRyxJQUFJLEdBQUc3SCxNQUFNLENBQUMsQ0FBRCxDQUFOLEdBQVlBLE1BQU0sQ0FBQyxDQUFELENBQS9CO0FBQ0EsU0FBTzZILElBQUksR0FBR3JLLFlBQVAsR0FDSCxHQURHLEdBRUhxSyxJQUFJLEdBQUd0SyxXQUFQLEdBQ0EsTUFEQSxHQUVBc0ssSUFBSSxHQUFHdkssWUFBUCxHQUNBLElBREEsR0FFQSxLQU5KO0FBT0Q7O0FBRU0sU0FBU3dRLFlBQVQsQ0FBc0JsTixNQUF0QixFQUErQztBQUNwRCxTQUFPQSxNQUFNLENBQUN0QixJQUFQLEtBQWdCQyw2QkFBa0JDLElBQXpDO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge2FzY2VuZGluZywgZXh0ZW50LCBoaXN0b2dyYW0gYXMgZDNIaXN0b2dyYW0sIHRpY2tzfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQga2V5TWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC5nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoLmlzZXF1YWwnO1xuXG5pbXBvcnQgYm9vbGVhbldpdGhpbiBmcm9tICdAdHVyZi9ib29sZWFuLXdpdGhpbic7XG5pbXBvcnQge3BvaW50IGFzIHR1cmZQb2ludH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQge0RlY2ltYWx9IGZyb20gJ2RlY2ltYWwuanMnO1xuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIFBMT1RfVFlQRVMsXG4gIExBWUVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFU1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0ICogYXMgU2NhbGVVdGlscyBmcm9tICcuL2RhdGEtc2NhbGUtdXRpbHMnO1xuaW1wb3J0IHtoM0lzVmFsaWR9IGZyb20gJ2gzLWpzJztcblxuaW1wb3J0IHtcbiAgTWlsbGlzZWNvbmQsXG4gIEVudHJpZXMsXG4gIEZpZWxkLFxuICBQYXJzZWRGaWx0ZXIsXG4gIEZpbHRlcixcbiAgRmlsdGVyQmFzZSxcbiAgUG9seWdvbkZpbHRlcixcbiAgRmllbGREb21haW4sXG4gIFRpbWVSYW5nZUZpZWxkRG9tYWluLFxuICBIaXN0b2dyYW1CaW4sXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVWYWx1ZSxcbiAgTGluZUNoYXJ0LFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIFJhbmdlRmllbGREb21haW4sXG4gIEZpbHRlckRhdGFzZXRPcHQsXG4gIEZpbHRlclJlY29yZFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtEYXRhQ29udGFpbmVySW50ZXJmYWNlfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLWludGVyZmFjZSc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCBzZXQsIHRvQXJyYXl9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWQsIHRpbWVUb1VuaXhNaWxsaSwgdW5pcXVlfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtnZXRDZW50cm9pZH0gZnJvbSAnLi9oMy11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBkdXJhdGlvblNlY29uZCA9IDEwMDA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25NaW51dGUgPSBkdXJhdGlvblNlY29uZCAqIDYwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uSG91ciA9IGR1cmF0aW9uTWludXRlICogNjA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25EYXkgPSBkdXJhdGlvbkhvdXIgKiAyNDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbldlZWsgPSBkdXJhdGlvbkRheSAqIDc7XG5leHBvcnQgY29uc3QgZHVyYXRpb25ZZWFyID0gZHVyYXRpb25EYXkgKiAzNjU7XG5cbmV4cG9ydCB0eXBlIEZpbHRlclJlc3VsdCA9IHtcbiAgZmlsdGVyZWRJbmRleEZvckRvbWFpbj86IG51bWJlcltdO1xuICBmaWx0ZXJlZEluZGV4PzogbnVtYmVyW107XG59O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJDaGFuZ2VkID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgW2tleSBpbiBrZXlvZiBGaWx0ZXJSZWNvcmRdOiB7XG4gICAgW2tleTogc3RyaW5nXTogJ2FkZGVkJyB8ICdkZWxldGVkJyB8ICduYW1lX2NoYW5nZWQnIHwgJ3ZhbHVlX2NoYW5nZWQnIHwgJ2RhdGFJZF9jaGFuZ2VkJztcbiAgfSB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBkYXRhVmFsdWVBY2Nlc3NvciA9IChkYXRhOiB7aW5kZXg6IG51bWJlcn0pID0+IG51bWJlciB8IG51bGw7XG5cbmV4cG9ydCBjb25zdCBUaW1lc3RhbXBTdGVwTWFwID0gW1xuICB7bWF4OiAxLCBzdGVwOiAwLjA1fSxcbiAge21heDogMTAsIHN0ZXA6IDAuMX0sXG4gIHttYXg6IDEwMCwgc3RlcDogMX0sXG4gIHttYXg6IDUwMCwgc3RlcDogNX0sXG4gIHttYXg6IDEwMDAsIHN0ZXA6IDEwfSxcbiAge21heDogNTAwMCwgc3RlcDogNTB9LFxuICB7bWF4OiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksIHN0ZXA6IDEwMDB9XG5dO1xuXG5leHBvcnQgY29uc3QgaGlzdG9ncmFtQmlucyA9IDMwO1xuZXhwb3J0IGNvbnN0IGVubGFyZ2VkSGlzdG9ncmFtQmlucyA9IDEwMDtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9VUERBVEVSX1BST1BTID0ga2V5TWlycm9yKHtcbiAgZGF0YUlkOiBudWxsLFxuICBuYW1lOiBudWxsLFxuICBsYXllcklkOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IExJTUlURURfRklMVEVSX0VGRkVDVF9QUk9QUyA9IGtleU1pcnJvcih7XG4gIFtGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lXTogbnVsbFxufSk7XG4vKipcbiAqIE1heCBudW1iZXIgb2YgZmlsdGVyIHZhbHVlIGJ1ZmZlcnMgdGhhdCBkZWNrLmdsIHByb3ZpZGVzXG4gKi9cblxuY29uc3QgU3VwcG9ydGVkUGxvdFR5cGUgPSB7XG4gIFtGSUxURVJfVFlQRVMudGltZVJhbmdlXToge1xuICAgIGRlZmF1bHQ6ICdoaXN0b2dyYW0nLFxuICAgIFtBTExfRklFTERfVFlQRVMuaW50ZWdlcl06ICdsaW5lQ2hhcnQnLFxuICAgIFtBTExfRklFTERfVFlQRVMucmVhbF06ICdsaW5lQ2hhcnQnXG4gIH0sXG4gIFtGSUxURVJfVFlQRVMucmFuZ2VdOiB7XG4gICAgZGVmYXVsdDogJ2hpc3RvZ3JhbScsXG4gICAgW0FMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyXTogJ2xpbmVDaGFydCcsXG4gICAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXTogJ2xpbmVDaGFydCdcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9DT01QT05FTlRTID0ge1xuICBbRklMVEVSX1RZUEVTLnNlbGVjdF06ICdTaW5nbGVTZWxlY3RGaWx0ZXInLFxuICBbRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0XTogJ011bHRpU2VsZWN0RmlsdGVyJyxcbiAgW0ZJTFRFUl9UWVBFUy50aW1lUmFuZ2VdOiAnVGltZVJhbmdlRmlsdGVyJyxcbiAgW0ZJTFRFUl9UWVBFUy5yYW5nZV06ICdSYW5nZUZpbHRlcicsXG4gIFtGSUxURVJfVFlQRVMucG9seWdvbl06ICdQb2x5Z29uRmlsdGVyJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRklMVEVSX1NUUlVDVFVSRSA9IHtcbiAgZGF0YUlkOiBbXSwgLy8gW3N0cmluZ11cbiAgZnJlZXplOiBmYWxzZSxcbiAgaWQ6IG51bGwsXG4gIGVuYWJsZWQ6IHRydWUsXG5cbiAgLy8gdGltZSByYW5nZSBmaWx0ZXIgc3BlY2lmaWNcbiAgZml4ZWREb21haW46IGZhbHNlLFxuICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5mcmVlLFxuICBzcGVlZDogMSxcblxuICAvLyBmaWVsZCBzcGVjaWZpY1xuICBuYW1lOiBbXSwgLy8gc3RyaW5nXG4gIHR5cGU6IG51bGwsXG4gIGZpZWxkSWR4OiBbXSwgLy8gW2ludGVnZXJdXG4gIGRvbWFpbjogbnVsbCxcbiAgdmFsdWU6IG51bGwsXG5cbiAgLy8gcGxvdFxuICBwbG90VHlwZTogUExPVF9UWVBFUy5oaXN0b2dyYW0sXG4gIHlBeGlzOiBudWxsLFxuICBpbnRlcnZhbDogbnVsbCxcblxuICAvLyBtb2RlXG4gIGdwdTogZmFsc2Vcbn07XG5cbmV4cG9ydCBjb25zdCBGSUxURVJfSURfTEVOR1RIID0gNDtcblxuZXhwb3J0IGNvbnN0IExBWUVSX0ZJTFRFUlMgPSBbRklMVEVSX1RZUEVTLnBvbHlnb25dO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGZpbHRlciB3aXRoIGEgZGF0YXNldCBpZCBhcyBkYXRhSWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRGaWx0ZXIoe1xuICBkYXRhSWQsXG4gIGlkXG59OiB7XG4gIGRhdGFJZD86IHN0cmluZyB8IG51bGwgfCBzdHJpbmdbXTtcbiAgaWQ/OiBzdHJpbmc7XG59ID0ge30pOiBGaWx0ZXJCYXNlPExpbmVDaGFydD4ge1xuICByZXR1cm4ge1xuICAgIC4uLkRFRkFVTFRfRklMVEVSX1NUUlVDVFVSRSxcbiAgICAvLyBzdG9yZSBpdCBhcyBkYXRhSWQgYW5kIGl0IGNvdWxkIGJlIG9uZSBvciBtYW55XG4gICAgZGF0YUlkOiBkYXRhSWQgPyB0b0FycmF5KGRhdGFJZCkgOiBbXSxcbiAgICBpZDogaWQgfHwgZ2VuZXJhdGVIYXNoSWQoRklMVEVSX0lEX0xFTkdUSClcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGZpbHRlciBpcyB2YWxpZCBiYXNlZCBvbiB0aGUgZ2l2ZW4gZGF0YUlkXG4gKiBAcGFyYW0gIGZpbHRlciB0byB2YWxpZGF0ZVxuICogQHBhcmFtICBkYXRhc2V0SWQgaWQgdG8gdmFsaWRhdGUgZmlsdGVyIGFnYWluc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiBhIGZpbHRlciBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRBcHBseUZpbHRlcihmaWx0ZXI6IEZpbHRlciwgZGF0YXNldElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZmlsdGVyLmRhdGFJZCk7XG4gIHJldHVybiBkYXRhSWRzLmluY2x1ZGVzKGRhdGFzZXRJZCkgJiYgZmlsdGVyLnZhbHVlICE9PSBudWxsO1xufVxuXG5pbnRlcmZhY2UgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiB7XG4gIGlkOiBzdHJpbmc7XG4gIGdldENvbHVtbkZpZWxkSWR4KGNvbHVtbk5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgZmlsdGVyVGFibGUoZmlsdGVyczogRmlsdGVyW10sIGxheWVyczogTFtdLCBvcHQ/OiBGaWx0ZXJEYXRhc2V0T3B0KTogSztcbiAgZ2V0Q29sdW1uRmlsdGVyUHJvcHMoY29sdW1uTmFtZTogc3RyaW5nKTogRmllbGRbJ2ZpbHRlclByb3BzJ10gfCBudWxsIHwgdW5kZWZpbmVkO1xuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlO1xuICBmaWx0ZXJUYWJsZUNQVShmaWx0ZXJzOiBGaWx0ZXJbXSwgbGF5ZXJzOiBMW10pOiBLO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbmQgbW9kaWZpZXMgcG9seWdvbiBmaWx0ZXIgc3RydWN0dXJlXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHBhcmFtIGZpbHRlclxuICogQHBhcmFtIGxheWVyc1xuICogQHJldHVybiAtIHtmaWx0ZXIsIGRhdGFzZXR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBvbHlnb25GaWx0ZXI8SyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEwgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+KFxuICBkYXRhc2V0OiBLLFxuICBmaWx0ZXI6IFBvbHlnb25GaWx0ZXIsXG4gIGxheWVyczogTFtdXG4pOiB7ZmlsdGVyOiBQb2x5Z29uRmlsdGVyIHwgbnVsbDsgZGF0YXNldDogS30ge1xuICBjb25zdCBmYWlsZWQgPSB7ZGF0YXNldCwgZmlsdGVyOiBudWxsfTtcbiAgY29uc3Qge3ZhbHVlLCBsYXllcklkLCB0eXBlLCBkYXRhSWR9ID0gZmlsdGVyO1xuXG4gIGlmICghbGF5ZXJJZCB8fCAhaXNWYWxpZEZpbHRlclZhbHVlKHR5cGUsIHZhbHVlKSkge1xuICAgIHJldHVybiBmYWlsZWQ7XG4gIH1cblxuICBjb25zdCBpc1ZhbGlkRGF0YXNldCA9IGRhdGFJZC5pbmNsdWRlcyhkYXRhc2V0LmlkKTtcblxuICBpZiAoIWlzVmFsaWREYXRhc2V0KSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIGNvbnN0IGxheWVyID0gbGF5ZXJzLmZpbmQobCA9PiBsYXllcklkLmluY2x1ZGVzKGwuaWQpKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsdGVyOiB7XG4gICAgICAuLi5maWx0ZXIsXG4gICAgICBmcmVlemU6IHRydWUsXG4gICAgICBmaWVsZElkeDogW11cbiAgICB9LFxuICAgIGRhdGFzZXRcbiAgfTtcbn1cblxuLyoqXG4gKiBDdXN0b20gZmlsdGVyIHZhbGlkYXRvcnNcbiAqL1xuY29uc3QgZmlsdGVyVmFsaWRhdG9ycyA9IHtcbiAgW0ZJTFRFUl9UWVBFUy5wb2x5Z29uXTogdmFsaWRhdGVQb2x5Z29uRmlsdGVyXG59O1xuXG4vKipcbiAqIERlZmF1bHQgdmFsaWRhdGUgZmlsdGVyIGZ1bmN0aW9uXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHBhcmFtIGZpbHRlclxuICogQHJldHVybiAtIHtmaWx0ZXIsIGRhdGFzZXR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcjxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGRhdGFzZXQ6IEssXG4gIGZpbHRlcjogUGFyc2VkRmlsdGVyXG4pOiB7ZmlsdGVyOiBGaWx0ZXIgfCBudWxsOyBkYXRhc2V0OiBLfSB7XG4gIC8vIG1hdGNoIGZpbHRlci5kYXRhSWRcbiAgY29uc3QgZmFpbGVkID0ge2RhdGFzZXQsIGZpbHRlcjogbnVsbH07XG4gIGNvbnN0IGZpbHRlckRhdGFJZCA9IHRvQXJyYXkoZmlsdGVyLmRhdGFJZCk7XG5cbiAgY29uc3QgZmlsdGVyRGF0YXNldEluZGV4ID0gZmlsdGVyRGF0YUlkLmluZGV4T2YoZGF0YXNldC5pZCk7XG4gIGlmIChmaWx0ZXJEYXRhc2V0SW5kZXggPCAwIHx8ICF0b0FycmF5KGZpbHRlci5uYW1lKVtmaWx0ZXJEYXRhc2V0SW5kZXhdKSB7XG4gICAgLy8gdGhlIGN1cnJlbnQgZmlsdGVyIGlzIG5vdCBtYXBwZWQgYWdhaW5zdCB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIGNvbnN0IGluaXRpYWxpemVGaWx0ZXI6IEZpbHRlciA9IHtcbiAgICAuLi5nZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGZpbHRlci5kYXRhSWR9KSxcbiAgICAuLi5maWx0ZXIsXG4gICAgZGF0YUlkOiBmaWx0ZXJEYXRhSWQsXG4gICAgbmFtZTogdG9BcnJheShmaWx0ZXIubmFtZSlcbiAgfTtcblxuICBjb25zdCBmaWVsZE5hbWUgPSBpbml0aWFsaXplRmlsdGVyLm5hbWVbZmlsdGVyRGF0YXNldEluZGV4XTtcbiAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogdXBkYXRlZERhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgaW5pdGlhbGl6ZUZpbHRlcixcbiAgICBkYXRhc2V0LFxuICAgIGZpZWxkTmFtZSxcbiAgICBmaWx0ZXJEYXRhc2V0SW5kZXgsXG4gICAge21lcmdlRG9tYWluOiB0cnVlfVxuICApO1xuXG4gIGlmICghdXBkYXRlZEZpbHRlcikge1xuICAgIHJldHVybiBmYWlsZWQ7XG4gIH1cblxuICB1cGRhdGVkRmlsdGVyLnZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXIudmFsdWUsIHVwZGF0ZWRGaWx0ZXIpO1xuICB1cGRhdGVkRmlsdGVyLnZpZXcgPSBmaWx0ZXIudmlldyA/PyB1cGRhdGVkRmlsdGVyLnZpZXc7XG5cbiAgaWYgKHVwZGF0ZWRGaWx0ZXIudmFsdWUgPT09IG51bGwpIHtcbiAgICAvLyBjYW5ub3QgYWRqdXN0IHNhdmVkIHZhbHVlIHRvIGZpbHRlclxuICAgIHJldHVybiBmYWlsZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpbHRlcjogdmFsaWRhdGVGaWx0ZXJZQXhpcyh1cGRhdGVkRmlsdGVyLCB1cGRhdGVkRGF0YXNldCksXG4gICAgZGF0YXNldDogdXBkYXRlZERhdGFzZXRcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBmaWx0ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiBjYWxjdWxhdGUgZG9tYWluIGFuZCBmaWVsZElkeCBiYXNlZCBuZXcgZmllbGRzIGFuZCBkYXRhXG4gKlxuICogQHBhcmFtIGRhdGFzZXRcbiAqIEBwYXJhbSBmaWx0ZXIgLSBmaWx0ZXIgdG8gYmUgdmFsaWRhdGVcbiAqIEBwYXJhbSBsYXllcnMgLSBsYXllcnNcbiAqIEByZXR1cm4gdmFsaWRhdGVkIGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJXaXRoRGF0YTxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGRhdGFzZXQ6IEssXG4gIGZpbHRlcjogUGFyc2VkRmlsdGVyLFxuICBsYXllcnM6IExbXVxuKToge2ZpbHRlcjogRmlsdGVyOyBkYXRhc2V0OiBLfSB7XG4gIHJldHVybiBmaWx0ZXIudHlwZSAmJiBmaWx0ZXJWYWxpZGF0b3JzLmhhc093blByb3BlcnR5KGZpbHRlci50eXBlKVxuICAgID8gZmlsdGVyVmFsaWRhdG9yc1tmaWx0ZXIudHlwZV0oZGF0YXNldCwgZmlsdGVyLCBsYXllcnMpXG4gICAgOiB2YWxpZGF0ZUZpbHRlcihkYXRhc2V0LCBmaWx0ZXIpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIFlBeGlzXG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJZQXhpcyhmaWx0ZXIsIGRhdGFzZXQpIHtcbiAgLy8gVE9ETzogdmFsaWRhdGUgeUF4aXMgYWdhaW5zdCBvdGhlciBkYXRhc2V0c1xuXG4gIGNvbnN0IHtmaWVsZHN9ID0gZGF0YXNldDtcbiAgY29uc3Qge3lBeGlzfSA9IGZpbHRlcjtcbiAgLy8gVE9ETzogdmFsaWRhdGUgeUF4aXMgYWdhaW5zdCBvdGhlciBkYXRhc2V0c1xuICBpZiAoeUF4aXMpIHtcbiAgICBjb25zdCBtYXRjaGVkQXhpcyA9IGZpZWxkcy5maW5kKCh7bmFtZSwgdHlwZX0pID0+IG5hbWUgPT09IHlBeGlzLm5hbWUgJiYgdHlwZSA9PT0geUF4aXMudHlwZSk7XG5cbiAgICBmaWx0ZXIgPSBtYXRjaGVkQXhpc1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgIHlBeGlzOiBtYXRjaGVkQXhpcyxcbiAgICAgICAgICAuLi5nZXRGaWx0ZXJQbG90KHsuLi5maWx0ZXIsIHlBeGlzOiBtYXRjaGVkQXhpc30sIGRhdGFzZXQpXG4gICAgICAgIH1cbiAgICAgIDogZmlsdGVyO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcjtcbn1cblxuLyoqXG4gKiBHZXQgZGVmYXVsdCBmaWx0ZXIgcHJvcCBiYXNlZCBvbiBmaWVsZCB0eXBlXG4gKlxuICogQHBhcmFtIGZpZWxkXG4gKiBAcGFyYW0gZmllbGREb21haW5cbiAqIEByZXR1cm5zIGRlZmF1bHQgZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJQcm9wcyhcbiAgZmllbGQ6IEZpZWxkLFxuICBmaWVsZERvbWFpbjogRmllbGREb21haW5cbik6IFBhcnRpYWw8RmlsdGVyPiAmIHtmaWVsZFR5cGU6IHN0cmluZ30ge1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IHtcbiAgICAuLi5maWVsZERvbWFpbixcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGUsXG4gICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICB9O1xuXG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpbHRlclByb3BzLFxuICAgICAgICB2YWx1ZTogZmllbGREb21haW4uZG9tYWluLFxuICAgICAgICB0eXBlOiBGSUxURVJfVFlQRVMucmFuZ2UsXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgdHlwZU9wdGlvbnM6IFtGSUxURVJfVFlQRVMucmFuZ2VdLFxuICAgICAgICBncHU6IHRydWVcbiAgICAgIH07XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5ib29sZWFuOlxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5zZWxlY3QsXG4gICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICBncHU6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuc3RyaW5nOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICAgICAgdHlwZTogRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0LFxuICAgICAgICB2YWx1ZTogW10sXG4gICAgICAgIGdwdTogZmFsc2VcbiAgICAgIH07XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA6XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICAgICAgdHlwZTogRklMVEVSX1RZUEVTLnRpbWVSYW5nZSxcbiAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQsXG4gICAgICAgIGZpeGVkRG9tYWluOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZmlsdGVyUHJvcHMuZG9tYWluLFxuICAgICAgICBncHU6IHRydWVcbiAgICAgIH07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRQb2x5Z29uRmlsdGVyRnVuY3RvciA9IChsYXllciwgZmlsdGVyLCBkYXRhQ29udGFpbmVyKSA9PiB7XG4gIGNvbnN0IGdldFBvc2l0aW9uID0gbGF5ZXIuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcblxuICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcbiAgICBjYXNlIExBWUVSX1RZUEVTLnBvaW50OlxuICAgIGNhc2UgTEFZRVJfVFlQRVMuaWNvbjpcbiAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgY29uc3QgcG9zID0gZ2V0UG9zaXRpb24oZGF0YSk7XG4gICAgICAgIHJldHVybiBwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSAmJiBpc0luUG9seWdvbihwb3MsIGZpbHRlci52YWx1ZSk7XG4gICAgICB9O1xuICAgIGNhc2UgTEFZRVJfVFlQRVMuYXJjOlxuICAgIGNhc2UgTEFZRVJfVFlQRVMubGluZTpcbiAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgY29uc3QgcG9zID0gZ2V0UG9zaXRpb24oZGF0YSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkgJiZcbiAgICAgICAgICBbXG4gICAgICAgICAgICBbcG9zWzBdLCBwb3NbMV1dLFxuICAgICAgICAgICAgW3Bvc1szXSwgcG9zWzRdXVxuICAgICAgICAgIF0uZXZlcnkocG9pbnQgPT4gaXNJblBvbHlnb24ocG9pbnQsIGZpbHRlci52YWx1ZSkpXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgIGNhc2UgTEFZRVJfVFlQRVMuaGV4YWdvbklkOlxuICAgICAgaWYgKGxheWVyLmRhdGFUb0ZlYXR1cmUgJiYgbGF5ZXIuZGF0YVRvRmVhdHVyZS5jZW50cm9pZHMpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEgPT4ge1xuICAgICAgICAgIC8vIG51bGwgb3IgZ2V0Q2VudHJvaWQoe2lkfSlcbiAgICAgICAgICBjb25zdCBjZW50cm9pZCA9IGxheWVyLmRhdGFUb0ZlYXR1cmUuY2VudHJvaWRzW2RhdGEuaW5kZXhdO1xuICAgICAgICAgIHJldHVybiBjZW50cm9pZCAmJiBpc0luUG9seWdvbihjZW50cm9pZCwgZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBnZXRQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgaWYgKCFoM0lzVmFsaWQoaWQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvcyA9IGdldENlbnRyb2lkKHtpZH0pO1xuICAgICAgICByZXR1cm4gcG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkgJiYgaXNJblBvbHlnb24ocG9zLCBmaWx0ZXIudmFsdWUpO1xuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICgpID0+IHRydWU7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHBhcmFtIEFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSByb3cgcmVjb3JkLlxuICogQHBhcmFtIHBhcmFtLmluZGV4IEluZGV4IG9mIHRoZSByb3cgaW4gZGF0YSBjb250YWluZXIuXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgdG8ga2VlcCB0aGUgZWxlbWVudCwgb3IgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG50eXBlIGZpbHRlckZ1bmN0aW9uID0gKGRhdGE6IHtpbmRleDogbnVtYmVyfSkgPT4gYm9vbGVhbjtcbi8qKlxuICogQHBhcmFtIGZpZWxkIGRhdGFzZXQgRmllbGRcbiAqIEBwYXJhbSBkYXRhSWQgRGF0YXNldCBpZFxuICogQHBhcmFtIGZpbHRlciBGaWx0ZXIgb2JqZWN0XG4gKiBAcGFyYW0gbGF5ZXJzIGxpc3Qgb2YgbGF5ZXJzIHRvIGZpbHRlciB1cG9uXG4gKiBAcGFyYW0gZGF0YUNvbnRhaW5lciBEYXRhIGNvbnRhaW5lclxuICogQHJldHVybiBmaWx0ZXJGdW5jdGlvblxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyRnVuY3Rpb248TCBleHRlbmRzIHtjb25maWc6IHtkYXRhSWQ6IHN0cmluZyB8IG51bGx9OyBpZDogc3RyaW5nfT4oXG4gIGZpZWxkOiBGaWVsZCB8IG51bGwsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgbGF5ZXJzOiBMW10sXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2Vcbik6IGZpbHRlckZ1bmN0aW9uIHtcbiAgLy8gZmllbGQgY291bGQgYmUgbnVsbCBpbiBwb2x5Z29uIGZpbHRlclxuICBjb25zdCB2YWx1ZUFjY2Vzc29yID0gZmllbGQgPyBmaWVsZC52YWx1ZUFjY2Vzc29yIDogZGF0YSA9PiBudWxsO1xuICBjb25zdCBkZWZhdWx0RnVuYyA9IGQgPT4gdHJ1ZTtcblxuICBpZiAoZmlsdGVyLmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRGdW5jO1xuICB9XG5cbiAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnJhbmdlOlxuICAgICAgcmV0dXJuIGRhdGEgPT4gaXNJblJhbmdlKHZhbHVlQWNjZXNzb3IoZGF0YSksIGZpbHRlci52YWx1ZSk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMubXVsdGlTZWxlY3Q6XG4gICAgICByZXR1cm4gZGF0YSA9PiBmaWx0ZXIudmFsdWUuaW5jbHVkZXModmFsdWVBY2Nlc3NvcihkYXRhKSk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuc2VsZWN0OlxuICAgICAgcmV0dXJuIGRhdGEgPT4gdmFsdWVBY2Nlc3NvcihkYXRhKSA9PT0gZmlsdGVyLnZhbHVlO1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnRpbWVSYW5nZTpcbiAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRGdW5jO1xuICAgICAgfVxuICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPSBnZXQoZmllbGQsIFsnZmlsdGVyUHJvcHMnLCAnbWFwcGVkVmFsdWUnXSk7XG4gICAgICBjb25zdCBhY2Nlc3NvciA9IEFycmF5LmlzQXJyYXkobWFwcGVkVmFsdWUpXG4gICAgICAgID8gZGF0YSA9PiBtYXBwZWRWYWx1ZVtkYXRhLmluZGV4XVxuICAgICAgICA6IGRhdGEgPT4gdGltZVRvVW5peE1pbGxpKHZhbHVlQWNjZXNzb3IoZGF0YSksIGZpZWxkLmZvcm1hdCk7XG4gICAgICByZXR1cm4gZGF0YSA9PiBpc0luUmFuZ2UoYWNjZXNzb3IoZGF0YSksIGZpbHRlci52YWx1ZSk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucG9seWdvbjpcbiAgICAgIGlmICghbGF5ZXJzIHx8ICFsYXllcnMubGVuZ3RoIHx8ICFmaWx0ZXIubGF5ZXJJZCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdEZ1bmM7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllckZpbHRlckZ1bmN0aW9ucyA9IGZpbHRlci5sYXllcklkXG4gICAgICAgIC5tYXAoaWQgPT4gbGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBpZCkpXG4gICAgICAgIC5maWx0ZXIobCA9PiBsICYmIGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YUlkKVxuICAgICAgICAubWFwKGxheWVyID0+IGdldFBvbHlnb25GaWx0ZXJGdW5jdG9yKGxheWVyLCBmaWx0ZXIsIGRhdGFDb250YWluZXIpKTtcblxuICAgICAgcmV0dXJuIGRhdGEgPT4gbGF5ZXJGaWx0ZXJGdW5jdGlvbnMuZXZlcnkoZmlsdGVyRnVuYyA9PiBmaWx0ZXJGdW5jKGRhdGEpKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRGdW5jO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVGaWx0ZXJEYXRhSWQoZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSk6IEZpbHRlckJhc2U8TGluZUNoYXJ0PiB7XG4gIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckRhdGFCeUZpbHRlclR5cGVzKFxuICB7XG4gICAgZHluYW1pY0RvbWFpbkZpbHRlcnMsXG4gICAgY3B1RmlsdGVycyxcbiAgICBmaWx0ZXJGdW5jc1xuICB9OiB7XG4gICAgZHluYW1pY0RvbWFpbkZpbHRlcnM6IEZpbHRlcltdIHwgbnVsbDtcbiAgICBjcHVGaWx0ZXJzOiBGaWx0ZXJbXSB8IG51bGw7XG4gICAgZmlsdGVyRnVuY3M6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IGZpbHRlckZ1bmN0aW9uO1xuICAgIH07XG4gIH0sXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2Vcbik6IEZpbHRlclJlc3VsdCB7XG4gIGNvbnN0IGZpbHRlcmVkSW5kZXhGb3JEb21haW46IG51bWJlcltdID0gW107XG4gIGNvbnN0IGZpbHRlcmVkSW5kZXg6IG51bWJlcltdID0gW107XG5cbiAgY29uc3QgZmlsdGVyQ29udGV4dCA9IHtpbmRleDogLTEsIGRhdGFDb250YWluZXJ9O1xuICBjb25zdCBmaWx0ZXJGdW5jQ2FsbGVyID0gKGZpbHRlcjogRmlsdGVyKSA9PiBmaWx0ZXJGdW5jc1tmaWx0ZXIuaWRdKGZpbHRlckNvbnRleHQpO1xuXG4gIGNvbnN0IG51bVJvd3MgPSBkYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Sb3dzOyArK2kpIHtcbiAgICBmaWx0ZXJDb250ZXh0LmluZGV4ID0gaTtcblxuICAgIGNvbnN0IG1hdGNoRm9yRG9tYWluID0gZHluYW1pY0RvbWFpbkZpbHRlcnMgJiYgZHluYW1pY0RvbWFpbkZpbHRlcnMuZXZlcnkoZmlsdGVyRnVuY0NhbGxlcik7XG4gICAgaWYgKG1hdGNoRm9yRG9tYWluKSB7XG4gICAgICBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluLnB1c2goZmlsdGVyQ29udGV4dC5pbmRleCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hGb3JSZW5kZXIgPSBjcHVGaWx0ZXJzICYmIGNwdUZpbHRlcnMuZXZlcnkoZmlsdGVyRnVuY0NhbGxlcik7XG4gICAgaWYgKG1hdGNoRm9yUmVuZGVyKSB7XG4gICAgICBmaWx0ZXJlZEluZGV4LnB1c2goZmlsdGVyQ29udGV4dC5pbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi4oZHluYW1pY0RvbWFpbkZpbHRlcnMgPyB7ZmlsdGVyZWRJbmRleEZvckRvbWFpbn0gOiB7fSksXG4gICAgLi4uKGNwdUZpbHRlcnMgPyB7ZmlsdGVyZWRJbmRleH0gOiB7fSlcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgYSByZWNvcmQgb2YgZmlsdGVycyBiYXNlZCBvbiBkb21haW4gdHlwZSBhbmQgZ3B1IC8gY3B1XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJSZWNvcmQoXG4gIGRhdGFJZDogc3RyaW5nLFxuICBmaWx0ZXJzOiBGaWx0ZXJbXSxcbiAgb3B0OiBGaWx0ZXJEYXRhc2V0T3B0ID0ge31cbik6IEZpbHRlclJlY29yZCB7XG4gIGNvbnN0IGZpbHRlclJlY29yZDogRmlsdGVyUmVjb3JkID0ge1xuICAgIGR5bmFtaWNEb21haW46IFtdLFxuICAgIGZpeGVkRG9tYWluOiBbXSxcbiAgICBjcHU6IFtdLFxuICAgIGdwdTogW11cbiAgfTtcblxuICBmaWx0ZXJzLmZvckVhY2goZiA9PiB7XG4gICAgaWYgKGlzVmFsaWRGaWx0ZXJWYWx1ZShmLnR5cGUsIGYudmFsdWUpICYmIHRvQXJyYXkoZi5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIChmLmZpeGVkRG9tYWluIHx8IG9wdC5pZ25vcmVEb21haW5cbiAgICAgICAgPyBmaWx0ZXJSZWNvcmQuZml4ZWREb21haW5cbiAgICAgICAgOiBmaWx0ZXJSZWNvcmQuZHluYW1pY0RvbWFpblxuICAgICAgKS5wdXNoKGYpO1xuXG4gICAgICAoZi5ncHUgJiYgIW9wdC5jcHVPbmx5ID8gZmlsdGVyUmVjb3JkLmdwdSA6IGZpbHRlclJlY29yZC5jcHUpLnB1c2goZik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZmlsdGVyUmVjb3JkO1xufVxuXG4vKipcbiAqIENvbXBhcmUgZmlsdGVyIHJlY29yZHMgdG8gZ2V0IHdoYXQgaGFzIGNoYW5nZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZGaWx0ZXJzKFxuICBmaWx0ZXJSZWNvcmQ6IEZpbHRlclJlY29yZCxcbiAgb2xkRmlsdGVyUmVjb3JkOiBGaWx0ZXJSZWNvcmQgfCB7fSA9IHt9XG4pOiBGaWx0ZXJDaGFuZ2VkIHtcbiAgbGV0IGZpbHRlckNoYW5nZWQ6IFBhcnRpYWw8RmlsdGVyQ2hhbmdlZD4gPSB7fTtcblxuICAoT2JqZWN0LmVudHJpZXMoZmlsdGVyUmVjb3JkKSBhcyBFbnRyaWVzPEZpbHRlclJlY29yZD4pLmZvckVhY2goKFtyZWNvcmQsIGl0ZW1zXSkgPT4ge1xuICAgIGl0ZW1zLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IG9sZEZpbHRlcjogRmlsdGVyID0gKG9sZEZpbHRlclJlY29yZFtyZWNvcmRdIHx8IFtdKS5maW5kKFxuICAgICAgICAoZjogRmlsdGVyKSA9PiBmLmlkID09PSBmaWx0ZXIuaWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghb2xkRmlsdGVyKSB7XG4gICAgICAgIC8vIGFkZGVkXG4gICAgICAgIGZpbHRlckNoYW5nZWQgPSBzZXQoW3JlY29yZCwgZmlsdGVyLmlkXSwgJ2FkZGVkJywgZmlsdGVyQ2hhbmdlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjaGVjayAgd2hhdCBoYXMgY2hhbmdlZFxuICAgICAgICBbJ25hbWUnLCAndmFsdWUnLCAnZGF0YUlkJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyW3Byb3BdICE9PSBvbGRGaWx0ZXJbcHJvcF0pIHtcbiAgICAgICAgICAgIGZpbHRlckNoYW5nZWQgPSBzZXQoW3JlY29yZCwgZmlsdGVyLmlkXSwgYCR7cHJvcH1fY2hhbmdlZGAsIGZpbHRlckNoYW5nZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAob2xkRmlsdGVyUmVjb3JkW3JlY29yZF0gfHwgW10pLmZvckVhY2goKG9sZEZpbHRlcjogRmlsdGVyKSA9PiB7XG4gICAgICAvLyBkZWxldGVkXG4gICAgICBpZiAoIWl0ZW1zLmZpbmQoZiA9PiBmLmlkID09PSBvbGRGaWx0ZXIuaWQpKSB7XG4gICAgICAgIGZpbHRlckNoYW5nZWQgPSBzZXQoW3JlY29yZCwgb2xkRmlsdGVyLmlkXSwgJ2RlbGV0ZWQnLCBmaWx0ZXJDaGFuZ2VkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsuLi57ZHluYW1pY0RvbWFpbjogbnVsbCwgZml4ZWREb21haW46IG51bGwsIGNwdTogbnVsbCwgZ3B1OiBudWxsfSwgLi4uZmlsdGVyQ2hhbmdlZH07XG59XG4vKipcbiAqIENhbGwgYnkgcGFyc2luZyBmaWx0ZXJzIGZyb20gVVJMXG4gKiBDaGVjayBpZiB2YWx1ZSBvZiBmaWx0ZXIgd2l0aGluIGZpbHRlciBkb21haW4sIGlmIG5vdCBhZGp1c3QgaXQgdG8gbWF0Y2hcbiAqIGZpbHRlciBkb21haW5cbiAqXG4gKiBAcmV0dXJucyB2YWx1ZSAtIGFkanVzdGVkIHZhbHVlIHRvIG1hdGNoIGZpbHRlciBvciBudWxsIHRvIHJlbW92ZSBmaWx0ZXJcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKHZhbHVlOiBGaWx0ZXJbJ3ZhbHVlJ10sIHtkb21haW4sIHR5cGV9KSB7XG4gIGlmICghdHlwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBpZiB0aGUgY3VycmVudCBmaWx0ZXIgaXMgYSBwb2x5Z29uIGl0IHdpbGwgbm90IGhhdmUgYW55IGRvbWFpblxuICAvLyBhbGwgb3RoZXIgZmlsdGVyIHR5cGVzIHJlcXVpcmUgZG9tYWluXG4gIGlmICh0eXBlICE9PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiAhZG9tYWluKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucmFuZ2U6XG4gICAgY2FzZSBGSUxURVJfVFlQRVMudGltZVJhbmdlOlxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgcmV0dXJuIGRvbWFpbi5tYXAoZCA9PiBkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoZCwgaSkgPT4gKG5vdE51bGxvclVuZGVmaW5lZChkKSAmJiBpc0luUmFuZ2UoZCwgZG9tYWluKSA/IGQgOiBkb21haW5baV0pKTtcblxuICAgIGNhc2UgRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0OlxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBjb25zdCBmaWx0ZXJlZFZhbHVlID0gdmFsdWUuZmlsdGVyKGQgPT4gZG9tYWluLmluY2x1ZGVzKGQpKTtcbiAgICAgIHJldHVybiBmaWx0ZXJlZFZhbHVlLmxlbmd0aCA/IGZpbHRlcmVkVmFsdWUgOiBbXTtcblxuICAgIGNhc2UgRklMVEVSX1RZUEVTLnNlbGVjdDpcbiAgICAgIHJldHVybiBkb21haW4uaW5jbHVkZXModmFsdWUpID8gdmFsdWUgOiB0cnVlO1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnBvbHlnb246XG4gICAgICByZXR1cm4gdmFsdWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4vKipcbiAqIENhbGN1bGF0ZSBudW1lcmljIGRvbWFpbiBhbmQgc3VpdGFibGUgc3RlcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtZXJpY0ZpZWxkRG9tYWluKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICB2YWx1ZUFjY2Vzc29yOiBkYXRhVmFsdWVBY2Nlc3NvclxuKTogUmFuZ2VGaWVsZERvbWFpbiB7XG4gIGxldCBkb21haW46IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMV07XG4gIGxldCBzdGVwID0gMC4xO1xuXG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZGF0YUNvbnRhaW5lci5tYXBJbmRleCh2YWx1ZUFjY2Vzc29yKTtcblxuICBpZiAoZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkgPiAxKSB7XG4gICAgZG9tYWluID0gU2NhbGVVdGlscy5nZXRMaW5lYXJEb21haW4obWFwcGVkVmFsdWUpO1xuICAgIGNvbnN0IGRpZmYgPSBkb21haW5bMV0gLSBkb21haW5bMF07XG5cbiAgICAvLyBpbiBjYXNlIGVxdWFsIGRvbWFpbiwgWzk2LCA5Nl0sIHdoaWNoIHdpbGwgYnJlYWsgcXVhbnRpemUgc2NhbGVcbiAgICBpZiAoIWRpZmYpIHtcbiAgICAgIGRvbWFpblsxXSA9IGRvbWFpblswXSArIDE7XG4gICAgfVxuXG4gICAgc3RlcCA9IGdldE51bWVyaWNTdGVwU2l6ZShkaWZmKSB8fCBzdGVwO1xuICAgIGRvbWFpblswXSA9IGZvcm1hdE51bWJlckJ5U3RlcChkb21haW5bMF0sIHN0ZXAsICdmbG9vcicpO1xuICAgIGRvbWFpblsxXSA9IGZvcm1hdE51bWJlckJ5U3RlcChkb21haW5bMV0sIHN0ZXAsICdjZWlsJyk7XG4gIH1cblxuICBjb25zdCB7aGlzdG9ncmFtLCBlbmxhcmdlZEhpc3RvZ3JhbX0gPSBnZXRIaXN0b2dyYW0oZG9tYWluLCBtYXBwZWRWYWx1ZSk7XG5cbiAgcmV0dXJuIHtkb21haW4sIHN0ZXAsIGhpc3RvZ3JhbSwgZW5sYXJnZWRIaXN0b2dyYW19O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBzdGVwIHNpemUgZm9yIHJhbmdlIGFuZCB0aW1lcmFuZ2UgZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1lcmljU3RlcFNpemUoZGlmZjogbnVtYmVyKTogbnVtYmVyIHtcbiAgZGlmZiA9IE1hdGguYWJzKGRpZmYpO1xuXG4gIGlmIChkaWZmID4gMTAwKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAoZGlmZiA+IDMpIHtcbiAgICByZXR1cm4gMC4wMTtcbiAgfSBlbHNlIGlmIChkaWZmID4gMSkge1xuICAgIHJldHVybiAwLjAwMTtcbiAgfVxuICAvLyBUcnkgdG8gZ2V0IGF0IGxlYXN0IDEwMDAgc3RlcHMgLSBhbmQga2VlcCB0aGUgc3RlcCBzaXplIGJlbG93IHRoYXQgb2ZcbiAgLy8gdGhlIChkaWZmID4gMSkgY2FzZS5cbiAgY29uc3QgeCA9IGRpZmYgLyAxMDAwO1xuICAvLyBGaW5kIHRoZSBleHBvbmVudCBhbmQgdHJ1bmNhdGUgdG8gMTAgdG8gdGhlIHBvd2VyIG9mIHRoYXQgZXhwb25lbnRcblxuICBjb25zdCBleHBvbmVudGlhbEZvcm0gPSB4LnRvRXhwb25lbnRpYWwoKTtcbiAgY29uc3QgZXhwb25lbnQgPSBwYXJzZUZsb2F0KGV4cG9uZW50aWFsRm9ybS5zcGxpdCgnZScpWzFdKTtcblxuICAvLyBHZXR0aW5nIHJlYWR5IGZvciBub2RlIDEyXG4gIC8vIHRoaXMgaXMgd2h5IHdlIG5lZWQgZGVjaW1hbC5qc1xuICAvLyBNYXRoLnBvdygxMCwgLTUpID0gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTlcbiAgLy8gdGhlIGFib3ZlIHJlc3VsdCBzaG93cyBpbiBicm93c2VyIGFuZCBub2RlIDEwXG4gIC8vIG5vZGUgMTIgYmVoYXZlcyBjb3JyZWN0bHlcbiAgcmV0dXJuIG5ldyBEZWNpbWFsKDEwKS5wb3coZXhwb25lbnQpLnRvTnVtYmVyKCk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRpbWVzdGFtcCBkb21haW4gYW5kIHN1aXRhYmxlIHN0ZXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVzdGFtcEZpZWxkRG9tYWluKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICB2YWx1ZUFjY2Vzc29yOiBkYXRhVmFsdWVBY2Nlc3NvclxuKTogVGltZVJhbmdlRmllbGREb21haW4ge1xuICAvLyB0byBhdm9pZCBjb252ZXJ0aW5nIHN0cmluZyBmb3JtYXQgdGltZSB0byBlcG9jaFxuICAvLyBldmVyeSB0aW1lIHdlIGNvbXBhcmUgd2Ugc3RvcmUgYSB2YWx1ZSBtYXBwZWQgdG8gaW50IGluIGZpbHRlciBkb21haW5cblxuICBjb25zdCBtYXBwZWRWYWx1ZSA9IGRhdGFDb250YWluZXIubWFwSW5kZXgodmFsdWVBY2Nlc3Nvcik7XG4gIGNvbnN0IGRvbWFpbiA9IFNjYWxlVXRpbHMuZ2V0TGluZWFyRG9tYWluKG1hcHBlZFZhbHVlKTtcbiAgY29uc3QgZGVmYXVsdFRpbWVGb3JtYXQgPSBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIoZG9tYWluKTtcblxuICBsZXQgc3RlcCA9IDAuMDE7XG5cbiAgY29uc3QgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcbiAgLy8gaW4gY2FzZSBlcXVhbCB0aW1lc3RhbXAgYWRkIDEgc2Vjb25kIHBhZGRpbmcgdG8gcHJldmVudCBicmVha1xuICBpZiAoIWRpZmYpIHtcbiAgICBkb21haW5bMV0gPSBkb21haW5bMF0gKyAxMDAwO1xuICB9XG4gIGNvbnN0IGVudHJ5ID0gVGltZXN0YW1wU3RlcE1hcC5maW5kKGYgPT4gZi5tYXggPj0gZGlmZik7XG4gIGlmIChlbnRyeSkge1xuICAgIHN0ZXAgPSBlbnRyeS5zdGVwO1xuICB9XG5cbiAgY29uc3Qge2hpc3RvZ3JhbSwgZW5sYXJnZWRIaXN0b2dyYW19ID0gZ2V0SGlzdG9ncmFtKGRvbWFpbiwgbWFwcGVkVmFsdWUpO1xuXG4gIHJldHVybiB7XG4gICAgZG9tYWluLFxuICAgIHN0ZXAsXG4gICAgbWFwcGVkVmFsdWUsXG4gICAgaGlzdG9ncmFtLFxuICAgIGVubGFyZ2VkSGlzdG9ncmFtLFxuICAgIGRlZmF1bHRUaW1lRm9ybWF0XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoaXN0b2dyYW1Db25zdHJ1Y3QoXG4gIGRvbWFpbjogW251bWJlciwgbnVtYmVyXSxcbiAgbWFwcGVkVmFsdWU6IChNaWxsaXNlY29uZCB8IG51bWJlcilbXSxcbiAgYmluczogbnVtYmVyXG4pOiBIaXN0b2dyYW1CaW5bXSB7XG4gIHJldHVybiBkM0hpc3RvZ3JhbSgpXG4gICAgLnRocmVzaG9sZHModGlja3MoZG9tYWluWzBdLCBkb21haW5bMV0sIGJpbnMpKVxuICAgIC5kb21haW4oZG9tYWluKShtYXBwZWRWYWx1ZSlcbiAgICAubWFwKGJpbiA9PiAoe1xuICAgICAgY291bnQ6IGJpbi5sZW5ndGgsXG4gICAgICBiaW4sXG4gICAgICB4MDogYmluLngwLFxuICAgICAgeDE6IGJpbi54MVxuICAgIH0pKTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIGhpc3RvZ3JhbSBmcm9tIGRvbWFpbiBhbmQgYXJyYXkgb2YgdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIaXN0b2dyYW0oXG4gIGRvbWFpbjogW251bWJlciwgbnVtYmVyXSxcbiAgbWFwcGVkVmFsdWU6IChNaWxsaXNlY29uZCB8IG51bWJlcilbXVxuKToge2hpc3RvZ3JhbTogSGlzdG9ncmFtQmluW107IGVubGFyZ2VkSGlzdG9ncmFtOiBIaXN0b2dyYW1CaW5bXX0ge1xuICBjb25zdCBoaXN0b2dyYW0gPSBoaXN0b2dyYW1Db25zdHJ1Y3QoZG9tYWluLCBtYXBwZWRWYWx1ZSwgaGlzdG9ncmFtQmlucyk7XG4gIGNvbnN0IGVubGFyZ2VkSGlzdG9ncmFtID0gaGlzdG9ncmFtQ29uc3RydWN0KGRvbWFpbiwgbWFwcGVkVmFsdWUsIGVubGFyZ2VkSGlzdG9ncmFtQmlucyk7XG5cbiAgcmV0dXJuIHtoaXN0b2dyYW0sIGVubGFyZ2VkSGlzdG9ncmFtfTtcbn1cblxuLyoqXG4gKiByb3VuZCBudW1iZXIgYmFzZWQgb24gc3RlcFxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdGVwXG4gKiBAcGFyYW0ge3N0cmluZ30gYm91bmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHJvdW5kZWQgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROdW1iZXJCeVN0ZXAodmFsOiBudW1iZXIsIHN0ZXA6IG51bWJlciwgYm91bmQ6ICdmbG9vcicgfCAnY2VpbCcpOiBudW1iZXIge1xuICBpZiAoYm91bmQgPT09ICdmbG9vcicpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih2YWwgKiAoMSAvIHN0ZXApKSAvICgxIC8gc3RlcCk7XG4gIH1cblxuICByZXR1cm4gTWF0aC5jZWlsKHZhbCAqICgxIC8gc3RlcCkpIC8gKDEgLyBzdGVwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5SYW5nZSh2YWw6IGFueSwgZG9tYWluOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZG9tYWluKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB2YWwgPj0gZG9tYWluWzBdICYmIHZhbCA8PSBkb21haW5bMV07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcG9pbnQgaXMgd2l0aGluIHRoZSBwcm92aWRlZCBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHBvaW50IGFzIGlucHV0IHNlYXJjaCBbbGF0LCBsbmddXG4gKiBAcGFyYW0gcG9seWdvbiBQb2ludHMgbXVzdCBiZSB3aXRoaW4gdGhlc2UgKE11bHRpKVBvbHlnb24ocylcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luUG9seWdvbihwb2ludDogbnVtYmVyW10sIHBvbHlnb246IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYm9vbGVhbldpdGhpbih0dXJmUG9pbnQocG9pbnQpLCBwb2x5Z29uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIoZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghaXNWYWxpZFRpbWVEb21haW4oZG9tYWluKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcblxuICAvLyBMb2NhbCBhd2FyZSBmb3JtYXRzXG4gIC8vIGh0dHBzOi8vbW9tZW50anMuY29tL2RvY3MvIy9wYXJzaW5nL3N0cmluZy1mb3JtYXRcbiAgcmV0dXJuIGRpZmYgPiBkdXJhdGlvblllYXIgPyAnTCcgOiBkaWZmID4gZHVyYXRpb25EYXkgPyAnTCBMVCcgOiAnTCBMVFMnO1xufVxuXG4vKipcbiAqIFNhbml0eSBjaGVjayBvbiBmaWx0ZXJzIHRvIHByZXBhcmUgZm9yIHNhdmVcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL2ZpbHRlci11dGlscycpLmlzRmlsdGVyVmFsaWRUb1NhdmV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlclZhbGlkVG9TYXZlKGZpbHRlcjogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZmlsdGVyPy50eXBlICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyPy5uYW1lKSAmJiAoZmlsdGVyPy5uYW1lLmxlbmd0aCB8fCBmaWx0ZXI/LmxheWVySWQubGVuZ3RoKVxuICApO1xufVxuXG4vKipcbiAqIFNhbml0eSBjaGVjayBvbiBmaWx0ZXJzIHRvIHByZXBhcmUgZm9yIHNhdmVcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL2ZpbHRlci11dGlscycpLmlzVmFsaWRGaWx0ZXJWYWx1ZX1cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRGaWx0ZXJWYWx1ZSh0eXBlOiBzdHJpbmcgfCBudWxsLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIGlmICghdHlwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5zZWxlY3Q6XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMucmFuZ2U6XG4gICAgY2FzZSBGSUxURVJfVFlQRVMudGltZVJhbmdlOlxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KHYgPT4gdiAhPT0gbnVsbCAmJiAhaXNOYU4odikpO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMubXVsdGlTZWxlY3Q6XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgQm9vbGVhbih2YWx1ZS5sZW5ndGgpO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMuaW5wdXQ6XG4gICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZS5sZW5ndGgpO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMucG9seWdvbjpcbiAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZ2V0KHZhbHVlLCBbJ2dlb21ldHJ5JywgJ2Nvb3JkaW5hdGVzJ10pO1xuICAgICAgcmV0dXJuIEJvb2xlYW4odmFsdWUgJiYgdmFsdWUuaWQgJiYgY29vcmRpbmF0ZXMpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5GaWx0ZXJQcm9wczxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGZpbHRlcjogRmlsdGVyLFxuICBkYXRhc2V0OiBLXG4pOiB7bGluZUNoYXJ0OiBMaW5lQ2hhcnQ7IHlBeHM6IEZpZWxkfSB8IHt9IHtcbiAgaWYgKGZpbHRlci5wbG90VHlwZSA9PT0gUExPVF9UWVBFUy5oaXN0b2dyYW0gfHwgIWZpbHRlci55QXhpcykge1xuICAgIC8vIGhpc3RvZ3JhbSBzaG91bGQgYmUgY2FsY3VsYXRlZCB3aGVuIGNyZWF0ZSBmaWx0ZXJcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCB7bWFwcGVkVmFsdWUgPSBbXX0gPSBmaWx0ZXI7XG4gIGNvbnN0IHt5QXhpc30gPSBmaWx0ZXI7XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5nZXRDb2x1bW5GaWVsZElkeCh5QXhpcy5uYW1lKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgeUF4aXMgJHt5QXhpcy5uYW1lfSBkb2VzIG5vdCBleGlzdCBpbiBkYXRhc2V0YCk7XG4gICAgcmV0dXJuIHtsaW5lQ2hhcnQ6IHt9LCB5QXhpc307XG4gIH1cblxuICAvLyByZXR1cm4gbGluZUNoYXJ0XG4gIGNvbnN0IHNlcmllcyA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAoXG4gICAgICAocm93LCByb3dJbmRleCkgPT4gKHtcbiAgICAgICAgeDogbWFwcGVkVmFsdWVbcm93SW5kZXhdLFxuICAgICAgICB5OiByb3cudmFsdWVBdChmaWVsZElkeClcbiAgICAgIH0pLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgICAuZmlsdGVyKCh7eCwgeX0pID0+IE51bWJlci5pc0Zpbml0ZSh4KSAmJiBOdW1iZXIuaXNGaW5pdGUoeSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGFzY2VuZGluZyhhLngsIGIueCkpO1xuXG4gIGNvbnN0IHlEb21haW4gPSBleHRlbnQoc2VyaWVzLCBkID0+IGQueSk7XG4gIGNvbnN0IHhEb21haW4gPSBbc2VyaWVzWzBdLngsIHNlcmllc1tzZXJpZXMubGVuZ3RoIC0gMV0ueF07XG5cbiAgcmV0dXJuIHtsaW5lQ2hhcnQ6IHtzZXJpZXMsIHlEb21haW4sIHhEb21haW59LCB5QXhpc307XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0RmlsdGVyUGxvdFR5cGUoZmlsdGVyOiBGaWx0ZXIpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZmlsdGVyUGxvdFR5cGVzOiB0eXBlb2YgU3VwcG9ydGVkUGxvdFR5cGVba2V5b2YgdHlwZW9mIFN1cHBvcnRlZFBsb3RUeXBlXSB8IG51bGwgPVxuICAgIGZpbHRlci50eXBlICYmIFN1cHBvcnRlZFBsb3RUeXBlW2ZpbHRlci50eXBlXTtcbiAgaWYgKCFmaWx0ZXJQbG90VHlwZXMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghZmlsdGVyLnlBeGlzKSB7XG4gICAgcmV0dXJuIGZpbHRlclBsb3RUeXBlcy5kZWZhdWx0O1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlclBsb3RUeXBlc1tmaWx0ZXIueUF4aXMudHlwZV0gfHwgbnVsbDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFzZXRJZHMgbGlzdCBvZiBkYXRhc2V0IGlkcyB0byBiZSBmaWx0ZXJlZFxuICogQHBhcmFtIGRhdGFzZXRzIGFsbCBkYXRhc2V0c1xuICogQHBhcmFtIGZpbHRlcnMgYWxsIGZpbHRlcnMgdG8gYmUgYXBwbGllZCB0byBkYXRhc2V0c1xuICogQHJldHVybiBkYXRhc2V0cyAtIG5ldyB1cGRhdGVkIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlcnNUb0RhdGFzZXRzPFxuICBLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPixcbiAgTCBleHRlbmRzIHtjb25maWc6IHtkYXRhSWQ6IHN0cmluZyB8IG51bGx9fVxuPihcbiAgZGF0YXNldElkczogc3RyaW5nW10sXG4gIGRhdGFzZXRzOiB7W2lkOiBzdHJpbmddOiBLfSxcbiAgZmlsdGVyczogRmlsdGVyW10sXG4gIGxheWVycz86IExbXVxuKToge1tpZDogc3RyaW5nXTogS30ge1xuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShkYXRhc2V0SWRzKTtcbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2MsIGRhdGFJZCkgPT4ge1xuICAgIGNvbnN0IGxheWVyc1RvRmlsdGVyID0gKGxheWVycyB8fCBbXSkuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpO1xuICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXJzID0gZmlsdGVycy5maWx0ZXIoZCA9PiBzaG91bGRBcHBseUZpbHRlcihkLCBkYXRhSWQpKTtcbiAgICBjb25zdCB0YWJsZSA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYWNjLFxuICAgICAgW2RhdGFJZF06IHRhYmxlLmZpbHRlclRhYmxlKGFwcGxpZWRGaWx0ZXJzLCBsYXllcnNUb0ZpbHRlciwge30pXG4gICAgfTtcbiAgfSwgZGF0YXNldHMpO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBuZXcgZmllbGQgbmFtZSB2YWx1ZSB0byBmaWVsdGVyIGFuZCB1cGRhdGUgYm90aCBmaWx0ZXIgYW5kIGRhdGFzZXRcbiAqIEBwYXJhbSBmaWx0ZXIgLSB0byBiZSBhcHBsaWVkIHRoZSBuZXcgZmllbGQgbmFtZSBvblxuICogQHBhcmFtIGRhdGFzZXQgLSBkYXRhc2V0IHRoZSBmaWVsZCBiZWxvbmdzIHRvXG4gKiBAcGFyYW0gZmllbGROYW1lIC0gZmllbGQubmFtZVxuICogQHBhcmFtIGZpbHRlckRhdGFzZXRJbmRleCAtIGZpZWxkLm5hbWVcbiAqIEBwYXJhbSBvcHRpb25cbiAqIEByZXR1cm4gLSB7ZmlsdGVyLCBkYXRhc2V0c31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyRmllbGROYW1lPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZmlsdGVyOiBGaWx0ZXIsXG4gIGRhdGFzZXQ6IEssXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICBmaWx0ZXJEYXRhc2V0SW5kZXggPSAwLFxuICBvcHRpb24/OiB7bWVyZ2VEb21haW46IGJvb2xlYW59XG4pOiB7XG4gIGZpbHRlcjogRmlsdGVyIHwgbnVsbDtcbiAgZGF0YXNldDogSztcbn0ge1xuICAvLyB1c2luZyBmaWx0ZXJEYXRhc2V0SW5kZXggd2UgY2FuIGZpbHRlciBvbmx5IHRoZSBzcGVjaWZpZWQgZGF0YXNldFxuICBjb25zdCBtZXJnZURvbWFpbiA9IG9wdGlvbiAmJiBvcHRpb24uaGFzT3duUHJvcGVydHkoJ21lcmdlRG9tYWluJykgPyBvcHRpb24ubWVyZ2VEb21haW4gOiBmYWxzZTtcblxuICBjb25zdCBmaWVsZEluZGV4ID0gZGF0YXNldC5nZXRDb2x1bW5GaWVsZElkeChmaWVsZE5hbWUpO1xuICAvLyBpZiBubyBmaWVsZCB3aXRoIHNhbWUgbmFtZSBpcyBmb3VuZCwgbW92ZSB0byB0aGUgbmV4dCBkYXRhc2V0c1xuICBpZiAoZmllbGRJbmRleCA9PT0gLTEpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYGZpZWxkSW5kZXggbm90IGZvdW5kLiBEYXRhc2V0IG11c3QgY29udGFpbiBhIHByb3BlcnR5IHdpdGggbmFtZTogJHtmaWVsZE5hbWV9YCk7XG4gICAgcmV0dXJuIHtmaWx0ZXI6IG51bGwsIGRhdGFzZXR9O1xuICB9XG5cbiAgLy8gVE9ETzogdmFsaWRhdGUgZmllbGQgdHlwZVxuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGROYW1lKTtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uKG1lcmdlRG9tYWluID8gbWVyZ2VGaWx0ZXJEb21haW5TdGVwKGZpbHRlciwgZmlsdGVyUHJvcHMpIDogey4uLmZpbHRlciwgLi4uZmlsdGVyUHJvcHN9KSxcbiAgICBuYW1lOiBPYmplY3QuYXNzaWduKFsuLi50b0FycmF5KGZpbHRlci5uYW1lKV0sIHtbZmlsdGVyRGF0YXNldEluZGV4XTogZmllbGROYW1lfSksXG4gICAgZmllbGRJZHg6IE9iamVjdC5hc3NpZ24oWy4uLnRvQXJyYXkoZmlsdGVyLmZpZWxkSWR4KV0sIHtcbiAgICAgIFtmaWx0ZXJEYXRhc2V0SW5kZXhdOiBmaWVsZEluZGV4XG4gICAgfSksXG4gICAgLy8gVE9ETywgc2luY2Ugd2UgYWxsb3cgdG8gYWRkIG11bHRpcGxlIGZpZWxkcyB0byBhIGZpbHRlciB3ZSBjYW4gbm8gbG9uZ2VyIGZyZWV6ZSB0aGUgZmlsdGVyXG4gICAgZnJlZXplOiB0cnVlXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXI6IG5ld0ZpbHRlcixcbiAgICBkYXRhc2V0XG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2Ugb25lIGZpbHRlciB3aXRoIG90aGVyIGZpbHRlciBwcm9wIGRvbWFpblxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJEb21haW5TdGVwKFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgZmlsdGVyUHJvcHM/OiBQYXJ0aWFsPEZpbHRlcj5cbik6IChGaWx0ZXIgJiB7c3RlcD86IG51bWJlcn0pIHwgbnVsbCB7XG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoIWZpbHRlclByb3BzKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIGlmICgoZmlsdGVyLmZpZWxkVHlwZSAmJiBmaWx0ZXIuZmllbGRUeXBlICE9PSBmaWx0ZXJQcm9wcy5maWVsZFR5cGUpIHx8ICFmaWx0ZXJQcm9wcy5kb21haW4pIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgY29uc3QgY29tYmluZWREb21haW4gPSAhZmlsdGVyLmRvbWFpblxuICAgID8gZmlsdGVyUHJvcHMuZG9tYWluXG4gICAgOiBbLi4uKGZpbHRlci5kb21haW4gfHwgW10pLCAuLi4oZmlsdGVyUHJvcHMuZG9tYWluIHx8IFtdKV0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgZG9tYWluOiBbY29tYmluZWREb21haW5bMF0sIGNvbWJpbmVkRG9tYWluW2NvbWJpbmVkRG9tYWluLmxlbmd0aCAtIDFdXVxuICB9O1xuXG4gIHN3aXRjaCAoZmlsdGVyUHJvcHMuZmllbGRUeXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuc3RyaW5nOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdGaWx0ZXIsXG4gICAgICAgIGRvbWFpbjogdW5pcXVlKGNvbWJpbmVkRG9tYWluKS5zb3J0KClcbiAgICAgIH07XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA6XG4gICAgICBjb25zdCBzdGVwID1cbiAgICAgICAgKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN0ZXAgPCAoZmlsdGVyUHJvcHMgYXMgVGltZVJhbmdlRmllbGREb21haW4pLnN0ZXBcbiAgICAgICAgICA/IChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5zdGVwXG4gICAgICAgICAgOiAoZmlsdGVyUHJvcHMgYXMgVGltZVJhbmdlRmllbGREb21haW4pLnN0ZXA7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld0ZpbHRlcixcbiAgICAgICAgc3RlcFxuICAgICAgfTtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZXdGaWx0ZXI7XG4gIH1cbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4vKipcbiAqIEdlbmVyYXRlcyBwb2x5Z29uIGZpbHRlclxuICovXG5leHBvcnQgY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoXG4gIGZlYXR1cmU6IEZlYXR1cmUsXG4gIGZpbHRlcklkOiBzdHJpbmcsXG4gIHByb3BlcnRpZXM/OiB7fVxuKTogRmVhdHVyZVZhbHVlID0+ICh7XG4gIC4uLmZlYXR1cmUsXG4gIGlkOiBmZWF0dXJlLmlkLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgIC4uLnByb3BlcnRpZXMsXG4gICAgZmlsdGVySWRcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJJZEluRmVhdHVyZSA9IChmOiBGZWF0dXJlVmFsdWUpOiBzdHJpbmcgPT4gZ2V0KGYsIFsncHJvcGVydGllcycsICdmaWx0ZXJJZCddKTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgcG9seWdvbiBmaWx0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUG9seWdvbkZpbHRlcjxcbiAgTCBleHRlbmRzIHtjb25maWc6IHtkYXRhSWQ6IHN0cmluZyB8IG51bGw7IGxhYmVsOiBzdHJpbmd9OyBpZDogc3RyaW5nfVxuPihsYXllcnM6IExbXSwgZmVhdHVyZTogRmVhdHVyZSk6IFBvbHlnb25GaWx0ZXIge1xuICBjb25zdCBkYXRhSWQgPSBsYXllcnMubWFwKGwgPT4gbC5jb25maWcuZGF0YUlkKS5maWx0ZXIobm90TnVsbG9yVW5kZWZpbmVkKTtcbiAgY29uc3QgbGF5ZXJJZCA9IGxheWVycy5tYXAobCA9PiBsLmlkKTtcbiAgY29uc3QgbmFtZSA9IGxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5sYWJlbCk7XG4gIGNvbnN0IGZpbHRlciA9IGdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZH0pO1xuICByZXR1cm4ge1xuICAgIC4uLmZpbHRlcixcbiAgICBmaXhlZERvbWFpbjogdHJ1ZSxcbiAgICB0eXBlOiBGSUxURVJfVFlQRVMucG9seWdvbixcbiAgICBuYW1lLFxuICAgIGxheWVySWQsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlci5pZCwge2lzVmlzaWJsZTogdHJ1ZX0pXG4gIH07XG59XG5cbi8qKlxuICogUnVuIGZpbHRlciBlbnRpcmVseSBvbiBDUFVcbiAqL1xuaW50ZXJmYWNlIFN0YXRlVHlwZTxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4ge1xuICBsYXllcnM6IExbXTtcbiAgZmlsdGVyczogRmlsdGVyW107XG4gIGRhdGFzZXRzOiB7W2lkOiBzdHJpbmddOiBLfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckRhdGFzZXRDUFU8VCBleHRlbmRzIFN0YXRlVHlwZTxLLCBMPiwgSyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEw+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmdcbik6IFQge1xuICBjb25zdCBkYXRhc2V0RmlsdGVycyA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT4gZi5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSk7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNwdUZpbHRlcmVkRGF0YXNldCA9IGRhdGFzZXQuZmlsdGVyVGFibGVDUFUoZGF0YXNldEZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgY3B1RmlsdGVyZWREYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgcGFyc2VkIGZpbHRlcnMgd2l0aCBkYXRhc2V0cyBhbmQgYWRkIGZpbHRlclByb3BzIHRvIGZpZWxkXG4gKi9cbnR5cGUgTWluVmlzU3RhdGVGb3JGaWx0ZXIgPSBQaWNrPFZpc1N0YXRlLCAnbGF5ZXJzJyB8ICdkYXRhc2V0cycgfCAnaXNNZXJnaW5nRGF0YXNldHMnPjtcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0czxcbiAgUyBleHRlbmRzIE1pblZpc1N0YXRlRm9yRmlsdGVyLFxuICBLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPixcbiAgTCBleHRlbmRzIHtjb25maWc6IHtkYXRhSWQ6IHN0cmluZyB8IG51bGw7IGxhYmVsOiBzdHJpbmd9OyBpZDogc3RyaW5nfVxuPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb1ZhbGlkYXRlOiBQYXJzZWRGaWx0ZXJbXSA9IFtdXG4pOiB7XG4gIHZhbGlkYXRlZDogRmlsdGVyW107XG4gIGZhaWxlZDogRmlsdGVyW107XG4gIHVwZGF0ZWREYXRhc2V0czogU1snZGF0YXNldHMnXTtcbn0ge1xuICAvLyBUT0RPIEJldHRlciBUeXBpbmdzIGhlcmVcbiAgY29uc3QgdmFsaWRhdGVkOiBhbnlbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IGFueVtdID0gW107XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgbGV0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFzZXRzO1xuXG4gIC8vIG1lcmdlIGZpbHRlcnNcbiAgZmlsdGVyc1RvVmFsaWRhdGUuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIC8vIHdlIGNhbiBvbmx5IGxvb2sgZm9yIGRhdGFzZXRzIGRlZmluZSBpbiB0aGUgZmlsdGVyIGRhdGFJZFxuICAgIGNvbnN0IGRhdGFzZXRJZHMgPSB0b0FycmF5KGZpbHRlci5kYXRhSWQpO1xuXG4gICAgLy8gd2UgY2FuIG1lcmdlIGEgZmlsdGVyIG9ubHkgaWYgYWxsIGRhdGFzZXRzIGluIGZpbHRlci5kYXRhSWQgYXJlIGxvYWRlZFxuICAgIGlmIChkYXRhc2V0SWRzLmV2ZXJ5KGQgPT4gZGF0YXNldHNbZF0gJiYgIXN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RdKSkge1xuICAgICAgLy8gYWxsIGRhdGFzZXRJZHMgaW4gZmlsdGVyIG11c3QgYmUgcHJlc2VudCB0aGUgc3RhdGUgZGF0YXNldHNcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHZhbGlkYXRlZEZpbHRlciwgYXBwbHlUb0RhdGFzZXRzLCBhdWdtZW50ZWREYXRhc2V0c30gPSBkYXRhc2V0SWRzLnJlZHVjZTx7XG4gICAgICAgIGZpbHRlcjogRmlsdGVyIHwgbnVsbDtcbiAgICAgICAgYXBwbHlUb0RhdGFzZXRzOiBzdHJpbmdbXTtcbiAgICAgICAgYXVnbWVudGVkRGF0YXNldHM6IHtbZGF0YXNldElkOiBzdHJpbmddOiBhbnl9O1xuICAgICAgfT4oXG4gICAgICAgIChhY2MsIGRhdGFzZXRJZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSB1cGRhdGVkRGF0YXNldHNbZGF0YXNldElkXTtcbiAgICAgICAgICBjb25zdCBsYXllcnMgPSBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0LmlkKTtcbiAgICAgICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiB1cGRhdGVkRGF0YXNldH0gPSB2YWxpZGF0ZUZpbHRlcldpdGhEYXRhKFxuICAgICAgICAgICAgYWNjLmF1Z21lbnRlZERhdGFzZXRzW2RhdGFzZXRJZF0gfHwgZGF0YXNldCxcbiAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgIGxheWVyc1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAvLyBtZXJnZSBmaWx0ZXIgcHJvcHNcbiAgICAgICAgICAgICAgZmlsdGVyOiBhY2MuZmlsdGVyXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmFjYy5maWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gY2hlY2s6IGNoYW5nZWQgZnJvbSBhY2MgdG8gYWNjLmZpbHRlciB0byBmaXggdHlwZXNcbiAgICAgICAgICAgICAgICAgICAgLi4ubWVyZ2VGaWx0ZXJEb21haW5TdGVwKGFjYy5maWx0ZXIsIHVwZGF0ZWRGaWx0ZXIpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB1cGRhdGVkRmlsdGVyLFxuXG4gICAgICAgICAgICAgIGFwcGx5VG9EYXRhc2V0czogWy4uLmFjYy5hcHBseVRvRGF0YXNldHMsIGRhdGFzZXRJZF0sXG5cbiAgICAgICAgICAgICAgYXVnbWVudGVkRGF0YXNldHM6IHtcbiAgICAgICAgICAgICAgICAuLi5hY2MuYXVnbWVudGVkRGF0YXNldHMsXG4gICAgICAgICAgICAgICAgW2RhdGFzZXRJZF06IHVwZGF0ZWREYXRhc2V0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbHRlcjogbnVsbCxcbiAgICAgICAgICBhcHBseVRvRGF0YXNldHM6IFtdLFxuICAgICAgICAgIGF1Z21lbnRlZERhdGFzZXRzOiB7fVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAodmFsaWRhdGVkRmlsdGVyICYmIGlzRXF1YWwoZGF0YXNldElkcywgYXBwbHlUb0RhdGFzZXRzKSkge1xuICAgICAgICB2YWxpZGF0ZWQucHVzaCh2YWxpZGF0ZWRGaWx0ZXIpO1xuICAgICAgICB1cGRhdGVkRGF0YXNldHMgPSB7XG4gICAgICAgICAgLi4udXBkYXRlZERhdGFzZXRzLFxuICAgICAgICAgIC4uLmF1Z21lbnRlZERhdGFzZXRzXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYWlsZWQucHVzaChmaWx0ZXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmYWlsZWQucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZCwgdXBkYXRlZERhdGFzZXRzfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlclBsb3Q8SyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEw+KFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgZGF0YXNldDogS1xuKToge2xpbmVDaGFydDogTGluZUNoYXJ0OyB5QXhzOiBGaWVsZH0gfCB7fSB7XG4gIGlmIChmaWx0ZXIucGxvdFR5cGUgPT09IFBMT1RfVFlQRVMuaGlzdG9ncmFtIHx8ICFmaWx0ZXIueUF4aXMpIHtcbiAgICAvLyBoaXN0b2dyYW0gc2hvdWxkIGJlIGNhbGN1bGF0ZWQgd2hlbiBjcmVhdGUgZmlsdGVyXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3Qge21hcHBlZFZhbHVlID0gW119ID0gZmlsdGVyO1xuICBjb25zdCB7eUF4aXN9ID0gZmlsdGVyO1xuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZ2V0Q29sdW1uRmllbGRJZHgoeUF4aXMubmFtZSk7XG4gIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICBDb25zb2xlLndhcm4oYHlBeGlzICR7eUF4aXMubmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gZGF0YXNldGApO1xuICAgIHJldHVybiB7bGluZUNoYXJ0OiB7fSwgeUF4aXN9O1xuICB9XG5cbiAgLy8gcmV0dXJuIGxpbmVDaGFydFxuICBjb25zdCBzZXJpZXMgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKFxuICAgICAgKHJvdywgcm93SW5kZXgpID0+ICh7XG4gICAgICAgIHg6IG1hcHBlZFZhbHVlW3Jvd0luZGV4XSxcbiAgICAgICAgeTogcm93LnZhbHVlQXQoZmllbGRJZHgpXG4gICAgICB9KSxcbiAgICAgIHRydWVcbiAgICApXG4gICAgLmZpbHRlcigoe3gsIHl9KSA9PiBOdW1iZXIuaXNGaW5pdGUoeCkgJiYgTnVtYmVyLmlzRmluaXRlKHkpKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhc2NlbmRpbmcoYS54LCBiLngpKTtcblxuICBjb25zdCB5RG9tYWluID0gZXh0ZW50KHNlcmllcywgZCA9PiBkLnkpO1xuICBjb25zdCB4RG9tYWluID0gW3Nlcmllc1swXS54LCBzZXJpZXNbc2VyaWVzLmxlbmd0aCAtIDFdLnhdO1xuXG4gIHJldHVybiB7bGluZUNoYXJ0OiB7c2VyaWVzLCB5RG9tYWluLCB4RG9tYWlufSwgeUF4aXN9O1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGludGVydmFsIGJpbnMgZm9yIHRpbWUgZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcnZhbEJpbnMoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIpIHtcbiAgY29uc3Qge2JpbnN9ID0gZmlsdGVyO1xuICBjb25zdCBpbnRlcnZhbCA9IGZpbHRlci5wbG90VHlwZT8uaW50ZXJ2YWw7XG4gIGlmICghaW50ZXJ2YWwgfHwgIWJpbnMgfHwgT2JqZWN0LmtleXMoYmlucykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyhiaW5zKTtcbiAgcmV0dXJuIHZhbHVlc1swXSA/IHZhbHVlc1swXVtpbnRlcnZhbF0gOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFRpbWVEb21haW4oZG9tYWluKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGRvbWFpbikgJiYgZG9tYWluLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lV2lkZ2V0SGludEZvcm1hdHRlcihkb21haW46IFtudW1iZXIsIG51bWJlcl0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWlzVmFsaWRUaW1lRG9tYWluKGRvbWFpbikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcbiAgcmV0dXJuIGRpZmYgPiBkdXJhdGlvbldlZWtcbiAgICA/ICdMJ1xuICAgIDogZGlmZiA+IGR1cmF0aW9uRGF5XG4gICAgPyAnTCBMVCdcbiAgICA6IGRpZmYgPiBkdXJhdGlvbkhvdXJcbiAgICA/ICdMVCdcbiAgICA6ICdMVFMnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaWRlRmlsdGVyKGZpbHRlcjogRmlsdGVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBmaWx0ZXIudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcbn1cbiJdfQ==
|
1333
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9maWx0ZXItdXRpbHMudHMiXSwibmFtZXMiOlsiZHVyYXRpb25TZWNvbmQiLCJkdXJhdGlvbk1pbnV0ZSIsImR1cmF0aW9uSG91ciIsImR1cmF0aW9uRGF5IiwiZHVyYXRpb25XZWVrIiwiZHVyYXRpb25ZZWFyIiwiVGltZXN0YW1wU3RlcE1hcCIsIm1heCIsInN0ZXAiLCJOdW1iZXIiLCJQT1NJVElWRV9JTkZJTklUWSIsImhpc3RvZ3JhbUJpbnMiLCJlbmxhcmdlZEhpc3RvZ3JhbUJpbnMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsImRhdGFJZCIsIm5hbWUiLCJsYXllcklkIiwiTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTIiwiU3VwcG9ydGVkUGxvdFR5cGUiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJBTExfRklFTERfVFlQRVMiLCJpbnRlZ2VyIiwicmVhbCIsInJhbmdlIiwiRklMVEVSX0NPTVBPTkVOVFMiLCJzZWxlY3QiLCJtdWx0aVNlbGVjdCIsInBvbHlnb24iLCJERUZBVUxUX0ZJTFRFUl9TVFJVQ1RVUkUiLCJmcmVlemUiLCJpZCIsImVuYWJsZWQiLCJmaXhlZERvbWFpbiIsInZpZXciLCJGSUxURVJfVklFV19UWVBFUyIsInNpZGUiLCJpc0FuaW1hdGluZyIsImFuaW1hdGlvbldpbmRvdyIsIkFOSU1BVElPTl9XSU5ET1ciLCJmcmVlIiwic3BlZWQiLCJ0eXBlIiwiZmllbGRJZHgiLCJkb21haW4iLCJ2YWx1ZSIsInBsb3RUeXBlIiwiUExPVF9UWVBFUyIsImhpc3RvZ3JhbSIsInlBeGlzIiwiaW50ZXJ2YWwiLCJncHUiLCJGSUxURVJfSURfTEVOR1RIIiwiTEFZRVJfRklMVEVSUyIsImdldERlZmF1bHRGaWx0ZXIiLCJzaG91bGRBcHBseUZpbHRlciIsImZpbHRlciIsImRhdGFzZXRJZCIsImRhdGFJZHMiLCJpbmNsdWRlcyIsInZhbGlkYXRlUG9seWdvbkZpbHRlciIsImRhdGFzZXQiLCJsYXllcnMiLCJmYWlsZWQiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpc1ZhbGlkRGF0YXNldCIsImxheWVyIiwiZmluZCIsImwiLCJmaWx0ZXJWYWxpZGF0b3JzIiwidmFsaWRhdGVGaWx0ZXIiLCJmaWx0ZXJEYXRhSWQiLCJmaWx0ZXJEYXRhc2V0SW5kZXgiLCJpbmRleE9mIiwiaW5pdGlhbGl6ZUZpbHRlciIsImZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwidXBkYXRlZERhdGFzZXQiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwidmFsaWRhdGVGaWx0ZXJZQXhpcyIsInZhbGlkYXRlRmlsdGVyV2l0aERhdGEiLCJoYXNPd25Qcm9wZXJ0eSIsImZpZWxkcyIsIm1hdGNoZWRBeGlzIiwiZ2V0RmlsdGVyUGxvdCIsImdldEZpbHRlclByb3BzIiwiZmllbGQiLCJmaWVsZERvbWFpbiIsImZpbHRlclByb3BzIiwiZmllbGRUeXBlIiwidHlwZU9wdGlvbnMiLCJzdHJpbmciLCJkYXRlIiwidGltZXN0YW1wIiwiZW5sYXJnZWQiLCJnZXRQb2x5Z29uRmlsdGVyRnVuY3RvciIsImRhdGFDb250YWluZXIiLCJnZXRQb3NpdGlvbiIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJMQVlFUl9UWVBFUyIsInBvaW50IiwiaWNvbiIsImRhdGEiLCJwb3MiLCJldmVyeSIsImlzRmluaXRlIiwiaXNJblBvbHlnb24iLCJhcmMiLCJsaW5lIiwiaGV4YWdvbklkIiwiZGF0YVRvRmVhdHVyZSIsImNlbnRyb2lkcyIsImNlbnRyb2lkIiwiaW5kZXgiLCJnZW9qc29uIiwiZ2V0RmlsdGVyRnVuY3Rpb24iLCJ2YWx1ZUFjY2Vzc29yIiwiZGVmYXVsdEZ1bmMiLCJkIiwiaXNJblJhbmdlIiwibWFwcGVkVmFsdWUiLCJhY2Nlc3NvciIsIkFycmF5IiwiaXNBcnJheSIsImZvcm1hdCIsImxlbmd0aCIsImxheWVyRmlsdGVyRnVuY3Rpb25zIiwibWFwIiwiY29uZmlnIiwiZmlsdGVyRnVuYyIsInVwZGF0ZUZpbHRlckRhdGFJZCIsImZpbHRlckRhdGFCeUZpbHRlclR5cGVzIiwiZHluYW1pY0RvbWFpbkZpbHRlcnMiLCJjcHVGaWx0ZXJzIiwiZmlsdGVyRnVuY3MiLCJmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIiwiZmlsdGVyZWRJbmRleCIsImZpbHRlckNvbnRleHQiLCJmaWx0ZXJGdW5jQ2FsbGVyIiwibnVtUm93cyIsImkiLCJtYXRjaEZvckRvbWFpbiIsInB1c2giLCJtYXRjaEZvclJlbmRlciIsImdldEZpbHRlclJlY29yZCIsImZpbHRlcnMiLCJvcHQiLCJmaWx0ZXJSZWNvcmQiLCJkeW5hbWljRG9tYWluIiwiY3B1IiwiZm9yRWFjaCIsImYiLCJpZ25vcmVEb21haW4iLCJjcHVPbmx5IiwiZGlmZkZpbHRlcnMiLCJvbGRGaWx0ZXJSZWNvcmQiLCJmaWx0ZXJDaGFuZ2VkIiwiT2JqZWN0IiwiZW50cmllcyIsInJlY29yZCIsIml0ZW1zIiwib2xkRmlsdGVyIiwicHJvcCIsImZpbHRlcmVkVmFsdWUiLCJnZXROdW1lcmljRmllbGREb21haW4iLCJtYXBJbmRleCIsIlNjYWxlVXRpbHMiLCJnZXRMaW5lYXJEb21haW4iLCJkaWZmIiwiZ2V0TnVtZXJpY1N0ZXBTaXplIiwiZm9ybWF0TnVtYmVyQnlTdGVwIiwiZ2V0SGlzdG9ncmFtIiwiZW5sYXJnZWRIaXN0b2dyYW0iLCJNYXRoIiwiYWJzIiwieCIsImV4cG9uZW50aWFsRm9ybSIsInRvRXhwb25lbnRpYWwiLCJleHBvbmVudCIsInBhcnNlRmxvYXQiLCJzcGxpdCIsIkRlY2ltYWwiLCJwb3ciLCJ0b051bWJlciIsImdldFRpbWVzdGFtcEZpZWxkRG9tYWluIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJlbnRyeSIsImhpc3RvZ3JhbUNvbnN0cnVjdCIsImJpbnMiLCJ0aHJlc2hvbGRzIiwiYmluIiwiY291bnQiLCJ4MCIsIngxIiwidmFsIiwiYm91bmQiLCJmbG9vciIsImNlaWwiLCJpc1ZhbGlkVGltZURvbWFpbiIsImlzRmlsdGVyVmFsaWRUb1NhdmUiLCJ2IiwiaXNOYU4iLCJCb29sZWFuIiwiaW5wdXQiLCJjb29yZGluYXRlcyIsImdldENvbHVtbkZpbHRlclByb3BzIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJDb25zb2xlIiwid2FybiIsImxpbmVDaGFydCIsInNlcmllcyIsInJvdyIsInJvd0luZGV4IiwieSIsInZhbHVlQXQiLCJzb3J0IiwiYSIsImIiLCJ5RG9tYWluIiwieERvbWFpbiIsImdldERlZmF1bHRGaWx0ZXJQbG90VHlwZSIsImZpbHRlclBsb3RUeXBlcyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJkYXRhc2V0SWRzIiwiZGF0YXNldHMiLCJyZWR1Y2UiLCJhY2MiLCJsYXllcnNUb0ZpbHRlciIsImFwcGxpZWRGaWx0ZXJzIiwidGFibGUiLCJmaWx0ZXJUYWJsZSIsIm9wdGlvbiIsImZpZWxkSW5kZXgiLCJuZXdGaWx0ZXIiLCJtZXJnZUZpbHRlckRvbWFpblN0ZXAiLCJhc3NpZ24iLCJjb21iaW5lZERvbWFpbiIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwiZmVhdHVyZSIsImZpbHRlcklkIiwicHJvcGVydGllcyIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwibm90TnVsbG9yVW5kZWZpbmVkIiwibGFiZWwiLCJpc1Zpc2libGUiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic3RhdGUiLCJkYXRhc2V0RmlsdGVycyIsImNwdUZpbHRlcmVkRGF0YXNldCIsImZpbHRlclRhYmxlQ1BVIiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJmaWx0ZXJzVG9WYWxpZGF0ZSIsInZhbGlkYXRlZCIsInVwZGF0ZWREYXRhc2V0cyIsImlzTWVyZ2luZ0RhdGFzZXRzIiwiYXVnbWVudGVkRGF0YXNldHMiLCJhcHBseVRvRGF0YXNldHMiLCJ2YWxpZGF0ZWRGaWx0ZXIiLCJnZXRJbnRlcnZhbEJpbnMiLCJrZXlzIiwidmFsdWVzIiwiZ2V0VGltZVdpZGdldEhpbnRGb3JtYXR0ZXIiLCJ1bmRlZmluZWQiLCJpc1NpZGVGaWx0ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBU0E7O0FBQ0E7O0FBdUJBOztBQUNBOztBQUNBOzs7Ozs7OztBQUVPLElBQU1BLGNBQWMsR0FBRyxJQUF2Qjs7QUFDQSxJQUFNQyxjQUFjLEdBQUdELGNBQWMsR0FBRyxFQUF4Qzs7QUFDQSxJQUFNRSxZQUFZLEdBQUdELGNBQWMsR0FBRyxFQUF0Qzs7QUFDQSxJQUFNRSxXQUFXLEdBQUdELFlBQVksR0FBRyxFQUFuQzs7QUFDQSxJQUFNRSxZQUFZLEdBQUdELFdBQVcsR0FBRyxDQUFuQzs7QUFDQSxJQUFNRSxZQUFZLEdBQUdGLFdBQVcsR0FBRyxHQUFuQzs7QUFnQkEsSUFBTUcsZ0JBQWdCLEdBQUcsQ0FDOUI7QUFBQ0MsRUFBQUEsR0FBRyxFQUFFLENBQU47QUFBU0MsRUFBQUEsSUFBSSxFQUFFO0FBQWYsQ0FEOEIsRUFFOUI7QUFBQ0QsRUFBQUEsR0FBRyxFQUFFLEVBQU47QUFBVUMsRUFBQUEsSUFBSSxFQUFFO0FBQWhCLENBRjhCLEVBRzlCO0FBQUNELEVBQUFBLEdBQUcsRUFBRSxHQUFOO0FBQVdDLEVBQUFBLElBQUksRUFBRTtBQUFqQixDQUg4QixFQUk5QjtBQUFDRCxFQUFBQSxHQUFHLEVBQUUsR0FBTjtBQUFXQyxFQUFBQSxJQUFJLEVBQUU7QUFBakIsQ0FKOEIsRUFLOUI7QUFBQ0QsRUFBQUEsR0FBRyxFQUFFLElBQU47QUFBWUMsRUFBQUEsSUFBSSxFQUFFO0FBQWxCLENBTDhCLEVBTTlCO0FBQUNELEVBQUFBLEdBQUcsRUFBRSxJQUFOO0FBQVlDLEVBQUFBLElBQUksRUFBRTtBQUFsQixDQU44QixFQU85QjtBQUFDRCxFQUFBQSxHQUFHLEVBQUVFLE1BQU0sQ0FB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RUQsTUFBTWhHLElBQUksR0FBRzlILE1BQU0sQ0FBQyxDQUFELENBQU4sR0FBWUEsTUFBTSxDQUFDLENBQUQsQ0FBL0I7QUFDQSxTQUFPOEgsSUFBSSxHQUFHdEssWUFBUCxHQUNILEdBREcsR0FFSHNLLElBQUksR0FBR3ZLLFdBQVAsR0FDQSxNQURBLEdBRUF1SyxJQUFJLEdBQUd4SyxZQUFQLEdBQ0EsSUFEQSxHQUVBLEtBTko7QUFPRDs7QUFFTSxTQUFTeVEsWUFBVCxDQUFzQm5OLE1BQXRCLEVBQStDO0FBQ3BELFNBQU9BLE1BQU0sQ0FBQ3RCLElBQVAsS0FBZ0JDLDZCQUFrQkMsSUFBekM7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YXNjZW5kaW5nLCBleHRlbnQsIGhpc3RvZ3JhbSBhcyBkM0hpc3RvZ3JhbSwgdGlja3N9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJztcbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2guaXNlcXVhbCc7XG5cbmltcG9ydCBib29sZWFuV2l0aGluIGZyb20gJ0B0dXJmL2Jvb2xlYW4td2l0aGluJztcbmltcG9ydCB7cG9pbnQgYXMgdHVyZlBvaW50fSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCB7RGVjaW1hbH0gZnJvbSAnZGVjaW1hbC5qcyc7XG5pbXBvcnQge1xuICBBTExfRklFTERfVFlQRVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgUExPVF9UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQgKiBhcyBTY2FsZVV0aWxzIGZyb20gJy4vZGF0YS1zY2FsZS11dGlscyc7XG5pbXBvcnQge2gzSXNWYWxpZH0gZnJvbSAnaDMtanMnO1xuXG5pbXBvcnQge1xuICBNaWxsaXNlY29uZCxcbiAgRW50cmllcyxcbiAgRmllbGQsXG4gIFBhcnNlZEZpbHRlcixcbiAgRmlsdGVyLFxuICBGaWx0ZXJCYXNlLFxuICBQb2x5Z29uRmlsdGVyLFxuICBGaWVsZERvbWFpbixcbiAgVGltZVJhbmdlRmllbGREb21haW4sXG4gIEhpc3RvZ3JhbUJpbixcbiAgRmVhdHVyZSxcbiAgRmVhdHVyZVZhbHVlLFxuICBMaW5lQ2hhcnQsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgUmFuZ2VGaWVsZERvbWFpbixcbiAgRmlsdGVyRGF0YXNldE9wdCxcbiAgRmlsdGVyUmVjb3JkXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJy4vZGF0YS1jb250YWluZXItaW50ZXJmYWNlJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHNldCwgdG9BcnJheX0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZCwgdGltZVRvVW5peE1pbGxpLCB1bmlxdWV9IGZyb20gJy4vZGF0YS11dGlscyc7XG5pbXBvcnQge2dldENlbnRyb2lkfSBmcm9tICcuL2gzLXV0aWxzJztcblxuZXhwb3J0IGNvbnN0IGR1cmF0aW9uU2Vjb25kID0gMTAwMDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25Ib3VyID0gZHVyYXRpb25NaW51dGUgKiA2MDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbkRheSA9IGR1cmF0aW9uSG91ciAqIDI0O1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNztcbmV4cG9ydCBjb25zdCBkdXJhdGlvblllYXIgPSBkdXJhdGlvbkRheSAqIDM2NTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyUmVzdWx0ID0ge1xuICBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluPzogbnVtYmVyW107XG4gIGZpbHRlcmVkSW5kZXg/OiBudW1iZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlckNoYW5nZWQgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBba2V5IGluIGtleW9mIEZpbHRlclJlY29yZF06IHtcbiAgICBba2V5OiBzdHJpbmddOiAnYWRkZWQnIHwgJ2RlbGV0ZWQnIHwgJ25hbWVfY2hhbmdlZCcgfCAndmFsdWVfY2hhbmdlZCcgfCAnZGF0YUlkX2NoYW5nZWQnO1xuICB9IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIGRhdGFWYWx1ZUFjY2Vzc29yID0gKGRhdGE6IHtpbmRleDogbnVtYmVyfSkgPT4gbnVtYmVyIHwgbnVsbDtcblxuZXhwb3J0IGNvbnN0IFRpbWVzdGFtcFN0ZXBNYXAgPSBbXG4gIHttYXg6IDEsIHN0ZXA6IDAuMDV9LFxuICB7bWF4OiAxMCwgc3RlcDogMC4xfSxcbiAge21heDogMTAwLCBzdGVwOiAxfSxcbiAge21heDogNTAwLCBzdGVwOiA1fSxcbiAge21heDogMTAwMCwgc3RlcDogMTB9LFxuICB7bWF4OiA1MDAwLCBzdGVwOiA1MH0sXG4gIHttYXg6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgc3RlcDogMTAwMH1cbl07XG5cbmV4cG9ydCBjb25zdCBoaXN0b2dyYW1CaW5zID0gMzA7XG5leHBvcnQgY29uc3QgZW5sYXJnZWRIaXN0b2dyYW1CaW5zID0gMTAwO1xuXG5leHBvcnQgY29uc3QgRklMVEVSX1VQREFURVJfUFJPUFMgPSBrZXlNaXJyb3Ioe1xuICBkYXRhSWQ6IG51bGwsXG4gIG5hbWU6IG51bGwsXG4gIGxheWVySWQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTID0ga2V5TWlycm9yKHtcbiAgW0ZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWVdOiBudWxsXG59KTtcbi8qKlxuICogTWF4IG51bWJlciBvZiBmaWx0ZXIgdmFsdWUgYnVmZmVycyB0aGF0IGRlY2suZ2wgcHJvdmlkZXNcbiAqL1xuXG5jb25zdCBTdXBwb3J0ZWRQbG90VHlwZSA9IHtcbiAgW0ZJTFRFUl9UWVBFUy50aW1lUmFuZ2VdOiB7XG4gICAgZGVmYXVsdDogJ2hpc3RvZ3JhbScsXG4gICAgW0FMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyXTogJ2xpbmVDaGFydCcsXG4gICAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXTogJ2xpbmVDaGFydCdcbiAgfSxcbiAgW0ZJTFRFUl9UWVBFUy5yYW5nZV06IHtcbiAgICBkZWZhdWx0OiAnaGlzdG9ncmFtJyxcbiAgICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiAnbGluZUNoYXJ0JyxcbiAgICBbQUxMX0ZJRUxEX1RZUEVTLnJlYWxdOiAnbGluZUNoYXJ0J1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgRklMVEVSX0NPTVBPTkVOVFMgPSB7XG4gIFtGSUxURVJfVFlQRVMuc2VsZWN0XTogJ1NpbmdsZVNlbGVjdEZpbHRlcicsXG4gIFtGSUxURVJfVFlQRVMubXVsdGlTZWxlY3RdOiAnTXVsdGlTZWxlY3RGaWx0ZXInLFxuICBbRklMVEVSX1RZUEVTLnRpbWVSYW5nZV06ICdUaW1lUmFuZ2VGaWx0ZXInLFxuICBbRklMVEVSX1RZUEVTLnJhbmdlXTogJ1JhbmdlRmlsdGVyJyxcbiAgW0ZJTFRFUl9UWVBFUy5wb2x5Z29uXTogJ1BvbHlnb25GaWx0ZXInXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUxURVJfU1RSVUNUVVJFID0ge1xuICBkYXRhSWQ6IFtdLCAvLyBbc3RyaW5nXVxuICBmcmVlemU6IGZhbHNlLFxuICBpZDogbnVsbCxcbiAgZW5hYmxlZDogdHJ1ZSxcblxuICAvLyB0aW1lIHJhbmdlIGZpbHRlciBzcGVjaWZpY1xuICBmaXhlZERvbWFpbjogZmFsc2UsXG4gIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGUsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmZyZWUsXG4gIHNwZWVkOiAxLFxuXG4gIC8vIGZpZWxkIHNwZWNpZmljXG4gIG5hbWU6IFtdLCAvLyBzdHJpbmdcbiAgdHlwZTogbnVsbCxcbiAgZmllbGRJZHg6IFtdLCAvLyBbaW50ZWdlcl1cbiAgZG9tYWluOiBudWxsLFxuICB2YWx1ZTogbnVsbCxcblxuICAvLyBwbG90XG4gIHBsb3RUeXBlOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbSxcbiAgeUF4aXM6IG51bGwsXG4gIGludGVydmFsOiBudWxsLFxuXG4gIC8vIG1vZGVcbiAgZ3B1OiBmYWxzZVxufTtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9JRF9MRU5HVEggPSA0O1xuXG5leHBvcnQgY29uc3QgTEFZRVJfRklMVEVSUyA9IFtGSUxURVJfVFlQRVMucG9seWdvbl07XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZmlsdGVyIHdpdGggYSBkYXRhc2V0IGlkIGFzIGRhdGFJZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEZpbHRlcih7XG4gIGRhdGFJZCxcbiAgaWRcbn06IHtcbiAgZGF0YUlkPzogc3RyaW5nIHwgbnVsbCB8IHN0cmluZ1tdO1xuICBpZD86IHN0cmluZztcbn0gPSB7fSk6IEZpbHRlckJhc2U8TGluZUNoYXJ0PiB7XG4gIHJldHVybiB7XG4gICAgLi4uREVGQVVMVF9GSUxURVJfU1RSVUNUVVJFLFxuICAgIC8vIHN0b3JlIGl0IGFzIGRhdGFJZCBhbmQgaXQgY291bGQgYmUgb25lIG9yIG1hbnlcbiAgICBkYXRhSWQ6IGRhdGFJZCA/IHRvQXJyYXkoZGF0YUlkKSA6IFtdLFxuICAgIGlkOiBpZCB8fCBnZW5lcmF0ZUhhc2hJZChGSUxURVJfSURfTEVOR1RIKVxuICB9O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgZmlsdGVyIGlzIHZhbGlkIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRhSWRcbiAqIEBwYXJhbSAgZmlsdGVyIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gIGRhdGFzZXRJZCBpZCB0byB2YWxpZGF0ZSBmaWx0ZXIgYWdhaW5zdFxuICogQHJldHVybiB0cnVlIGlmIGEgZmlsdGVyIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEFwcGx5RmlsdGVyKGZpbHRlcjogRmlsdGVyLCBkYXRhc2V0SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShmaWx0ZXIuZGF0YUlkKTtcbiAgcmV0dXJuIGRhdGFJZHMuaW5jbHVkZXMoZGF0YXNldElkKSAmJiBmaWx0ZXIudmFsdWUgIT09IG51bGw7XG59XG5cbmludGVyZmFjZSBLZXBsZXJUYWJsZU1vZGVsPEssIEw+IHtcbiAgaWQ6IHN0cmluZztcbiAgZ2V0Q29sdW1uRmllbGRJZHgoY29sdW1uTmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBmaWx0ZXJUYWJsZShmaWx0ZXJzOiBGaWx0ZXJbXSwgbGF5ZXJzOiBMW10sIG9wdD86IEZpbHRlckRhdGFzZXRPcHQpOiBLO1xuICBnZXRDb2x1bW5GaWx0ZXJQcm9wcyhjb2x1bW5OYW1lOiBzdHJpbmcpOiBGaWVsZFsnZmlsdGVyUHJvcHMnXSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2U7XG4gIGZpbHRlclRhYmxlQ1BVKGZpbHRlcnM6IEZpbHRlcltdLCBsYXllcnM6IExbXSk6IEs7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuZCBtb2RpZmllcyBwb2x5Z29uIGZpbHRlciBzdHJ1Y3R1cmVcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcGFyYW0gbGF5ZXJzXG4gKiBAcmV0dXJuIC0ge2ZpbHRlciwgZGF0YXNldH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUG9seWdvbkZpbHRlcjxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTCBleHRlbmRzIHtpZDogc3RyaW5nfT4oXG4gIGRhdGFzZXQ6IEssXG4gIGZpbHRlcjogUG9seWdvbkZpbHRlcixcbiAgbGF5ZXJzOiBMW11cbik6IHtmaWx0ZXI6IFBvbHlnb25GaWx0ZXIgfCBudWxsOyBkYXRhc2V0OiBLfSB7XG4gIGNvbnN0IGZhaWxlZCA9IHtkYXRhc2V0LCBmaWx0ZXI6IG51bGx9O1xuICBjb25zdCB7dmFsdWUsIGxheWVySWQsIHR5cGUsIGRhdGFJZH0gPSBmaWx0ZXI7XG5cbiAgaWYgKCFsYXllcklkIHx8ICFpc1ZhbGlkRmlsdGVyVmFsdWUodHlwZSwgdmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIGNvbnN0IGlzVmFsaWREYXRhc2V0ID0gZGF0YUlkLmluY2x1ZGVzKGRhdGFzZXQuaWQpO1xuXG4gIGlmICghaXNWYWxpZERhdGFzZXQpIHtcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgY29uc3QgbGF5ZXIgPSBsYXllcnMuZmluZChsID0+IGxheWVySWQuaW5jbHVkZXMobC5pZCkpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXI6IHtcbiAgICAgIC4uLmZpbHRlcixcbiAgICAgIGZyZWV6ZTogdHJ1ZSxcbiAgICAgIGZpZWxkSWR4OiBbXVxuICAgIH0sXG4gICAgZGF0YXNldFxuICB9O1xufVxuXG4vKipcbiAqIEN1c3RvbSBmaWx0ZXIgdmFsaWRhdG9yc1xuICovXG5jb25zdCBmaWx0ZXJWYWxpZGF0b3JzID0ge1xuICBbRklMVEVSX1RZUEVTLnBvbHlnb25dOiB2YWxpZGF0ZVBvbHlnb25GaWx0ZXJcbn07XG5cbi8qKlxuICogRGVmYXVsdCB2YWxpZGF0ZSBmaWx0ZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcmV0dXJuIC0ge2ZpbHRlciwgZGF0YXNldH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVyPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZGF0YXNldDogSyxcbiAgZmlsdGVyOiBQYXJzZWRGaWx0ZXJcbik6IHtmaWx0ZXI6IEZpbHRlciB8IG51bGw7IGRhdGFzZXQ6IEt9IHtcbiAgLy8gbWF0Y2ggZmlsdGVyLmRhdGFJZFxuICBjb25zdCBmYWlsZWQgPSB7ZGF0YXNldCwgZmlsdGVyOiBudWxsfTtcbiAgY29uc3QgZmlsdGVyRGF0YUlkID0gdG9BcnJheShmaWx0ZXIuZGF0YUlkKTtcblxuICBjb25zdCBmaWx0ZXJEYXRhc2V0SW5kZXggPSBmaWx0ZXJEYXRhSWQuaW5kZXhPZihkYXRhc2V0LmlkKTtcbiAgaWYgKGZpbHRlckRhdGFzZXRJbmRleCA8IDAgfHwgIXRvQXJyYXkoZmlsdGVyLm5hbWUpW2ZpbHRlckRhdGFzZXRJbmRleF0pIHtcbiAgICAvLyB0aGUgY3VycmVudCBmaWx0ZXIgaXMgbm90IG1hcHBlZCBhZ2FpbnN0IHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgY29uc3QgaW5pdGlhbGl6ZUZpbHRlcjogRmlsdGVyID0ge1xuICAgIC4uLmdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZDogZmlsdGVyLmRhdGFJZH0pLFxuICAgIC4uLmZpbHRlcixcbiAgICBkYXRhSWQ6IGZpbHRlckRhdGFJZCxcbiAgICBuYW1lOiB0b0FycmF5KGZpbHRlci5uYW1lKVxuICB9O1xuXG4gIGNvbnN0IGZpZWxkTmFtZSA9IGluaXRpYWxpemVGaWx0ZXIubmFtZVtmaWx0ZXJEYXRhc2V0SW5kZXhdO1xuICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiB1cGRhdGVkRGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICBpbml0aWFsaXplRmlsdGVyLFxuICAgIGRhdGFzZXQsXG4gICAgZmllbGROYW1lLFxuICAgIGZpbHRlckRhdGFzZXRJbmRleCxcbiAgICB7bWVyZ2VEb21haW46IHRydWV9XG4gICk7XG5cbiAgaWYgKCF1cGRhdGVkRmlsdGVyKSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIHVwZGF0ZWRGaWx0ZXIudmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKGZpbHRlci52YWx1ZSwgdXBkYXRlZEZpbHRlcik7XG4gIHVwZGF0ZWRGaWx0ZXIudmlldyA9IGZpbHRlci52aWV3ID8/IHVwZGF0ZWRGaWx0ZXIudmlldztcblxuICBpZiAodXBkYXRlZEZpbHRlci52YWx1ZSA9PT0gbnVsbCkge1xuICAgIC8vIGNhbm5vdCBhZGp1c3Qgc2F2ZWQgdmFsdWUgdG8gZmlsdGVyXG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsdGVyOiB2YWxpZGF0ZUZpbHRlcllBeGlzKHVwZGF0ZWRGaWx0ZXIsIHVwZGF0ZWREYXRhc2V0KSxcbiAgICBkYXRhc2V0OiB1cGRhdGVkRGF0YXNldFxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGZpbHRlciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIGNhbGN1bGF0ZSBkb21haW4gYW5kIGZpZWxkSWR4IGJhc2VkIG5ldyBmaWVsZHMgYW5kIGRhdGFcbiAqXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHBhcmFtIGZpbHRlciAtIGZpbHRlciB0byBiZSB2YWxpZGF0ZVxuICogQHBhcmFtIGxheWVycyAtIGxheWVyc1xuICogQHJldHVybiB2YWxpZGF0ZWQgZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcldpdGhEYXRhPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZGF0YXNldDogSyxcbiAgZmlsdGVyOiBQYXJzZWRGaWx0ZXIsXG4gIGxheWVyczogTFtdXG4pOiB7ZmlsdGVyOiBGaWx0ZXI7IGRhdGFzZXQ6IEt9IHtcbiAgcmV0dXJuIGZpbHRlci50eXBlICYmIGZpbHRlclZhbGlkYXRvcnMuaGFzT3duUHJvcGVydHkoZmlsdGVyLnR5cGUpXG4gICAgPyBmaWx0ZXJWYWxpZGF0b3JzW2ZpbHRlci50eXBlXShkYXRhc2V0LCBmaWx0ZXIsIGxheWVycylcbiAgICA6IHZhbGlkYXRlRmlsdGVyKGRhdGFzZXQsIGZpbHRlcik7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgWUF4aXNcbiAqIEBwYXJhbSBmaWx0ZXJcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcllBeGlzKGZpbHRlciwgZGF0YXNldCkge1xuICAvLyBUT0RPOiB2YWxpZGF0ZSB5QXhpcyBhZ2FpbnN0IG90aGVyIGRhdGFzZXRzXG5cbiAgY29uc3Qge2ZpZWxkc30gPSBkYXRhc2V0O1xuICBjb25zdCB7eUF4aXN9ID0gZmlsdGVyO1xuICAvLyBUT0RPOiB2YWxpZGF0ZSB5QXhpcyBhZ2FpbnN0IG90aGVyIGRhdGFzZXRzXG4gIGlmICh5QXhpcykge1xuICAgIGNvbnN0IG1hdGNoZWRBeGlzID0gZmllbGRzLmZpbmQoKHtuYW1lLCB0eXBlfSkgPT4gbmFtZSA9PT0geUF4aXMubmFtZSAmJiB0eXBlID09PSB5QXhpcy50eXBlKTtcblxuICAgIGZpbHRlciA9IG1hdGNoZWRBeGlzXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgeUF4aXM6IG1hdGNoZWRBeGlzLFxuICAgICAgICAgIC4uLmdldEZpbHRlclBsb3Qoey4uLmZpbHRlciwgeUF4aXM6IG1hdGNoZWRBeGlzfSwgZGF0YXNldClcbiAgICAgICAgfVxuICAgICAgOiBmaWx0ZXI7XG4gIH1cblxuICByZXR1cm4gZmlsdGVyO1xufVxuXG4vKipcbiAqIEdldCBkZWZhdWx0IGZpbHRlciBwcm9wIGJhc2VkIG9uIGZpZWxkIHR5cGVcbiAqXG4gKiBAcGFyYW0gZmllbGRcbiAqIEBwYXJhbSBmaWVsZERvbWFpblxuICogQHJldHVybnMgZGVmYXVsdCBmaWx0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlclByb3BzKFxuICBmaWVsZDogRmllbGQsXG4gIGZpZWxkRG9tYWluOiBGaWVsZERvbWFpblxuKTogUGFydGlhbDxGaWx0ZXI+ICYge2ZpZWxkVHlwZTogc3RyaW5nfSB7XG4gIGNvbnN0IGZpbHRlclByb3BzID0ge1xuICAgIC4uLmZpZWxkRG9tYWluLFxuICAgIGZpZWxkVHlwZTogZmllbGQudHlwZSxcbiAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlXG4gIH07XG5cbiAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgICAgIHZhbHVlOiBmaWVsZERvbWFpbi5kb21haW4sXG4gICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5yYW5nZSxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICB0eXBlT3B0aW9uczogW0ZJTFRFUl9UWVBFUy5yYW5nZV0sXG4gICAgICAgIGdwdTogdHJ1ZVxuICAgICAgfTtcblxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW46XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICAgICAgdHlwZTogRklMVEVSX1RZUEVTLnNlbGVjdCxcbiAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgIGdwdTogZmFsc2VcbiAgICAgIH07XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuZGF0ZTpcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpbHRlclByb3BzLFxuICAgICAgICB0eXBlOiBGSUxURVJfVFlQRVMubXVsdGlTZWxlY3QsXG4gICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgZ3B1OiBmYWxzZVxuICAgICAgfTtcblxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpbHRlclByb3BzLFxuICAgICAgICB0eXBlOiBGSUxURVJfVFlQRVMudGltZVJhbmdlLFxuICAgICAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCxcbiAgICAgICAgZml4ZWREb21haW46IHRydWUsXG4gICAgICAgIHZhbHVlOiBmaWx0ZXJQcm9wcy5kb21haW4sXG4gICAgICAgIGdwdTogdHJ1ZVxuICAgICAgfTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4ge307XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvbHlnb25GaWx0ZXJGdW5jdG9yID0gKGxheWVyLCBmaWx0ZXIsIGRhdGFDb250YWluZXIpID0+IHtcbiAgY29uc3QgZ2V0UG9zaXRpb24gPSBsYXllci5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuXG4gIHN3aXRjaCAobGF5ZXIudHlwZSkge1xuICAgIGNhc2UgTEFZRVJfVFlQRVMucG9pbnQ6XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5pY29uOlxuICAgICAgcmV0dXJuIGRhdGEgPT4ge1xuICAgICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgcmV0dXJuIHBvcy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpICYmIGlzSW5Qb2x5Z29uKHBvcywgZmlsdGVyLnZhbHVlKTtcbiAgICAgIH07XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5hcmM6XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5saW5lOlxuICAgICAgcmV0dXJuIGRhdGEgPT4ge1xuICAgICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSAmJlxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFtwb3NbMF0sIHBvc1sxXV0sXG4gICAgICAgICAgICBbcG9zWzNdLCBwb3NbNF1dXG4gICAgICAgICAgXS5ldmVyeShwb2ludCA9PiBpc0luUG9seWdvbihwb2ludCwgZmlsdGVyLnZhbHVlKSlcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5oZXhhZ29uSWQ6XG4gICAgICBpZiAobGF5ZXIuZGF0YVRvRmVhdHVyZSAmJiBsYXllci5kYXRhVG9GZWF0dXJlLmNlbnRyb2lkcykge1xuICAgICAgICByZXR1cm4gZGF0YSA9PiB7XG4gICAgICAgICAgLy8gbnVsbCBvciBnZXRDZW50cm9pZCh7aWR9KVxuICAgICAgICAgIGNvbnN0IGNlbnRyb2lkID0gbGF5ZXIuZGF0YVRvRmVhdHVyZS5jZW50cm9pZHNbZGF0YS5pbmRleF07XG4gICAgICAgICAgcmV0dXJuIGNlbnRyb2lkICYmIGlzSW5Qb2x5Z29uKGNlbnRyb2lkLCBmaWx0ZXIudmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGEgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGdldFBvc2l0aW9uKGRhdGEpO1xuICAgICAgICBpZiAoIWgzSXNWYWxpZChpZCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zID0gZ2V0Q2VudHJvaWQoe2lkfSk7XG4gICAgICAgIHJldHVybiBwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSAmJiBpc0luUG9seWdvbihwb3MsIGZpbHRlci52YWx1ZSk7XG4gICAgICB9O1xuICAgIGNhc2UgTEFZRVJfVFlQRVMuZ2VvanNvbjpcbiAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgcmV0dXJuIGxheWVyLmlzSW5Qb2x5Z29uKGRhdGEsIGRhdGEuaW5kZXgsIGZpbHRlci52YWx1ZSk7XG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gKCkgPT4gdHJ1ZTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0gcGFyYW0gQW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIHJvdyByZWNvcmQuXG4gKiBAcGFyYW0gcGFyYW0uaW5kZXggSW5kZXggb2YgdGhlIHJvdyBpbiBkYXRhIGNvbnRhaW5lci5cbiAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSB0byBrZWVwIHRoZSBlbGVtZW50LCBvciBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbnR5cGUgZmlsdGVyRnVuY3Rpb24gPSAoZGF0YToge2luZGV4OiBudW1iZXJ9KSA9PiBib29sZWFuO1xuLyoqXG4gKiBAcGFyYW0gZmllbGQgZGF0YXNldCBGaWVsZFxuICogQHBhcmFtIGRhdGFJZCBEYXRhc2V0IGlkXG4gKiBAcGFyYW0gZmlsdGVyIEZpbHRlciBvYmplY3RcbiAqIEBwYXJhbSBsYXllcnMgbGlzdCBvZiBsYXllcnMgdG8gZmlsdGVyIHVwb25cbiAqIEBwYXJhbSBkYXRhQ29udGFpbmVyIERhdGEgY29udGFpbmVyXG4gKiBAcmV0dXJuIGZpbHRlckZ1bmN0aW9uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJGdW5jdGlvbjxMIGV4dGVuZHMge2NvbmZpZzoge2RhdGFJZDogc3RyaW5nIHwgbnVsbH07IGlkOiBzdHJpbmd9PihcbiAgZmllbGQ6IEZpZWxkIHwgbnVsbCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGZpbHRlcjogRmlsdGVyLFxuICBsYXllcnM6IExbXSxcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZVxuKTogZmlsdGVyRnVuY3Rpb24ge1xuICAvLyBmaWVsZCBjb3VsZCBiZSBudWxsIGluIHBvbHlnb24gZmlsdGVyXG4gIGNvbnN0IHZhbHVlQWNjZXNzb3IgPSBmaWVsZCA/IGZpZWxkLnZhbHVlQWNjZXNzb3IgOiBkYXRhID0+IG51bGw7XG4gIGNvbnN0IGRlZmF1bHRGdW5jID0gZCA9PiB0cnVlO1xuXG4gIGlmIChmaWx0ZXIuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZGVmYXVsdEZ1bmM7XG4gIH1cblxuICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucmFuZ2U6XG4gICAgICByZXR1cm4gZGF0YSA9PiBpc0luUmFuZ2UodmFsdWVBY2Nlc3NvcihkYXRhKSwgZmlsdGVyLnZhbHVlKTtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5tdWx0aVNlbGVjdDpcbiAgICAgIHJldHVybiBkYXRhID0+IGZpbHRlci52YWx1ZS5pbmNsdWRlcyh2YWx1ZUFjY2Vzc29yKGRhdGEpKTtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5zZWxlY3Q6XG4gICAgICByZXR1cm4gZGF0YSA9PiB2YWx1ZUFjY2Vzc29yKGRhdGEpID09PSBmaWx0ZXIudmFsdWU7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMudGltZVJhbmdlOlxuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdEZ1bmM7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXBwZWRWYWx1ZSA9IGdldChmaWVsZCwgWydmaWx0ZXJQcm9wcycsICdtYXBwZWRWYWx1ZSddKTtcbiAgICAgIGNvbnN0IGFjY2Vzc29yID0gQXJyYXkuaXNBcnJheShtYXBwZWRWYWx1ZSlcbiAgICAgICAgPyBkYXRhID0+IG1hcHBlZFZhbHVlW2RhdGEuaW5kZXhdXG4gICAgICAgIDogZGF0YSA9PiB0aW1lVG9Vbml4TWlsbGkodmFsdWVBY2Nlc3NvcihkYXRhKSwgZmllbGQuZm9ybWF0KTtcbiAgICAgIHJldHVybiBkYXRhID0+IGlzSW5SYW5nZShhY2Nlc3NvcihkYXRhKSwgZmlsdGVyLnZhbHVlKTtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5wb2x5Z29uOlxuICAgICAgaWYgKCFsYXllcnMgfHwgIWxheWVycy5sZW5ndGggfHwgIWZpbHRlci5sYXllcklkKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0RnVuYztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxheWVyRmlsdGVyRnVuY3Rpb25zID0gZmlsdGVyLmxheWVySWRcbiAgICAgICAgLm1hcChpZCA9PiBsYXllcnMuZmluZChsID0+IGwuaWQgPT09IGlkKSlcbiAgICAgICAgLmZpbHRlcihsID0+IGwgJiYgbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpXG4gICAgICAgIC5tYXAobGF5ZXIgPT4gZ2V0UG9seWdvbkZpbHRlckZ1bmN0b3IobGF5ZXIsIGZpbHRlciwgZGF0YUNvbnRhaW5lcikpO1xuXG4gICAgICByZXR1cm4gZGF0YSA9PiBsYXllckZpbHRlckZ1bmN0aW9ucy5ldmVyeShmaWx0ZXJGdW5jID0+IGZpbHRlckZ1bmMoZGF0YSkpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGVmYXVsdEZ1bmM7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbHRlckRhdGFJZChkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdKTogRmlsdGVyQmFzZTxMaW5lQ2hhcnQ+IHtcbiAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRGF0YUJ5RmlsdGVyVHlwZXMoXG4gIHtcbiAgICBkeW5hbWljRG9tYWluRmlsdGVycyxcbiAgICBjcHVGaWx0ZXJzLFxuICAgIGZpbHRlckZ1bmNzXG4gIH06IHtcbiAgICBkeW5hbWljRG9tYWluRmlsdGVyczogRmlsdGVyW10gfCBudWxsO1xuICAgIGNwdUZpbHRlcnM6IEZpbHRlcltdIHwgbnVsbDtcbiAgICBmaWx0ZXJGdW5jczoge1xuICAgICAgW2tleTogc3RyaW5nXTogZmlsdGVyRnVuY3Rpb247XG4gICAgfTtcbiAgfSxcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZVxuKTogRmlsdGVyUmVzdWx0IHtcbiAgY29uc3QgZmlsdGVyZWRJbmRleEZvckRvbWFpbjogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyZWRJbmRleDogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdCBmaWx0ZXJDb250ZXh0ID0ge2luZGV4OiAtMSwgZGF0YUNvbnRhaW5lcn07XG4gIGNvbnN0IGZpbHRlckZ1bmNDYWxsZXIgPSAoZmlsdGVyOiBGaWx0ZXIpID0+IGZpbHRlckZ1bmNzW2ZpbHRlci5pZF0oZmlsdGVyQ29udGV4dCk7XG5cbiAgY29uc3QgbnVtUm93cyA9IGRhdGFDb250YWluZXIubnVtUm93cygpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVJvd3M7ICsraSkge1xuICAgIGZpbHRlckNvbnRleHQuaW5kZXggPSBpO1xuXG4gICAgY29uc3QgbWF0Y2hGb3JEb21haW4gPSBkeW5hbWljRG9tYWluRmlsdGVycyAmJiBkeW5hbWljRG9tYWluRmlsdGVycy5ldmVyeShmaWx0ZXJGdW5jQ2FsbGVyKTtcbiAgICBpZiAobWF0Y2hGb3JEb21haW4pIHtcbiAgICAgIGZpbHRlcmVkSW5kZXhGb3JEb21haW4ucHVzaChmaWx0ZXJDb250ZXh0LmluZGV4KTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaEZvclJlbmRlciA9IGNwdUZpbHRlcnMgJiYgY3B1RmlsdGVycy5ldmVyeShmaWx0ZXJGdW5jQ2FsbGVyKTtcbiAgICBpZiAobWF0Y2hGb3JSZW5kZXIpIHtcbiAgICAgIGZpbHRlcmVkSW5kZXgucHVzaChmaWx0ZXJDb250ZXh0LmluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihkeW5hbWljRG9tYWluRmlsdGVycyA/IHtmaWx0ZXJlZEluZGV4Rm9yRG9tYWlufSA6IHt9KSxcbiAgICAuLi4oY3B1RmlsdGVycyA/IHtmaWx0ZXJlZEluZGV4fSA6IHt9KVxuICB9O1xufVxuXG4vKipcbiAqIEdldCBhIHJlY29yZCBvZiBmaWx0ZXJzIGJhc2VkIG9uIGRvbWFpbiB0eXBlIGFuZCBncHUgLyBjcHVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlclJlY29yZChcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGZpbHRlcnM6IEZpbHRlcltdLFxuICBvcHQ6IEZpbHRlckRhdGFzZXRPcHQgPSB7fVxuKTogRmlsdGVyUmVjb3JkIHtcbiAgY29uc3QgZmlsdGVyUmVjb3JkOiBGaWx0ZXJSZWNvcmQgPSB7XG4gICAgZHluYW1pY0RvbWFpbjogW10sXG4gICAgZml4ZWREb21haW46IFtdLFxuICAgIGNwdTogW10sXG4gICAgZ3B1OiBbXVxuICB9O1xuXG4gIGZpbHRlcnMuZm9yRWFjaChmID0+IHtcbiAgICBpZiAoaXNWYWxpZEZpbHRlclZhbHVlKGYudHlwZSwgZi52YWx1ZSkgJiYgdG9BcnJheShmLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgICAgKGYuZml4ZWREb21haW4gfHwgb3B0Lmlnbm9yZURvbWFpblxuICAgICAgICA/IGZpbHRlclJlY29yZC5maXhlZERvbWFpblxuICAgICAgICA6IGZpbHRlclJlY29yZC5keW5hbWljRG9tYWluXG4gICAgICApLnB1c2goZik7XG5cbiAgICAgIChmLmdwdSAmJiAhb3B0LmNwdU9ubHkgPyBmaWx0ZXJSZWNvcmQuZ3B1IDogZmlsdGVyUmVjb3JkLmNwdSkucHVzaChmKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJSZWNvcmQ7XG59XG5cbi8qKlxuICogQ29tcGFyZSBmaWx0ZXIgcmVjb3JkcyB0byBnZXQgd2hhdCBoYXMgY2hhbmdlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZkZpbHRlcnMoXG4gIGZpbHRlclJlY29yZDogRmlsdGVyUmVjb3JkLFxuICBvbGRGaWx0ZXJSZWNvcmQ6IEZpbHRlclJlY29yZCB8IHt9ID0ge31cbik6IEZpbHRlckNoYW5nZWQge1xuICBsZXQgZmlsdGVyQ2hhbmdlZDogUGFydGlhbDxGaWx0ZXJDaGFuZ2VkPiA9IHt9O1xuXG4gIChPYmplY3QuZW50cmllcyhmaWx0ZXJSZWNvcmQpIGFzIEVudHJpZXM8RmlsdGVyUmVjb3JkPikuZm9yRWFjaCgoW3JlY29yZCwgaXRlbXNdKSA9PiB7XG4gICAgaXRlbXMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3Qgb2xkRmlsdGVyOiBGaWx0ZXIgPSAob2xkRmlsdGVyUmVjb3JkW3JlY29yZF0gfHwgW10pLmZpbmQoXG4gICAgICAgIChmOiBGaWx0ZXIpID0+IGYuaWQgPT09IGZpbHRlci5pZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICAgICAgLy8gYWRkZWRcbiAgICAgICAgZmlsdGVyQ2hhbmdlZCA9IHNldChbcmVjb3JkLCBmaWx0ZXIuaWRdLCAnYWRkZWQnLCBmaWx0ZXJDaGFuZ2VkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNoZWNrICB3aGF0IGhhcyBjaGFuZ2VkXG4gICAgICAgIFsnbmFtZScsICd2YWx1ZScsICdkYXRhSWQnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJbcHJvcF0gIT09IG9sZEZpbHRlcltwcm9wXSkge1xuICAgICAgICAgICAgZmlsdGVyQ2hhbmdlZCA9IHNldChbcmVjb3JkLCBmaWx0ZXIuaWRdLCBgJHtwcm9wfV9jaGFuZ2VkYCwgZmlsdGVyQ2hhbmdlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIChvbGRGaWx0ZXJSZWNvcmRbcmVjb3JkXSB8fCBbXSkuZm9yRWFjaCgob2xkRmlsdGVyOiBGaWx0ZXIpID0+IHtcbiAgICAgIC8vIGRlbGV0ZWRcbiAgICAgIGlmICghaXRlbXMuZmluZChmID0+IGYuaWQgPT09IG9sZEZpbHRlci5pZCkpIHtcbiAgICAgICAgZmlsdGVyQ2hhbmdlZCA9IHNldChbcmVjb3JkLCBvbGRGaWx0ZXIuaWRdLCAnZGVsZXRlZCcsIGZpbHRlckNoYW5nZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gey4uLntkeW5hbWljRG9tYWluOiBudWxsLCBmaXhlZERvbWFpbjogbnVsbCwgY3B1OiBudWxsLCBncHU6IG51bGx9LCAuLi5maWx0ZXJDaGFuZ2VkfTtcbn1cbi8qKlxuICogQ2FsbCBieSBwYXJzaW5nIGZpbHRlcnMgZnJvbSBVUkxcbiAqIENoZWNrIGlmIHZhbHVlIG9mIGZpbHRlciB3aXRoaW4gZmlsdGVyIGRvbWFpbiwgaWYgbm90IGFkanVzdCBpdCB0byBtYXRjaFxuICogZmlsdGVyIGRvbWFpblxuICpcbiAqIEByZXR1cm5zIHZhbHVlIC0gYWRqdXN0ZWQgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIG9yIG51bGwgdG8gcmVtb3ZlIGZpbHRlclxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4odmFsdWU6IEZpbHRlclsndmFsdWUnXSwge2RvbWFpbiwgdHlwZX0pIHtcbiAgaWYgKCF0eXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGlmIHRoZSBjdXJyZW50IGZpbHRlciBpcyBhIHBvbHlnb24gaXQgd2lsbCBub3QgaGF2ZSBhbnkgZG9tYWluXG4gIC8vIGFsbCBvdGhlciBmaWx0ZXIgdHlwZXMgcmVxdWlyZSBkb21haW5cbiAgaWYgKHR5cGUgIT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmICFkb21haW4pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5yYW5nZTpcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy50aW1lUmFuZ2U6XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCAhPT0gMikge1xuICAgICAgICByZXR1cm4gZG9tYWluLm1hcChkID0+IGQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWUubWFwKChkLCBpKSA9PiAobm90TnVsbG9yVW5kZWZpbmVkKGQpICYmIGlzSW5SYW5nZShkLCBkb21haW4pID8gZCA6IGRvbWFpbltpXSkpO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMubXVsdGlTZWxlY3Q6XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlcmVkVmFsdWUgPSB2YWx1ZS5maWx0ZXIoZCA9PiBkb21haW4uaW5jbHVkZXMoZCkpO1xuICAgICAgcmV0dXJuIGZpbHRlcmVkVmFsdWUubGVuZ3RoID8gZmlsdGVyZWRWYWx1ZSA6IFtdO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMuc2VsZWN0OlxuICAgICAgcmV0dXJuIGRvbWFpbi5pbmNsdWRlcyh2YWx1ZSkgPyB2YWx1ZSA6IHRydWU7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucG9seWdvbjpcbiAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKlxuICogQ2FsY3VsYXRlIG51bWVyaWMgZG9tYWluIGFuZCBzdWl0YWJsZSBzdGVwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1lcmljRmllbGREb21haW4oXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIHZhbHVlQWNjZXNzb3I6IGRhdGFWYWx1ZUFjY2Vzc29yXG4pOiBSYW5nZUZpZWxkRG9tYWluIHtcbiAgbGV0IGRvbWFpbjogW251bWJlciwgbnVtYmVyXSA9IFswLCAxXTtcbiAgbGV0IHN0ZXAgPSAwLjE7XG5cbiAgY29uc3QgbWFwcGVkVmFsdWUgPSBkYXRhQ29udGFpbmVyLm1hcEluZGV4KHZhbHVlQWNjZXNzb3IpO1xuXG4gIGlmIChkYXRhQ29udGFpbmVyLm51bVJvd3MoKSA+IDEpIHtcbiAgICBkb21haW4gPSBTY2FsZVV0aWxzLmdldExpbmVhckRvbWFpbihtYXBwZWRWYWx1ZSk7XG4gICAgY29uc3QgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcblxuICAgIC8vIGluIGNhc2UgZXF1YWwgZG9tYWluLCBbOTYsIDk2XSwgd2hpY2ggd2lsbCBicmVhayBxdWFudGl6ZSBzY2FsZVxuICAgIGlmICghZGlmZikge1xuICAgICAgZG9tYWluWzFdID0gZG9tYWluWzBdICsgMTtcbiAgICB9XG5cbiAgICBzdGVwID0gZ2V0TnVtZXJpY1N0ZXBTaXplKGRpZmYpIHx8IHN0ZXA7XG4gICAgZG9tYWluWzBdID0gZm9ybWF0TnVtYmVyQnlTdGVwKGRvbWFpblswXSwgc3RlcCwgJ2Zsb29yJyk7XG4gICAgZG9tYWluWzFdID0gZm9ybWF0TnVtYmVyQnlTdGVwKGRvbWFpblsxXSwgc3RlcCwgJ2NlaWwnKTtcbiAgfVxuXG4gIGNvbnN0IHtoaXN0b2dyYW0sIGVubGFyZ2VkSGlzdG9ncmFtfSA9IGdldEhpc3RvZ3JhbShkb21haW4sIG1hcHBlZFZhbHVlKTtcblxuICByZXR1cm4ge2RvbWFpbiwgc3RlcCwgaGlzdG9ncmFtLCBlbmxhcmdlZEhpc3RvZ3JhbX07XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHN0ZXAgc2l6ZSBmb3IgcmFuZ2UgYW5kIHRpbWVyYW5nZSBmaWx0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWVyaWNTdGVwU2l6ZShkaWZmOiBudW1iZXIpOiBudW1iZXIge1xuICBkaWZmID0gTWF0aC5hYnMoZGlmZik7XG5cbiAgaWYgKGRpZmYgPiAxMDApIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIGlmIChkaWZmID4gMykge1xuICAgIHJldHVybiAwLjAxO1xuICB9IGVsc2UgaWYgKGRpZmYgPiAxKSB7XG4gICAgcmV0dXJuIDAuMDAxO1xuICB9XG4gIC8vIFRyeSB0byBnZXQgYXQgbGVhc3QgMTAwMCBzdGVwcyAtIGFuZCBrZWVwIHRoZSBzdGVwIHNpemUgYmVsb3cgdGhhdCBvZlxuICAvLyB0aGUgKGRpZmYgPiAxKSBjYXNlLlxuICBjb25zdCB4ID0gZGlmZiAvIDEwMDA7XG4gIC8vIEZpbmQgdGhlIGV4cG9uZW50IGFuZCB0cnVuY2F0ZSB0byAxMCB0byB0aGUgcG93ZXIgb2YgdGhhdCBleHBvbmVudFxuXG4gIGNvbnN0IGV4cG9uZW50aWFsRm9ybSA9IHgudG9FeHBvbmVudGlhbCgpO1xuICBjb25zdCBleHBvbmVudCA9IHBhcnNlRmxvYXQoZXhwb25lbnRpYWxGb3JtLnNwbGl0KCdlJylbMV0pO1xuXG4gIC8vIEdldHRpbmcgcmVhZHkgZm9yIG5vZGUgMTJcbiAgLy8gdGhpcyBpcyB3aHkgd2UgbmVlZCBkZWNpbWFsLmpzXG4gIC8vIE1hdGgucG93KDEwLCAtNSkgPSAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OVxuICAvLyB0aGUgYWJvdmUgcmVzdWx0IHNob3dzIGluIGJyb3dzZXIgYW5kIG5vZGUgMTBcbiAgLy8gbm9kZSAxMiBiZWhhdmVzIGNvcnJlY3RseVxuICByZXR1cm4gbmV3IERlY2ltYWwoMTApLnBvdyhleHBvbmVudCkudG9OdW1iZXIoKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGltZXN0YW1wIGRvbWFpbiBhbmQgc3VpdGFibGUgc3RlcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXN0YW1wRmllbGREb21haW4oXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIHZhbHVlQWNjZXNzb3I6IGRhdGFWYWx1ZUFjY2Vzc29yXG4pOiBUaW1lUmFuZ2VGaWVsZERvbWFpbiB7XG4gIC8vIHRvIGF2b2lkIGNvbnZlcnRpbmcgc3RyaW5nIGZvcm1hdCB0aW1lIHRvIGVwb2NoXG4gIC8vIGV2ZXJ5IHRpbWUgd2UgY29tcGFyZSB3ZSBzdG9yZSBhIHZhbHVlIG1hcHBlZCB0byBpbnQgaW4gZmlsdGVyIGRvbWFpblxuXG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZGF0YUNvbnRhaW5lci5tYXBJbmRleCh2YWx1ZUFjY2Vzc29yKTtcbiAgY29uc3QgZG9tYWluID0gU2NhbGVVdGlscy5nZXRMaW5lYXJEb21haW4obWFwcGVkVmFsdWUpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihkb21haW4pO1xuXG4gIGxldCBzdGVwID0gMC4wMTtcblxuICBjb25zdCBkaWZmID0gZG9tYWluWzFdIC0gZG9tYWluWzBdO1xuICAvLyBpbiBjYXNlIGVxdWFsIHRpbWVzdGFtcCBhZGQgMSBzZWNvbmQgcGFkZGluZyB0byBwcmV2ZW50IGJyZWFrXG4gIGlmICghZGlmZikge1xuICAgIGRvbWFpblsxXSA9IGRvbWFpblswXSArIDEwMDA7XG4gIH1cbiAgY29uc3QgZW50cnkgPSBUaW1lc3RhbXBTdGVwTWFwLmZpbmQoZiA9PiBmLm1heCA+PSBkaWZmKTtcbiAgaWYgKGVudHJ5KSB7XG4gICAgc3RlcCA9IGVudHJ5LnN0ZXA7XG4gIH1cblxuICBjb25zdCB7aGlzdG9ncmFtLCBlbmxhcmdlZEhpc3RvZ3JhbX0gPSBnZXRIaXN0b2dyYW0oZG9tYWluLCBtYXBwZWRWYWx1ZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBkb21haW4sXG4gICAgc3RlcCxcbiAgICBtYXBwZWRWYWx1ZSxcbiAgICBoaXN0b2dyYW0sXG4gICAgZW5sYXJnZWRIaXN0b2dyYW0sXG4gICAgZGVmYXVsdFRpbWVGb3JtYXRcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhpc3RvZ3JhbUNvbnN0cnVjdChcbiAgZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICBtYXBwZWRWYWx1ZTogKE1pbGxpc2Vjb25kIHwgbnVtYmVyKVtdLFxuICBiaW5zOiBudW1iZXJcbik6IEhpc3RvZ3JhbUJpbltdIHtcbiAgcmV0dXJuIGQzSGlzdG9ncmFtKClcbiAgICAudGhyZXNob2xkcyh0aWNrcyhkb21haW5bMF0sIGRvbWFpblsxXSwgYmlucykpXG4gICAgLmRvbWFpbihkb21haW4pKG1hcHBlZFZhbHVlKVxuICAgIC5tYXAoYmluID0+ICh7XG4gICAgICBjb3VudDogYmluLmxlbmd0aCxcbiAgICAgIGJpbixcbiAgICAgIHgwOiBiaW4ueDAsXG4gICAgICB4MTogYmluLngxXG4gICAgfSkpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgaGlzdG9ncmFtIGZyb20gZG9tYWluIGFuZCBhcnJheSBvZiB2YWx1ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhpc3RvZ3JhbShcbiAgZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICBtYXBwZWRWYWx1ZTogKE1pbGxpc2Vjb25kIHwgbnVtYmVyKVtdXG4pOiB7aGlzdG9ncmFtOiBIaXN0b2dyYW1CaW5bXTsgZW5sYXJnZWRIaXN0b2dyYW06IEhpc3RvZ3JhbUJpbltdfSB7XG4gIGNvbnN0IGhpc3RvZ3JhbSA9IGhpc3RvZ3JhbUNvbnN0cnVjdChkb21haW4sIG1hcHBlZFZhbHVlLCBoaXN0b2dyYW1CaW5zKTtcbiAgY29uc3QgZW5sYXJnZWRIaXN0b2dyYW0gPSBoaXN0b2dyYW1Db25zdHJ1Y3QoZG9tYWluLCBtYXBwZWRWYWx1ZSwgZW5sYXJnZWRIaXN0b2dyYW1CaW5zKTtcblxuICByZXR1cm4ge2hpc3RvZ3JhbSwgZW5sYXJnZWRIaXN0b2dyYW19O1xufVxuXG4vKipcbiAqIHJvdW5kIG51bWJlciBiYXNlZCBvbiBzdGVwXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtOdW1iZXJ9IHN0ZXBcbiAqIEBwYXJhbSB7c3RyaW5nfSBib3VuZFxuICogQHJldHVybnMge051bWJlcn0gcm91bmRlZCBudW1iZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE51bWJlckJ5U3RlcCh2YWw6IG51bWJlciwgc3RlcDogbnVtYmVyLCBib3VuZDogJ2Zsb29yJyB8ICdjZWlsJyk6IG51bWJlciB7XG4gIGlmIChib3VuZCA9PT0gJ2Zsb29yJykge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHZhbCAqICgxIC8gc3RlcCkpIC8gKDEgLyBzdGVwKTtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmNlaWwodmFsICogKDEgLyBzdGVwKSkgLyAoMSAvIHN0ZXApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJblJhbmdlKHZhbDogYW55LCBkb21haW46IG51bWJlcltdKTogYm9vbGVhbiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShkb21haW4pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHZhbCA+PSBkb21haW5bMF0gJiYgdmFsIDw9IGRvbWFpblsxXTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBwb2ludCBpcyB3aXRoaW4gdGhlIHByb3ZpZGVkIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0gcG9pbnQgYXMgaW5wdXQgc2VhcmNoIFtsYXQsIGxuZ11cbiAqIEBwYXJhbSBwb2x5Z29uIFBvaW50cyBtdXN0IGJlIHdpdGhpbiB0aGVzZSAoTXVsdGkpUG9seWdvbihzKVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5Qb2x5Z29uKHBvaW50OiBudW1iZXJbXSwgcG9seWdvbjogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBib29sZWFuV2l0aGluKHR1cmZQb2ludChwb2ludCksIHBvbHlnb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihkb21haW46IFtudW1iZXIsIG51bWJlcl0pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFpc1ZhbGlkVGltZURvbWFpbihkb21haW4pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZG9tYWluWzFdIC0gZG9tYWluWzBdO1xuXG4gIC8vIExvY2FsIGF3YXJlIGZvcm1hdHNcbiAgLy8gaHR0cHM6Ly9tb21lbnRqcy5jb20vZG9jcy8jL3BhcnNpbmcvc3RyaW5nLWZvcm1hdFxuICByZXR1cm4gZGlmZiA+IGR1cmF0aW9uWWVhciA/ICdMJyA6IGRpZmYgPiBkdXJhdGlvbkRheSA/ICdMIExUJyA6ICdMIExUUyc7XG59XG5cbi8qKlxuICogU2FuaXR5IGNoZWNrIG9uIGZpbHRlcnMgdG8gcHJlcGFyZSBmb3Igc2F2ZVxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vZmlsdGVyLXV0aWxzJykuaXNGaWx0ZXJWYWxpZFRvU2F2ZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyVmFsaWRUb1NhdmUoZmlsdGVyOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBmaWx0ZXI/LnR5cGUgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXI/Lm5hbWUpICYmIChmaWx0ZXI/Lm5hbWUubGVuZ3RoIHx8IGZpbHRlcj8ubGF5ZXJJZC5sZW5ndGgpXG4gICk7XG59XG5cbi8qKlxuICogU2FuaXR5IGNoZWNrIG9uIGZpbHRlcnMgdG8gcHJlcGFyZSBmb3Igc2F2ZVxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vZmlsdGVyLXV0aWxzJykuaXNWYWxpZEZpbHRlclZhbHVlfVxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEZpbHRlclZhbHVlKHR5cGU6IHN0cmluZyB8IG51bGwsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKCF0eXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnNlbGVjdDpcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2U7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5yYW5nZTpcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy50aW1lUmFuZ2U6XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkodiA9PiB2ICE9PSBudWxsICYmICFpc05hTih2KSk7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5tdWx0aVNlbGVjdDpcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBCb29sZWFuKHZhbHVlLmxlbmd0aCk7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5pbnB1dDpcbiAgICAgIHJldHVybiBCb29sZWFuKHZhbHVlLmxlbmd0aCk7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5wb2x5Z29uOlxuICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBnZXQodmFsdWUsIFsnZ2VvbWV0cnknLCAnY29vcmRpbmF0ZXMnXSk7XG4gICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSAmJiB2YWx1ZS5pZCAmJiBjb29yZGluYXRlcyk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkZpbHRlclByb3BzPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZmlsdGVyOiBGaWx0ZXIsXG4gIGRhdGFzZXQ6IEtcbik6IHtsaW5lQ2hhcnQ6IExpbmVDaGFydDsgeUF4czogRmllbGR9IHwge30ge1xuICBpZiAoZmlsdGVyLnBsb3RUeXBlID09PSBQTE9UX1RZUEVTLmhpc3RvZ3JhbSB8fCAhZmlsdGVyLnlBeGlzKSB7XG4gICAgLy8gaGlzdG9ncmFtIHNob3VsZCBiZSBjYWxjdWxhdGVkIHdoZW4gY3JlYXRlIGZpbHRlclxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHttYXBwZWRWYWx1ZSA9IFtdfSA9IGZpbHRlcjtcbiAgY29uc3Qge3lBeGlzfSA9IGZpbHRlcjtcbiAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmdldENvbHVtbkZpZWxkSWR4KHlBeGlzLm5hbWUpO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgQ29uc29sZS53YXJuKGB5QXhpcyAke3lBeGlzLm5hbWV9IGRvZXMgbm90IGV4aXN0IGluIGRhdGFzZXRgKTtcbiAgICByZXR1cm4ge2xpbmVDaGFydDoge30sIHlBeGlzfTtcbiAgfVxuXG4gIC8vIHJldHVybiBsaW5lQ2hhcnRcbiAgY29uc3Qgc2VyaWVzID0gZGF0YXNldC5kYXRhQ29udGFpbmVyXG4gICAgLm1hcChcbiAgICAgIChyb3csIHJvd0luZGV4KSA9PiAoe1xuICAgICAgICB4OiBtYXBwZWRWYWx1ZVtyb3dJbmRleF0sXG4gICAgICAgIHk6IHJvdy52YWx1ZUF0KGZpZWxkSWR4KVxuICAgICAgfSksXG4gICAgICB0cnVlXG4gICAgKVxuICAgIC5maWx0ZXIoKHt4LCB5fSkgPT4gTnVtYmVyLmlzRmluaXRlKHgpICYmIE51bWJlci5pc0Zpbml0ZSh5KSlcbiAgICAuc29ydCgoYSwgYikgPT4gYXNjZW5kaW5nKGEueCwgYi54KSk7XG5cbiAgY29uc3QgeURvbWFpbiA9IGV4dGVudChzZXJpZXMsIGQgPT4gZC55KTtcbiAgY29uc3QgeERvbWFpbiA9IFtzZXJpZXNbMF0ueCwgc2VyaWVzW3Nlcmllcy5sZW5ndGggLSAxXS54XTtcblxuICByZXR1cm4ge2xpbmVDaGFydDoge3NlcmllcywgeURvbWFpbiwgeERvbWFpbn0sIHlBeGlzfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRGaWx0ZXJQbG90VHlwZShmaWx0ZXI6IEZpbHRlcik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBmaWx0ZXJQbG90VHlwZXM6IHR5cGVvZiBTdXBwb3J0ZWRQbG90VHlwZVtrZXlvZiB0eXBlb2YgU3VwcG9ydGVkUGxvdFR5cGVdIHwgbnVsbCA9XG4gICAgZmlsdGVyLnR5cGUgJiYgU3VwcG9ydGVkUGxvdFR5cGVbZmlsdGVyLnR5cGVdO1xuICBpZiAoIWZpbHRlclBsb3RUeXBlcykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCFmaWx0ZXIueUF4aXMpIHtcbiAgICByZXR1cm4gZmlsdGVyUGxvdFR5cGVzLmRlZmF1bHQ7XG4gIH1cblxuICByZXR1cm4gZmlsdGVyUGxvdFR5cGVzW2ZpbHRlci55QXhpcy50eXBlXSB8fCBudWxsO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YXNldElkcyBsaXN0IG9mIGRhdGFzZXQgaWRzIHRvIGJlIGZpbHRlcmVkXG4gKiBAcGFyYW0gZGF0YXNldHMgYWxsIGRhdGFzZXRzXG4gKiBAcGFyYW0gZmlsdGVycyBhbGwgZmlsdGVycyB0byBiZSBhcHBsaWVkIHRvIGRhdGFzZXRzXG4gKiBAcmV0dXJuIGRhdGFzZXRzIC0gbmV3IHVwZGF0ZWQgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyc1RvRGF0YXNldHM8XG4gIEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LFxuICBMIGV4dGVuZHMge2NvbmZpZzoge2RhdGFJZDogc3RyaW5nIHwgbnVsbH19XG4+KFxuICBkYXRhc2V0SWRzOiBzdHJpbmdbXSxcbiAgZGF0YXNldHM6IHtbaWQ6IHN0cmluZ106IEt9LFxuICBmaWx0ZXJzOiBGaWx0ZXJbXSxcbiAgbGF5ZXJzPzogTFtdXG4pOiB7W2lkOiBzdHJpbmddOiBLfSB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFzZXRJZHMpO1xuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjYywgZGF0YUlkKSA9PiB7XG4gICAgY29uc3QgbGF5ZXJzVG9GaWx0ZXIgPSAobGF5ZXJzIHx8IFtdKS5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFJZCk7XG4gICAgY29uc3QgYXBwbGllZEZpbHRlcnMgPSBmaWx0ZXJzLmZpbHRlcihkID0+IHNob3VsZEFwcGx5RmlsdGVyKGQsIGRhdGFJZCkpO1xuICAgIGNvbnN0IHRhYmxlID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5hY2MsXG4gICAgICBbZGF0YUlkXTogdGFibGUuZmlsdGVyVGFibGUoYXBwbGllZEZpbHRlcnMsIGxheWVyc1RvRmlsdGVyLCB7fSlcbiAgICB9O1xuICB9LCBkYXRhc2V0cyk7XG59XG5cbi8qKlxuICogQXBwbGllcyBhIG5ldyBmaWVsZCBuYW1lIHZhbHVlIHRvIGZpZWx0ZXIgYW5kIHVwZGF0ZSBib3RoIGZpbHRlciBhbmQgZGF0YXNldFxuICogQHBhcmFtIGZpbHRlciAtIHRvIGJlIGFwcGxpZWQgdGhlIG5ldyBmaWVsZCBuYW1lIG9uXG4gKiBAcGFyYW0gZGF0YXNldCAtIGRhdGFzZXQgdGhlIGZpZWxkIGJlbG9uZ3MgdG9cbiAqIEBwYXJhbSBmaWVsZE5hbWUgLSBmaWVsZC5uYW1lXG4gKiBAcGFyYW0gZmlsdGVyRGF0YXNldEluZGV4IC0gZmllbGQubmFtZVxuICogQHBhcmFtIG9wdGlvblxuICogQHJldHVybiAtIHtmaWx0ZXIsIGRhdGFzZXRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJGaWVsZE5hbWU8SyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEw+KFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgZGF0YXNldDogSyxcbiAgZmllbGROYW1lOiBzdHJpbmcsXG4gIGZpbHRlckRhdGFzZXRJbmRleCA9IDAsXG4gIG9wdGlvbj86IHttZXJnZURvbWFpbjogYm9vbGVhbn1cbik6IHtcbiAgZmlsdGVyOiBGaWx0ZXIgfCBudWxsO1xuICBkYXRhc2V0OiBLO1xufSB7XG4gIC8vIHVzaW5nIGZpbHRlckRhdGFzZXRJbmRleCB3ZSBjYW4gZmlsdGVyIG9ubHkgdGhlIHNwZWNpZmllZCBkYXRhc2V0XG4gIGNvbnN0IG1lcmdlRG9tYWluID0gb3B0aW9uICYmIG9wdGlvbi5oYXNPd25Qcm9wZXJ0eSgnbWVyZ2VEb21haW4nKSA/IG9wdGlvbi5tZXJnZURvbWFpbiA6IGZhbHNlO1xuXG4gIGNvbnN0IGZpZWxkSW5kZXggPSBkYXRhc2V0LmdldENvbHVtbkZpZWxkSWR4KGZpZWxkTmFtZSk7XG4gIC8vIGlmIG5vIGZpZWxkIHdpdGggc2FtZSBuYW1lIGlzIGZvdW5kLCBtb3ZlIHRvIHRoZSBuZXh0IGRhdGFzZXRzXG4gIGlmIChmaWVsZEluZGV4ID09PSAtMSkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcihgZmllbGRJbmRleCBub3QgZm91bmQuIERhdGFzZXQgbXVzdCBjb250YWluIGEgcHJvcGVydHkgd2l0aCBuYW1lOiAke2ZpZWxkTmFtZX1gKTtcbiAgICByZXR1cm4ge2ZpbHRlcjogbnVsbCwgZGF0YXNldH07XG4gIH1cblxuICAvLyBUT0RPOiB2YWxpZGF0ZSBmaWVsZCB0eXBlXG4gIGNvbnN0IGZpbHRlclByb3BzID0gZGF0YXNldC5nZXRDb2x1bW5GaWx0ZXJQcm9wcyhmaWVsZE5hbWUpO1xuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi4obWVyZ2VEb21haW4gPyBtZXJnZUZpbHRlckRvbWFpblN0ZXAoZmlsdGVyLCBmaWx0ZXJQcm9wcykgOiB7Li4uZmlsdGVyLCAuLi5maWx0ZXJQcm9wc30pLFxuICAgIG5hbWU6IE9iamVjdC5hc3NpZ24oWy4uLnRvQXJyYXkoZmlsdGVyLm5hbWUpXSwge1tmaWx0ZXJEYXRhc2V0SW5kZXhdOiBmaWVsZE5hbWV9KSxcbiAgICBmaWVsZElkeDogT2JqZWN0LmFzc2lnbihbLi4udG9BcnJheShmaWx0ZXIuZmllbGRJZHgpXSwge1xuICAgICAgW2ZpbHRlckRhdGFzZXRJbmRleF06IGZpZWxkSW5kZXhcbiAgICB9KSxcbiAgICAvLyBUT0RPLCBzaW5jZSB3ZSBhbGxvdyB0byBhZGQgbXVsdGlwbGUgZmllbGRzIHRvIGEgZmlsdGVyIHdlIGNhbiBubyBsb25nZXIgZnJlZXplIHRoZSBmaWx0ZXJcbiAgICBmcmVlemU6IHRydWVcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGZpbHRlcjogbmV3RmlsdGVyLFxuICAgIGRhdGFzZXRcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBvbmUgZmlsdGVyIHdpdGggb3RoZXIgZmlsdGVyIHByb3AgZG9tYWluXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlckRvbWFpblN0ZXAoXG4gIGZpbHRlcjogRmlsdGVyLFxuICBmaWx0ZXJQcm9wcz86IFBhcnRpYWw8RmlsdGVyPlxuKTogKEZpbHRlciAmIHtzdGVwPzogbnVtYmVyfSkgfCBudWxsIHtcbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghZmlsdGVyUHJvcHMpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgaWYgKChmaWx0ZXIuZmllbGRUeXBlICYmIGZpbHRlci5maWVsZFR5cGUgIT09IGZpbHRlclByb3BzLmZpZWxkVHlwZSkgfHwgIWZpbHRlclByb3BzLmRvbWFpbikge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBjb25zdCBjb21iaW5lZERvbWFpbiA9ICFmaWx0ZXIuZG9tYWluXG4gICAgPyBmaWx0ZXJQcm9wcy5kb21haW5cbiAgICA6IFsuLi4oZmlsdGVyLmRvbWFpbiB8fCBbXSksIC4uLihmaWx0ZXJQcm9wcy5kb21haW4gfHwgW10pXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICBkb21haW46IFtjb21iaW5lZERvbWFpblswXSwgY29tYmluZWREb21haW5bY29tYmluZWREb21haW4ubGVuZ3RoIC0gMV1dXG4gIH07XG5cbiAgc3dpdGNoIChmaWx0ZXJQcm9wcy5maWVsZFR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuZGF0ZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld0ZpbHRlcixcbiAgICAgICAgZG9tYWluOiB1bmlxdWUoY29tYmluZWREb21haW4pLnNvcnQoKVxuICAgICAgfTtcblxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgIGNvbnN0IHN0ZXAgPVxuICAgICAgICAoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3RlcCA8IChmaWx0ZXJQcm9wcyBhcyBUaW1lUmFuZ2VGaWVsZERvbWFpbikuc3RlcFxuICAgICAgICAgID8gKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN0ZXBcbiAgICAgICAgICA6IChmaWx0ZXJQcm9wcyBhcyBUaW1lUmFuZ2VGaWVsZERvbWFpbikuc3RlcDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3RmlsdGVyLFxuICAgICAgICBzdGVwXG4gICAgICB9O1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5ld0ZpbHRlcjtcbiAgfVxufVxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKlxuICogR2VuZXJhdGVzIHBvbHlnb24gZmlsdGVyXG4gKi9cbmV4cG9ydCBjb25zdCBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSA9IChcbiAgZmVhdHVyZTogRmVhdHVyZSxcbiAgZmlsdGVySWQ6IHN0cmluZyxcbiAgcHJvcGVydGllcz86IHt9XG4pOiBGZWF0dXJlVmFsdWUgPT4gKHtcbiAgLi4uZmVhdHVyZSxcbiAgaWQ6IGZlYXR1cmUuaWQsXG4gIHByb3BlcnRpZXM6IHtcbiAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgLi4ucHJvcGVydGllcyxcbiAgICBmaWx0ZXJJZFxuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlcklkSW5GZWF0dXJlID0gKGY6IEZlYXR1cmVWYWx1ZSk6IHN0cmluZyA9PiBnZXQoZiwgWydwcm9wZXJ0aWVzJywgJ2ZpbHRlcklkJ10pO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBwb2x5Z29uIGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyPFxuICBMIGV4dGVuZHMge2NvbmZpZzoge2RhdGFJZDogc3RyaW5nIHwgbnVsbDsgbGFiZWw6IHN0cmluZ307IGlkOiBzdHJpbmd9XG4+KGxheWVyczogTFtdLCBmZWF0dXJlOiBGZWF0dXJlKTogUG9seWdvbkZpbHRlciB7XG4gIGNvbnN0IGRhdGFJZCA9IGxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5kYXRhSWQpLmZpbHRlcihub3ROdWxsb3JVbmRlZmluZWQpO1xuICBjb25zdCBsYXllcklkID0gbGF5ZXJzLm1hcChsID0+IGwuaWQpO1xuICBjb25zdCBuYW1lID0gbGF5ZXJzLm1hcChsID0+IGwuY29uZmlnLmxhYmVsKTtcbiAgY29uc3QgZmlsdGVyID0gZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkfSk7XG4gIHJldHVybiB7XG4gICAgLi4uZmlsdGVyLFxuICAgIGZpeGVkRG9tYWluOiB0cnVlLFxuICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5wb2x5Z29uLFxuICAgIG5hbWUsXG4gICAgbGF5ZXJJZCxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVyLmlkLCB7aXNWaXNpYmxlOiB0cnVlfSlcbiAgfTtcbn1cblxuLyoqXG4gKiBSdW4gZmlsdGVyIGVudGlyZWx5IG9uIENQVVxuICovXG5pbnRlcmZhY2UgU3RhdGVUeXBlPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPiB7XG4gIGxheWVyczogTFtdO1xuICBmaWx0ZXJzOiBGaWx0ZXJbXTtcbiAgZGF0YXNldHM6IHtbaWQ6IHN0cmluZ106IEt9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRGF0YXNldENQVTxUIGV4dGVuZHMgU3RhdGVUeXBlPEssIEw+LCBLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PiBmLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgY3B1RmlsdGVyZWREYXRhc2V0ID0gZGF0YXNldC5maWx0ZXJUYWJsZUNQVShkYXRhc2V0RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBjcHVGaWx0ZXJlZERhdGFzZXQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBwYXJzZWQgZmlsdGVycyB3aXRoIGRhdGFzZXRzIGFuZCBhZGQgZmlsdGVyUHJvcHMgdG8gZmllbGRcbiAqL1xudHlwZSBNaW5WaXNTdGF0ZUZvckZpbHRlciA9IFBpY2s8VmlzU3RhdGUsICdsYXllcnMnIHwgJ2RhdGFzZXRzJyB8ICdpc01lcmdpbmdEYXRhc2V0cyc+O1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzPFxuICBTIGV4dGVuZHMgTWluVmlzU3RhdGVGb3JGaWx0ZXIsXG4gIEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LFxuICBMIGV4dGVuZHMge2NvbmZpZzoge2RhdGFJZDogc3RyaW5nIHwgbnVsbDsgbGFiZWw6IHN0cmluZ307IGlkOiBzdHJpbmd9XG4+KFxuICBzdGF0ZTogUyxcbiAgZmlsdGVyc1RvVmFsaWRhdGU6IFBhcnNlZEZpbHRlcltdID0gW11cbik6IHtcbiAgdmFsaWRhdGVkOiBGaWx0ZXJbXTtcbiAgZmFpbGVkOiBGaWx0ZXJbXTtcbiAgdXBkYXRlZERhdGFzZXRzOiBTWydkYXRhc2V0cyddO1xufSB7XG4gIC8vIFRPRE8gQmV0dGVyIFR5cGluZ3MgaGVyZVxuICBjb25zdCB2YWxpZGF0ZWQ6IGFueVtdID0gW107XG4gIGNvbnN0IGZhaWxlZDogYW55W10gPSBbXTtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBsZXQgdXBkYXRlZERhdGFzZXRzID0gZGF0YXNldHM7XG5cbiAgLy8gbWVyZ2UgZmlsdGVyc1xuICBmaWx0ZXJzVG9WYWxpZGF0ZS5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgLy8gd2UgY2FuIG9ubHkgbG9vayBmb3IgZGF0YXNldHMgZGVmaW5lIGluIHRoZSBmaWx0ZXIgZGF0YUlkXG4gICAgY29uc3QgZGF0YXNldElkcyA9IHRvQXJyYXkoZmlsdGVyLmRhdGFJZCk7XG5cbiAgICAvLyB3ZSBjYW4gbWVyZ2UgYSBmaWx0ZXIgb25seSBpZiBhbGwgZGF0YXNldHMgaW4gZmlsdGVyLmRhdGFJZCBhcmUgbG9hZGVkXG4gICAgaWYgKGRhdGFzZXRJZHMuZXZlcnkoZCA9PiBkYXRhc2V0c1tkXSAmJiAhc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbZF0pKSB7XG4gICAgICAvLyBhbGwgZGF0YXNldElkcyBpbiBmaWx0ZXIgbXVzdCBiZSBwcmVzZW50IHRoZSBzdGF0ZSBkYXRhc2V0c1xuICAgICAgY29uc3Qge2ZpbHRlcjogdmFsaWRhdGVkRmlsdGVyLCBhcHBseVRvRGF0YXNldHMsIGF1Z21lbnRlZERhdGFzZXRzfSA9IGRhdGFzZXRJZHMucmVkdWNlPHtcbiAgICAgICAgZmlsdGVyOiBGaWx0ZXIgfCBudWxsO1xuICAgICAgICBhcHBseVRvRGF0YXNldHM6IHN0cmluZ1tdO1xuICAgICAgICBhdWdtZW50ZWREYXRhc2V0czoge1tkYXRhc2V0SWQ6IHN0cmluZ106IGFueX07XG4gICAgICB9PihcbiAgICAgICAgKGFjYywgZGF0YXNldElkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YXNldCA9IHVwZGF0ZWREYXRhc2V0c1tkYXRhc2V0SWRdO1xuICAgICAgICAgIGNvbnN0IGxheWVycyA9IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXQuaWQpO1xuICAgICAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IHVwZGF0ZWREYXRhc2V0fSA9IHZhbGlkYXRlRmlsdGVyV2l0aERhdGEoXG4gICAgICAgICAgICBhY2MuYXVnbWVudGVkRGF0YXNldHNbZGF0YXNldElkXSB8fCBkYXRhc2V0LFxuICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgbGF5ZXJzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgIC8vIG1lcmdlIGZpbHRlciBwcm9wc1xuICAgICAgICAgICAgICBmaWx0ZXI6IGFjYy5maWx0ZXJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uYWNjLmZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBjaGVjazogY2hhbmdlZCBmcm9tIGFjYyB0byBhY2MuZmlsdGVyIHRvIGZpeCB0eXBlc1xuICAgICAgICAgICAgICAgICAgICAuLi5tZXJnZUZpbHRlckRvbWFpblN0ZXAoYWNjLmZpbHRlciwgdXBkYXRlZEZpbHRlcilcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHVwZGF0ZWRGaWx0ZXIsXG5cbiAgICAgICAgICAgICAgYXBwbHlUb0RhdGFzZXRzOiBbLi4uYWNjLmFwcGx5VG9EYXRhc2V0cywgZGF0YXNldElkXSxcblxuICAgICAgICAgICAgICBhdWdtZW50ZWREYXRhc2V0czoge1xuICAgICAgICAgICAgICAgIC4uLmFjYy5hdWdtZW50ZWREYXRhc2V0cyxcbiAgICAgICAgICAgICAgICBbZGF0YXNldElkXTogdXBkYXRlZERhdGFzZXRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmlsdGVyOiBudWxsLFxuICAgICAgICAgIGFwcGx5VG9EYXRhc2V0czogW10sXG4gICAgICAgICAgYXVnbWVudGVkRGF0YXNldHM6IHt9XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZWRGaWx0ZXIgJiYgaXNFcXVhbChkYXRhc2V0SWRzLCBhcHBseVRvRGF0YXNldHMpKSB7XG4gICAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlZEZpbHRlcik7XG4gICAgICAgIHVwZGF0ZWREYXRhc2V0cyA9IHtcbiAgICAgICAgICAuLi51cGRhdGVkRGF0YXNldHMsXG4gICAgICAgICAgLi4uYXVnbWVudGVkRGF0YXNldHNcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhaWxlZC5wdXNoKGZpbHRlcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhaWxlZC5wdXNoKGZpbHRlcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkLCB1cGRhdGVkRGF0YXNldHN9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyUGxvdDxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGZpbHRlcjogRmlsdGVyLFxuICBkYXRhc2V0OiBLXG4pOiB7bGluZUNoYXJ0OiBMaW5lQ2hhcnQ7IHlBeHM6IEZpZWxkfSB8IHt9IHtcbiAgaWYgKGZpbHRlci5wbG90VHlwZSA9PT0gUExPVF9UWVBFUy5oaXN0b2dyYW0gfHwgIWZpbHRlci55QXhpcykge1xuICAgIC8vIGhpc3RvZ3JhbSBzaG91bGQgYmUgY2FsY3VsYXRlZCB3aGVuIGNyZWF0ZSBmaWx0ZXJcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCB7bWFwcGVkVmFsdWUgPSBbXX0gPSBmaWx0ZXI7XG4gIGNvbnN0IHt5QXhpc30gPSBmaWx0ZXI7XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5nZXRDb2x1bW5GaWVsZElkeCh5QXhpcy5uYW1lKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgeUF4aXMgJHt5QXhpcy5uYW1lfSBkb2VzIG5vdCBleGlzdCBpbiBkYXRhc2V0YCk7XG4gICAgcmV0dXJuIHtsaW5lQ2hhcnQ6IHt9LCB5QXhpc307XG4gIH1cblxuICAvLyByZXR1cm4gbGluZUNoYXJ0XG4gIGNvbnN0IHNlcmllcyA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAoXG4gICAgICAocm93LCByb3dJbmRleCkgPT4gKHtcbiAgICAgICAgeDogbWFwcGVkVmFsdWVbcm93SW5kZXhdLFxuICAgICAgICB5OiByb3cudmFsdWVBdChmaWVsZElkeClcbiAgICAgIH0pLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgICAuZmlsdGVyKCh7eCwgeX0pID0+IE51bWJlci5pc0Zpbml0ZSh4KSAmJiBOdW1iZXIuaXNGaW5pdGUoeSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGFzY2VuZGluZyhhLngsIGIueCkpO1xuXG4gIGNvbnN0IHlEb21haW4gPSBleHRlbnQoc2VyaWVzLCBkID0+IGQueSk7XG4gIGNvbnN0IHhEb21haW4gPSBbc2VyaWVzWzBdLngsIHNlcmllc1tzZXJpZXMubGVuZ3RoIC0gMV0ueF07XG5cbiAgcmV0dXJuIHtsaW5lQ2hhcnQ6IHtzZXJpZXMsIHlEb21haW4sIHhEb21haW59LCB5QXhpc307XG59XG5cbi8qKlxuICogUmV0cmlldmUgaW50ZXJ2YWwgYmlucyBmb3IgdGltZSBmaWx0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVydmFsQmlucyhmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBjb25zdCB7Ymluc30gPSBmaWx0ZXI7XG4gIGNvbnN0IGludGVydmFsID0gZmlsdGVyLnBsb3RUeXBlPy5pbnRlcnZhbDtcbiAgaWYgKCFpbnRlcnZhbCB8fCAhYmlucyB8fCBPYmplY3Qua2V5cyhiaW5zKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKGJpbnMpO1xuICByZXR1cm4gdmFsdWVzWzBdID8gdmFsdWVzWzBdW2ludGVydmFsXSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGltZURvbWFpbihkb21haW4pIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZG9tYWluKSAmJiBkb21haW4uZXZlcnkoTnVtYmVyLmlzRmluaXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVXaWRnZXRIaW50Rm9ybWF0dGVyKGRvbWFpbjogW251bWJlciwgbnVtYmVyXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNWYWxpZFRpbWVEb21haW4oZG9tYWluKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZG9tYWluWzFdIC0gZG9tYWluWzBdO1xuICByZXR1cm4gZGlmZiA+IGR1cmF0aW9uV2Vla1xuICAgID8gJ0wnXG4gICAgOiBkaWZmID4gZHVyYXRpb25EYXlcbiAgICA/ICdMIExUJ1xuICAgIDogZGlmZiA+IGR1cmF0aW9uSG91clxuICAgID8gJ0xUJ1xuICAgIDogJ0xUUyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpZGVGaWx0ZXIoZmlsdGVyOiBGaWx0ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZpbHRlci52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xufVxuIl19
|
package/dist/format.js
CHANGED
@@ -1,23 +1,3 @@
|
|
1
|
-
// Copyright (c) 2023 Uber Technologies, Inc.
|
2
|
-
//
|
3
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
// of this software and associated documentation files (the "Software"), to deal
|
5
|
-
// in the Software without restriction, including without limitation the rights
|
6
|
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
// copies of the Software, and to permit persons to whom the Software is
|
8
|
-
// furnished to do so, subject to the following conditions:
|
9
|
-
//
|
10
|
-
// The above copyright notice and this permission notice shall be included in
|
11
|
-
// all copies or substantial portions of the Software.
|
12
|
-
//
|
13
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
// THE SOFTWARE.
|
20
|
-
|
21
1
|
"use strict";
|
22
2
|
|
23
3
|
Object.defineProperty(exports, "__esModule", {
|
@@ -25,9 +5,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
25
5
|
});
|
26
6
|
exports.getFormatValue = void 0;
|
27
7
|
|
28
|
-
var _constants = require("@kepler.gl/constants");
|
8
|
+
var _constants = require("@kepler.gl/constants");
|
9
|
+
|
10
|
+
// SPDX-License-Identifier: MIT
|
11
|
+
// Copyright contributors to the kepler.gl project
|
12
|
+
var getFormatValue = function getFormatValue(fmt) {
|
29
13
|
return fmt[_constants.TOOLTIP_KEY];
|
30
14
|
};
|
31
15
|
|
32
16
|
exports.getFormatValue = getFormatValue;
|
33
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9mb3JtYXQudHMiXSwibmFtZXMiOlsiZ2V0Rm9ybWF0VmFsdWUiLCJmbXQiLCJUT09MVElQX0tFWSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBOztBQUhBO0FBQ0E7QUFJTyxJQUFNQSxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLENBQUFDLEdBQUc7QUFBQSxTQUFJQSxHQUFHLENBQUNDLHNCQUFELENBQVA7QUFBQSxDQUExQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7VE9PTFRJUF9LRVl9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IGdldEZvcm1hdFZhbHVlID0gZm10ID0+IGZtdFtUT09MVElQX0tFWV07XG4iXX0=
|
package/dist/gl-utils.js
CHANGED
@@ -1,23 +1,3 @@
|
|
1
|
-
// Copyright (c) 2023 Uber Technologies, Inc.
|
2
|
-
//
|
3
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
// of this software and associated documentation files (the "Software"), to deal
|
5
|
-
// in the Software without restriction, including without limitation the rights
|
6
|
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
// copies of the Software, and to permit persons to whom the Software is
|
8
|
-
// furnished to do so, subject to the following conditions:
|
9
|
-
//
|
10
|
-
// The above copyright notice and this permission notice shall be included in
|
11
|
-
// all copies or substantial portions of the Software.
|
12
|
-
//
|
13
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
// THE SOFTWARE.
|
20
|
-
|
21
1
|
"use strict";
|
22
2
|
|
23
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
@@ -52,4 +32,4 @@ function setLayerBlending(gl, layerBlending) {
|
|
52
32
|
blendEquation: Array.isArray(blendEquation) ? blendEquation.map(getGlConst) : getGlConst(blendEquation)
|
53
33
|
} : {}));
|
54
34
|
}
|
55
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9nbC11dGlscy50cyJdLCJuYW1lcyI6WyJnZXRHbENvbnN0IiwiZCIsIkdMIiwic2V0TGF5ZXJCbGVuZGluZyIsImdsIiwibGF5ZXJCbGVuZGluZyIsImJsZW5kaW5nIiwiTEFZRVJfQkxFTkRJTkdTIiwiYmxlbmRGdW5jIiwiYmxlbmRFcXVhdGlvbiIsIkJMRU5EIiwibWFwIiwiQXJyYXkiLCJpc0FycmF5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFBQyxDQUFDO0FBQUEsU0FBSUMsdUJBQUdELENBQUgsQ0FBSjtBQUFBLENBQXBCOztBQUVPLFNBQVNFLGdCQUFULENBQTBCQyxFQUExQixFQUE4QkMsYUFBOUIsRUFBNkM7QUFDbEQsTUFBTUMsUUFBUSxHQUFHQywyQkFBZ0JGLGFBQWhCLENBQWpCO0FBRGtELE1BRTNDRyxTQUYyQyxHQUVmRixRQUZlLENBRTNDRSxTQUYyQztBQUFBLE1BRWhDQyxhQUZnQyxHQUVmSCxRQUZlLENBRWhDRyxhQUZnQztBQUlsRCwyQkFBY0wsRUFBZCxxREFDR0YsdUJBQUdRLEtBRE4sRUFDYyxJQURkLEdBRU1GLFNBQVMsR0FDVDtBQUNFQSxJQUFBQSxTQUFTLEVBQUVBLFNBQVMsQ0FBQ0csR0FBVixDQUFjWCxVQUFkLENBRGI7QUFFRVMsSUFBQUEsYUFBYSxFQUFFRyxLQUFLLENBQUNDLE9BQU4sQ0FBY0osYUFBZCxJQUNYQSxhQUFhLENBQUNFLEdBQWQsQ0FBa0JYLFVBQWxCLENBRFcsR0FFWEEsVUFBVSxDQUFDUyxhQUFEO0FBSmhCLEdBRFMsR0FPVCxFQVROO0FBV0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge3NldFBhcmFtZXRlcnN9IGZyb20gJ0BsdW1hLmdsL2NvcmUnO1xuaW1wb3J0IHtMQVlFUl9CTEVORElOR1N9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCBHTCBmcm9tICdAbHVtYS5nbC9jb25zdGFudHMnO1xuXG5jb25zdCBnZXRHbENvbnN0ID0gZCA9PiBHTFtkXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQmxlbmRpbmcoZ2wsIGxheWVyQmxlbmRpbmcpIHtcbiAgY29uc3QgYmxlbmRpbmcgPSBMQVlFUl9CTEVORElOR1NbbGF5ZXJCbGVuZGluZ107XG4gIGNvbnN0IHtibGVuZEZ1bmMsIGJsZW5kRXF1YXRpb259ID0gYmxlbmRpbmc7XG5cbiAgc2V0UGFyYW1ldGVycyhnbCwge1xuICAgIFtHTC5CTEVORF06IHRydWUsXG4gICAgLi4uKGJsZW5kRnVuY1xuICAgICAgPyB7XG4gICAgICAgICAgYmxlbmRGdW5jOiBibGVuZEZ1bmMubWFwKGdldEdsQ29uc3QpLFxuICAgICAgICAgIGJsZW5kRXF1YXRpb246IEFycmF5LmlzQXJyYXkoYmxlbmRFcXVhdGlvbilcbiAgICAgICAgICAgID8gYmxlbmRFcXVhdGlvbi5tYXAoZ2V0R2xDb25zdClcbiAgICAgICAgICAgIDogZ2V0R2xDb25zdChibGVuZEVxdWF0aW9uKVxuICAgICAgICB9XG4gICAgICA6IHt9KVxuICB9KTtcbn1cbiJdfQ==
|