filestack-js
Version:
Official JavaScript library for Filestack
154 lines (152 loc) • 42.6 kB
JavaScript
/*
* Copyright (c) 2018 by Filestack
* Some rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.picker = exports.PickerDisplayMode = exports.RotateDirection = void 0;
var tslib_1 = require("tslib");
var loader_1 = require("@filestack/loader");
var filestack_error_1 = require("./../filestack_error");
var schema_1 = require("./../schema");
var RotateDirection;
(function (RotateDirection) {
RotateDirection["cw"] = "CW";
RotateDirection["ccw"] = "CCW";
})(RotateDirection = exports.RotateDirection || (exports.RotateDirection = {}));
var PickerDisplayMode;
(function (PickerDisplayMode) {
PickerDisplayMode["inline"] = "inline";
PickerDisplayMode["overlay"] = "overlay";
PickerDisplayMode["dropPane"] = "dropPane";
})(PickerDisplayMode = exports.PickerDisplayMode || (exports.PickerDisplayMode = {}));
/**
* @private
* A synchronous-looking wrapper for loading the picker and calling its methods.
* This is currently needed because the picker module is loaded asynchronously.
* Eventually we should offer a bundle with the picker module included.
*/
var PickerLoader = /** @class */ (function () {
function PickerLoader(client, options) {
var validateRes = (0, schema_1.getValidator)(schema_1.PickerParamsSchema)(options);
if (validateRes.errors.length) {
validateRes.errors.forEach(function (error) {
if (error.path.includes('fromSources')) {
console.warn("Warning: Invalid source \"".concat(error.instance, "\" found and removed!"));
options.fromSources = options.fromSources.filter(function (source) { return source !== error.instance; });
}
else {
throw new filestack_error_1.FilestackError("Invalid picker params", validateRes.errors, filestack_error_1.FilestackErrorType.VALIDATION);
}
});
if (!options.fromSources.length) {
delete options.fromSources;
}
}
this._initialized = this.loadModule(client, options);
}
PickerLoader.prototype.open = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var picker;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this._initialized];
case 1:
picker = _a.sent();
return [4 /*yield*/, picker.open()];
case 2:
_a.sent();
return [2 /*return*/];
}
});
});
};
PickerLoader.prototype.crop = function (files) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var picker;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this._initialized];
case 1:
picker = _a.sent();
return [4 /*yield*/, picker.crop(files)];
case 2:
_a.sent();
return [2 /*return*/];
}
});
});
};
PickerLoader.prototype.close = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var picker;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this._initialized];
case 1:
picker = _a.sent();
return [4 /*yield*/, picker.close()];
case 2:
_a.sent();
return [2 /*return*/];
}
});
});
};
PickerLoader.prototype.cancel = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var picker;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this._initialized];
case 1:
picker = _a.sent();
return [4 /*yield*/, picker.cancel()];
case 2:
_a.sent();
return [2 /*return*/];
}
});
});
};
PickerLoader.prototype.loadModule = function (client, options) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var url, Picker;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
url = client.session.urls.pickerUrl;
return [4 /*yield*/, (0, loader_1.loadModule)(loader_1.FILESTACK_MODULES.PICKER, url)];
case 1:
Picker = _a.sent();
return [2 /*return*/, new Picker(client, options)];
}
});
});
};
return PickerLoader;
}());
/**
* Loads and creates picker instance
*
* @private
* @param client
* @param options
*/
var picker = function (client, options) {
return new PickerLoader(client, options);
};
exports.picker = picker;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QU0sdUJBQWYsQ0FBZ0I7d0JBQzFDLHFCQUFNLElBQUEsbUJBQVUsRUFBQywwQkFBaUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUE7O3dCQUF4RCxNQUFNLEdBQUcsU0FBK0M7d0JBQzlELHNCQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBQzs7OztLQUNwQztJQUNILG1CQUFDO0FBQUQsQ0FoREEsQUFnREMsSUFBQTtBQUVEOzs7Ozs7R0FNRztBQUNJLElBQU0sTUFBTSxHQUFHLFVBQUMsTUFBYyxFQUFFLE9BQXVCO0lBQzVELE9BQU8sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQztBQUZXLFFBQUEsTUFBTSxVQUVqQiIsImZpbGUiOiJsaWIvcGlja2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBieSBGaWxlc3RhY2tcbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBsb2FkTW9kdWxlLCBGSUxFU1RBQ0tfTU9EVUxFUyB9IGZyb20gJ0BmaWxlc3RhY2svbG9hZGVyJztcbmltcG9ydCB7IEZpbGVzdGFja0Vycm9yLCBGaWxlc3RhY2tFcnJvclR5cGUgfSBmcm9tICcuLy4uL2ZpbGVzdGFja19lcnJvcic7XG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG5pbXBvcnQgeyBGU1Byb2dyZXNzRXZlbnQsIFVwbG9hZE9wdGlvbnMsIFdvcmtmbG93Q29uZmlnIH0gZnJvbSAnLi9hcGkvdXBsb2FkL3R5cGVzJztcbmltcG9ydCB7IGdldFZhbGlkYXRvciwgUGlja2VyUGFyYW1zU2NoZW1hIH0gZnJvbSAnLi8uLi9zY2hlbWEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlckluc3RhbmNlIHtcbiAgLyoqXG4gICAqIENsb3NlIHBpY2tlci4gVGhpcyBvcGVyYXRpb24gaXMgaWRlbXBvdGVudC5cbiAgICovXG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBDYW5jZWwgcGlja2VyIHVwbG9hZHMuIFRoaXMgb3BlcmF0aW9uIGlzIGlkZW1wb3RlbnQuXG4gICAqL1xuICBjYW5jZWw6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIE9wZW4gcGlja2VyLiBUaGlzIG9wZXJhdGlvbiBpcyBpZGVtcG90ZW50LlxuICAgKi9cbiAgb3BlbjogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogU3BlY2lmeSBhIGxpc3Qgb2YgZmlsZXMgdG8gb3BlbiBpbiB0aGUgcGlja2VyIGZvciBjcm9wcGluZ1xuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAvLyA8aW5wdXQgaWQ9XCJmaWxlU2VsZWN0XCIgdHlwZT1cImZpbGVcIj5cbiAgICpcbiAgICogY29uc3QgaW5wdXRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlU2VsZWN0Jyk7XG4gICAqIGNvbnN0IHBpY2tlciA9IGNsaWVudC5waWNrZXIoe1xuICAgKiAgIG9uVXBsb2FkRG9uZTogcmVzID0+IGNvbnNvbGUubG9nKHJlcyksXG4gICAqIH0pO1xuICAgKlxuICAgKiBpbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XG4gICAqICAgcGlja2VyLmNyb3AoZS50YXJnZXQuZmlsZXMpO1xuICAgKiB9KTtcbiAgICpcbiAgICogLy8gT3IgcGFzcyBhbiBhcnJheSBvZiBVUkwgc3RyaW5nc1xuICAgKiBjb25zdCB1cmxzID0gW1xuICAgKiAgICdodHRwczovL2Qxd3RxYWZmYWFqNjN6LmNsb3VkZnJvbnQubmV0L2ltYWdlcy9mb3hfaW5fZm9yZXN0MS5qcGcnLFxuICAgKiAgICdodHRwczovL2Qxd3RxYWZmYWFqNjN6LmNsb3VkZnJvbnQubmV0L2ltYWdlcy9zYWlsLmpwZycsXG4gICAqIF07XG4gICAqIHBpY2tlci5jcm9wKHVybHMpO1xuICAgKiBgYGBcbiAgICovXG4gIGNyb3A6IChmaWxlczogYW55W10pID0+IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyQ3JvcHBlZERhdGEge1xuICBjcm9wQXJlYToge1xuICAgIC8qKlxuICAgICAqIFt4LCB5XVxuICAgICAqL1xuICAgIHBvc2l0aW9uOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIC8qKlxuICAgICAqIFt3aWR0aCwgaGVpZ2h0XVxuICAgICAqL1xuICAgIHNpemU6IFtudW1iZXIsIG51bWJlcl07XG4gIH07XG4gICAgLyoqXG4gICAgICogW3dpZHRoLCBoZWlnaHRdXG4gICAgICovXG4gIG9yaWdpbmFsSW1hZ2VTaXplOiBbbnVtYmVyLCBudW1iZXJdO1xufVxuXG5leHBvcnQgZW51bSBSb3RhdGVEaXJlY3Rpb24ge1xuICBjdyA9ICdDVycsXG4gIGNjdz0gJ0NDVycsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyUm90YXRlZERhdGEge1xuICAvKipcbiAgICogQW1vdW50IHJvdGF0ZWQgaW4gZGVncmVlcy5cbiAgICovXG4gIHZhbHVlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBDYW4gYmUgQ1cgb3IgQ0NXIChjbG9ja3dpc2UgLyBjb3VudGVyLWNsb2Nrd2lzZSlcbiAgICovXG4gIGRpcmVjdGlvbjogUm90YXRlRGlyZWN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlckZpbGVNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgY2xvdWQgY29udGFpbmVyIGZvciB0aGUgdXBsb2FkZWQgZmlsZS5cbiAgICovXG4gIGNvbnRhaW5lcj86IHN0cmluZztcbiAgLyoqXG4gICAqIFBvc2l0aW9uIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciBjcm9wcGVkIGltYWdlcy5cbiAgICovXG4gIGNyb3BwZWQ/OiBQaWNrZXJDcm9wcGVkRGF0YTtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGZpbGUuXG4gICAqL1xuICBmaWxlbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogRmlsZXN0YWNrIGhhbmRsZSBmb3IgdGhlIHVwbG9hZGVkIGZpbGUuXG4gICAqL1xuICBoYW5kbGU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBoYXNoLXByZWZpeGVkIGNsb3VkIHN0b3JhZ2UgcGF0aC5cbiAgICovXG4gIGtleT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBNSU1FIHR5cGUgb2YgdGhlIGZpbGUuXG4gICAqL1xuICBtaW1ldHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogUHJvcGVydGllcyBvZiB0aGUgbG9jYWwgYmluYXJ5IGZpbGUuIEFsc28gc2VlIHRoZSBwaWNrIG9wdGlvbiBgZXhwb3NlT3JpZ2luYWxGaWxlYCBpZiB5b3Ugd2FudCB0aGUgdW5kZXJseWluZyBgRmlsZWAgb2JqZWN0LlxuICAgKi9cbiAgb3JpZ2luYWxGaWxlPzogb2JqZWN0IHwgRmlsZTtcbiAgLyoqXG4gICAqIFRoZSBvcmlnaW4gb2YgdGhlIGZpbGUsIGUuZy4gL0ZvbGRlci9maWxlLmpwZy5cbiAgICovXG4gIG9yaWdpbmFsUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogRGlyZWN0aW9uIGFuZCB2YWx1ZSBpbmZvcm1hdGlvbiBmb3Igcm90YXRlZCBpbWFnZXMuXG4gICAqL1xuICByb3RhdGVkPzogUGlja2VyUm90YXRlZERhdGE7XG4gIC8qKlxuICAgKiBTaXplIGluIGJ5dGVzIG9mIHRoZSB1cGxvYWRlZCBmaWxlLlxuICAgKi9cbiAgc2l6ZTogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHNvdXJjZSBmcm9tIHdoZXJlIHRoZSBmaWxlIHdhcyBwaWNrZWQuXG4gICAqL1xuICBzb3VyY2U6IHN0cmluZztcbiAgLyoqXG4gICAqIEluZGljYXRlcyBGaWxlc3RhY2sgdHJhbnNpdCBzdGF0dXMuXG4gICAqL1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBIHV1aWQgZm9yIHRyYWNraW5nIHRoaXMgZmlsZSBpbiBjYWxsYmFja3MuXG4gICAqL1xuICB1cGxvYWRJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEZpbGVzdGFjayBDRE4gVVJMIGZvciB0aGUgdXBsb2FkZWQgZmlsZS5cbiAgICovXG4gIHVybDogc3RyaW5nO1xuICAvKipcbiAgICogQWx0IHRleHQgZm9yIGltYWdlc1xuICAgKi9cbiAgYWx0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tQXV0aFRleHRPcHRpb25zIHtcbiAgW2tleTogc3RyaW5nXToge1xuICAgIHRvcD86IHN0cmluZ1tdLFxuICAgIGJvdHRvbT86IHN0cmluZ1tdXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyUmVzcG9uc2Uge1xuICBmaWxlc1VwbG9hZGVkOiBQaWNrZXJGaWxlTWV0YWRhdGFbXTtcbiAgZmlsZXNGYWlsZWQ6IFBpY2tlckZpbGVNZXRhZGF0YVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlckZpbGVDYWxsYmFjayB7XG4gIChmaWxlOiBQaWNrZXJGaWxlTWV0YWRhdGEpOiB2b2lkIHwgUHJvbWlzZTxhbnk+O1xufVxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJGaWxlV2l0aFRva2VuQ2FsbGJhY2sge1xuICAoZmlsZTogUGlja2VyRmlsZU1ldGFkYXRhLCB0b2tlbj86IHtwYXVzZT86ICgpID0+IHZvaWQsIHJlc3VtZT86ICgpID0+IHZvaWQsIGNhbmNlbD86ICgpID0+IHZvaWR9KTogdm9pZCB8IFByb21pc2U8YW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJGaWxlQ2FuY2VsQ2FsbGJhY2sge1xuICAoZmlsZTogUGlja2VyRmlsZU1ldGFkYXRhKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJGaWxlRXJyb3JDYWxsYmFjayB7XG4gIChmaWxlOiBQaWNrZXJGaWxlTWV0YWRhdGEsIGVycm9yOiBFcnJvcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyRmlsZVByb2dyZXNzQ2FsbGJhY2sge1xuICAoZmlsZTogUGlja2VyRmlsZU1ldGFkYXRhLCBldmVudDogRlNQcm9ncmVzc0V2ZW50KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJVcGxvYWRTdGFydGVkQ2FsbGJhY2sge1xuICAoZmlsZXM6IFBpY2tlckZpbGVNZXRhZGF0YVtdKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJVcGxvYWREb25lQ2FsbGJhY2sge1xuICAoZmlsZXM6IFBpY2tlclJlc3BvbnNlKTogdm9pZDtcbn1cblxuZXhwb3J0IGVudW0gUGlja2VyRGlzcGxheU1vZGUge1xuICBpbmxpbmUgPSAnaW5saW5lJyxcbiAgb3ZlcmxheSA9ICdvdmVybGF5JyxcbiAgZHJvcFBhbmUgPSAnZHJvcFBhbmUnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlckRyb3BQYW5lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIGNyb3AgVUkgZm9yIGRyb3BwZWQgZmlsZXMuXG4gICAqL1xuICBjcm9wRmlsZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogQ3VzdG9taXplIHRoZSB0ZXh0IGNvbnRlbnQgaW4gdGhlIGRyb3AgcGFuZS5cbiAgICovXG4gIGN1c3RvbVRleHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBmaWxlIGlucHV0IG9uIGNsaWNrLiBUaGlzIGRvZXMgbm90IGRpc2FibGUgdGhlIGBvbkNsaWNrYCBjYWxsYmFjay5cbiAgICovXG4gIGRpc2FibGVDbGljaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIGZ1bGwtcGFnZSBkcm9wIHpvbmUgb3ZlcmxheS5cbiAgICovXG4gIG92ZXJsYXk/OiBib29sZWFuO1xuICBvbkRyYWdFbnRlcj86IChldnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgb25EcmFnTGVhdmU/OiAoKSA9PiB2b2lkO1xuICBvbkRyYWdPdmVyPzogKGV2dDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICBvbkRyb3A/OiAoZXZ0OiBEcmFnRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBgb25TdWNjZXNzYCBtdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBgb25VcGxvYWREb25lYC4gVGhlIGRyb3AgcGFuZSB1c2VzIGl0cyBvd24gY2FsbGJhY2tzIGZvciBjb21wYXRpYmlsaXR5IHB1cnBvc2VzLiBUaGlzIG1pZ2h0IGV2ZW50dWFsbHkgY2hhbmdlLlxuICAgKi9cbiAgb25TdWNjZXNzPzogKGZpbGVzOiBQaWNrZXJGaWxlTWV0YWRhdGFbXSkgPT4gdm9pZDtcbiAgb25FcnJvcj86IChmaWxlczogUGlja2VyRmlsZU1ldGFkYXRhW10pID0+IHZvaWQ7XG4gIG9uUHJvZ3Jlc3M/OiAocGVyY2VudDogbnVtYmVyKSA9PiB2b2lkO1xuICBvbkNsaWNrPzogKGV2dDogYW55KSA9PiB2b2lkO1xuICAvKipcbiAgICogVG9nZ2xlIGljb24gZWxlbWVudCBpbiBkcm9wIHBhbmUuXG4gICAqL1xuICBzaG93SWNvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb2dnbGUgdXBsb2FkIHByb2dyZXNzIGRpc3BsYXkuXG4gICAqL1xuICBzaG93UHJvZ3Jlc3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlclN0b3JlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBMb2NhdGlvbiBmb3Igc3RvcmVkIGZpbGUuIE9uZSBvZiAnczMnLCAnZ2NzJywgJ2F6dXJlJywgJ3JhY2tzcGFjZScsIG9yICdkcm9wYm94Jy5cbiAgICovXG4gIGxvY2F0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogU3BlY2lmeSBzdG9yYWdlIGNvbnRhaW5lci5cbiAgICovXG4gIGNvbnRhaW5lcj86IHN0cmluZztcbiAgLyoqXG4gICAqIFNldCBjb250YWluZXIgcGF0aC4gSW5kaWNhdGUgYSBmb2xkZXIgYnkgYWRkaW5nIGEgdHJhaWxpbmcgc2xhc2guIFdpdGhvdXQgYSB0cmFpbGluZyBzbGFzaCBhbGwgZmlsZXMgd2lsbCBiZSBzdG9yZWQgdG8gdGhlIHNhbWUgb2JqZWN0LlxuICAgKi9cbiAgcGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIFNwZWNpZnkgUzMgcmVnaW9uLlxuICAgKi9cbiAgcmVnaW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogUzMgY29udGFpbmVyIGFjY2Vzcy4gJ3B1YmxpYycgb3IgJ3ByaXZhdGUnLlxuICAgKi9cbiAgYWNjZXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvd3MgaWRzIHRvIHJ1biBhZnRlciB1cGxvYWRcbiAgICovXG4gIHdvcmtmbG93cz86IHN0cmluZ1tdIHwgV29ya2Zsb3dDb25maWdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJDdXN0b21UZXh0IHtcbiAgLy8gQWN0aW9uc1xuICBVcGxvYWQ/OiBzdHJpbmc7XG4gICdVcGxvYWQgbW9yZSc/OiBzdHJpbmc7XG4gICdEZXNlbGVjdCBBbGwnPzogc3RyaW5nO1xuICAnVmlldy9FZGl0IFNlbGVjdGVkJz86IHN0cmluZztcbiAgJ1NpZ24gT3V0Jz86IHN0cmluZztcblxuICAvLyBTb3VyY2UgTGFiZWxzXG4gICdNeSBEZXZpY2UnPzogc3RyaW5nO1xuICAnV2ViIFNlYXJjaCc/OiBzdHJpbmc7XG4gICdUYWtlIFBob3RvJz86IHN0cmluZztcbiAgJ0xpbmsgKFVSTCknPzogc3RyaW5nO1xuICAnUmVjb3JkIFZpZGVvJz86IHN0cmluZztcbiAgJ1JlY29yZCBBdWRpbyc/OiBzdHJpbmc7XG5cbiAgLy8gQ3VzdG9tIFNvdXJjZVxuICAnQ3VzdG9tIFNvdXJjZSc/OiBzdHJpbmc7XG5cbiAgLy8gRm9vdGVyIFRleHRcbiAgQWRkPzogc3RyaW5nO1xuICAnbW9yZSBmaWxlJz86IHN0cmluZztcbiAgJ21vcmUgZmlsZXMnPzogc3RyaW5nO1xuXG4gIC8vIENsb3VkXG4gICdDb25uZWN0IHtwcm92aWRlck5hbWV9Jz86IHN0cmluZztcbiAgJ1NlbGVjdCBGaWxlcyBmcm9tIHtwcm92aWRlck5hbWV9Jz86IHN0cmluZztcbiAgJ1lvdSBuZWVkIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIHtwcm92aWRlck5hbWV9Lic/OiBzdHJpbmc7XG4gICdBIG5ldyBwYWdlIHdpbGwgb3BlbiB0byBjb25uZWN0IHlvdXIgYWNjb3VudC4nPzogc3RyaW5nO1xuICAnV2Ugb25seSBleHRyYWN0IGltYWdlcyBhbmQgbmV2ZXIgbW9kaWZ5IG9yIGRlbGV0ZSB0aGVtLic/OiBzdHJpbmc7XG4gICdUbyBkaXNjb25uZWN0IGZyb20ge3Byb3ZpZGVyTmFtZX0gY2xpY2sgXCJTaWduIG91dFwiIGJ1dHRvbiBpbiB0aGUgbWVudS4nPzogc3RyaW5nO1xuICAnU2lnbiBpbiB3aXRoIEdvb2dsZSc/OiBzdHJpbmc7XG4gICdHbyBiYWNrJz86IHN0cmluZztcbiAgJ1RoaXMgZm9sZGVyIGlzIGVtcHR5Lic/OiBzdHJpbmc7XG5cbiAgLy8gU3VtbWFyeVxuICBGaWxlcz86IHN0cmluZztcbiAgSW1hZ2VzPzogc3RyaW5nO1xuICBVcGxvYWRlZD86IHN0cmluZztcbiAgVXBsb2FkaW5nPzogc3RyaW5nO1xuICBDb21wbGV0ZWQ/OiBzdHJpbmc7XG4gIEZpbHRlcj86IHN0cmluZztcbiAgJ0Nyb3BwZWQgSW1hZ2VzJz86IHN0cmluZztcbiAgJ0VkaXRlZCBJbWFnZXMnPzogc3RyaW5nO1xuICAnU2VsZWN0ZWQgRmlsZXMnPzogc3RyaW5nO1xuICAnQ3JvcCBpcyByZXF1aXJlZCBvbiBpbWFnZXMnPzogc3RyaW5nO1xuXG4gIC8vIFRyYW5zZm9ybVxuICBDcm9wPzogc3RyaW5nO1xuICBDaXJjbGU/OiBzdHJpbmc7XG4gIFJvdGF0ZT86IHN0cmluZztcbiAgTWFzaz86IHN0cmluZztcbiAgUmV2ZXJ0Pzogc3RyaW5nO1xuICBFZGl0Pzogc3RyaW5nO1xuICBSZXNldD86IHN0cmluZztcbiAgRG9uZT86IHN0cmluZztcbiAgU2F2ZT86IHN0cmluZztcbiAgTmV4dD86IHN0cmluZztcbiAgJ0VkaXQgSW1hZ2UnPzogc3RyaW5nO1xuICAnVGhpcyBpbWFnZSBjYW5ub3QgYmUgZWRpdGVkJz86IHN0cmluZztcblxuICAvLyBSZXRyeSBtZXNzYWdpbmdcbiAgJ0Nvbm5lY3Rpb24gTG9zdCc/OiBzdHJpbmc7XG4gICdGYWlsZWQgV2hpbGUgVXBsb2FkaW5nJz86IHN0cmluZztcbiAgJ1JldHJ5aW5nIGluJz86IHN0cmluZztcbiAgJ1RyeSBhZ2Fpbic/OiBzdHJpbmc7XG4gICdUcnkgbm93Jz86IHN0cmluZztcblxuICAvLyBMb2NhbCBGaWxlIFNvdXJjZVxuICAnRHJhZyBhbmQgRHJvcCwgQ29weSBhbmQgUGFzdGUgRmlsZXMnPzogc3RyaW5nO1xuICAnb3IgRHJhZyBhbmQgRHJvcCwgQ29weSBhbmQgUGFzdGUgRmlsZXMnPzogc3RyaW5nO1xuICAnU2VsZWN0IEZpbGVzIHRvIFVwbG9hZCc/OiBzdHJpbmc7XG4gICdTZWxlY3QgRnJvbSc/OiBzdHJpbmc7XG4gICdEcm9wIHlvdXIgZmlsZXMgYW55d2hlcmUnPzogc3RyaW5nO1xuXG4gIC8vIElucHV0IHBsYWNlaG9sZGVyc1xuICAnRW50ZXIgYSBVUkwnPzogc3RyaW5nO1xuICAnU2VhcmNoIGltYWdlcyc/OiBzdHJpbmc7XG5cbiAgLy8gV2ViY2FtIFNvdXJjZVxuICAnV2ViY2FtIERpc2FibGVkJz86IHN0cmluZztcbiAgJ1dlYmNhbSBOb3QgU3VwcG9ydGVkJz86IHN0cmluZztcbiAgJ1BsZWFzZSBlbmFibGUgeW91ciB3ZWJjYW0gdG8gdGFrZSBhIHBob3RvLic/OiBzdHJpbmc7XG4gICdZb3VyIGN1cnJlbnQgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHdlYmNhbSBmdW5jdGlvbmFsaXR5Lic/OiBzdHJpbmc7XG4gICdXZSBzdWdnZXN0IHVzaW5nIENocm9tZSBvciBGaXJlZm94Lic/OiBzdHJpbmc7XG5cbiAgLy8gRXJyb3IgTm90aWZpY2F0aW9uc1xuICAnRmlsZSB7ZGlzcGxheU5hbWV9IGlzIG5vdCBhbiBhY2NlcHRlZCBmaWxlIHR5cGUuIFRoZSBhY2NlcHRlZCBmaWxlIHR5cGVzIGFyZSB7dHlwZXN9Jz86IHN0cmluZztcbiAgJ0ZpbGUge2Rpc3BsYXlOYW1lfSBpcyB0b28gYmlnLiBUaGUgYWNjZXB0ZWQgZmlsZSBzaXplIGlzIGxlc3MgdGhhbiB7cm91bmRGaWxlU2l6ZX0nPzogc3RyaW5nO1xuICAnT3VyIGZpbGUgdXBsb2FkIGxpbWl0IGlzIHttYXhGaWxlc30ge2ZpbGVzVGV4dH0nPzogc3RyaW5nO1xuICAnTm8gc2VhcmNoIHJlc3VsdHMgZm91bmQgZm9yIFwie3NlYXJjaH1cIic/OiBzdHJpbmc7XG4gICdBbiBlcnJvciBvY2N1cnJlZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlck9wdGlvbnMge1xuICAvKipcbiAgICogUmVzdHJpY3QgZmlsZSB0eXBlcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHBpY2tlZC4gRm9ybWF0cyBhY2NlcHRlZDpcbiAgICogIC0gLnBkZiA8LSBhbnkgZmlsZSBleHRlbnNpb25cbiAgICogIC0gaW1hZ2UvanBlZyA8LSBhbnkgbWltZSB0eXBlIGNvbW1vbmx5IGtub3duIGJ5IGJyb3dzZXJzXG4gICAqICAtIGltYWdlLyogPC0gYWNjZXB0IGFsbCB0eXBlcyBvZiBpbWFnZXNcbiAgICogIC0gdmlkZW8vKiA8LSBhY2NlcHQgYWxsIHR5cGVzIG9mIHZpZGVvIGZpbGVzXG4gICAqICAtIGF1ZGlvLyogPC0gYWNjZXB0IGFsbCB0eXBlcyBvZiBhdWRpbyBmaWxlc1xuICAgKiAgLSBhcHBsaWNhdGlvbi8qIDwtIGFjY2VwdCBhbGwgdHlwZXMgb2YgYXBwbGljYXRpb24gZmlsZXNcbiAgICogIC0gdGV4dC8qIDwtIGFjY2VwdCBhbGwgdHlwZXMgb2YgdGV4dCBmaWxlc1xuICAgKi9cbiAgYWNjZXB0Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBDdXN0b20gYWNjZXB0IGNoZWNrIGZ1bmN0aW9uXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogYWNjZXB0Rm46IChmaWxlLCBvcHRpb25zKSA9PiB7XG4gICAqICByZXR1cm4gb3B0aW9ucy5taW1lRnJvbU1hZ2ljQnl0ZXMoZmlsZS5vcmlnaW5hbEZpbGUpLnRoZW4oKHJlcykgPT4geyAvLyB3ZSBjYW4gY2hlY2sgbWltZXR5cGUgZnJvbSBtYWdpYyBieXRlc1xuICAgKiAgICAvL2NvbnNvbGUubG9nKG9wdGlvbnMubWltZUZyb21FeHRlbnNpb24oZmlsZS5vcmlnaW5hbEZpbGUubmFtZSkpOyAvLyBvciBjaGVjayBleHRlbnNpb24gZnJvbSBmaWxlc3RhY2sgZXh0ZW5zaW9ucyBkYXRhYmFzZVxuICAgKiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2NlcHQgdGhhdCBmaWxlJykgLy8gd2UgY2FuIHRocm93IGV4Y2VwdGlvbiB0byBibG9jayBmaWxlIHVwbG9hZFxuICAgKiAgICAvLyByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ0Nhbm5vdCBhY2NlcHQgdGhhdCBmaWxlJycpIC8vIG9yIHJlamVjdCBhIHByb21pc2VcbiAgICogICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgKiAgfSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhY2NlcHRGbj86IChQaWNrZXJGaWxlTWV0YWRhdGEsIFBpY2tlckFjY2VwdEZuT3B0aW9ucykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAvKipcbiAgICogUHJldmVudCBtb2RhbCBjbG9zZSBvbiB1cGxvYWQgZmFpbHVyZSBhbmQgYWxsb3cgdXNlcnMgdG8gcmV0cnkuXG4gICAqL1xuICBhbGxvd01hbnVhbFJldHJ5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqICBWYWxpZCBzb3VyY2VzIGFyZTpcbiAgICogIC0gbG9jYWxfZmlsZV9zeXN0ZW0gLSBEZWZhdWx0XG4gICAqICAtIHVybCAtIERlZmF1bHRcbiAgICogIC0gaW1hZ2VzZWFyY2ggLSBEZWZhdWx0XG4gICAqICAtIGZhY2Vib29rIC0gRGVmYXVsdFxuICAgKiAgLSBpbnN0YWdyYW0gLSBEZWZhdWx0XG4gICAqICAtIGdvb2dsZWRyaXZlIC0gRGVmYXVsdFxuICAgKiAgLSBkcm9wYm94IC0gRGVmYXVsdFxuICAgKiAgLSB3ZWJjYW0gLSBVc2VzIGRldmljZSBtZW51IG9uIG1vYmlsZS4gTm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gU2FmYXJpIGFuZCBJRS5cbiAgICogIC0gdmlkZW8gLSBVc2VzIGRldmljZSBtZW51IG9uIG1vYmlsZS4gTm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gU2FmYXJpIGFuZCBJRS5cbiAgICogIC0gYXVkaW8gLSBVc2VzIGRldmljZSBtZW51IG9uIG1vYmlsZS4gTm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gU2FmYXJpIGFuZCBJRS5cbiAgICogIC0gYm94XG4gICAqICAtIGdpdGh1YlxuICAgKiAgLSBnbWFpbFxuICAgKiAgLSBnb29nbGVwaG90b3NcbiAgICogIC0gb25lZHJpdmVcbiAgICogIC0gb25lZHJpdmVmb3JidXNpbmVzc1xuICAgKiAgLSBjdXN0b21zb3VyY2UgLSBDb25maWd1cmUgdGhpcyBpbiB5b3VyIEZpbGVzdGFjayBEZXYgUG9ydGFsLlxuICAgKiAgLSB1bnNwbGFzaFxuICAgKi9cbiAgZnJvbVNvdXJjZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFByb3ZpZGUgZGVmYXVsdCB0ZXh0IHZhbHVlIGZvciBJbWFnZSBTZWFyY2hcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiB3ZWJzZWFyY2g6IHtcbiAgICogIHByZWRlZmluZWRUZXh0OiAnU2FtcGxlIHRleHQnXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICB3ZWJzZWFyY2g/OiBvYmplY3Q7XG4gIC8qKlxuICAgKiBDb250YWluZXIgd2hlcmUgcGlja2VyIHNob3VsZCBiZSBhcHBlbmRlZC4gT25seSByZWxldmFudCBmb3IgYGlubGluZWAgYW5kIGBkcm9wUGFuZWAgZGlzcGxheSBtb2Rlcy5cbiAgICovXG4gIGNvbnRhaW5lcj86IHN0cmluZyB8IE5vZGU7XG5cbiAgLyoqXG4gICAqIFR1cm4gb24gY2xlYW5pbmcgSlBFRyBpbWFnZSBleGlmLiBNZXRob2QgY2FuIGtlZXAgaW1hZ2Ugb3JpZW50YXRpb24gb3IgY29sb3IgcHJvZmlsZXNcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiBjbGVhbnVwSW1hZ2VFeGlmOiB7XG4gICAqICAga2VlcE9yaWVudGF0aW9uOiB0cnVlXG4gICAqICAga2VlcElDQ2FuZEFQUDogdHJ1ZVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgY2xlYW51cEltYWdlRXhpZj86IGJvb2xlYW4gfCB7XG4gICAga2VlcE9yaWVudGF0aW9uPzogYm9vbGVhbixcbiAgICBrZWVwSUNDYW5kQVBQPzogYm9vbGVhblxuICB9O1xuICAvKipcbiAgICogQ3VzdG9taXplIHRoZSB0ZXh0IG9uIHRoZSBjbG91ZCBhdXRoZW50aWNhdGlvbiBzY3JlZW4gaW4gUGlja2VyLlxuICAgKiBVc2UgYSBjbG91ZCBzb3VyY2UgbmFtZSAoc2VlIHtAbGluayBQaWNrZXJPcHRpb25zLmZyb21Tb3VyY2VzfSlcbiAgICogb3IgYSAnZGVmYXVsdCcgYXMgYSBrZXksIHRoZW4gcHV0IHlvdXIgY3VzdG9tIG5vdGljZSBvciBjb25zZW50XG4gICAqIHRvIHRoZSAndG9wJyBvciB0aGUgJ2JvdHRvbScga2V5IHRvIHNob3cgaXQgcmVzcGVjdGl2bHkgYWJvdmUgb3IgdW5kZXIgJ0Nvbm5lY3QgYnV0dG9uJy5cbiAgICpcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiBjdXN0b21BdXRoVGV4dDoge1xuICAgKiAgIC8vIHVzZSBpdCBmb3IgZXZlcnkgY2xvdWQgYXV0aGVudGljYXRpb24gc2NyZWVuXG4gICAqICAgZGVmYXVsdDoge1xuICAgKiAgICAgdG9wOiBbXG4gICAqICAgICAgICdkZWZhdWx0IHRvcCBmaXJzdCBsaW5lJyxcbiAgICogICAgICAgJ2RlZmF1bHQgdG9wIHNlY29uZCBsaW5lJ1xuICAgKiAgICAgXSxcbiAgICogICAgIGJvdHRvbTogW1xuICAgKiAgICAgICAnZGVmYXVsdCBib3R0b20gZmlyc3QgbGluZScsXG4gICAqICAgICAgICdkZWZhdWx0IGJvdHRvbSBzZWNvbmQgbGluZSdcbiAgICogICAgIF1cbiAgICogICB9LFxuICAgKiAgIC8vIG92ZXJyaWRlIGEgZGVmYXVsdCBib3R0b20gdGV4dCBmb3Igb25seSBnbWFpbFxuICAgKiAgIGdtYWlsOiB7XG4gICAqICAgICBib3R0b206IFtcbiAgICogICAgICAgJ1dlIG5lZWQgeW91ciBwZXJtaXNzaW9uIHRvIGFjY2VzcyB5b3VyIGRhdGEgYW5kJyxcbiAgICogICAgICAgJ3Byb2Nlc3MgaXQgd2l0aCBvdXIgbWFjaGluZSBsZWFybmluZyBzeXN0ZW0uJ1xuICAgKiAgICAgXVxuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGN1c3RvbUF1dGhUZXh0PzogQ3VzdG9tQXV0aFRleHRPcHRpb25zO1xuICAvKipcbiAgICogUGlja2VyIGRpc3BsYXkgbW9kZSwgb25lIG9mIGAnaW5saW5lJ2AsIGAnb3ZlcmxheSdgLCBgJ2Ryb3BQYW5lJ2AgLSBkZWZhdWx0IGlzIGAnb3ZlcmxheSdgLlxuICAgKi9cbiAgZGlzcGxheU1vZGU/OiBQaWNrZXJEaXNwbGF5TW9kZTtcbiAgLyoqXG4gICAqIE1heCBudW1iZXIgb2YgZmlsZXMgdG8gdXBsb2FkIGNvbmN1cnJlbnRseS4gRGVmYXVsdCBpcyA0LlxuICAgKi9cbiAgY29uY3VycmVuY3k/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgY29udGFpbmVyIGZvciB5b3VyIGN1c3RvbSBzb3VyY2UuXG4gICAqL1xuICBjdXN0b21Tb3VyY2VDb250YWluZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgcGF0aCBmb3IgeW91ciBjdXN0b20gc291cmNlIGNvbnRhaW5lci5cbiAgICovXG4gIGN1c3RvbVNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZXQgdGhlIGRpc3BsYXkgbmFtZSBmb3IgdGhlIGN1c3RvbSBzb3VyY2UuXG4gICAqL1xuICBjdXN0b21Tb3VyY2VOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogUHJvdmlkZSBhbiBvYmplY3QgZm9yIG1hcHBpbmcgcGlja2VyIHN0cmluZ3MgdG8geW91ciBvd24gc3RyaW5ncy5cbiAgICogU3RyaW5ncyBzdXJyb3VuZGVkIGJ5IGJyYWNrZXRzLCBgeyBmb29iYXIgfWAsIGFyZSBpbnRlcnBvbGF0ZWQgd2l0aCBydW50aW1lIHZhbHVlcy5cbiAgICogU291cmNlIGxhYmVscyBhcmUgYWxzbyBhdmFpbGFibGUgdG8gb3ZlcnJpZGUsIGUuZy4gRmFjZWJvb2ssIEluc3RhZ3JhbSwgRHJvcGJveCwgZXRjLlxuICAgKi9cbiAgY3VzdG9tVGV4dD86IFBpY2tlckN1c3RvbVRleHQ7XG4gIC8qKlxuICAgKiBzZXQgc3VwcG9ydCBlbWFpbCB0byBkaXNwbGF5IGluIGNhc2Ugb2YgZXJyb3JcbiAgICovXG4gIHN1cHBvcnRFbWFpbD86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSByZW1vdmVzIHRoZSBoYXNoIHByZWZpeCBvbiBzdG9yZWQgZmlsZXMuXG4gICAqL1xuICBkaXNhYmxlU3RvcmFnZUtleT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgcmVtb3ZlcyBhYmlsaXR5IHRvIGVkaXQgaW1hZ2VzLlxuICAgKi9cbiAgZGlzYWJsZVRyYW5zZm9ybWVyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERpc2FibGVzIGFsdCB0ZXh0IHZpZXcvZWRpdCBpbiB0aGUgc3VtbWFyeSBzY3JlZW4uXG4gICAqL1xuICBkaXNhYmxlQWx0VGV4dD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEaXNhYmxlcyBsb2NhbCBpbWFnZSB0aHVtYm5haWwgcHJldmlld3MgaW4gdGhlIHN1bW1hcnkgc2NyZWVuLlxuICAgKi9cbiAgZGlzYWJsZVRodW1ibmFpbHM/OiBib29sZWFuO1xuICAvKipcbiAgICogQ29uZmlndXJlIHRoZSBkcm9wIHBhbmUgYmVoYXZpb3IsIGkuZS4gd2hlbiBgZGlzcGxheU1vZGVgIGlzIGBkcm9wUGFuZWAuXG4gICAqL1xuICBkcm9wUGFuZT86IFBpY2tlckRyb3BQYW5lT3B0aW9ucztcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSB0aGUgYG9yaWdpbmFsRmlsZWAgbWV0YWRhdGEgd2lsbCBiZSB0aGUgYWN0dWFsIGBGaWxlYCBvYmplY3QgaW5zdGVhZCBvZiBhIFBPSk9cbiAgICovXG4gIGV4cG9zZU9yaWdpbmFsRmlsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIGRyb3Agem9uZSB0byBiZSBhY3RpdmUgb24gYWxsIHZpZXdzLiBEZWZhdWx0IGlzIGFjdGl2ZSBvbmx5IG9uIGxvY2FsIGZpbGUgc291cmNlLlxuICAgKi9cbiAgZ2xvYmFsRHJvcFpvbmU/OiBib29sZWFuO1xuICAvKipcbiAgICogSGlkZSB0aGUgcGlja2VyIG1vZGFsIFVJIG9uY2UgdXBsb2FkaW5nIGJlZ2lucy4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIGhpZGVNb2RhbFdoZW5VcGxvYWRpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGltYWdlIGRpbWVuc2lvbnMuIGUuZy4gWzgwMCwgNjAwXS4gT25seSBmb3IgSlBFRywgUE5HLCBhbmQgQk1QIGZpbGVzLlxuICAgKiBMb2NhbCBhbmQgY3JvcHBlZCBpbWFnZXMgd2lsbCBiZSByZXNpemVkICh1cHNjYWxlZCBvciBkb3duc2NhbGVkKSB0byB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnMgYmVmb3JlIHVwbG9hZGluZy5cbiAgICogVGhlIG9yaWdpbmFsIGhlaWdodCB0byB3aWR0aCByYXRpbyBpcyBtYWludGFpbmVkLiBUbyByZXNpemUgYWxsIGltYWdlcyBiYXNlZCBvbiB0aGUgd2lkdGgsIHNldCBbd2lkdGgsIG51bGxdLCBlLmcuIFs4MDAsIG51bGxdLlxuICAgKiBGb3IgdGhlIGhlaWdodCBzZXQgW251bGwsIGhlaWdodF0sIGUuZy4gW251bGwsIDYwMF0uXG4gICAqL1xuICBpbWFnZURpbT86IFtudW1iZXIsIG51bWJlcl07XG4gIC8qKlxuICAgKiBTcGVjaWZ5IG1heGltdW0gaW1hZ2UgZGltZW5zaW9ucy4gZS5nLiBbODAwLCA2MDBdLiBPbmx5IGZvciBKUEVHLCBQTkcsIGFuZCBCTVAgZmlsZXMuXG4gICAqIEltYWdlcyBiaWdnZXIgdGhhbiB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnMgd2lsbCBiZSByZXNpemVkIHRvIHRoZSBtYXhpbXVtIHNpemUgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGFzcGVjdCByYXRpby5cbiAgICogVGhlIG91dHB1dCB3aWxsIG5vdCBiZSBleGFjdGx5IDgwMHg2MDAgdW5sZXNzIHRoZSBpbWFnZU1heCBtYXRjaGVzIHRoZSBhc3BlY3QgcmF0aW8gb2YgdGhlIG9yaWdpbmFsIGltYWdlLlxuICAgKi9cbiAgaW1hZ2VNYXg/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAvKipcbiAgICogU3BlY2lmeSBtaW5pbXVtIGltYWdlIGRpbWVuc2lvbnMuIGUuZy4gWzgwMCwgNjAwXS4gT25seSBmb3IgSlBFRywgUE5HLCBhbmQgQk1QIGZpbGVzLlxuICAgKiBJbWFnZXMgc21hbGxlciB0aGFuIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucyB3aWxsIGJlIHVwc2NhbGVkIHRvIHRoZSBtaW5pbXVtIHNpemUgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGFzcGVjdCByYXRpby5cbiAgICogVGhlIG91dHB1dCB3aWxsIG5vdCBiZSBleGFjdGx5IDgwMHg2MDAgdW5sZXNzIHRoZSBpbWFnZU1pbiBtYXRjaGVzIHRoZSBhc3BlY3QgcmF0aW8gb2YgdGhlIG9yaWdpbmFsIGltYWdlLlxuICAgKi9cbiAgaW1hZ2VNaW4/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAvKipcbiAgICogU2V0cyBsb2NhbGUuIEFjY2VwdHM6IGNhLCBkYSwgZGUsIGVuLCBlcywgZnIsIGhlLCBpdCwgamEsIGtvLCBubCwgbm8sIHBsLCBwdCwgc3YsIHJ1LCB2aSwgemgsIHRyXG4gICAqL1xuICBsYW5nPzogc3RyaW5nO1xuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2YgZmlsZXMgcmVxdWlyZWQgdG8gc3RhcnQgdXBsb2FkaW5nLiBEZWZhdWx0cyB0byAxLlxuICAgKi9cbiAgbWluRmlsZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBmaWxlcyBhbGxvd2VkIHRvIHVwbG9hZC4gRGVmYXVsdHMgdG8gMS5cbiAgICovXG4gIG1heEZpbGVzPzogbnVtYmVyO1xuICAvKipcbiAgICogUmVzdHJpY3Qgc2VsZWN0ZWQgZmlsZXMgdG8gYSBtYXhpbXVtIG51bWJlciBvZiBieXRlcy4gKGUuZy4gMTAgXFwqIDEwMjQgXFwqIDEwMjQgZm9yIDEwTUIgbGltaXQpLlxuICAgKi9cbiAgbWF4U2l6ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogRGVmYXVsdCB2aWV3IHR5cGUgb3B0aW9uIGZvciBmaWxlIGJyb3dzZXJcbiAgICovXG4gIHZpZXdUeXBlPzogJ2dyaWQnIHwgJ2xpc3QnO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IGZvciBlcnJvciBtZXNzYWdlc1xuICAgKi9cbiAgZXJyb3JzVGltZW91dD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFNwZWNpZnkgW3dpZHRoLCBoZWlnaHRdIGluIHBpeGVscyBvZiB0aGUgZGVza3RvcCBtb2RhbC5cbiAgICovXG4gIG1vZGFsU2l6ZT86IFtudW1iZXIsIG51bWJlcl07XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhbGwgdXBsb2FkcyBpbiBhIHBpY2sgYXJlIGNhbmNlbGxlZC5cbiAgICovXG4gIG9uQ2FuY2VsPzogUGlja2VyVXBsb2FkRG9uZUNhbGxiYWNrO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIFVJIGlzIGV4aXRlZC5cbiAgICovXG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIFVJIGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSBQaWNrZXJJbnN0YW5jZSBhcHBsaWNhdGlvbiBoYW5kbGVcbiAgICovXG4gIG9uT3Blbj86IChoYW5kbGU6IFBpY2tlckluc3RhbmNlKSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW5ldmVyIHVzZXIgc2VsZWN0cyBhIGZpbGUuXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIFVzaW5nIHRvIHZldG8gZmlsZSBzZWxlY3Rpb25cbiAgICogLy8gSWYgeW91IHRocm93IGFueSBlcnJvciBpbiB0aGlzIGZ1bmN0aW9uIGl0IHdpbGwgcmVqZWN0IHRoZSBmaWxlIHNlbGVjdGlvbi5cbiAgICogLy8gVGhlIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgYXMgYW4gYWxlcnQuXG4gICAqIG9uRmlsZVNlbGVjdGVkKGZpbGUpIHtcbiAgICogICBpZiAoZmlsZS5zaXplID4gMTAwMCAqIDEwMDApIHtcbiAgICogICAgIHRocm93IG5ldyBFcnJvcignRmlsZSB0b28gYmlnLCBzZWxlY3Qgc29tZXRoaW5nIHNtYWxsZXIgdGhhbiAxTUInKTtcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogLy8gVXNpbmcgdG8gY2hhbmdlIHNlbGVjdGVkIGZpbGUgbmFtZVxuICAgKiAvLyBOT1RFOiBUaGlzIGN1cnJlbnRseSBvbmx5IHdvcmtzIGZvciBsb2NhbCB1cGxvYWRzXG4gICAqIG9uRmlsZVNlbGVjdGVkKGZpbGUpIHtcbiAgICogICAvLyBJdCdzIGltcG9ydGFudCB0byByZXR1cm4gYSBuZXcgZmlsZSBieSB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uXG4gICAqICAgcmV0dXJuIHsgLi4uZmlsZSwgbmFtZTogJ2ZvbycgfTtcbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBhbHNvIHJldHVybiBhIFByb21pc2UgdG8gYWxsb3cgYXN5bmNocm9ub3VzIHZhbGlkYXRpb24gbG9naWMuXG4gICAqIFlvdSBjYW4gcGFzcyBhIGZpbGUgb2JqZWN0IHRvIGByZXNvbHZlYCBmb3IgY2hhbmdpbmcgdGhlIGZpbGUgbmFtZSwgaXQgd2lsbCBiZWhhdmUgdGhlIHNhbWUgYXMgd2hlblxuICAgKiB0aGUgZmlsZSBpcyByZXR1cm5lZCBmcm9tIHRoZSBub24tYXN5bmMgY2FsbGJhY2suXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIG9uRmlsZVNlbGVjdGVkKGZpbGUpIHtcbiAgICogICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgKiAgICAgLy8gRG8gc29tZXRoaW5nIGFzeW5jXG4gICAqICAgICByZXNvbHZlKCk7XG4gICAqICAgICAvLyBPciByZWplY3QgdGhlIHNlbGVjdGlvbiB3aXRoIHJlamVjdCgpXG4gICAqICAgfSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBvbkZpbGVTZWxlY3RlZD86IFBpY2tlckZpbGVDYWxsYmFjaztcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgZmlsZSB1cGxvYWQgaGFzIGJlZW4gY2FuY2VsZWQuXG4gICAqL1xuICBvbkZpbGVVcGxvYWRDYW5jZWw/OiBQaWNrZXJGaWxlQ2FuY2VsQ2FsbGJhY2s7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhIGZpbGUgYmVnaW5zIHVwbG9hZGluZy5cbiAgICovXG4gIG9uRmlsZVVwbG9hZFN0YXJ0ZWQ/OiBQaWNrZXJGaWxlV2l0aFRva2VuQ2FsbGJhY2s7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhIGZpbGUgaXMgZG9uZSB1cGxvYWRpbmcuXG4gICAqL1xuICBvbkZpbGVVcGxvYWRGaW5pc2hlZD86IFBpY2tlckZpbGVDYWxsYmFjaztcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHVwbG9hZGluZyBhIGZpbGUgZmFpbHMuXG4gICAqL1xuICBvbkZpbGVVcGxvYWRGYWlsZWQ/OiBQaWNrZXJGaWxlRXJyb3JDYWxsYmFjaztcbiAgLyoqXG4gICAqIENhbGxlZCBkdXJpbmcgbXVsdGktcGFydCB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzLiBMb2NhbCBmaWxlcyBvbmx5LlxuICAgKi9cbiAgb25GaWxlVXBsb2FkUHJvZ3Jlc3M/OiBQaWNrZXJGaWxlUHJvZ3Jlc3NDYWxsYmFjaztcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGZpbGUgaXMgY3JvcHBlZCBpbiBwaWNrZXJcbiAgICovXG4gIG9uRmlsZUNyb3BwZWQ/OiBQaWNrZXJGaWxlQ2FsbGJhY2s7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB1cGxvYWRpbmcgc3RhcnRzICh1c2VyIGluaXRpYXRlcyB1cGxvYWRpbmcpLlxuICAgKi9cbiAgb25VcGxvYWRTdGFydGVkPzogUGlja2VyVXBsb2FkU3RhcnRlZENhbGxiYWNrO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYWxsIGZpbGVzIGhhdmUgYmVlbiB1cGxvYWRlZC5cbiAgICovXG4gIG9uVXBsb2FkRG9uZT86IFBpY2tlclVwbG9hZERvbmVDYWxsYmFjaztcblxuICAvKipcbiAgICogRGVmaW5lIGEgdW5pcXVlIGlkIGZvciB0aGUgYXBwbGljYXRpb24gbW91bnQgcG9pbnQuXG4gICAqIE1heSBiZSB1c2VmdWwgZm9yIG1vcmUgYWR2YW5jZWQgdXNlIGNhc2VzLlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IHdpc2ggdG8gaGF2ZSBtb3JlIHRoYW4gb25lIHBpY2tlciBpbnN0YW5jZSBvcGVuIGF0IG9uY2UsXG4gICAqIHRoZW4gZWFjaCB3aWxsIG5lZWQgdGhlaXIgb3duIHVuaXF1ZSByb290SWQuXG4gICAqXG4gICAqICoqTm90ZToqKiBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIHdoZW4gYGRpc3BsYXlNb2RlYCBpcyBgZHJvcFBhbmVgLlxuICAgKi9cbiAgcm9vdElkPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hldGhlciB0byBzdGFydCB1cGxvYWRpbmcgYXV0b21hdGljYWxseSB3aGVuIG1heEZpbGVzIGlzIGhpdC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIHN0YXJ0VXBsb2FkaW5nV2hlbk1heEZpbGVzUmVhY2hlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBmaWxlIHN0b3JhZ2UuXG4gICAqL1xuICBzdG9yZVRvPzogUGlja2VyU3RvcmVPcHRpb25zO1xuICAvKipcbiAgICogU3BlY2lmeSBvcHRpb25zIGZvciBpbWFnZXMgcGFzc2VkIHRvIHRoZSBjcm9wIFVJLlxuICAgKi9cbiAgdHJhbnNmb3JtYXRpb25zPzogUGlja2VyVHJhbnNmb3JtYXRpb25PcHRpb25zO1xuICAvKipcbiAgICogV2hldGhlciB0byB1c2UgdGhlIG5ldyB0cmFuc2Zvcm1hdGlvbnMgVUkuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqL1xuICB0cmFuc2Zvcm1hdGlvbnNVST86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBsb2NhbCBmaWxlIHVwbG9hZHMuXG4gICAqL1xuICB1cGxvYWRDb25maWc/OiBVcGxvYWRPcHRpb25zO1xuICAvKipcbiAgICogU3RhcnQgdXBsb2FkaW5nIGltbWVkaWF0ZWx5IG9uIGZpbGUgc2VsZWN0aW9uLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqIEBpbXBvcnRhbnQgVGhlIGZlYXR1cmUgaXMgY2FuIGJlIGVuYWJsZWQgb25seSBpZiBjcm9wIGlzIGRpc2FibGVkIC0gZGlzYWJsZVRyYW5zZm9ybWVyOiB0cnVlXG4gICAqL1xuICB1cGxvYWRJbkJhY2tncm91bmQ/OiBib29sZWFuO1xuICAvKipcbiAgICogU2V0cyB0aGUgcmVzb2x1dGlvbiBvZiByZWNvcmRlZCB2aWRlby4gT25lIG9mIFwiMzIweDI0MFwiLCBcIjY0MHg0ODBcIiBvciBcIjEyODB4NzIwXCIuIERlZmF1bHQgaXMgYFwiNjQweDQ4MFwiYC5cbiAgICovXG4gIHZpZGVvUmVzb2x1dGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFVzZSBTZW50cnkgQnJlYWRjcnVtYnMgbWVjaGFuaXNtIHRvIGxvZyBpbmZvcm1hdGlvbiBhYm91dCBvY2N1cmVkIGVycm9ycy5cbiAgICogSXQgY2FuIG92ZXJyaWRlIGdsb2JhbCBvYmplY3RzIGxpa2UgY29uc29sZSwgZXJyb3IgZXRjLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICB1c2VTZW50cnlCcmVhZGNydW1icz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoaWNoIFBpY2tlciBpbnN0YW5jZSBzaG91bGQgcmVzcG9uZCB0byBwYXN0ZSBldmVudC5cbiAgICogQnkgZGVmYXVsdCBvbmx5IGhvdmVyZWQgaW5zdGFuY2UgcmVzcG9uZHMgdG8gZXZlbnQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbiA9IGZhbHNlfSBwYXN0ZVRvRmlyc3RJblZpZXdQb3J0IElmIG5vbmUgaW5zdGFuY2UgaXMgaG92ZXJlZCB0YWtlIGZpcnN0IHBpY2tlciBpbnN0YW5jZSBmdWxseSB2aXNpYmxlIGluIHZpZXdwb3J0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbiA9IGZhbHNlfSBwYXN0ZVRvRmlyc3RJbnN0YW5jZSBJZiBub25lIGluc3RhbmNlIGlzIGhvdmVyZWQgdGFrZSBmaXJzdCBwaWNrZXIgaW5zdGFuY2UgdGhhdCBpcyBpbml0aWFsaXplZFxuICAgKiBAcGFzdGVUb0ZpcnN0SW5WaWV3UG9ydCBpcyBjaGVja2VkIGZpcnN0XG4gICAqL1xuICBwYXN0ZU1vZGU/OiB7XG4gICAgcGFzdGVUb0ZpcnN0SW5WaWV3UG9ydD86IGJvb2xlYW4sXG4gICAgcGFzdGVUb0ZpcnN0SW5zdGFuY2U/OiBib29sZWFuXG4gIH07XG4gIC8qKlxuICAgKiBEaXNhYmxlL0VuYWJsZSBwb3NzaWJpbGl0eSB0byB1cGxvYWQgZGlyZWN0b3JpZXMuXG4gICAqL1xuICBkaXNhYmxlRGlyZWN0b3J5VXBsb2FkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVuYWJsZS9EaXNhYmxlIE1pbmkgVXBsb2FkZXJcbiAgICovXG4gIG1pbmlVcGxvYWRlcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFbmFibGUvRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBtdWx0aXBsZSBmaWxlIHVwbG9hZFxuICAgKi9cbiAgbXVsdGlwbGVGaWxlVXBsb2FkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJDcm9wT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNYWludGFpbiBhc3BlY3QgcmF0aW8gZm9yIGNyb3Agc2VsZWN0aW9uLiAoZS5nLiAxNi85LCA4MDAvNjAwKS5cbiAgICovXG4gIGFzcGVjdFJhdGlvPzogbnVtYmVyO1xuICAvKipcbiAgICogRm9yY2UgYWxsIGltYWdlcyB0byBiZSBjcm9wcGVkIGJlZm9yZSB1cGxvYWRpbmcuXG4gICAqL1xuICBmb3JjZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyVHJhbnNmb3JtYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEVuYWJsZSBjcm9wLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICBjcm9wPzogYm9vbGVhbiB8IFBpY2tlckNyb3BPcHRpb25zO1xuICAvKipcbiAgICogRW5hYmxlIGNpcmNsZSBjcm9wLiBEaXNhYmxlZCBpZiBjcm9wLmFzcGVjdFJhdGlvIGlzIGRlZmluZWQgYW5kIG5vdCAxLiBDb252ZXJ0cyB0byBQTkcuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIGNpcmNsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFbmFibGUgaW1hZ2Ugcm90YXRpb24uIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJvdGF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEdsb2JhbCBmb3JjZSBjcm9wIG9wdGlvbi4gQ2FuIGJlIHVzZSBpZSB3aXRoIGNpcmNsZVxuICAgKi9cbiAgZm9yY2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlckFjY2VwdEZuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQcm92aWRlZCBhY2NlcHQgc3RyaW5nXG4gICAqL1xuICBhY2NlcHQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogQWNjZXB0IHN0cmluZyBjb252ZXJ0ZWQgdG8gbWltZXR5cGVcbiAgICovXG4gIGFjY2VwdE1pbWU6IHN0cmluZ1tdO1xuICAvKipcbiAgICogTWltZXR5cGUgYmFzZWQgbWFnaWMgYnl0ZXNcbiAgICoge0BsaW5rIGh0dHBzOi8vZmlsZXN0YWNrLmdpdGh1Yi5pby9maWxlc3RhY2stanMvZ2xvYmFscy5odG1sI2dldG1pbWV0eXBlfVxuICAgKi9cbiAgbWltZUZyb21NYWdpY0J5dGVzOiBQcm9taXNlPHN0cmluZz47XG4gIC8qKlxuICAgKiBNaW1ldHlwZSBiYXNlZCBvbiBmaWxlIGV4dGVuc2lvblxuICAgKiB7QGxpbmsgaHR0cHM6Ly9maWxlc3RhY2suZ2l0aHViLmlvL2ZpbGVzdGFjay1qcy9nbG9iYWxzLmh0bWwjZXh0ZW5zaW9udG9taW1lfVxuICAgKi9cbiAgbWltZUZyb21FeHRlbnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQSBzeW5jaHJvbm91cy1sb29raW5nIHdyYXBwZXIgZm9yIGxvYWRpbmcgdGhlIHBpY2tlciBhbmQgY2FsbGluZyBpdHMgbWV0aG9kcy5cbiAqIFRoaXMgaXMgY3VycmVudGx5IG5lZWRlZCBiZWNhdXNlIHRoZSBwaWNrZXIgbW9kdWxlIGlzIGxvYWRlZCBhc3luY2hyb25vdXNseS5cbiAqIEV2ZW50dWFsbHkgd2Ugc2hvdWxkIG9mZmVyIGEgYnVuZGxlIHdpdGggdGhlIHBpY2tlciBtb2R1bGUgaW5jbHVkZWQuXG4gKi9cbmNsYXNzIFBpY2tlckxvYWRlciB7XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQ6IFByb21pc2U8UGlja2VySW5zdGFuY2U+O1xuICBjb25zdHJ1Y3RvcihjbGllbnQ6IENsaWVudCwgb3B0aW9ucz86IFBpY2tlck9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWxpZGF0ZVJlcyA9IGdldFZhbGlkYXRvcihQaWNrZXJQYXJhbXNTY2hlbWEpKG9wdGlvbnMpO1xuXG4gICAgaWYgKHZhbGlkYXRlUmVzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgIHZhbGlkYXRlUmVzLmVycm9ycy5mb3JFYWNoKGVycm9yID0+IHtcbiAgICAgICAgaWYgKGVycm9yLnBhdGguaW5jbHVkZXMoJ2Zyb21Tb3VyY2VzJykpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFdhcm5pbmc6IEludmFsaWQgc291cmNlIFxcXCIke2Vycm9yLmluc3RhbmNlfVxcXCIgZm91bmQgYW5kIHJlbW92ZWQhYCk7XG4gICAgICAgICAgb3B0aW9ucy5mcm9tU291cmNlcyA9IG9wdGlvbnMuZnJvbVNvdXJjZXMuZmlsdGVyKHNvdXJjZSA9PiBzb3VyY2UgIT09IGVycm9yLmluc3RhbmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRmlsZXN0YWNrRXJyb3IoYEludmFsaWQgcGlja2VyIHBhcmFtc2AsIHZhbGlkYXRlUmVzLmVycm9ycywgRmlsZXN0YWNrRXJyb3JUeXBlLlZBTElEQVRJT04pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghb3B0aW9ucy5mcm9tU291cmNlcy5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMuZnJvbVNvdXJjZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0aGlzLmxvYWRNb2R1bGUoY2xpZW50LCBvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGlja2VyID0gYXdhaXQgdGhpcy5faW5pdGlhbGl6ZWQ7XG4gICAgYXdhaXQgcGlja2VyLm9wZW4oKTtcbiAgfVxuXG4gIGFzeW5jIGNyb3AoZmlsZXM6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGlja2VyID0gYXdhaXQgdGhpcy5faW5pdGlhbGl6ZWQ7XG4gICAgYXdhaXQgcGlja2VyLmNyb3AoZmlsZXMpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGlja2VyID0gYXdhaXQgdGhpcy5faW5pdGlhbGl6ZWQ7XG4gICAgYXdhaXQgcGlja2VyLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyBjYW5jZWwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGlja2VyID0gYXdhaXQgdGhpcy5faW5pdGlhbGl6ZWQ7XG4gICAgYXdhaXQgcGlja2VyLmNhbmNlbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkTW9kdWxlKGNsaWVudDogQ2xpZW50LCBvcHRpb25zPzogUGlja2VyT3B0aW9ucyk6IFByb21pc2U8UGlja2VySW5zdGFuY2U+IHtcbiAgICBjb25zdCB7IHNlc3Npb246IHsgdXJsczogeyBwaWNrZXJVcmw6IHVybCB9IH0gfSA9IGNsaWVudDtcbiAgICBjb25zdCBQaWNrZXIgPSBhd2FpdCBsb2FkTW9kdWxlKEZJTEVTVEFDS19NT0RVTEVTLlBJQ0tFUiwgdXJsKTtcbiAgICByZXR1cm4gbmV3IFBpY2tlcihjbGllbnQsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogTG9hZHMgYW5kIGNyZWF0ZXMgcGlja2VyIGluc3RhbmNlXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBjbGllbnRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmV4cG9ydCBjb25zdCBwaWNrZXIgPSAoY2xpZW50OiBDbGllbnQsIG9wdGlvbnM/OiBQaWNrZXJPcHRpb25zKTogUGlja2VySW5zdGFuY2UgPT4ge1xuICByZXR1cm4gbmV3IFBpY2tlckxvYWRlcihjbGllbnQsIG9wdGlvbnMpO1xufTtcbiJdfQ==
;