piper-utils 1.0.0 → 1.0.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/bin/main.js CHANGED
@@ -73,7 +73,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.userRole
73
73
  *
74
74
  * @param {object} event - The lambda event passed in by a validated api request.
75
75
  * @returns {array} The businessID requested by the query string
76
- */function getAllowedBusinessIds(event) {const businesses = getBusinessesInfo(event);return Object.keys(businesses);}function getBusinessesInfo(event) {let jsonToParse = _lodash2.default.get(event, 'requestContext.authorizer.claims.custom:AR') || _lodash2.default.get(event, 'requestContext.authorizer.custom:AR') || '{}';if (process.env.BUILD_ENV === 'local') {const ar = { 'businessIds': { '1': 'A' } };return _lodash2.default.get(ar, 'businessIds', {});}const accessRights = JSON.parse(jsonToParse);return _lodash2.default.get(accessRights, 'businessIds', {});} /**
76
+ */function getAllowedBusinessIds(event) {const businesses = getBusinessesInfo(event);return Object.keys(businesses);}function getBusinessesInfo(event) {let jsonToParse = _lodash2.default.get(event, 'requestContext.authorizer.claims.custom:AR') || _lodash2.default.get(event, 'requestContext.authorizer.custom:AR') || '{}';const accessRights = JSON.parse(jsonToParse);if (process.env.BUILD_ENV === 'local') {if (!(0, _lodash.isEmpty)(accessRights)) {const bids = _lodash2.default.get(accessRights, 'businessIds', {});const withLocal = { ...bids, '1': 'A' };_lodash2.default.set(accessRights, 'businessIds', withLocal);return _lodash2.default.get(accessRights, 'businessIds', {});} else {const ar = { 'businessIds': { '1': 'A' } };return _lodash2.default.get(ar, 'businessIds', {});}}return _lodash2.default.get(accessRights, 'businessIds', {});} /**
77
77
  * Get the modules listed in custom:MOD.
78
78
  *
79
79
  * @param {object} event - The lambda event passed in by a validated api request.
@@ -243,14 +243,14 @@ const createSort = exports.createSort = function (event, defaultFilter) {
243
243
  \*****************************************************************/
244
244
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
245
245
 
246
- Object.defineProperty(exports, "__esModule", ({ value: true }));exports.filterOverRideTypes = undefined;exports.defaultFilters = defaultFilters;exports.addFiltersFromSchema = addFiltersFromSchema;var _lodash = __webpack_require__(/*! lodash */ "lodash");var _lodash2 = _interopRequireDefault(_lodash);var _sequelize = __webpack_require__(/*! sequelize */ "sequelize");var _sequelize2 = _interopRequireDefault(_sequelize);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };} /**
246
+ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.defaultFilters = defaultFilters;exports.addFiltersFromSchema = addFiltersFromSchema;var _lodash = __webpack_require__(/*! lodash */ "lodash");var _lodash2 = _interopRequireDefault(_lodash);var _sequelize = __webpack_require__(/*! sequelize */ "sequelize");var _sequelize2 = _interopRequireDefault(_sequelize);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };} /**
247
247
  * Create an object with default filters for a given sequeliaze Schema Object, and set of sub schemas
248
248
  *
249
- * @param {{type:{}, filterOverRide:string}} schema - type is sequelize data type filterOverRide is used to overide default filterType implied by type
249
+ * @param {object} schema - type is sequelize data type
250
250
  * @param {object} subSchemas - An object with alias as the key and sequelize schema as the value http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#instance-method-define
251
251
  * sub schema can be {location: locationSchema} or {location: {as: "asAlias", schema: schema}}
252
252
  * @returns {object} An Object with a default filter for each dataType CHAR and TEXT will get a $like operator, INTEGER, DECIMAL and BOOLEAN will get a $eq.
253
- */function defaultFilters(schema, subSchemas = {}) {schema = _lodash2.default.clone(schema);const filters = {};addFiltersFromSchema(schema, filters);Object.keys(subSchemas).forEach((key) => {addFiltersFromSchema(subSchemas[key], filters, key);});return filters;}const filterOverRideTypes = exports.filterOverRideTypes = { equal: 'equal' };function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {const asLinkAlias = _lodash2.default.get(schema, 'as', null);schema = _lodash2.default.get(schema, 'schema') || schema;return Object.keys(schema).reduce((acc, item) => {let key = item;if (asLinkAlias) {
253
+ */function defaultFilters(schema, subSchemas = {}) {schema = _lodash2.default.clone(schema);const filters = {};addFiltersFromSchema(schema, filters);Object.keys(subSchemas).forEach((key) => {addFiltersFromSchema(subSchemas[key], filters, key);});return filters;}function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {const asLinkAlias = _lodash2.default.get(schema, 'as', null);schema = _lodash2.default.get(schema, 'schema') || schema;return Object.keys(schema).reduce((acc, item) => {let key = item;if (asLinkAlias) {
254
254
  acc[asLinkAlias] = { type: _sequelize2.default.STRING, filterType: _sequelize2.default.Op.eq };
255
255
  }
256
256
 
@@ -264,9 +264,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.filterOv
264
264
  return acc;
265
265
  }
266
266
 
267
- //create a custom filter to overrider defaults implied by the db value
268
- const filterTypeOverRide = _lodash2.default.get(schema, `[${item}].filterOverRide`);
269
-
270
267
  const itemType = filterTypeOverRide || schema[item].type;
271
268
 
272
269
  //todo these should be removed, there are just here for sort tests
@@ -315,11 +312,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.filterOv
315
312
  acc['updatedAt'] = { type: _sequelize2.default.DATE, filterType: _sequelize2.default.Op.lt };
316
313
  acc['id'] = { type: _sequelize2.default.INTEGER, filterType: _sequelize2.default.Op.eq };
317
314
 
318
- //filter overRides
319
- if (itemType === filterOverRideTypes.equal) {
320
- acc[key] = { filterType: _sequelize2.default.Op.eq };
321
- }
322
-
323
315
  return acc;
324
316
  }, accumulator);
325
317
  }
@@ -1000,4 +992,4 @@ for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_expor
1000
992
  if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true });
1001
993
  /******/ })()
1002
994
  ;
1003
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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TUFBTXhELFdBQVcsR0FBQWpSLG1CQUFBLEdBQUcwVSw0QkFBaUI7QUFDckMsTUFBTXhELGtDQUFrQyxHQUFBbFIsMENBQUEsR0FBRzJVLG1EQUF3QztBQUNuRixNQUFNck8sY0FBYyxHQUFBdEcsc0JBQUEsR0FBRzRVLDhCQUFvQjtBQUMzQyxNQUFNN1UsaUJBQWlCLEdBQUFDLHlCQUFBLEdBQUc2VSxvQ0FBdUI7QUFDakQsTUFBTXRTLFNBQVMsR0FBQXZDLGlCQUFBLEdBQUc4VSwwQkFBZTtBQUNqQyxNQUFNekQsVUFBVSxHQUFBclIsa0JBQUEsR0FBRytVLDJCQUFnQjtBQUNuQyxNQUFNN1UsaUJBQWlCLEdBQUFGLHlCQUFBLEdBQUdnVixvQ0FBdUI7QUFDakQsTUFBTS9VLGNBQWMsR0FBQUQsc0JBQUEsR0FBR2lWLGlDQUFvQjtBQUMzQyxNQUFNNVUsZ0JBQWdCLEdBQUFMLHdCQUFBLEdBQUdrVixtQ0FBc0IsQyIsInNvdXJjZXMiOlsid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2RhdGFiYXNlL2RiU2V0dXAvbWlncmF0aW9ucy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvYWNjZXNzUmlnaHRzVXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2NyZWF0ZUZpbHRlcnMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2NyZWF0ZVNvcnQuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2RlZmF1bHRGaWx0ZXJzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9maW5kQWxsLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2R5bmFtby9keW5hbW9VdGlscy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9ldmVudE1hbmFnZXIvaGFuZGxlRXZlbnRzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2V2ZW50TWFuYWdlci9oYW5kbGVGaWxlLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2V2ZW50TWFuYWdlci9wdWJsaXNoRXZlbnRzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2V2ZW50TWFuYWdlci93YXRjaEJ1Y2tldC5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9yZXF1ZXN0UmVzb25zZS9lcnJvckNvZGVzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9zMy9TM1V0aWxzLmpzL1MzVXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvc25zL1NOU1V0aWxzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJAYXdzLXNkay9jbGllbnQtczNcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcIkBhd3Mtc2RrL2NsaWVudC1zbnNcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcIkBhd3Mtc2RrL2xpYi1keW5hbW9kYlwiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwiYmx1ZWJpcmRcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcImxvZGFzaFwiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwibW9tZW50XCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJtb21lbnQvbW9tZW50LmpzXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJzZXF1ZWxpemVcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcInVtenVnXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFNlcXVlbGl6ZVN0b3JhZ2UsIFVtenVnIH0gZnJvbSAndW16dWcnO1xuXG4vKipcbiAqIEV4ZWN1dGUgZGF0YWJhc2UgbWlncmF0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGRhdGFiYXNlTmFtZSAtIG5hbWUgb2YgZGF0YWJhc2UgdG8gY3JlYXRlIChvciB2ZXJpZnkgZXhpc3RlbmNlKVxuICogQHBhcmFtIHtvYmplY3R9IHNlcXVlbGl6ZUluc3RhbmNlIC0gaW5zdGFuY2Ugb2YgU2VxdWVsaXplIChtdXN0IGJlIGluaXRpYWxpemVkKVxuICogQHBhcmFtIHtmdW5jdGlvbn0gaW5pdGlhbGl6ZU1vZGVscyAtIGZ1bmN0aW9uIHRvIHJ1biB0byBzeW5jIFNlcXVlbGl6ZSBtb2RlbHMgd2l0aCBkYXRhYmFzZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhUb01pZ3JhdGlvbkZvbGRlciAtIHBhc3MgaW4gdGhlIHBhdGggaWYgdXNpbmcgd2luZG93cy4gd2luZG93cyBhbmQgbGludXggUFdEIHdpbGwgYmUgZGlmZmVyZW50XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5NaWdyYXRpb25zKGRhdGFiYXNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbGl6ZUluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZU1vZGVscyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhUb01pZ3JhdGlvbkZvbGRlciA9IGAke3Byb2Nlc3MuZW52LlBXRH0vbWlncmF0aW9ucy8qLmpzYCkge1xuICAgIGNvbnN0IHVtenVnID0gbmV3IFVtenVnKHtcbiAgICAgICAgbWlncmF0aW9uczogeyBnbG9iOiBwYXRoVG9NaWdyYXRpb25Gb2xkZXIgfSxcbiAgICAgICAgY29udGV4dDogc2VxdWVsaXplSW5zdGFuY2UuZ2V0UXVlcnlJbnRlcmZhY2UoKSxcbiAgICAgICAgc3RvcmFnZTogbmV3IFNlcXVlbGl6ZVN0b3JhZ2UoeyBzZXF1ZWxpemU6IHNlcXVlbGl6ZUluc3RhbmNlIH0pLFxuICAgICAgICBsb2dnZXI6IGNvbnNvbGVcbiAgICB9KTtcblxuICAgIGNvbnN0IHBlbmRpbmdNaWdyYXRpb25zID0gYXdhaXQgdW16dWcucGVuZGluZygpO1xuICAgIGNvbnNvbGUubG9nKCctLS0tLS0tPlVUSUwgUGVuZGluZyBNaWdyYXRpb25zOicsIHBlbmRpbmdNaWdyYXRpb25zLCBwYXRoVG9NaWdyYXRpb25Gb2xkZXIpO1xuICAgIGF3YWl0IHVtenVnLnVwKCkuY2F0Y2goKHVwRXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIHVtenVnLmRvd24oe1xuICAgICAgICAgICAgbWlncmF0aW9uczogXy5jaGFpbihwZW5kaW5nTWlncmF0aW9ucylcbiAgICAgICAgICAgICAgICAubWFwKCdmaWxlJylcbiAgICAgICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAgICAgLnZhbHVlKClcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSAnVVRJTCBFcnJvcjogRXJyb3Igd2l0aCBtaWdyYXRpbmcgdXA6JyArIHVwRXJyb3I7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgfSwgKGRvd25FcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gJ1VUSUwgRXJyb3I6IEVycm9yIHdpdGggbWlncmF0aW5nIGRvd246JyArIGRvd25FcnJvcjtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBuZWVkZWQgdG8gc3luYyAoY3JlYXRlKSB0YWJsZXMsIGJ1dCBub3QgdG8gZGF0YWJhc2UgdXBkYXRlc1xuICAgIC8vIGluIHRoZSBwYXN0IGl0IHdvcmtlZCB0byBsZWF2ZSBpdCBpbiwgYnV0IG5vdyB0aGUgdGFncyBtb2R1bGUgY2F1c2VzIGZvcmVpZ24ga2V5IHByb2JsZW1zXG4gICAgLy8gVGhlIHRhYmxlcyBhcmUgc3RpbGwgaW5pdGlhdGVkIGJ5IGJlaW5nIHBhc3NlZCBpbiB0byBydW4gbWlncmF0aW9uc1xuICAgIGF3YWl0IGluaXRpYWxpemVNb2RlbHMoKTtcbn0iLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JMaXN0IH0gZnJvbSAnLi4vLi4vLi4vcmVxdWVzdFJlc29uc2UvZXJyb3JDb2Rlcy5qcyc7XG5pbXBvcnQgeyBwYXJzZUJvZHkgfSBmcm9tICcuLi8uLi8uLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuXG4vKipcbiAqIEdldCB0aGUgYWxsb3dlZCBidXNpbmVzc0lkcyBmb3IgYSB1c2VyIGZyb20gdGhlIGxhbWJkYSBldmVudCwgY29tcGFyZSBpdCB0byBidXNpbmVzc0lkcywgcmV0dXJuIHdoYXQgdXNlciBoYXMgYWNjZXNzIHRvLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIFRoZSBsYW1iZGEgZXZlbnQgcGFzc2VkIGluIGJ5IGEgdmFsaWRhdGVkIGFwaSByZXF1ZXN0LlxuICogQHJldHVybnMge2FycmF5fSBBICBsaXN0IG9mIGJ1c2luZXNzSWRzIHRoYXQgaGF2ZSBiZWVuIHJlcXVlc3RlZCBhbmQgYXJlIGFsbG93ZWQgdG8gZm9yIHNvbWUgdXNlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjY2Vzc1JpZ2h0c1V0aWxzKGV2ZW50KSB7XG4gICAgY29uc3QgcmVxdWVzdGVkQnVzaW5lc3NJZHMgPSBnZXRSZXF1ZXN0ZWRCdXNpbmVzc0lkcyhldmVudCk7XG4gICAgY29uc3QgYWxsb3dlZEJ1c2luZXNzSWRzID0gZ2V0QWxsb3dlZEJ1c2luZXNzSWRzKGV2ZW50KTtcbiAgICBjb25zdCBsb2NhbEJpZExpc3QgPSBbJzEnXTtcblxuICAgIC8vIGlmIHdlIGFyZSBvbiBsb2NhbCByZXR1cm4gZm9yIGFsbCBiaWRzIGluIGFjY2VzcyByaWdodHNcbiAgICBpZiAoXy5pc0VtcHR5KGFsbG93ZWRCdXNpbmVzc0lkcykgJiZcbiAgICAgICAgIV8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMnKSAmJlxuICAgICAgICAhXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpBUicpICYmXG4gICAgICAgIHByb2Nlc3MuZW52LkJVSUxEX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgIHByb2Nlc3MuZW52LkJVSUxEX0VOViAhPT0gJ3N0YWdpbmcnKSB7XG4gICAgICAgIGlmIChyZXF1ZXN0ZWRCdXNpbmVzc0lkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbEJpZExpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXy5pbnRlcnNlY3Rpb24ocmVxdWVzdGVkQnVzaW5lc3NJZHMsIGxvY2FsQmlkTGlzdCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RlZEJ1c2luZXNzSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYWxsb3dlZEJ1c2luZXNzSWRzO1xuICAgIH1cblxuICAgIHJldHVybiBfLmludGVyc2VjdGlvbihyZXF1ZXN0ZWRCdXNpbmVzc0lkcywgYWxsb3dlZEJ1c2luZXNzSWRzKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGJ1c2luZXNzSUQgc2V0IGluIGNvZ25pdG8gYXMgY3VzdG9tOkRCSS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBidXNpbmVzc0lEIHNldCBpbiBjb2duaXRvIGFzIGN1c3RvbTpEQklcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJEZWZhdWx0QmlkKGV2ZW50KSB7XG4gICAgbGV0IGpzb25Ub1BhcnNlID0gXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5jdXN0b206REJJJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpEQkknKSB8fFxuICAgICAgICAne30nO1xuXG4gICAgY29uc3QgZGJpID0gSlNPTi5wYXJzZShqc29uVG9QYXJzZSk7XG4gICAgcmV0dXJuIF8uZ2V0KGRiaSwgJ2RlZmF1bHRCaWQnLCAnJykgfHwgJzEnO1xufVxuXG4vKipcbiAqIEdldCAgcmVxdWVzdGVkIGJ1c2luZXNzSWRzIGZyb20gdGhlIHF1ZXJ5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHthcnJheX0gVGhlIGJ1c2luZXNzSUQgcmVxdWVzdGVkIGJ5IHRoZSBxdWVyeSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0UmVxdWVzdGVkQnVzaW5lc3NJZHMoZXZlbnQpIHtcbiAgICBsZXQgcmVxdWVzdGVkQnVzaW5lc3NJZHMgPSBfLmdldChldmVudCwgJ3F1ZXJ5U3RyaW5nUGFyYW1ldGVycy5idXNpbmVzc0lkcycsIG51bGwpO1xuXG4gICAgcmV0dXJuIHJlcXVlc3RlZEJ1c2luZXNzSWRzID8gcmVxdWVzdGVkQnVzaW5lc3NJZHMuc3BsaXQoJywnKSA6IFtdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgYWxsb3dlZCBidXNpbmVzc0lkcyBmb3IgYSB1c2VyIGZyb20gY29nbml0byBjdXN0b206QVIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gVGhlIGxhbWJkYSBldmVudCBwYXNzZWQgaW4gYnkgYSB2YWxpZGF0ZWQgYXBpIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7YXJyYXl9IFRoZSBidXNpbmVzc0lEIHJlcXVlc3RlZCBieSB0aGUgcXVlcnkgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEFsbG93ZWRCdXNpbmVzc0lkcyhldmVudCkge1xuICAgIGNvbnN0IGJ1c2luZXNzZXMgPSBnZXRCdXNpbmVzc2VzSW5mbyhldmVudCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGJ1c2luZXNzZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnVzaW5lc3Nlc0luZm8oZXZlbnQpIHtcbiAgICBsZXQganNvblRvUGFyc2UgPSBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLmN1c3RvbTpBUicpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jdXN0b206QVInKSB8fFxuICAgICAgICAne30nO1xuICAgIGlmIChwcm9jZXNzLmVudi5CVUlMRF9FTlYgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgY29uc3QgYXIgPSB7ICdidXNpbmVzc0lkcyc6IHsgJzEnOiAnQScgfSB9O1xuICAgICAgICByZXR1cm4gXy5nZXQoYXIsICdidXNpbmVzc0lkcycsIHt9KTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2Nlc3NSaWdodHMgPSBKU09OLnBhcnNlKGpzb25Ub1BhcnNlKTtcbiAgICByZXR1cm4gXy5nZXQoYWNjZXNzUmlnaHRzLCAnYnVzaW5lc3NJZHMnLCB7fSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtb2R1bGVzIGxpc3RlZCBpbiBjdXN0b206TU9ELlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIFRoZSBsYW1iZGEgZXZlbnQgcGFzc2VkIGluIGJ5IGEgdmFsaWRhdGVkIGFwaSByZXF1ZXN0LlxuICogQHJldHVybnMge2FycmF5fSBUaGUgTW9kdWxlIGFjY2VzcyBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2R1bGVJbmZvKGV2ZW50KSB7XG4gICAgbGV0IGpzb25Ub1BhcnNlID1cbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5jdXN0b206TU9EJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpNT0QnKSB8fFxuICAgICAgICBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLmN1c3RvbTpBUicpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jdXN0b206QVInKSB8fFxuXG4gICAgICAgICd7fSc7XG5cbiAgICBjb25zdCBtb2R1bGVSaWdodHMgPSBKU09OLnBhcnNlKGpzb25Ub1BhcnNlKTtcbiAgICByZXR1cm4gXy5nZXQobW9kdWxlUmlnaHRzLCAnbW9kdWxlJywge30pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbW9kdWxlcyBsaXN0ZWQgaW4gY3VzdG9tOk1PRC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlTmFtZSAtIEEgc3RpbmcgbmFtZSBmb3IgYSBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHthcnJheX0gVGhlIE1vZHVsZSBhY2Nlc3MgbGlzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tNb2R1bGUobW9kdWxlTmFtZSwgZXZlbnQpIHtcbiAgICBjb25zdCBtb2R1bGVSaWdodHMgPSBnZXRNb2R1bGVJbmZvKGV2ZW50KTtcbiAgICBsZXQgYWxsb3dBY2Nlc3MgPSBfLmdldChtb2R1bGVSaWdodHMsIG1vZHVsZU5hbWUsIGZhbHNlKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5CVUlMRF9FTlYgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWFsbG93QWNjZXNzKSB7XG4gICAgICAgIHRocm93IGVycm9yTGlzdC51bmF1dGhvcml6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlclJvbGVzID0ge1xuICAgIGFkbWluOiAnQScsXG4gICAgcmVhZDogJ1InLFxuICAgIHdyaXRlOiAnVydcbn07XG5cbi8qKlxuICogQHBhcmFtIHt7Ym9keTogc3RyaW5nfX0gZXZlbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGJ1c2luZXNzSWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrV3JpdGVBY2Nlc3MoZXZlbnQpIHtcbiAgICBjb25zdCBldmVudEJvZHkgPSBwYXJzZUJvZHkoZXZlbnQpO1xuICAgIGNvbnN0IGJ1c2luZXNzSWRzID0gYWNjZXNzUmlnaHRzVXRpbHMoZXZlbnQpIHx8IFtdO1xuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSBidXNpbmVzc0lkcy5maW5kKChpZCkgPT4gaWQgPT09IGV2ZW50Qm9keS5idXNpbmVzc0lkKTtcbiAgICBjb25zdCByYXcgPSBnZXRCdXNpbmVzc2VzSW5mbyhldmVudCk7XG4gICAgY29uc3QgdXNlclJpZ2h0ID0gcmF3W2J1c2luZXNzSWRdO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LkJVSUxEX0VOViA9PT0gJ2xvY2FsJykge1xuICAgICAgICByZXR1cm4gZXZlbnRCb2R5LmJ1c2luZXNzSWQ7XG4gICAgfVxuXG4gICAgaWYgKCh1c2VyUmlnaHQgIT09IHVzZXJSb2xlcy5hZG1pbiAmJiB1c2VyUmlnaHQgIT09IHVzZXJSb2xlcy53cml0ZSkgfHwgKCF1c2VyUmlnaHQpKSB7XG4gICAgICAgIHRocm93IGVycm9yTGlzdC51bmF1dGhvcml6ZWQ7XG4gICAgfVxuICAgIHJldHVybiBidXNpbmVzc0lkO1xufVxuXG4iLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IERCIGZyb20gJ3NlcXVlbGl6ZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC9tb21lbnQuanMnO1xuaW1wb3J0IHsgZXJyb3JMaXN0IH0gZnJvbSAnLi4vLi4vLi4vcmVxdWVzdFJlc29uc2UvZXJyb3JDb2Rlcy5qcyc7XG5pbXBvcnQgeyBhY2Nlc3NSaWdodHNVdGlscyB9IGZyb20gJy4vYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBzZXF1ZWxpemUgd2hlcmUgY2xhdXNlIGZyb20gcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgYW5kIGRlZmF1bHQgc29ydCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSB0aGUgcXVlcnkgcGFyYW1ldGVycyBmcm9tIHRoZSBldmVudCBwYXNzZWQgYnkgbGFtYmRhXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0RmlsdGVycyAtIHRoZSBkZWZhdWx0IGZpbHRlcnMgb2JqZWN0IGNyZWF0ZWQgYnkgY3JlYXRlRGVmYXVsdEZpbHRlcnNcbiAqIEByZXR1cm5zIHtvYmplY3R9IEFuIHNlcXVlbGl6ZSB3aGVyZSBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUZpbHRlcnMgPSBmdW5jdGlvbiAoZXZlbnQsIG9iamVjdEZpbHRlcnMpe1xuICAgIGxldCBxdWVyeSA9IF8uZ2V0KGV2ZW50LCAncXVlcnlTdHJpbmdQYXJhbWV0ZXJzJywge30pIHx8IHt9O1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IF8uZ2V0KHF1ZXJ5LCAnc3RhcnREYXRlJyk7XG4gICAgY29uc3QgZW5kRGF0ZSA9IF8uZ2V0KHF1ZXJ5LCAnZW5kRGF0ZScpO1xuICAgIGNvbnN0IHdoZXJlID0gT2JqZWN0LmtleXMocXVlcnkpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IF8uZ2V0KG9iamVjdEZpbHRlcnMsIGl0ZW0sIG51bGwpO1xuXG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1OYW1lID0gaXRlbS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICAgICAgPyBgJCR7aXRlbX0kYFxuICAgICAgICAgICAgICAgIDogaXRlbTtcblxuICAgICAgICAgICAgYWNjW2l0ZW1OYW1lXSA9IHt9O1xuICAgICAgICAgICAgaWYgKHZhbC5maWx0ZXJUeXBlID09PSBEQi5PcC5pTGlrZSkge1xuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gYCUke3F1ZXJ5W2l0ZW1dfSVgO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwuZmlsdGVyVHlwZSA9PT0gREIuT3Aub3IpIHtcbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IFstMSAqICtxdWVyeVtpdGVtXSwgK3F1ZXJ5W2l0ZW1dXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLmZpbHRlclR5cGUgPT09IERCLk9wLmluKSB7XG4gICAgICAgICAgICAgICAgYWNjW2l0ZW1OYW1lXVt2YWwuZmlsdGVyVHlwZV0gPSBxdWVyeVtpdGVtXS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwuZmlsdGVyVHlwZSA9PT0gREIuT3AuaW4pIHtcbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IHF1ZXJ5W2l0ZW1dLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZWRKc29uO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGlzIEpTT04sIHBhcnNlIGl0XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZEpzb24gPSBKU09OLnBhcnNlKHF1ZXJ5W2l0ZW1dKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGlzIG5vdCBKU09OLCBwYXNzIHRocm91Z2ggYXMgYSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSnNvbiA9IHF1ZXJ5W2l0ZW1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IHBhcnNlZEpzb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwudHlwZSA9PT0gREIuQk9PTEVBTikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSBfLmdldChxdWVyeSwgaXRlbSwgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBib29sZWFuTWFwID0ge1xuICAgICAgICAgICAgICAgICAgICAnZmFsc2UnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgJ251bGwnOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAndHJ1ZSc6IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYWNjW2l0ZW1OYW1lXVt2YWwuZmlsdGVyVHlwZV0gPSBib29sZWFuTWFwW3F1ZXJ5VmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBpZiAob2JqZWN0RmlsdGVycz8uYWN0aXZlICYmICF3aGVyZT8uYWN0aXZlKSB7XG4gICAgICAgIHdoZXJlLmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgYnVzaW5lc3NJZHMgPSBhY2Nlc3NSaWdodHNVdGlscyhldmVudCk7XG4gICAgY29uc3QgZmlsdGVyQWRkcyA9IHtcbiAgICAgICAgYnVzaW5lc3NJZDogYnVzaW5lc3NJZHNcbiAgICB9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSAmJiBlbmREYXRlKSB7XG4gICAgICAgIGNvbnN0IHMgPSBtb21lbnQudXRjKHN0YXJ0RGF0ZSk7XG4gICAgICAgIGNvbnN0IGUgPSBtb21lbnQudXRjKGVuZERhdGUpO1xuICAgICAgICBjb25zdCBkYXRlcyA9IHtcbiAgICAgICAgICAgIFtEQi5PcC5iZXR3ZWVuXTogW3MudG9EYXRlKCksIGUudG9EYXRlKCldXG4gICAgICAgIH07XG4gICAgICAgIGlmICghcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRocm93IHsgLi4uZXJyb3JMaXN0LmludmFsaWRTdGFydERhdGUgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRocm93IHsgLi4uZXJyb3JMaXN0LmludmFsaWRFbmREYXRlIH07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJBZGRzLmNyZWF0ZWRBdCA9IGRhdGVzO1xuICAgIH1cblxuICAgIGNvbnN0IHdpdGhEYXRlID0gT2JqZWN0LmFzc2lnbih3aGVyZSwgZmlsdGVyQWRkcyk7XG5cbiAgICByZXR1cm4gd2l0aERhdGU7XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBDcmVhdGUgc2VxdWVsaXplIG9yZGVyIGNsYXVzZSBmcm9tIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIGFuZCBkZWZhdWx0IHNvcnQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gdGhlIGV2ZW50IGNyZWF0ZWQgQVdTIGxhbWJkYSwgaXQgd2lsbCBjb250YWluIHF1ZXJ5U3RyaW5nUGFyYW1ldGVycyB3aXRoIHNvcnQgcHJvcGVydHkgYSBjb21tYSBzZXBlcmF0ZWQgbGlzdCBvZiBzb3J0YWJsZSBmaWVsZHMgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0RmlsdGVycyAtIHRoZSBkZWZhdWx0IGZpbHRlcnMgb2JqZWN0IGNyZWF0ZWQgYnkgY3JlYXRlRGVmYXVsdEZpbHRlcnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0RmlsdGVyIC0gQSBkZWZhdWx0IGZpbHRlciBvYmplY3QgYXMgYnVpbHQgYnkgY3JlYXRlRGVmYXVsdCBGaWx0ZXJzLCBpZiBpdGVtcyBhcmUgbm90IG9uIHRoZSBzY2hlbWEgdGhleSB3aWxsIG5vdCBiZSBpbiB0aGUgb3JkZXIgYnlcbiAqIEByZXR1cm5zIHtvYmplY3R9ICBBbiBzZXF1ZWxpemUgb3JkZXIgYnkgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTb3J0ID0gZnVuY3Rpb24gKGV2ZW50LCBkZWZhdWx0RmlsdGVyKSB7XG4gICAgbGV0IGNvcHlPZkRlZmF1bHRGaWx0ZXIgPSBfLmNsb25lKGRlZmF1bHRGaWx0ZXIpO1xuICAgIGxldCBxdWVyeSA9IF8uZ2V0KGV2ZW50LCAncXVlcnlTdHJpbmdQYXJhbWV0ZXJzJywge30pIHx8IHt9O1xuICAgIGxldCBzb3J0ID0gXy5nZXQocXVlcnksICdzb3J0JywgJy11cGRhdGVkQXQnKSB8fCAnLXVwZGF0ZWRBdCc7XG5cbiAgICByZXR1cm4gc29ydC5zcGxpdCgnLCcpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG5cbiAgICAgICAgY29uc3QgdGVzdEl0ZW0gPSBpdGVtLmluZGV4T2YoJy0nKSA9PT0gMCA/IGl0ZW0uc3Vic3RyKDEpIDogaXRlbTtcblxuICAgICAgICBpZiAoXy5nZXQoY29weU9mRGVmYXVsdEZpbHRlciwgdGVzdEl0ZW0sIG51bGwpKSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0SXRlbSA9IFtdO1xuXG4gICAgICAgICAgICB0ZXN0SXRlbS5zcGxpdCgnLicpLmZvckVhY2goKHBhcmVudENoaWxkTGlzdCkgPT4ge1xuICAgICAgICAgICAgICAgIHNvcnRJdGVtLnB1c2gocGFyZW50Q2hpbGRMaXN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaXRlbS5pbmRleE9mKCctJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzb3J0SXRlbS5wdXNoKCdERVNDJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNvcnRJdGVtLnB1c2goJ0FTQycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWNjLnB1c2goc29ydEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBEQiBmcm9tICdzZXF1ZWxpemUnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCBkZWZhdWx0IGZpbHRlcnMgZm9yIGEgZ2l2ZW4gc2VxdWVsaWF6ZSBTY2hlbWEgT2JqZWN0LCBhbmQgc2V0IG9mIHN1YiBzY2hlbWFzXG4gKlxuICogQHBhcmFtIHt7dHlwZTp7fSwgZmlsdGVyT3ZlclJpZGU6c3RyaW5nfX0gc2NoZW1hIC0gdHlwZSBpcyBzZXF1ZWxpemUgZGF0YSB0eXBlIGZpbHRlck92ZXJSaWRlIGlzIHVzZWQgdG8gb3ZlcmlkZSBkZWZhdWx0IGZpbHRlclR5cGUgaW1wbGllZCBieSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViU2NoZW1hcyAtIEFuIG9iamVjdCB3aXRoIGFsaWFzIGFzIHRoZSBrZXkgYW5kIHNlcXVlbGl6ZSBzY2hlbWEgYXMgdGhlIHZhbHVlIGh0dHA6Ly9kb2NzLnNlcXVlbGl6ZWpzLmNvbS9jbGFzcy9saWIvc2VxdWVsaXplLmpzflNlcXVlbGl6ZS5odG1sI2luc3RhbmNlLW1ldGhvZC1kZWZpbmVcbiAqIHN1YiBzY2hlbWEgY2FuIGJlIHtsb2NhdGlvbjogbG9jYXRpb25TY2hlbWF9IG9yIHtsb2NhdGlvbjoge2FzOiBcImFzQWxpYXNcIiwgc2NoZW1hOiBzY2hlbWF9fVxuICogQHJldHVybnMge29iamVjdH0gQW4gT2JqZWN0IHdpdGggYSBkZWZhdWx0IGZpbHRlciBmb3IgZWFjaCBkYXRhVHlwZSBDSEFSIGFuZCBURVhUIHdpbGwgZ2V0IGEgJGxpa2Ugb3BlcmF0b3IsIElOVEVHRVIsIERFQ0lNQUwgYW5kIEJPT0xFQU4gd2lsbCBnZXQgYSAkZXEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0RmlsdGVycyhzY2hlbWEsIHN1YlNjaGVtYXMgPSB7fSkge1xuICAgIHNjaGVtYSA9IF8uY2xvbmUoc2NoZW1hKTtcblxuICAgIGNvbnN0IGZpbHRlcnMgPSB7fTtcblxuICAgIGFkZEZpbHRlcnNGcm9tU2NoZW1hKHNjaGVtYSwgZmlsdGVycyk7XG4gICAgT2JqZWN0LmtleXMoc3ViU2NoZW1hcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGFkZEZpbHRlcnNGcm9tU2NoZW1hKHN1YlNjaGVtYXNba2V5XSwgZmlsdGVycywga2V5KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmaWx0ZXJzO1xufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyT3ZlclJpZGVUeXBlcyA9IHtcbiAgICBlcXVhbDonZXF1YWwnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRGaWx0ZXJzRnJvbVNjaGVtYShzY2hlbWEsIGFjY3VtdWxhdG9yLCBrZXlQcmVmaXggPSAnJykge1xuICAgIGNvbnN0IGFzTGlua0FsaWFzID0gXy5nZXQoc2NoZW1hLCAnYXMnLCBudWxsKTtcbiAgICBzY2hlbWEgPSBfLmdldChzY2hlbWEsICdzY2hlbWEnKSB8fCBzY2hlbWE7XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc2NoZW1hKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICBsZXQga2V5ID0gaXRlbTtcblxuICAgICAgICBpZiAoYXNMaW5rQWxpYXMpIHtcbiAgICAgICAgICAgIGFjY1thc0xpbmtBbGlhc10gPSB7IHR5cGU6IERCLlNUUklORywgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXlQcmVmaXgpIHtcbiAgICAgICAgICAgIGtleSA9IGAke2tleVByZWZpeH0uJHtpdGVtfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NoZW1hW2l0ZW1dLmZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBzY2hlbWFbaXRlbV0uZmlsdGVyVHlwZSB9O1xuXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jcmVhdGUgYSBjdXN0b20gZmlsdGVyIHRvIG92ZXJyaWRlciBkZWZhdWx0cyBpbXBsaWVkIGJ5IHRoZSBkYiB2YWx1ZVxuICAgICAgICBjb25zdCBmaWx0ZXJUeXBlT3ZlclJpZGUgPSBfLmdldChzY2hlbWEsYFske2l0ZW19XS5maWx0ZXJPdmVyUmlkZWApO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gZmlsdGVyVHlwZU92ZXJSaWRlIHx8IHNjaGVtYVtpdGVtXS50eXBlO1xuXG4gICAgICAgIC8vdG9kbyB0aGVzZSBzaG91bGQgYmUgcmVtb3ZlZCwgdGhlcmUgYXJlIGp1c3QgaGVyZSBmb3Igc29ydCB0ZXN0c1xuICAgICAgICBzd2l0Y2ggKGl0ZW1UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIERCLkNIQVI6XG4gICAgICAgICAgICBjYXNlIERCLlNUUklORzpcbiAgICAgICAgICAgIGNhc2UgREIuVEVYVDpcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3AuaUxpa2UgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBEQi5ERUNJTUFMOlxuICAgICAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5vciB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIERCLkJPT0xFQU46XG4gICAgICAgICAgICBjYXNlIERCLkJJR0lOVDpcbiAgICAgICAgICAgIGNhc2UgREIuSU5URUdFUjpcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IHsgdHlwZTogaXRlbVR5cGUsIGZpbHRlclR5cGU6IERCLk9wLmVxIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgREIuREFURTpcbiAgICAgICAgICAgIGNhc2UgREIuREFURU9OTFk6XG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLmx0IH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvL25ldyBzZXF1ZWxpemUgdXNlcyBjbGFzc2VzIGluc3RlYWQgb2Ygb2JqZWN0c1xuICAgICAgICBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5TVFJJTkcpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5pTGlrZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuREVDSU1BTCkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLm9yIH07XG4gICAgICAgIH0gIGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuSU5URUdFUikge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLm9yIH07XG4gICAgICAgIH0gICBlbHNlIGlmIChpdGVtVHlwZSBpbnN0YW5jZW9mIERCLkJJR0lOVCkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLm9yIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5CT09MRUFOKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgdHlwZTogaXRlbVR5cGUsIGZpbHRlclR5cGU6IERCLk9wLmVxIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5KU09OQikge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IHR5cGU6IGl0ZW1UeXBlLCBmaWx0ZXJUeXBlOiBEQi5PcC5jb250YWlucyB9O1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuREFURU9OTFkpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyB0eXBlOiBpdGVtVHlwZSwgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vdGhlc2UgYXJlIG5vdCBwYXJ0IG9mIHRoZSBtb2RlbHMgc28gYWRkIHRoZW0gYWx3YXlzXG4gICAgICAgIGFjY1snY3JlYXRlZEF0J10gPSB7IHR5cGU6IERCLkRBVEUsIGZpbHRlclR5cGU6IERCLk9wLmx0IH07XG4gICAgICAgIGFjY1sndXBkYXRlZEF0J10gPSB7IHR5cGU6IERCLkRBVEUsIGZpbHRlclR5cGU6IERCLk9wLmx0IH07XG4gICAgICAgIGFjY1snaWQnXSA9IHsgdHlwZTogREIuSU5URUdFUiwgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcblxuICAgICAgICAvL2ZpbHRlciBvdmVyUmlkZXNcbiAgICAgICAgaWYgKGl0ZW1UeXBlID09PSBmaWx0ZXJPdmVyUmlkZVR5cGVzLmVxdWFsKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgYWNjdW11bGF0b3IpO1xufVxuIiwiLyoqXG4gKiBjcmVhdGUgcGFnaW5hdGlvbiBvYmplY3QgZnJvbSBTZXF1ZWxpemUgZmluZEFsbFxuICogQHBhcmFtIHtvYmplY3R9IHJlc3VsdCAtIHNlcXVlbGl6ZSByZXN1bHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIG1heCBudW1iZXIgb2YgcmVzdWx0cyB0byByZXR1cm5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBwYWdlIG9mZnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnaW5hdGlvbkZyb21GaW5kQWxsKHJlc3VsdCwgbGltaXQsIG9mZnNldCkge1xuICAgIHJlc3VsdCA9IHJlc3VsdCB8fCBbXTtcbiAgICBsaW1pdCA9IGxpbWl0IHx8IDA7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBjb25zdCBoYXNNb3JlID0gcmVzdWx0Lmxlbmd0aCA+IGxpbWl0O1xuICAgIGlmIChoYXNNb3JlKSB7XG4gICAgICAgIHJlc3VsdC5zcGxpY2UoLTEsIDEpO1xuICAgIH1cbiAgICBjb25zdCBwYWdlT2JqZWN0ID0ge1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgbGltaXQ6IGxpbWl0LFxuICAgICAgICByb3dzOiByZXN1bHQsXG4gICAgICAgIGhhc01vcmU6IGhhc01vcmVcbiAgICB9O1xuXG4gICAgcmV0dXJuIHBhZ2VPYmplY3Q7XG59XG5cbi8qKlxuICogd3JhcHBlciBmb3IgU2VxdWVsaXplIGZpbmRBbGxcbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIGluc3RhbmNlIG9mIFNlcXVlbGl6ZSAobXVzdCBiZSBpbml0aWFsaXplZClcbiAqIEBwYXJhbSB7KiZ7aW5jbHVkZTogW3ttb2RlbDogKn1dLCB3aGVyZToge2J1c2luZXNzSWQ6IEFycmF5fSwgb3JkZXI6IFtzdHJpbmdbXV19fSBvcHRpb25zIC0gaW5zdGFuY2Ugb2YgU2VxdWVsaXplIChtdXN0IGJlIGluaXRpYWxpemVkKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZEFsbChtb2RlbCwgb3B0aW9ucykge1xuXG4gICAgY29uc3QgbGltaXQgPSBvcHRpb25zLmxpbWl0IHx8IDA7XG4gICAgY29uc3QgZmluZEFyZ3MgPSBPYmplY3QuYXNzaWduKHtpbmNsdWRlOiB7IGFsbDogdHJ1ZSwgbmVzdGVkOiB0cnVlIH19LCBvcHRpb25zLCB7IGxpbWl0OiBsaW1pdCArIDEgfSk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IG1vZGVsLmZpbmRBbGwoZmluZEFyZ3MpO1xuICAgIHJldHVybiBnZXRQYWdpbmF0aW9uRnJvbUZpbmRBbGwocmVzdWx0cywgbGltaXQsIG9wdGlvbnMub2Zmc2V0KTtcbn1cblxuY29uc3QgZmluZFV0aWxzID0ge1xuICAgIGZpbmRBbGxcbn07XG5leHBvcnQgZGVmYXVsdCBmaW5kVXRpbHM7IiwiaW1wb3J0IHsgRHluYW1vREJEb2N1bWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2xpYi1keW5hbW9kYic7XHJcbmltcG9ydCB7IER5bmFtb0RCIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiJztcclxuXHJcbmNvbnN0IGR5bmFtb1V0aWwgPSB7XHJcbiAgICBnZXQ6IChwYXJhbXMpID0+IGdldChwYXJhbXMpXHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHt7VGFibGVOYW1lOnN0cmluZywgS2V5OntrZXk6c3RyaW5nfX19IHBhcmFtc1xyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gZ2V0KHBhcmFtcykge1xyXG4gICAgY29uc3QgZHluYW1vRGIgPSBEeW5hbW9EQkRvY3VtZW50LmZyb20obmV3IER5bmFtb0RCKCkpO1xyXG4gICAgcmV0dXJuIGR5bmFtb0RiLmdldChwYXJhbXMpO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBkeW5hbW9VdGlsOyIsImltcG9ydCB7IGhhbmRsZUZpbGUgfSBmcm9tICcuL2hhbmRsZUZpbGUuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9taXNlIGZyb20gJ2JsdWViaXJkJztcblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUV2ZW50cyhldmVudCwgdHJhbnNmb3JtZXIsIGVycm9ySGFuZGxlclBlckZpbGUsIHNob3VsZFNraXBGYWlsZWRGb2xkZXJzID0gZmFsc2UsIHVzZXJJbXBvcnRUeXBlcykge1xuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LlJlY29yZHMpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGxldCBoYXNFcnJvcnMgPSBmYWxzZTtcblxuICAgIHJldHVybiBQcm9taXNlLm1hcChldmVudC5SZWNvcmRzLCAocmVjb3JkKSA9PiB7XG4gICAgICAgIGNvbnN0IHNuc0luZm8gPSBKU09OLnBhcnNlKF8uZ2V0KHJlY29yZCwgJ1Nucy5NZXNzYWdlJywgJ3t9JykpO1xuICAgICAgICBjb25zdCBzM0J1Y2tldCA9IHNuc0luZm8uYnVja2V0O1xuICAgICAgICBjb25zdCBmaWxlcyA9IHNuc0luZm8uZmlsZXMgfHwgW107XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UubWFwKGZpbGVzLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhdGggPSBkZWNvZGVVUklDb21wb25lbnQoZmlsZSk7XG4gICAgICAgICAgICBpZiAocGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVGaWxlKHBhdGgsIHMzQnVja2V0LCB0cmFuc2Zvcm1lciwgeyBzaG91bGRTa2lwRmFpbGVkRm9sZGVycywgdXNlckltcG9ydFR5cGVzIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ySGFuZGxlclBlckZpbGUgJiYgIWVycm9ySGFuZGxlclBlckZpbGUoZXJyLCBwYXRoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKGhhc0Vycm9ycykge1xuICAgICAgICAgICAgdGhyb3cgJ0Vycm9ycyBwcm9jZXNzaW5nIG9uZSBvciBtb3JlIGZpbGVzLiBTZWUgZXJyb3IgbG9ncyBmb3IgZGV0YWlsIG9uIGVhY2ggZXJyb3IuJztcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBTM1V0aWwgZnJvbSAnLi4vczMvUzNVdGlscy5qcy9TM1V0aWxzLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUZpbGUocGF0aCwgczNCdWNrZXQsIHRyYW5zZm9ybWVyLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMgPSBfLmdldChvcHRpb25zLCAnc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMnKTtcbiAgICBjb25zdCB1c2VySW1wb3J0VHlwZXMgPSBfLmdldChvcHRpb25zLCAndXNlckltcG9ydFR5cGVzJyk7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBCdWNrZXQ6IHMzQnVja2V0LFxuICAgICAgICBLZXk6IHBhdGhcbiAgICB9O1xuICAgIGxldCBib2R5ID0gJ3t9J1xuICAgIHRyeSB7XG4gICAgICAgIGJvZHkgPSBhd2FpdCBTM1V0aWwuZ2V0T2JqZWN0KHBhcmFtcyk7XG4gICAgICAgIGNvbnN0IHBhcnNlZEJvZHkgPSBKU09OLnBhcnNlKGJvZHkpO1xuICAgICAgICBjb25zdCByZXR1cm5lZFZhbHVlID0gYXdhaXQgdHJhbnNmb3JtZXIocGFyc2VkQm9keSk7XG4gICAgICAgIGF3YWl0IFMzVXRpbC5kZWxldGVPYmplY3QocGFyYW1zKTtcblxuICAgICAgICByZXR1cm4gcmV0dXJuZWRWYWx1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdoYW5kbGUtZmlsZS1lcnJvcicsIGVycm9yKTtcblxuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ05vU3VjaEtleScgfHwgIWJvZHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBuZXdQYXRoID0gJyc7XG5cbiAgICAgICAgaWYgKHVzZXJJbXBvcnRUeXBlcykge1xuICAgICAgICAgICAgLy8gbG9vayBmb3IgaXRlbXMgaW4gdGhlIHVzZXJJbXBvcnRUeXBlc1xuICAgICAgICAgICAgY29uc3QgdXNlcnNJbXBvcnRzID0gT2JqZWN0LnZhbHVlcyh1c2VySW1wb3J0VHlwZXMpO1xuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IF8ubGFzdChpdGVtcyk7XG4gICAgICAgICAgICBjb25zdCBmb2xkZXJOYW1lID0gXy5maXJzdChpdGVtcyk7XG5cbiAgICAgICAgICAgIGlmICh1c2Vyc0ltcG9ydHMuaW5kZXhPZihmb2xkZXJOYW1lKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFNraXBGYWlsZWRGb2xkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BhdGggPSBgJHtmb2xkZXJOYW1lfS9lcnJvci8ke2ZpbGVOYW1lfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfLnN0YXJ0c1dpdGgocGF0aCwgYCR7Zm9sZGVyTmFtZX0vZmFpbGVkLW9uY2UvYCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UGF0aCA9IF8ucmVwbGFjZShwYXRoLCBgJHtmb2xkZXJOYW1lfS9mYWlsZWQtb25jZS9gLCBgJHtmb2xkZXJOYW1lfS9mYWlsZWQtdHdpY2UvYCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfLnN0YXJ0c1dpdGgocGF0aCwgYCR7Zm9sZGVyTmFtZX0vZmFpbGVkLXR3aWNlL2ApKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BhdGggPSBfLnJlcGxhY2UocGF0aCwgYCR7Zm9sZGVyTmFtZX0vZmFpbGVkLXR3aWNlL2AsIGAke2ZvbGRlck5hbWV9L2Vycm9yL2ApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BhdGggPSBgJHtmb2xkZXJOYW1lfS9mYWlsZWQtb25jZS8ke2ZpbGVOYW1lfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdQYXRoID0gYHBhdGhBbmRFdmVudE1pc01hdGNoRXJyb3IvJHtwYXRofWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTa2lwRmFpbGVkRm9sZGVycykge1xuICAgICAgICAgICAgICAgIG5ld1BhdGggPSBgZXJyb3IvJHtwYXRofWA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF8uc3RhcnRzV2l0aChwYXRoLCAnZmFpbGVkLW9uY2UvJykpIHtcbiAgICAgICAgICAgICAgICBuZXdQYXRoID0gXy5yZXBsYWNlKHBhdGgsICdmYWlsZWQtb25jZS8nLCAnZmFpbGVkLXR3aWNlLycpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfLnN0YXJ0c1dpdGgocGF0aCwgJ2ZhaWxlZC10d2ljZS8nKSkge1xuICAgICAgICAgICAgICAgIG5ld1BhdGggPSBfLnJlcGxhY2UocGF0aCwgJ2ZhaWxlZC10d2ljZS8nLCAnZXJyb3IvJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKHBhdGgsICdkZWxheVVudGlsLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSBfLmxhc3QocGF0aC5zcGxpdCgnLycpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuZXdQYXRoID0gYGZhaWxlZC1vbmNlLyR7cGF0aH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3UGFyYW1zID0ge1xuICAgICAgICAgICAgQnVja2V0OiBzM0J1Y2tldCxcbiAgICAgICAgICAgIEtleTogbmV3UGF0aCxcbiAgICAgICAgICAgIEJvZHk6IGJvZHlcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBTM1V0aWwucHV0T2JqZWN0KG5ld1BhcmFtcyk7XG4gICAgICAgIGF3YWl0IFMzVXRpbC5kZWxldGVPYmplY3QocGFyYW1zKTtcblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59XG4iLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IFMzVXRpbHMgZnJvbSAnLi4vczMvUzNVdGlscy5qcy9TM1V0aWxzLmpzJztcbmltcG9ydCBTTlNVdGlsIGZyb20gJy4uL3Nucy9TTlNVdGlscy5qcyc7XG5pbXBvcnQgZHluYW1vVXRpbCBmcm9tICcuLi9keW5hbW8vZHluYW1vVXRpbHMuanMnO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBidWNrZXRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhLZXlzXG4gKiBAcGFyYW0ge09iamVjdH0gdXNlckltcG9ydFR5cGVzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb29wKGJ1Y2tldCwgbWF4S2V5cywgdXNlckltcG9ydFR5cGVzKSB7XG4gICAgbGV0IGJ1Y2tldFJlc3VsdCA9IHt9O1xuICAgIGxldCBmaWxlTGlzdCA9IFtdO1xuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBtb21lbnQoKTtcblxuICAgIGRvIHtcbiAgICAgICAgYnVja2V0UmVzdWx0ID0gYXdhaXQgUzNVdGlscy5saXN0T2JqZWN0c1YyKHtcbiAgICAgICAgICAgIEJ1Y2tldDogYnVja2V0LFxuICAgICAgICAgICAgTWF4S2V5czogbWF4S2V5cyxcbiAgICAgICAgICAgIENvbnRpbnVhdGlvblRva2VuOiBfLmdldChidWNrZXRSZXN1bHQsICdOZXh0Q29udGludWF0aW9uVG9rZW4nKVxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgbmV3RmlsZXMgPSBfLmZpbHRlcihidWNrZXRSZXN1bHQuQ29udGVudHMsIChmaWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoXy5zdGFydHNXaXRoKF8uZ2V0KGZpbGUsICdLZXknKSwgJ2RlbGF5VW50aWwvJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRGVsYXlUaW1lID0gXy5nZXQoZmlsZSwgJ0tleScpLnNwbGl0KCcvJylbMV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbWVudChmaWxlRGVsYXlUaW1lLCAnWVlZWU1NRERISG1tJykuaXNTYW1lT3JCZWZvcmUoY3VycmVudFRpbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVzZXJJbXBvcnRUeXBlcykge1xuICAgICAgICAgICAgICAgIC8vIGxvb2sgZm9yIGl0ZW1zIGluIHRoZSB1c2VySW1wb3J0VHlwZXNcbiAgICAgICAgICAgICAgICBjb25zdCB1c2Vyc0ltcG9ydHMgPSBPYmplY3QudmFsdWVzKHVzZXJJbXBvcnRUeXBlcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBmaWxlLktleS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gXy5sYXN0KGl0ZW1zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb2xkZXJOYW1lID0gXy5maXJzdChpdGVtcyk7XG4gICAgICAgICAgICAgICAgaWYgKF8uaXNFbXB0eShmaWxlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1c2Vyc0ltcG9ydHMuaW5kZXhPZihmb2xkZXJOYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAhXy5zdGFydHNXaXRoKGZpbGUuS2V5LCBgJHtmb2xkZXJOYW1lfS9lcnJvcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICFfLnN0YXJ0c1dpdGgoZmlsZS5LZXksICdlcnJvcicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmaWxlTGlzdCA9IF8uY29uY2F0KGZpbGVMaXN0LCBuZXdGaWxlcyk7XG4gICAgfSB3aGlsZSAoYnVja2V0UmVzdWx0LklzVHJ1bmNhdGVkICYmIGJ1Y2tldFJlc3VsdC5OZXh0Q29udGludWF0aW9uVG9rZW4gJiYgZmlsZUxpc3QubGVuZ3RoIDwgbWF4S2V5cyk7XG5cbiAgICByZXR1cm4gZmlsZUxpc3Q7XG59XG5cbi8qKlxuICogUHVibGlzaGVkIFNOUyBldmVudHMgYXQgYSBzdGVhZHkgcGFjZSBmb3IgZGF0YSBpbiBhIHBhcnRpY3VsYXIgYnVja2V0LiBTaG91bGQgYmUgZXhlY3V0ZWQgdmlhIGEgY2xvdWQgd2F0Y2ggY3JvbiBqb2IgYXMgYSBwYXJ0IG9mIGEgbWljcm8gc2VydmljZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWdUYWJsZSAtIFRoZSBEeW5hbW8gREIgdGFibGUgd2hlcmUgdG8gZ2V0IHRoZSBjaHVuay1zaXplIGFuZCBtYXhNZXNzYWdlIHNpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZUtleSAtIFRoZSBrZXkgdG8gdGhlIGl0ZW0gaW4gdGhlIER5bmFtbyBEQiB0YWJsZSB0aGF0IGhvbGRzIHRoZSBjaHVuay1zaXplIGFuZCBtYXhNZXNzYWdlIHNpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBidWNrZXQgLSBUaGUgbmFtZSBvZiB0aGUgczMgYnVja2V0IHRvIHdhdGNoLCB3aGVuIHlvdSBkcm9wIGl0ZW1zIGludG8gdGhpcyB0YWJsZSBldmVudHMgd2lsbCBiZSBjcmVhdGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gc25zVG9waWMgLSBUaGUgbmFtZSBvZiB0aGUgc25zRXZlbnQgdG8gcHVibGlzaFxuICogQHBhcmFtIHtvYmplY3R9IHVzZXJJbXBvcnRUeXBlcyAtIGltcG9ydCB0eXBlcyB0byBmaWx0ZXIgb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1Ymxpc2hFdmVudHMoY29uZmlnVGFibGUsIHRhYmxlS2V5LCBidWNrZXQsIHNuc1RvcGljLCB1c2VySW1wb3J0VHlwZXMpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGR5bmFtb1V0aWwuZ2V0KHtcbiAgICAgICAgICAgIFRhYmxlTmFtZTogY29uZmlnVGFibGUsXG4gICAgICAgICAgICBLZXk6IHsga2V5OiB0YWJsZUtleSB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQ2Fubm90IGdldCBjb25maWcgZm9yIGtleTogJHt0YWJsZUtleX0gdGFibGU6ICR7Y29uZmlnVGFibGV9IGZhbGxpbmcgYmFjayB0byBkZWZhdWx0cyBvZiAyIGFuZCAxMGAsIGUpO1xuICAgIH1cbiAgICBsZXQgY2h1bmtTaXplID0gXy5nZXQocmVzdWx0LCAnSXRlbS5zbnNDaHVua1NpemUnLCAyKTtcbiAgICBsZXQgbWF4TWVzc2FnZXMgPSBfLmdldChyZXN1bHQsICdJdGVtLnNuc01heE1lc3NhZ2VzJywgMTApO1xuXG4gICAgY29uc3Qgc25zQ3JlYXRlVG9waWNSZXNwb25zZSA9IGF3YWl0IFNOU1V0aWwuY3JlYXRlVG9waWMoeyBOYW1lOiBzbnNUb3BpYyB9KTtcbiAgICBjb25zdCB0b3BpY0FybiA9IHNuc0NyZWF0ZVRvcGljUmVzcG9uc2UuVG9waWNBcm47XG4gICAgY29uc3QgbWF4S2V5cyA9IGNodW5rU2l6ZSAqIG1heE1lc3NhZ2VzO1xuXG4gICAgY29uc3QgZmlsZUxpc3QgPSBhd2FpdCBsb29wKGJ1Y2tldCwgbWF4S2V5cywgdXNlckltcG9ydFR5cGVzKTtcblxuICAgIGNvbnN0IG1lc3NhZ2VMaXN0ID0gXy5jaGFpbihmaWxlTGlzdClcbiAgICAgICAgLm1hcCgnS2V5JylcbiAgICAgICAgLmNodW5rKGNodW5rU2l6ZSlcbiAgICAgICAgLnNsaWNlKDAsIG1heE1lc3NhZ2VzKVxuICAgICAgICAudmFsdWUoKVxuICAgIDtcblxuICAgIHJldHVybiBQcm9taXNlLm1hcChtZXNzYWdlTGlzdCwgKGZpbGVzKSA9PiB7XG4gICAgICAgIHJldHVybiBTTlNVdGlsLnB1Ymxpc2goe1xuICAgICAgICAgICAgTWVzc2FnZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGJ1Y2tldDogYnVja2V0LFxuICAgICAgICAgICAgICAgIGZpbGVzOiBmaWxlc1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBUb3BpY0FybjogdG9waWNBcm5cbiAgICAgICAgfSk7XG4gICAgfSk7XG59IiwiaW1wb3J0IHsgcHVibGlzaEV2ZW50cyB9IGZyb20gJy4vcHVibGlzaEV2ZW50cy5qcyc7XG5pbXBvcnQgeyBoYW5kbGVFdmVudHMgfSBmcm9tICcuL2hhbmRsZUV2ZW50cy5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIGJ1Y2tldCB3YXRjaGVyIHdhdGNoZXMgYSBzMyBidWNrZXQgYW5kIHB1Ymxpc2hlcyBldmVudHMgdG8gYSBzbnMgdG9waWMsIHRoaXMgYWxsb3dzIHlvdSB0byBwcm9jZXNzIGZpbGVzIGluIHMzIHdpdGggYSBzb21lIHRyYW5zZm9ybWVyIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB3YXRjaEJ1Y2tldCwgc2VlIGJlbG93XG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1zLmV2ZW50IC0gVGhlIGV2ZW50IG9mIHRoZSBsYW1iZGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuZHluYW1vQ29uZmlnVGFibGUgLSBUaGUgRHluYW1vIERCIHRhYmxlIHdoZXJlIHRvIGdldCB0aGUgY2h1bmtTaXplIGFuZCBtYXhNZXNzYWdlIHNpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuZHluYW1vQ29uZmlnS2V5IC0gVGhlIGtleSB0byB0aGUgaXRlbSBpbiB0aGUgRHluYW1vIERCIHRhYmxlIHRoYXQgaG9sZHMgdGhlIGNodW5rU2l6ZSBhbmQgbWF4TWVzc2FnZSBzaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnMzQnVja2V0IC0gVGhlIG5hbWUgb2YgdGhlIHMzIGJ1Y2tldCB0byB3YXRjaCwgd2hlbiB5b3UgZHJvcCBpdGVtcyBpbnRvIHRoaXMgdGFibGUgZXZlbnRzIHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5zbnNUb3BpYyAtIFRoZSBuYW1lIG9mIHRoZSBzbnNFdmVudCB0byBwdWJsaXNoXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbXMudHJhbnNmb3JtZXIgLSB0aGUgZnVuY3Rpb24gdG8gcnVuIG9uIGVhY2ggZmlsZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW3BhcmFtcy5lcnJvckhhbmRsZXJQZXJGaWxlXSAtIHRoZSBmdW5jdGlvbiB0byBydW4gb24gYXMgYSBjYXRjaCBvbiBlYWNoIGZpbGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BhcmFtcy5zaG91bGRTa2lwRmFpbGVkRm9sZGVyc10gLSB3aGV0aGVyIHRvIHVzZSB0aGUgZmFpbGVkLW9uY2UsIGZhaWxlZC10d2ljZSwgZXJyb3Igb3IganVzdCBlcnJvciBmb2xkZXJzXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtcy51c2VySW1wb3J0VHlwZXNdIC0gdXNlciBpbXBvcnQgc3ViIGRpcmVjdG9yaWVzIG9iamVjdCBtYXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoQnVja2V0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtb0NvbmZpZ1RhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbW9Db25maWdLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzQnVja2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbnNUb3BpYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlclBlckZpbGUgPSBfLm5vb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFNraXBGYWlsZWRGb2xkZXJzID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbXBvcnRUeXBlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHtcbiAgICBpZiAoIWV2ZW50IHx8ICFkeW5hbW9Db25maWdUYWJsZSB8fCAhZHluYW1vQ29uZmlnS2V5IHx8ICFzM0J1Y2tldCB8fCAhc25zVG9waWMgfHwgIXRyYW5zZm9ybWVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXJzLiBOZWVkIGV2ZW50LCBkeW5hbW9Db25maWdUYWJsZSwgZHluYW1vQ29uZmlnS2V5LCBzM0J1Y2tldCwgc25zVG9waWMsIHRyYW5zZm9ybWVyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgRXZlbnRTb3VyY2UgPSBfLmdldChldmVudCwgJ1JlY29yZHNbMF0uRXZlbnRTb3VyY2UnKTtcbiAgICBpZiAoXy5pc0VxdWFsKEV2ZW50U291cmNlLCAnYXdzOnNucycpKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVFdmVudHMoZXZlbnQsIHRyYW5zZm9ybWVyLCBlcnJvckhhbmRsZXJQZXJGaWxlLCBzaG91bGRTa2lwRmFpbGVkRm9sZGVycywgdXNlckltcG9ydFR5cGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgcnVuIGZyb20gdGhlIGNyb24gam9iIHNvIHB1Ymxpc2ggU05TIGV2ZW50c1xuICAgICAgICByZXR1cm4gcHVibGlzaEV2ZW50cyhkeW5hbW9Db25maWdUYWJsZSwgZHluYW1vQ29uZmlnS2V5LCBzM0J1Y2tldCwgc25zVG9waWMsIHVzZXJJbXBvcnRUeXBlcyk7XG4gICAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IGVycm9yTGlzdCA9IHtcbiAgICBpbnZhbGlkSW52ZW50b3J5UmVsZWFzZVJlcXVlc3Q6IHtcbiAgICAgICAgbWVzc2FnZTogJ05PVCBFTk9VR0ggSU5WRU5UT1JZIFRPIEZVTEZJTEwgUkVMRUFTRScsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTAnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGFscmVhZHlSZWxlYXNlZDoge1xuICAgICAgICBtZXNzYWdlOiAnQUxSRUFEWSBSRUxFQVNFRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTEnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGFscmVhZHlSZWNlaXZlZDoge1xuICAgICAgICBtZXNzYWdlOiAnUkVDRUlWQUJMRSBBTFJFQURZIFJFQ0VJVkVEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxMicsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZEl0ZW1zUmVxdWVzdDoge1xuICAgICAgICBtZXNzYWdlOiAnVkFMSUQgSVRFTVMgTVVTVCBCRSBJTkNMVURFRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTMnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRJRDoge1xuICAgICAgICBtZXNzYWdlOiAnSUQgaXMgaW52YWxpZCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTQnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRSZWNlaXZhYmxlOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdNVVNUIENPTlRBSU4gQVQgTEVBU1QgT05FIFJFQ0VJVkFCTEUnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDE1JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkUmVxdWVzdDoge1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBSRVFVRVNUIERBVEEnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDE2JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkQVBJS2V5OiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIFJFUVVFU1QgLSBBUEkgTUFZIEtFWSBJTlZBTElEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxNycsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgcWJDcmVhdGlvbkVycm9yOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdRVUlDS0JPT0tTIEVSUk9SIC0gRVJST1IgQ1JFQVRJTkcgT0JKRUNUIElOIFFVSUNLQk9PS1MnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDE4JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBjYW5ub3RSZW9wZW46IHtcbiAgICAgICAgbWVzc2FnZTogJ0NBTk5PVCBSRU9QRU4gLSBUSEUgT1JERVIgSEFTIEFMUkVBRFkgQkVFTiBPUEVORUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDE4JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkRGF0ZUZvcm1hdDoge1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBEQVRFIEZPUk1BVCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTknLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRTdGFydERhdGU6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgU1RBUlQgREFURScsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjAnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRFbmREYXRlOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIEVORCBEQVRFJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyMScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZE9yZGVyU3RhdHVzOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdVTkFCTEUgVE8gRURJVCBPUkRFUiBJVEVNUyBVTkxFU1MgVEhFIE9SREVSIElTIElOIEVTVElNQVRFIFNUQVRVUycsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjInLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRQYXltZW50U3RhdHVzOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdVTkFCTEUgVE8gVVBEQVRFIFBBWU1FTlQgU1RBVFVTIFBBWU1FTlQgTVVTVCBCRSBPUEVOJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyMycsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFJlbGVhc2VTdGF0dXM6IHtcbiAgICAgICAgbWVzc2FnZTogJ1VOQUJMRSBUTyBVUERBVEUgUkVMRUFTRSwgU1RBVFVTIFJFTEVBU0UgTVVTVCBCRSBPUEVOJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyNCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFJlY2VpdmFibGVTdGF0dXM6IHtcbiAgICAgICAgbWVzc2FnZTogJ1VOQUJMRSBUTyBVUERBVEUgUkVDRUlWQUJMRSwgU1RBVFVTIFJFQ0VJVkFCTEUgTVVTVCBCRSBPUEVOJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAwMjUnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRKc29uOntcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgSlNPTicsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMDUnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRGaWx0ZXI6e1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBGSUxURVInLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDI2JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkVXNlck5hbWVVcGRhdGU6e1xuICAgICAgICBtZXNzYWdlOiAnVU5BQkxFIFRPIFVQREFURSBVU0VSTkFNRScsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjcnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGltYWdlU2l6ZUxpbWl0OntcbiAgICAgICAgbWVzc2FnZTogJ0lNQUdFIFNJWkUgTElNSVQgMTAwS0IgRVhDRUVERUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDI4JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICB1bmF1dGhvcml6ZWQ6e1xuICAgICAgICBtZXNzYWdlOiAnVU5BVVRIT1JJWkVEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDExMScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMVxuICAgIH0sXG4gICAgbm90Rm91bmQ6e1xuICAgICAgICBtZXNzYWdlOiAnSVRFTSBOT1QgRk9VTkQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDA0JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDA0XG4gICAgfSxcbiAgICBlbWFpbFJlcXVpcmVkOntcbiAgICAgICAgbWVzc2FnZTogJ05PIEVNQUlMIFBST1ZJREVELCBDSEVDSyBDVVNUT01FUiBFTUFJTCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMDQnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDRcbiAgICB9LFxuICAgIG1vYmlsZVBob25lUmVxdWlyZWQ6e1xuICAgICAgICBtZXNzYWdlOiAnTk8gTU9CSUxFIFBIT05FIFBST1ZJREVELCBDSEVDSyBDVVNUT01FUiBDT05UQUNUUycsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMDQnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDRcbiAgICB9LFxuICAgIGludmFsaWRDYWRlbmNlVHlwZToge1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBDQURFTkNFIFRZUEUnLFxuICAgICAgICBlcnJvckNvZGU6ICc1MDAxJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNTAwXG4gICAgfSxcbn07IiwiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGVycm9yTGlzdCB9IGZyb20gJy4vZXJyb3JDb2Rlcy5qcyc7XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGJvZHlcbiAqIEBwYXJhbSB7e319IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Y2Nlc3MoYm9keSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRiQ2xvc2UgPSBfLmdldChvcHRpb25zLCAnZGJDbG9zZScsIF8ubm9vcCk7XG4gICAgZGJDbG9zZSgpO1xuXG4gICAgcmV0dXJuIGJ1aWxkUmVzcG9uc2UoMjAwLCBib2R5KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICogQHBhcmFtIHt7ZGJDbG9zZTpmdW5jdGlvbnx1bmRlZmluZWR9fSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzSHRtbChodG1sLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGJDbG9zZSA9IF8uZ2V0KG9wdGlvbnMsICdkYkNsb3NlJywgXy5ub29wKTtcblxuICAgIGRiQ2xvc2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC9odG1sJyxcbiAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiAnKicsXG4gICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IGh0bWxcbiAgICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICogQHJldHVybnMgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IF8uZ2V0KGV2ZW50LCAncmVxdWVzdC51c2VyQXR0cmlidXRlcycpO1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXNbJ2NvZ25pdG86ZW1haWxfYWxpYXMnXSB8fCAnVU5LTk9XTiBVU0VSJztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHVzZXIgaW5mb3JtYXRpb24gZnJvbSB0aGUgZXZlbnQgb2JqZWN0XG4gKlxuICogQHBhcmFtIGV2ZW50IHtPYmplY3R9IGFuIGV2ZW50IG9iamVjdFxuICogQHJldHVybnMge3t1c2VybmFtZTogc3RyaW5nLCBpZDogbnVtYmVyfX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRVc2VyKGV2ZW50KSB7XG4gICAgbGV0IGpzb25Ub1BhcnNlID0gXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5jdXN0b206VUlEJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpVSUQnKSB8fFxuICAgICAgICAnMCc7XG5cbiAgICBjb25zdCBpZCA9IEpTT04ucGFyc2UoanNvblRvUGFyc2UpO1xuXG4gICAgY29uc3QgdXNlcm5hbWUgPSBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLmVtYWlsJykgfHwgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmVtYWlsJykgfHwgJ0xPQ0FMIFRFU1QgVVNFUic7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgaWRcbiAgICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZhaWx1cmUgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0gYm9keSB7T2JqZWN0fSBhbiBldmVudCBvYmplY3RcbiAqIEBwYXJhbSBvcHRpb25zIHtPYmplY3R9IGFuIG9wdGlvbnMgb2JqZWN0XG4gKiBAcmV0dXJucyB7e3N0YXR1c0NvZGU6bnVtYmVyLCBoZWFkZXJzOm9iamVjdCwgYm9keTpzdHJpbmd9fSBhIHJlc3BvbnNlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFpbHVyZShib2R5ID0ge30sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYkNsb3NlID0gXy5nZXQob3B0aW9ucywgJ2RiQ2xvc2UnLCBfLm5vb3ApO1xuICAgIGRiQ2xvc2UoKTtcbiAgICBsZXQgY2xlYW5lZEVycm9yQm9keTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5VVElMX0xPRyA9PT0gJ0xPR19BTEwnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJy0tLS0tLS0+VVRJTCBFUlJPUjonLCBib2R5KTtcbiAgICB9XG5cbiAgICBjb25zdCBOT1JNQUxfRVJST1IgPSB7IHN0YXR1c0NvZGU6IDUwMCwgZXJyb3JDb2RlOiAnNVhYJywgbWVzc2FnZTogJ0lOVEVSTkFMIFVUSUwgRVJST1InIH07XG4gICAgY2xlYW5lZEVycm9yQm9keSA9IGJvZHk7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKGJvZHkuZGV0YWlscykpIHtcbiAgICAgICAgY2xlYW5lZEVycm9yQm9keSA9IGRldGVjdEpveUVycm9yKGJvZHkpO1xuICAgIH0gZWxzZSBpZiAoXy5pc1VuZGVmaW5lZChib2R5LmVycm9yQ29kZSkgfHwgXy5pc1VuZGVmaW5lZChib2R5LnN0YXR1c0NvZGUpKSB7XG4gICAgICAgIGNsZWFuZWRFcnJvckJvZHkgPSBkZXRlY3RTZXF1ZWxpemVFcnJvcihib2R5KTtcbiAgICB9XG4gICAgaWYoXy5nZXQoYm9keSwgJ3Jlc3BvbnNlLmRhdGEubWVzc2FnZScpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJy0tLS0tLS0+VVRJTCBFUlJPUjogJytfLmdldChib2R5LCAncmVzcG9uc2UuZGF0YS5tZXNzYWdlJykpXG4gICAgfVxuXG4gICAgY29uc3QgbmV3Qm9keSA9IF8ubWVyZ2UoTk9STUFMX0VSUk9SLCBjbGVhbmVkRXJyb3JCb2R5KTtcblxuICAgIHJldHVybiBidWlsZFJlc3BvbnNlKG5ld0JvZHkuc3RhdHVzQ29kZSwgbmV3Qm9keSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZmFpbHVyZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gc3RhdHVzQ29kZSB7TnVtYmVyfSBhIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0gYm9keSB7T2JqZWN0fSBhbiBldmVudCBvYmplY3RcbiAqIEByZXR1cm5zIHt7c3RhdHVzQ29kZTpudW1iZXIsIGhlYWRlcnM6b2JqZWN0LCBib2R5OnN0cmluZ319IGEgcmVzcG9uc2Ugb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkUmVzcG9uc2Uoc3RhdHVzQ29kZSwgYm9keSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiAnKicsXG4gICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpXG4gICAgfTtcbn1cblxuLyoqXG4gKiBwYXJzZSB0aGUgYm9keSBvZiB0aGUgZXZlbnQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHJlcXVlc3RFdmVudCB7e2JvZHk6c3RyaW5nfX0gYW4gZXZlbnQgb2JqZWN0XG4gKiBAcmV0dXJucyBldmVudCB7Kn0gdGhlIGpzb24gb2JqZWN0IG9mIHRoZSBib2R5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJvZHkocmVxdWVzdEV2ZW50KSB7XG5cbiAgICBsZXQgZXZlbnRCb2R5ID0ge307XG4gICAgaWYgKF8uaXNTdHJpbmcocmVxdWVzdEV2ZW50LmJvZHkpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBldmVudEJvZHkgPSBKU09OLnBhcnNlKHJlcXVlc3RFdmVudC5ib2R5KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSW52YWxpZCBKU09OXG4gICAgICAgICAgICBldmVudEJvZHkgPSBudWxsO1xuXG4gICAgICAgICAgICB0aHJvdyBlcnJvckxpc3QuaW52YWxpZEpzb247XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3QocmVxdWVzdEV2ZW50LmJvZHkpKSB7XG4gICAgICAgIGV2ZW50Qm9keSA9IHJlcXVlc3RFdmVudC5ib2R5O1xuICAgIH1cblxuICAgIHJldHVybiBldmVudEJvZHk7XG59XG5cbi8qKlxuICogcGFyc2UgdGhlIGJvZHkgb2YgdGhlIGV2ZW50IG9iamVjdFxuICpcbiAqIEBwYXJhbSByZXF1ZXN0RXZlbnQge3N0cmluZ3xvYmplY3R9IGFuIGV2ZW50IG9iamVjdFxuICogQHBhcmFtIFtjYWxsYmFja10ge2Z1bmN0aW9ufSB1bmRlZmluZWQgYSBjYWxsIGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIGV2ZW50IHsqfSB0aGUganNvbiBvYmplY3Qgb2YgdGhlIGJvZHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRXZlbnQocmVxdWVzdEV2ZW50LCBjYWxsYmFjaykge1xuICAgIGxldCBldmVudCA9IHt9O1xuICAgIGlmIChfLmlzU3RyaW5nKHJlcXVlc3RFdmVudCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGV2ZW50ID0gSlNPTi5wYXJzZShyZXF1ZXN0RXZlbnQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBJbnZhbGlkIEpTT05cbiAgICAgICAgICAgIGV2ZW50ID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soRXJyb3IoZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChfLmlzT2JqZWN0KHJlcXVlc3RFdmVudCkpIHtcbiAgICAgICAgZXZlbnQgPSByZXF1ZXN0RXZlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIHBhcnNlIHRoZSBib2R5IG9mIHRoZSBldmVudCBvYmplY3RcbiAqIGxvb2sgZm9yIHNlcXVlbGl6ZSBlcnJvcnMgYW5kIHJldHVybiBhIG1lc3NhZ2VcbiAqIEVSUk9SUyBzaG91bGQgbm90IGJlIGNhdWdodCBoZXJlIHRoaXMgaXMgYSBmYWxsYmFjayBmb3IgdW5rbm93biBkYXRhYmFzZSBlcnJvcnNcbiAqXG4gKiBAcGFyYW0gYm9keSB7b2JqZWN0fSBwYXJ0IG9mIGEgYm9keSByZXNwb25zZVxuICogQHJldHVybnMgZXJyb3IgbWVzc2FnZSBvYmplY3Qge21lc3NhZ2U6c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0U2VxdWVsaXplRXJyb3IoYm9keSkge1xuICAgIGNvbnN0IGVycm9yQm9keSA9IHt9O1xuXG4gICAgbGV0IHNlcXVlbGl6ZUVycm9yID0gXy5nZXQoYm9keSwgJ2Vycm9ycycsIFtdKS5yZWR1Y2UoKGFjYywgZXJyKSA9PiB7XG4gICAgICAgIGFjYyA9IGFjYyArICcgJyArIF8uZ2V0KGVyciwgJ21lc3NhZ2UnKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCAnJyk7XG4gICAgY29uc3QgcGFyZW50RXJyb3IgPSBfLmdldChib2R5LCAncGFyZW50JywgJycpO1xuXG4gICAgc2VxdWVsaXplRXJyb3IgPSBzZXF1ZWxpemVFcnJvciArIF8uZ2V0KGJvZHksICdvcmlnaW5hbC5kZXRhaWwnLCAnJykgKyBfLmdldChib2R5LCAnVHlwZUVycm9yJywgJycpICsgcGFyZW50RXJyb3I7XG4gICAgZXJyb3JCb2R5Lm1lc3NhZ2UgPSBzZXF1ZWxpemVFcnJvci50cmltKCk7XG4gICAgcmV0dXJuIGVycm9yQm9keTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEpveUVycm9yKGJvZHkpIHtcbiAgICBjb25zdCBlcnJvckJvZHkgPSB7fTtcbiAgICBjb25zdCBqb3lFcnJvciA9IF8uZ2V0KGJvZHksICdkZXRhaWxzWzBdJywge30pO1xuICAgIGNvbnNvbGUuZXJyb3IoJ1VTRVIgVkFMSURBVElPTiBFUlJPUjonLCBib2R5KTtcblxuICAgIGVycm9yQm9keS5tZXNzYWdlID0gam95RXJyb3IubWVzc2FnZTtcbiAgICBlcnJvckJvZHkuc3RhdHVzQ29kZSA9IDQwMDtcbiAgICBlcnJvckJvZHkuZXJyb3JDb2RlID0gJzQwMDAnO1xuICAgIHJldHVybiBlcnJvckJvZHk7XG59IiwiaW1wb3J0IHsgUzMgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHMzVXRpbHMoYWN0aW9uLCBwYXJhbXMpIHtcclxuICAgIGNvbnN0IHMzID0gbmV3IFMzKCk7XHJcbiAgICByZXR1cm4gczNbYWN0aW9uXShwYXJhbXMpO1xyXG59XHJcblxyXG5jb25zdCBTM1V0aWwgPSB7XHJcbiAgICBnZXRPYmplY3Q6IChwYXJhbXMpID0+IGdldFMzKHBhcmFtcyksXHJcbiAgICBkZWxldGVPYmplY3Q6IChwYXJhbXMpID0+IHMzVXRpbHMoJ2RlbGV0ZU9iamVjdCcsIHBhcmFtcyksXHJcbiAgICBwdXRPYmplY3Q6IChwYXJhbXMpID0+IHMzVXRpbHMoJ3B1dE9iamVjdCcsIHBhcmFtcyksXHJcbiAgICBsaXN0T2JqZWN0c1YyOiAocGFyYW1zKSA9PiBzM1V0aWxzKCdsaXN0T2JqZWN0c1YyJywgcGFyYW1zKVxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCBTM1V0aWw7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXRTMyhwYXJhbXMpIHtcclxuICAgIGNvbnN0IHMzID0gbmV3IFMzKCk7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHMzLmdldE9iamVjdChwYXJhbXMpO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlLkJvZHkudHJhbnNmb3JtVG9TdHJpbmcoJ3V0Zi04Jyk7XHJcbn0iLCJpbXBvcnQgeyBTTlMgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc25zJztcclxuXHJcbmNvbnN0IFNOU1V0aWwgPSB7XHJcbiAgICBwdWJsaXNoOiAocGFyYW1zKSA9PiBwdWJsaXNoKHBhcmFtcyksXHJcbiAgICBjcmVhdGVUb3BpYzogKHBhcmFtcykgPT4gY3JlYXRlVG9waWMocGFyYW1zKVxyXG59O1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gcHVibGlzaChwYXJhbXMpIHtcclxuICAgIGNvbnN0IHNucyA9IG5ldyBTTlMoKTtcclxuICAgIHJldHVybiBhd2FpdCBzbnMucHVibGlzaChwYXJhbXMpO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVUb3BpYyhwYXJhbXMpIHtcclxuICAgIGNvbnN0IHNucyA9IG5ldyBTTlMoKTtcclxuICAgIHJldHVybiBhd2FpdCBzbnMuY3JlYXRlVG9waWMocGFyYW1zKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU05TVXRpbDtcclxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1zM1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYXdzLXNkay9jbGllbnQtc25zXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBhd3Mtc2RrL2xpYi1keW5hbW9kYlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJibHVlYmlyZFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9tZW50XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vbWVudC9tb21lbnQuanNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic2VxdWVsaXplXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInVtenVnXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJpbXBvcnQgeyBoYW5kbGVGaWxlIGFzIGhhbmRsZUZpbGVJbXBvcnQgfSBmcm9tICcuL2V2ZW50TWFuYWdlci9oYW5kbGVGaWxlLmpzJztcbmltcG9ydCB7IHdhdGNoQnVja2V0IGFzIHdhdGNoQnVja2V0SW1wb3J0IH0gZnJvbSAnLi9ldmVudE1hbmFnZXIvd2F0Y2hCdWNrZXQuanMnO1xuaW1wb3J0IHsgcHVibGlzaEV2ZW50cyBhcyBwdWJsaXNoRXZlbnRzSW1wb3J0IH0gZnJvbSAnLi9ldmVudE1hbmFnZXIvcHVibGlzaEV2ZW50cy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXJzIGFzIGNyZWF0ZUZpbHRlcnNJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9jcmVhdGVGaWx0ZXJzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVNvcnQgYXMgY3JlYXRlU29ydEltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2NyZWF0ZVNvcnQuanMnO1xuaW1wb3J0IHsgZmluZEFsbCBhcyBmaW5kQWxsSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvZmluZEFsbC5qcyc7XG5pbXBvcnQgeyBjaGVja01vZHVsZSBhcyBjaGVja01vZHVsZUltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2FjY2Vzc1JpZ2h0c1V0aWxzLmpzJztcbmltcG9ydCB7IGZhaWx1cmUgYXMgZmFpbHVyZUltcG9ydCwgc3VjY2VzcyBhcyBzdWNjZXNzSW1wb3J0IH0gZnJvbSAnLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgcnVuTWlncmF0aW9ucyBhcyBydW5NaWdyYXRpb25zSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlNldHVwL21pZ3JhdGlvbnMuanMnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFVzZXIgYXMgZ2V0Q3VycmVudFVzZXJJbXBvcnQgfSBmcm9tICcuL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBzdWNjZXNzSHRtbCBhcyBzdWNjZXNzSHRtbEltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IGdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnQgYXMgZ2V0Q3VycmVudFVzZXJOYW1lRnJvbUNvZ25pdG9FdmVudEltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IGRlZmF1bHRGaWx0ZXJzIGFzIGRlZmF1bHRGaWx0ZXJzSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvZGVmYXVsdEZpbHRlcnMuanMnO1xuaW1wb3J0IHsgYWNjZXNzUmlnaHRzVXRpbHMgYXMgYWNjZXNzUmlnaHRzVXRpbHNJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5pbXBvcnQgeyBwYXJzZUJvZHkgYXMgcGFyc2VCb2R5SW1wb3J0IH0gZnJvbSAnLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgcGFyc2VFdmVudCBhcyBwYXJzZUV2ZW50SW1wb3J0IH0gZnJvbSAnLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgZ2V0QnVzaW5lc3Nlc0luZm8gYXMgZ2V0QnVzaW5lc3Nlc0luZm9JbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5pbXBvcnQgeyB1c2VyRGVmYXVsdEJpZCBhcyB1c2VyRGVmYXVsdEJpZEltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2FjY2Vzc1JpZ2h0c1V0aWxzLmpzJztcbmltcG9ydCB7IGNoZWNrV3JpdGVBY2Nlc3MgYXMgY2hlY2tXcml0ZUFjY2Vzc0ltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2FjY2Vzc1JpZ2h0c1V0aWxzLmpzJztcblxuZXhwb3J0IGNvbnN0IGhhbmRsZUZpbGUgPSBoYW5kbGVGaWxlSW1wb3J0O1xuZXhwb3J0IGNvbnN0IHdhdGNoQnVja2V0ID0gd2F0Y2hCdWNrZXRJbXBvcnQ7XG5leHBvcnQgY29uc3QgcHVibGlzaEV2ZW50cyA9IHB1Ymxpc2hFdmVudHNJbXBvcnQ7XG5leHBvcnQgY29uc3QgY3JlYXRlRmlsdGVycyA9IGNyZWF0ZUZpbHRlcnNJbXBvcnQ7XG5leHBvcnQgY29uc3QgY3JlYXRlU29ydCA9IGNyZWF0ZVNvcnRJbXBvcnQ7XG5leHBvcnQgY29uc3QgZmluZEFsbCA9IGZpbmRBbGxJbXBvcnQ7XG5leHBvcnQgY29uc3QgY2hlY2tNb2R1bGUgPSBjaGVja01vZHVsZUltcG9ydDtcbmV4cG9ydCBjb25zdCBmYWlsdXJlID0gZmFpbHVyZUltcG9ydDtcbmV4cG9ydCBjb25zdCBzdWNjZXNzID0gc3VjY2Vzc0ltcG9ydDtcbmV4cG9ydCBjb25zdCBydW5NaWdyYXRpb25zID0gcnVuTWlncmF0aW9uc0ltcG9ydDtcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50VXNlciA9IGdldEN1cnJlbnRVc2VySW1wb3J0O1xuZXhwb3J0IGNvbnN0IHN1Y2Nlc3NIdG1sID0gc3VjY2Vzc0h0bWxJbXBvcnQ7XG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFVzZXJOYW1lRnJvbUNvZ25pdG9FdmVudCA9IGdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnRJbXBvcnQ7XG5leHBvcnQgY29uc3QgZGVmYXVsdEZpbHRlcnMgPSBkZWZhdWx0RmlsdGVyc0ltcG9ydDtcbmV4cG9ydCBjb25zdCBhY2Nlc3NSaWdodHNVdGlscyA9IGFjY2Vzc1JpZ2h0c1V0aWxzSW1wb3J0O1xuZXhwb3J0IGNvbnN0IHBhcnNlQm9keSA9IHBhcnNlQm9keUltcG9ydDtcbmV4cG9ydCBjb25zdCBwYXJzZUV2ZW50ID0gcGFyc2VFdmVudEltcG9ydDtcbmV4cG9ydCBjb25zdCBnZXRCdXNpbmVzc2VzSW5mbyA9IGdldEJ1c2luZXNzZXNJbmZvSW1wb3J0O1xuZXhwb3J0IGNvbnN0IHVzZXJEZWZhdWx0QmlkID0gdXNlckRlZmF1bHRCaWRJbXBvcnQ7XG5leHBvcnQgY29uc3QgY2hlY2tXcml0ZUFjY2VzcyA9IGNoZWNrV3JpdGVBY2Nlc3NJbXBvcnQ7XG4iXSwibmFtZXMiOlsicnVuTWlncmF0aW9ucyIsIl9sb2Rhc2giLCJyZXF1aXJlIiwiX2xvZGFzaDIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3VtenVnIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJkYXRhYmFzZU5hbWUiLCJzZXF1ZWxpemVJbnN0YW5jZSIsImluaXRpYWxpemVNb2RlbHMiLCJwYXRoVG9NaWdyYXRpb25Gb2xkZXIiLCJwcm9jZXNzIiwiZW52IiwiUFdEIiwidW16dWciLCJVbXp1ZyIsIm1pZ3JhdGlvbnMiLCJnbG9iIiwiY29udGV4dCIsImdldFF1ZXJ5SW50ZXJmYWNlIiwic3RvcmFnZSIsIlNlcXVlbGl6ZVN0b3JhZ2UiLCJzZXF1ZWxpemUiLCJsb2dnZXIiLCJjb25zb2xlIiwicGVuZGluZ01pZ3JhdGlvbnMiLCJwZW5kaW5nIiwibG9nIiwidXAiLCJjYXRjaCIsInVwRXJyb3IiLCJkb3duIiwiXyIsImNoYWluIiwibWFwIiwicmV2ZXJzZSIsInZhbHVlIiwidGhlbiIsIm1zZyIsImVycm9yIiwiRXJyb3IiLCJkb3duRXJyb3IiLCJhY2Nlc3NSaWdodHNVdGlscyIsImV4cG9ydHMiLCJ1c2VyRGVmYXVsdEJpZCIsImdldEJ1c2luZXNzZXNJbmZvIiwiZ2V0TW9kdWxlSW5mbyIsImNoZWNrTW9kdWxlIiwiY2hlY2tXcml0ZUFjY2VzcyIsIl9lcnJvckNvZGVzIiwiX3JlcXVlc3RSZXNwb25zZSIsImV2ZW50IiwicmVxdWVzdGVkQnVzaW5lc3NJZHMiLCJnZXRSZXF1ZXN0ZWRCdXNpbmVzc0lkcyIsImFsbG93ZWRCdXNpbmVzc0lkcyIsImdldEFsbG93ZWRCdXNpbmVzc0lkcyIsImxvY2FsQmlkTGlzdCIsImlzRW1wdHkiLCJnZXQiLCJCVUlMRF9FTlYiLCJsZW5ndGgiLCJpbnRlcnNlY3Rpb24iLCJqc29uVG9QYXJzZSIsImRiaSIsIkpTT04iLCJwYXJzZSIsInNwbGl0IiwiYnVzaW5lc3NlcyIsIk9iamVjdCIsImtleXMiLCJhciIsImFjY2Vzc1JpZ2h0cyIsIm1vZHVsZVJpZ2h0cyIsIm1vZHVsZU5hbWUiLCJhbGxvd0FjY2VzcyIsImVycm9yTGlzdCIsInVuYXV0aG9yaXplZCIsInVzZXJSb2xlcyIsImFkbWluIiwicmVhZCIsIndyaXRlIiwiZXZlbnRCb2R5IiwicGFyc2VCb2R5IiwiYnVzaW5lc3NJZHMiLCJidXNpbmVzc0lkIiwiZmluZCIsImlkIiwicmF3IiwidXNlclJpZ2h0IiwiX3NlcXVlbGl6ZSIsIl9zZXF1ZWxpemUyIiwiX21vbWVudCIsIl9tb21lbnQyIiwiX2FjY2Vzc1JpZ2h0c1V0aWxzIiwiY3JlYXRlRmlsdGVycyIsIm9iamVjdEZpbHRlcnMiLCJxdWVyeSIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJ3aGVyZSIsInJlZHVjZSIsImFjYyIsIml0ZW0iLCJ2YWwiLCJpdGVtTmFtZSIsImluY2x1ZGVzIiwiZmlsdGVyVHlwZSIsIkRCIiwiT3AiLCJpTGlrZSIsIm9yIiwiaW4iLCJwYXJzZWRKc29uIiwiZSIsInR5cGUiLCJCT09MRUFOIiwicXVlcnlWYWx1ZSIsInRvTG93ZXJDYXNlIiwiYm9vbGVhbk1hcCIsImFjdGl2ZSIsImZpbHRlckFkZHMiLCJzIiwibW9tZW50IiwidXRjIiwiZGF0ZXMiLCJiZXR3ZWVuIiwidG9EYXRlIiwiaXNWYWxpZCIsImludmFsaWRTdGFydERhdGUiLCJpbnZhbGlkRW5kRGF0ZSIsImNyZWF0ZWRBdCIsIndpdGhEYXRlIiwiYXNzaWduIiwiY3JlYXRlU29ydCIsImRlZmF1bHRGaWx0ZXIiLCJjb3B5T2ZEZWZhdWx0RmlsdGVyIiwiY2xvbmUiLCJzb3J0IiwidGVzdEl0ZW0iLCJpbmRleE9mIiwic3Vic3RyIiwic29ydEl0ZW0iLCJmb3JFYWNoIiwicGFyZW50Q2hpbGRMaXN0IiwicHVzaCIsImRlZmF1bHRGaWx0ZXJzIiwiYWRkRmlsdGVyc0Zyb21TY2hlbWEiLCJzY2hlbWEiLCJzdWJTY2hlbWFzIiwiZmlsdGVycyIsImtleSIsImZpbHRlck92ZXJSaWRlVHlwZXMiLCJlcXVhbCIsImFjY3VtdWxhdG9yIiwia2V5UHJlZml4IiwiYXNMaW5rQWxpYXMiLCJTVFJJTkciLCJlcSIsImZpbHRlclR5cGVPdmVyUmlkZSIsIml0ZW1UeXBlIiwiQ0hBUiIsIlRFWFQiLCJERUNJTUFMIiwiQklHSU5UIiwiSU5URUdFUiIsIkRBVEUiLCJEQVRFT05MWSIsImx0IiwiSlNPTkIiLCJjb250YWlucyIsImdldFBhZ2luYXRpb25Gcm9tRmluZEFsbCIsImZpbmRBbGwiLCJyZXN1bHQiLCJsaW1pdCIsIm9mZnNldCIsImhhc01vcmUiLCJzcGxpY2UiLCJwYWdlT2JqZWN0Iiwicm93cyIsIm1vZGVsIiwib3B0aW9ucyIsImZpbmRBcmdzIiwiaW5jbHVkZSIsImFsbCIsIm5lc3RlZCIsInJlc3VsdHMiLCJmaW5kVXRpbHMiLCJfbGliRHluYW1vZGIiLCJfY2xpZW50RHluYW1vZGIiLCJkeW5hbW9VdGlsIiwicGFyYW1zIiwiZHluYW1vRGIiLCJEeW5hbW9EQkRvY3VtZW50IiwiZnJvbSIsIkR5bmFtb0RCIiwiaGFuZGxlRXZlbnRzIiwiX2hhbmRsZUZpbGUiLCJfYmx1ZWJpcmQiLCJfYmx1ZWJpcmQyIiwidHJhbnNmb3JtZXIiLCJlcnJvckhhbmRsZXJQZXJGaWxlIiwic2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMiLCJ1c2VySW1wb3J0VHlwZXMiLCJSZWNvcmRzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoYXNFcnJvcnMiLCJyZWNvcmQiLCJzbnNJbmZvIiwiczNCdWNrZXQiLCJidWNrZXQiLCJmaWxlcyIsImZpbGUiLCJwYXRoIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaGFuZGxlRmlsZSIsImVyciIsIl9TM1V0aWxzIiwiX1MzVXRpbHMyIiwiQnVja2V0IiwiS2V5IiwiYm9keSIsIlMzVXRpbCIsImdldE9iamVjdCIsInBhcnNlZEJvZHkiLCJyZXR1cm5lZFZhbHVlIiwiZGVsZXRlT2JqZWN0IiwiY29kZSIsIm5ld1BhdGgiLCJ1c2Vyc0ltcG9ydHMiLCJ2YWx1ZXMiLCJpdGVtcyIsImZpbGVOYW1lIiwibGFzdCIsImZvbGRlck5hbWUiLCJmaXJzdCIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwibmV3UGFyYW1zIiwiQm9keSIsInB1dE9iamVjdCIsImxvb3AiLCJwdWJsaXNoRXZlbnRzIiwiX1NOU1V0aWxzIiwiX1NOU1V0aWxzMiIsIl9keW5hbW9VdGlscyIsIl9keW5hbW9VdGlsczIiLCJtYXhLZXlzIiwiYnVja2V0UmVzdWx0IiwiZmlsZUxpc3QiLCJjdXJyZW50VGltZSIsIlMzVXRpbHMiLCJsaXN0T2JqZWN0c1YyIiwiTWF4S2V5cyIsIkNvbnRpbnVhdGlvblRva2VuIiwibmV3RmlsZXMiLCJmaWx0ZXIiLCJDb250ZW50cyIsImZpbGVEZWxheVRpbWUiLCJpc1NhbWVPckJlZm9yZSIsImNvbmNhdCIsIklzVHJ1bmNhdGVkIiwiTmV4dENvbnRpbnVhdGlvblRva2VuIiwiY29uZmlnVGFibGUiLCJ0YWJsZUtleSIsInNuc1RvcGljIiwiVGFibGVOYW1lIiwiY2h1bmtTaXplIiwibWF4TWVzc2FnZXMiLCJzbnNDcmVhdGVUb3BpY1Jlc3BvbnNlIiwiU05TVXRpbCIsImNyZWF0ZVRvcGljIiwiTmFtZSIsInRvcGljQXJuIiwiVG9waWNBcm4iLCJtZXNzYWdlTGlzdCIsImNodW5rIiwic2xpY2UiLCJwdWJsaXNoIiwiTWVzc2FnZSIsInN0cmluZ2lmeSIsIndhdGNoQnVja2V0IiwiX3B1Ymxpc2hFdmVudHMiLCJfaGFuZGxlRXZlbnRzIiwiZHluYW1vQ29uZmlnVGFibGUiLCJkeW5hbW9Db25maWdLZXkiLCJub29wIiwiRXZlbnRTb3VyY2UiLCJpc0VxdWFsIiwiaW52YWxpZEludmVudG9yeVJlbGVhc2VSZXF1ZXN0IiwibWVzc2FnZSIsImVycm9yQ29kZSIsInN0YXR1c0NvZGUiLCJhbHJlYWR5UmVsZWFzZWQiLCJhbHJlYWR5UmVjZWl2ZWQiLCJpbnZhbGlkSXRlbXNSZXF1ZXN0IiwiaW52YWxpZElEIiwiaW52YWxpZFJlY2VpdmFibGUiLCJpbnZhbGlkUmVxdWVzdCIsImludmFsaWRBUElLZXkiLCJxYkNyZWF0aW9uRXJyb3IiLCJjYW5ub3RSZW9wZW4iLCJpbnZhbGlkRGF0ZUZvcm1hdCIsImludmFsaWRPcmRlclN0YXR1cyIsImludmFsaWRQYXltZW50U3RhdHVzIiwiaW52YWxpZFJlbGVhc2VTdGF0dXMiLCJpbnZhbGlkUmVjZWl2YWJsZVN0YXR1cyIsImludmFsaWRKc29uIiwiaW52YWxpZEZpbHRlciIsImludmFsaWRVc2VyTmFtZVVwZGF0ZSIsImltYWdlU2l6ZUxpbWl0Iiwibm90Rm91bmQiLCJlbWFpbFJlcXVpcmVkIiwibW9iaWxlUGhvbmVSZXF1aXJlZCIsImludmFsaWRDYWRlbmNlVHlwZSIsInN1Y2Nlc3MiLCJzdWNjZXNzSHRtbCIsImdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnQiLCJnZXRDdXJyZW50VXNlciIsImZhaWx1cmUiLCJwYXJzZUV2ZW50IiwiZGV0ZWN0U2VxdWVsaXplRXJyb3IiLCJkZXRlY3RKb3lFcnJvciIsImRiQ2xvc2UiLCJidWlsZFJlc3BvbnNlIiwiaHRtbCIsImhlYWRlcnMiLCJhdHRyaWJ1dGVzIiwidXNlcm5hbWUiLCJjbGVhbmVkRXJyb3JCb2R5IiwiVVRJTF9MT0ciLCJOT1JNQUxfRVJST1IiLCJpc1VuZGVmaW5lZCIsImRldGFpbHMiLCJuZXdCb2R5IiwibWVyZ2UiLCJyZXF1ZXN0RXZlbnQiLCJpc1N0cmluZyIsImlzT2JqZWN0IiwiY2FsbGJhY2siLCJlcnJvckJvZHkiLCJzZXF1ZWxpemVFcnJvciIsInBhcmVudEVycm9yIiwidHJpbSIsImpveUVycm9yIiwiczNVdGlscyIsIl9jbGllbnRTIiwiYWN0aW9uIiwiczMiLCJTMyIsImdldFMzIiwicmVzcG9uc2UiLCJ0cmFuc2Zvcm1Ub1N0cmluZyIsIl9jbGllbnRTbnMiLCJzbnMiLCJTTlMiLCJfd2F0Y2hCdWNrZXQiLCJfY3JlYXRlRmlsdGVycyIsIl9jcmVhdGVTb3J0IiwiX2ZpbmRBbGwiLCJfbWlncmF0aW9ucyIsIl9kZWZhdWx0RmlsdGVycyIsImhhbmRsZUZpbGVJbXBvcnQiLCJ3YXRjaEJ1Y2tldEltcG9ydCIsInB1Ymxpc2hFdmVudHNJbXBvcnQiLCJjcmVhdGVGaWx0ZXJzSW1wb3J0IiwiY3JlYXRlU29ydEltcG9ydCIsImZpbmRBbGxJbXBvcnQiLCJjaGVja01vZHVsZUltcG9ydCIsImZhaWx1cmVJbXBvcnQiLCJzdWNjZXNzSW1wb3J0IiwicnVuTWlncmF0aW9uc0ltcG9ydCIsImdldEN1cnJlbnRVc2VySW1wb3J0Iiwic3VjY2Vzc0h0bWxJbXBvcnQiLCJnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50SW1wb3J0IiwiZGVmYXVsdEZpbHRlcnNJbXBvcnQiLCJhY2Nlc3NSaWdodHNVdGlsc0ltcG9ydCIsInBhcnNlQm9keUltcG9ydCIsInBhcnNlRXZlbnRJbXBvcnQiLCJnZXRCdXNpbmVzc2VzSW5mb0ltcG9ydCIsInVzZXJEZWZhdWx0QmlkSW1wb3J0IiwiY2hlY2tXcml0ZUFjY2Vzc0ltcG9ydCJdLCJzb3VyY2VSb290IjoiIn0=
995
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FGQVVtQyxHQUFiQSxhQUFhLENBVm5DLElBQUFDLE9BQUEsR0FBQUMsbUJBQUEseUJBQXVCLElBQUFDLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQSxFQUN2QixJQUFBSSxNQUFBLEdBQUFILG1CQUFBLHVCQUFnRCxTQUFBRSx1QkFBQUUsR0FBQSxVQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQSxLQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNPLGVBQWVOLGFBQWFBLENBQUNTLFlBQVksRUFDWkMsaUJBQWlCLEVBQ2pCQyxnQkFBZ0IsRUFDaEJDLHFCQUFxQixHQUFJLEdBQUVDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxHQUFJLGtCQUFpQixFQUFFLENBQzlGLE1BQU1DLEtBQUssR0FBRyxJQUFJQyxZQUFLLENBQUMsRUFDcEJDLFVBQVUsRUFBRSxFQUFFQyxJQUFJLEVBQUVQLHFCQUFxQixDQUFDLENBQUMsRUFDM0NRLE9BQU8sRUFBRVYsaUJBQWlCLENBQUNXLGlCQUFpQixDQUFDLENBQUM7TUFDOUNDLE9BQU8sRUFBRSxJQUFJQyx1QkFBZ0IsQ0FBQyxFQUFFQyxTQUFTLEVBQUVkLGlCQUFpQixDQUFDLENBQUMsQ0FBQztNQUMvRGUsTUFBTSxFQUFFQztJQUNaLENBQUMsQ0FBQzs7RUFFRixNQUFNQyxpQkFBaUIsR0FBRyxNQUFNWCxLQUFLLENBQUNZLE9BQU8sQ0FBQyxDQUFDO0VBQy9DRixPQUFPLENBQUNHLEdBQUcsQ0FBQyxrQ0FBa0MsRUFBRUYsaUJBQWlCLEVBQUVmLHFCQUFxQixDQUFDO0VBQ3pGLE1BQU1JLEtBQUssQ0FBQ2MsRUFBRSxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLENBQUNDLE9BQU8sS0FBSztJQUNoQyxPQUFPaEIsS0FBSyxDQUFDaUIsSUFBSSxDQUFDO01BQ2RmLFVBQVUsRUFBRWdCLGdCQUFDLENBQUNDLEtBQUssQ0FBQ1IsaUJBQWlCLENBQUM7TUFDakNTLEdBQUcsQ0FBQyxNQUFNLENBQUM7TUFDWEMsT0FBTyxDQUFDLENBQUM7TUFDVEMsS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO01BQ1YsTUFBTUMsR0FBRyxHQUFHLHNDQUFzQyxHQUFHUixPQUFPO01BQzVETixPQUFPLENBQUNlLEtBQUssQ0FBQ0QsR0FBRyxDQUFDO01BQ2xCLE1BQU0sSUFBSUUsS0FBSyxDQUFDRixHQUFHLENBQUM7SUFDeEIsQ0FBQyxFQUFFLENBQUNHLFNBQVMsS0FBSztNQUNkLE1BQU1ILEdBQUcsR0FBRyx3Q0FBd0MsR0FBR0csU0FBUztNQUNoRWpCLE9BQU8sQ0FBQ2UsS0FBSyxDQUFDRCxHQUFHLENBQUM7TUFDbEIsTUFBTSxJQUFJRSxLQUFLLENBQUNGLEdBQUcsQ0FBQztJQUN4QixDQUFDLENBQUM7RUFDTixDQUFDLENBQUM7O0VBRUY7RUFDQTtFQUNBO0VBQ0EsTUFBTTdCLGdCQUFnQixDQUFDLENBQUM7QUFDNUI7Ozs7Ozs7Ozs7dUhDbENpQyxHQUFqQmlDLGlCQUFpQixDQUFBQyxzQkE2QkgsR0FBZEMsY0FBYyxDQUFBRCx5QkFnQ0csR0FBakJFLGlCQUFpQixDQUFBRixxQkE0QkosR0FBYkcsYUFBYSxDQUFBSCxtQkFvQkYsR0FBWEksV0FBVyxDQUFBSix3QkFzQkssR0FBaEJLLGdCQUFnQixDQTdJaEMsSUFBQWpELE9BQUEsR0FBQUMsbUJBQUEseUJBQW9DLElBQUFDLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQSxFQUNwQyxJQUFBa0QsV0FBQSxHQUFBakQsbUJBQUEsb0ZBQ0EsSUFBQWtELGdCQUFBLEdBQUFsRCxtQkFBQSw4RkFBdUUsU0FBQUUsdUJBQUFFLEdBQUEsVUFBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUEsS0FFdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQ08sU0FBU3NDLGlCQUFpQkEsQ0FBQ1MsS0FBSyxFQUFFLENBQ3JDLE1BQU1DLG9CQUFvQixHQUFHQyx1QkFBdUIsQ0FBQ0YsS0FBSyxDQUFDLENBQzNELE1BQU1HLGtCQUFrQixHQUFHQyxxQkFBcUIsQ0FBQ0osS0FBSyxDQUFDLENBQ3ZELE1BQU1LLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBRTNCO0VBQ0EsSUFBSXhCLGdCQUFDLENBQUN5QixPQUFPLENBQUNILGtCQUFrQixDQUFDLElBQzdCLENBQUN0QixnQkFBQyxDQUFDMEIsR0FBRyxDQUFDUCxLQUFLLEVBQUUsa0NBQWtDLENBQUMsSUFDakQsQ0FBQ25CLGdCQUFDLENBQUMwQixHQUFHLENBQUNQLEtBQUssRUFBRSxxQ0FBcUMsQ0FBQyxJQUNwRHhDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDK0MsU0FBUyxLQUFLLFlBQVksSUFDdENoRCxPQUFPLENBQUNDLEdBQUcsQ0FBQytDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FDckMsSUFBSVAsb0JBQW9CLENBQUNRLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FDbkMsT0FBT0osWUFBWSxDQUN2QixDQUFDLE1BQU0sQ0FDSCxPQUFPeEIsZ0JBQUMsQ0FBQzZCLFlBQVksQ0FBQ1Qsb0JBQW9CLEVBQUVJLFlBQVksQ0FBQyxDQUM3RCxDQUNKLENBQUMsTUFBTSxJQUFJSixvQkFBb0IsQ0FBQ1EsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUMxQyxPQUFPTixrQkFBa0IsQ0FDN0IsQ0FFQSxPQUFPdEIsZ0JBQUMsQ0FBQzZCLFlBQVksQ0FBQ1Qsb0JBQW9CLEVBQUVFLGtCQUFrQixDQUFDLENBQ25FLENBQUMsQ0FFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FDTyxTQUFTVixjQUFjQSxDQUFDTyxLQUFLLEVBQUUsQ0FDbEMsSUFBSVcsV0FBVyxHQUFHOUIsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ1AsS0FBSyxFQUFFLDZDQUE2QyxDQUFDLElBQ3pFbkIsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ1AsS0FBSyxFQUFFLHNDQUFzQyxDQUFDLElBQ3BELElBQUksQ0FFUixNQUFNWSxHQUFHLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDSCxXQUFXLENBQUMsQ0FDbkMsT0FBTzlCLGdCQUFDLENBQUMwQixHQUFHLENBQUNLLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUM5QyxDQUFDLENBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQ0EsU0FBU1YsdUJBQXVCQSxDQUFDRixLQUFLLEVBQUUsQ0FDcEMsSUFBSUMsb0JBQW9CLEdBQUdwQixnQkFBQyxDQUFDMEIsR0FBRyxDQUFDUCxLQUFLLEVBQUUsbUNBQW1DLEVBQUUsSUFBSSxDQUFDLENBRWxGLE9BQU9DLG9CQUFvQixHQUFHQSxvQkFBb0IsQ0FBQ2MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FDdEUsQ0FBQyxDQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNBLFNBQVNYLHFCQUFxQkEsQ0FBQ0osS0FBSyxFQUFFLENBQ2xDLE1BQU1nQixVQUFVLEdBQUd0QixpQkFBaUIsQ0FBQ00sS0FBSyxDQUFDLENBQzNDLE9BQU9pQixNQUFNLENBQUNDLElBQUksQ0FBQ0YsVUFBVSxDQUFDLENBQ2xDLENBRU8sU0FBU3RCLGlCQUFpQkEsQ0FBQ00sS0FBSyxFQUFFLENBQ3JDLElBQUlXLFdBQVcsR0FBRzlCLGdCQUFDLENBQUMwQixHQUFHLENBQUNQLEtBQUssRUFBRSw0Q0FBNEMsQ0FBQyxJQUN4RW5CLGdCQUFDLENBQUMwQixHQUFHLENBQUNQLEtBQUssRUFBRSxxQ0FBcUMsQ0FBQyxJQUNuRCxJQUFJLENBQ1IsTUFBTW1CLFlBQVksR0FBR04sSUFBSSxDQUFDQyxLQUFLLENBQUNILFdBQVcsQ0FBQyxDQUU1QyxJQUFJbkQsT0FBTyxDQUFDQyxHQUFHLENBQUMrQyxTQUFTLEtBQUssT0FBTyxFQUFFLENBQ25DLElBQUksQ0FBQyxJQUFBRixlQUFPLEVBQUNhLFlBQVksQ0FBQyxFQUFFLENBQ3hCLE1BQU1DLElBQUksR0FBR3ZDLGdCQUFDLENBQUMwQixHQUFHLENBQUNZLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDbkQsTUFBTUUsU0FBUyxHQUFHLEVBQUUsR0FBR0QsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUN2Q3ZDLGdCQUFDLENBQUN5QyxHQUFHLENBQUNILFlBQVksRUFBRSxhQUFhLEVBQUVFLFNBQVMsQ0FBQyxDQUU3QyxPQUFPeEMsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ1ksWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNqRCxDQUFDLE1BQU0sQ0FDSCxNQUFNSSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzFDLE9BQU8xQyxnQkFBQyxDQUFDMEIsR0FBRyxDQUFDZ0IsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUN2QyxDQUNKLENBRUEsT0FBTzFDLGdCQUFDLENBQUMwQixHQUFHLENBQUNZLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDakQsQ0FBQyxDQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNPLFNBQVN4QixhQUFhQSxDQUFDSyxLQUFLLEVBQUUsQ0FDakMsSUFBSVcsV0FBVyxHQUNYOUIsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ1AsS0FBSyxFQUFFLDZDQUE2QyxDQUFDLElBQzNEbkIsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ1AsS0FBSyxFQUFFLHNDQUFzQyxDQUFDLElBQ3BEbkIsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ1AsS0FBSyxFQUFFLDRDQUE0QyxDQUFDLElBQzFEbkIsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ1AsS0FBSyxFQUFFLHFDQUFxQyxDQUFDLElBRW5ELElBQUksQ0FFUixNQUFNd0IsWUFBWSxHQUFHWCxJQUFJLENBQUNDLEtBQUssQ0FBQ0gsV0FBVyxDQUFDLENBQzVDLE9BQU85QixnQkFBQyxDQUFDMEIsR0FBRyxDQUFDaUIsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUM1QyxDQUFDLENBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FDTyxTQUFTNUIsV0FBV0EsQ0FBQzZCLFVBQVUsRUFBRXpCLEtBQUssRUFBRSxDQUMzQyxNQUFNd0IsWUFBWSxHQUFHN0IsYUFBYSxDQUFDSyxLQUFLLENBQUMsQ0FDekMsSUFBSTBCLFdBQVcsR0FBRzdDLGdCQUFDLENBQUMwQixHQUFHLENBQUNpQixZQUFZLEVBQUVDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FFeEQsSUFBSWpFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDK0MsU0FBUyxLQUFLLE9BQU8sRUFBRSxDQUNuQyxPQUNKLENBQ0EsSUFBSSxDQUFDa0IsV0FBVyxFQUFFLENBQ2QsTUFBTUMscUJBQVMsQ0FBQ0MsWUFBWSxDQUNoQyxDQUNKLENBRU8sTUFBTUMsU0FBUyxHQUFBckMsaUJBQUEsR0FBRyxFQUNyQnNDLEtBQUssRUFBRSxHQUFHLEVBQ1ZDLElBQUksRUFBRSxHQUFHLEVBQ1RDLEtBQUssRUFBRSxHQUFHLENBQ2QsQ0FBQyxDQUFDLENBRUY7QUFDQTtBQUNBO0FBQ0EsR0FDTyxTQUFTbkMsZ0JBQWdCQSxDQUFDRyxLQUFLLEVBQUUsQ0FDcEMsTUFBTWlDLFNBQVMsR0FBRyxJQUFBQywwQkFBUyxFQUFDbEMsS0FBSyxDQUFDLENBQ2xDLE1BQU1tQyxXQUFXLEdBQUc1QyxpQkFBaUIsQ0FBQ1MsS0FBSyxDQUFDLElBQUksRUFBRSxDQUNsRCxNQUFNb0MsVUFBVSxHQUFHRCxXQUFXLENBQUNFLElBQUksQ0FBQyxDQUFDQyxFQUFFLEtBQUtBLEVBQUUsS0FBS0wsU0FBUyxDQUFDRyxVQUFVLENBQUMsQ0FDeEUsTUFBTUcsR0FBRyxHQUFHN0MsaUJBQWlCLENBQUNNLEtBQUssQ0FBQyxDQUNwQyxNQUFNd0MsU0FBUyxHQUFHRCxHQUFHLENBQUNILFVBQVUsQ0FBQyxDQUVqQyxJQUFJNUUsT0FBTyxDQUFDQyxHQUFHLENBQUMrQyxTQUFTLEtBQUssT0FBTyxFQUFFLENBQ25DLE9BQU95QixTQUFTLENBQUNHLFVBQVUsQ0FDL0IsQ0FFQSxJQUFLSSxTQUFTLEtBQUtYLFNBQVMsQ0FBQ0MsS0FBSyxJQUFJVSxTQUFTLEtBQUtYLFNBQVMsQ0FBQ0csS0FBSyxJQUFNLENBQUNRLFNBQVUsRUFBRSxDQUNsRixNQUFNYixxQkFBUyxDQUFDQyxZQUFZLENBQ2hDLENBQ0EsT0FBT1EsVUFBVSxDQUNyQjs7Ozs7Ozs7OztrR0M1SkEsSUFBQXhGLE9BQUEsR0FBQUMsbUJBQUEseUJBQXVCLElBQUFDLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUN2QixJQUFBNkYsVUFBQSxHQUFBNUYsbUJBQUEsK0JBQTJCLElBQUE2RixXQUFBLEdBQUEzRixzQkFBQSxDQUFBMEYsVUFBQTtBQUMzQixJQUFBRSxPQUFBLEdBQUE5RixtQkFBQSw2Q0FBc0MsSUFBQStGLFFBQUEsR0FBQTdGLHNCQUFBLENBQUE0RixPQUFBO0FBQ3RDLElBQUE3QyxXQUFBLEdBQUFqRCxtQkFBQTtBQUNBLElBQUFnRyxrQkFBQSxHQUFBaEcsbUJBQUEsK0ZBQTJELFNBQUFFLHVCQUFBRSxHQUFBLFVBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsS0FBQUUsT0FBQSxFQUFBRixHQUFBOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU02RixhQUFhLEdBQUF0RCxxQkFBQSxHQUFHLFVBQVVRLEtBQUssRUFBRStDLGFBQWEsRUFBQztFQUN4RCxJQUFJQyxLQUFLLEdBQUduRSxnQkFBQyxDQUFDMEIsR0FBRyxDQUFDUCxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0QsTUFBTWlELFNBQVMsR0FBR3BFLGdCQUFDLENBQUMwQixHQUFHLENBQUN5QyxLQUFLLEVBQUUsV0FBVyxDQUFDO0VBQzNDLE1BQU1FLE9BQU8sR0FBR3JFLGdCQUFDLENBQUMwQixHQUFHLENBQUN5QyxLQUFLLEVBQUUsU0FBUyxDQUFDO0VBQ3ZDLE1BQU1HLEtBQUssR0FBR2xDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDOEIsS0FBSyxDQUFDLENBQUNJLE1BQU0sQ0FBQyxDQUFDQyxHQUFHLEVBQUVDLElBQUksS0FBSztJQUNuRCxNQUFNQyxHQUFHLEdBQUcxRSxnQkFBQyxDQUFDMEIsR0FBRyxDQUFDd0MsYUFBYSxFQUFFTyxJQUFJLEVBQUUsSUFBSSxDQUFDOztJQUU1QyxJQUFJQyxHQUFHLEVBQUU7TUFDTCxNQUFNQyxRQUFRLEdBQUdGLElBQUksQ0FBQ0csUUFBUSxDQUFDLEdBQUcsQ0FBQztNQUM1QixJQUFHSCxJQUFLLEdBQUU7TUFDWEEsSUFBSTs7TUFFVkQsR0FBRyxDQUFDRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDbEIsSUFBSUQsR0FBRyxDQUFDRyxVQUFVLEtBQUtDLG1CQUFFLENBQUNDLEVBQUUsQ0FBQ0MsS0FBSyxFQUFFO1FBQ2hDUixHQUFHLENBQUNHLFFBQVEsQ0FBQyxDQUFDRCxHQUFHLENBQUNHLFVBQVUsQ0FBQyxHQUFJLElBQUdWLEtBQUssQ0FBQ00sSUFBSSxDQUFFLEdBQUU7TUFDdEQsQ0FBQyxNQUFNLElBQUlDLEdBQUcsQ0FBQ0csVUFBVSxLQUFLQyxtQkFBRSxDQUFDQyxFQUFFLENBQUNFLEVBQUUsRUFBRTtRQUNwQ1QsR0FBRyxDQUFDRyxRQUFRLENBQUMsQ0FBQ0QsR0FBRyxDQUFDRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUNWLEtBQUssQ0FBQ00sSUFBSSxDQUFDLEVBQUUsQ0FBQ04sS0FBSyxDQUFDTSxJQUFJLENBQUMsQ0FBQztNQUNyRSxDQUFDLE1BQU0sSUFBSUMsR0FBRyxDQUFDRyxVQUFVLEtBQUtDLG1CQUFFLENBQUNDLEVBQUUsQ0FBQ0csRUFBRSxFQUFFO1FBQ3BDVixHQUFHLENBQUNHLFFBQVEsQ0FBQyxDQUFDRCxHQUFHLENBQUNHLFVBQVUsQ0FBQyxHQUFHVixLQUFLLENBQUNNLElBQUksQ0FBQyxDQUFDdkMsS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUMxRCxDQUFDLE1BQU0sSUFBSXdDLEdBQUcsQ0FBQ0csVUFBVSxLQUFLQyxtQkFBRSxDQUFDQyxFQUFFLENBQUNHLEVBQUUsRUFBRTtRQUNwQ1YsR0FBRyxDQUFDRyxRQUFRLENBQUMsQ0FBQ0QsR0FBRyxDQUFDRyxVQUFVLENBQUMsR0FBR1YsS0FBSyxDQUFDTSxJQUFJLENBQUMsQ0FBQ3ZDLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDMUQsQ0FBQyxNQUFNO1FBQ0gsSUFBSWlELFVBQVU7UUFDZCxJQUFJO1VBQ0E7VUFDQUEsVUFBVSxHQUFHbkQsSUFBSSxDQUFDQyxLQUFLLENBQUNrQyxLQUFLLENBQUNNLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxPQUFPVyxDQUFDLEVBQUU7VUFDUjtVQUNBRCxVQUFVLEdBQUdoQixLQUFLLENBQUNNLElBQUksQ0FBQztRQUM1QjtRQUNBRCxHQUFHLENBQUNHLFFBQVEsQ0FBQyxDQUFDRCxHQUFHLENBQUNHLFVBQVUsQ0FBQyxHQUFHTSxVQUFVO01BQzlDOztNQUVBLElBQUlULEdBQUcsQ0FBQ1csSUFBSSxLQUFLUCxtQkFBRSxDQUFDUSxPQUFPLEVBQUU7UUFDekIsTUFBTUMsVUFBVSxHQUFHdkYsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ3lDLEtBQUssRUFBRU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDZSxXQUFXLENBQUMsQ0FBQzs7UUFFdkQsTUFBTUMsVUFBVSxHQUFHO1VBQ2YsT0FBTyxFQUFFLEtBQUs7VUFDZCxNQUFNLEVBQUUsSUFBSTtVQUNaLE1BQU0sRUFBRTtRQUNaLENBQUM7O1FBRURqQixHQUFHLENBQUNHLFFBQVEsQ0FBQyxDQUFDRCxHQUFHLENBQUNHLFVBQVUsQ0FBQyxHQUFHWSxVQUFVLENBQUNGLFVBQVUsQ0FBQztNQUMxRDtJQUNKOztJQUVBLE9BQU9mLEdBQUc7RUFDZCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0VBRU4sSUFBSU4sYUFBYSxFQUFFd0IsTUFBTSxJQUFJLENBQUNwQixLQUFLLEVBQUVvQixNQUFNLEVBQUU7SUFDekNwQixLQUFLLENBQUNvQixNQUFNLEdBQUcsSUFBSTtFQUN2Qjs7RUFFQSxNQUFNcEMsV0FBVyxHQUFHLElBQUE1QyxvQ0FBaUIsRUFBQ1MsS0FBSyxDQUFDO0VBQzVDLE1BQU13RSxVQUFVLEdBQUc7SUFDZnBDLFVBQVUsRUFBRUQ7RUFDaEIsQ0FBQzs7RUFFRCxJQUFJYyxTQUFTLElBQUlDLE9BQU8sRUFBRTtJQUN0QixNQUFNdUIsQ0FBQyxHQUFHQyxnQkFBTSxDQUFDQyxHQUFHLENBQUMxQixTQUFTLENBQUM7SUFDL0IsTUFBTWdCLENBQUMsR0FBR1MsZ0JBQU0sQ0FBQ0MsR0FBRyxDQUFDekIsT0FBTyxDQUFDO0lBQzdCLE1BQU0wQixLQUFLLEdBQUc7TUFDVixDQUFDakIsbUJBQUUsQ0FBQ0MsRUFBRSxDQUFDaUIsT0FBTyxHQUFHLENBQUNKLENBQUMsQ0FBQ0ssTUFBTSxDQUFDLENBQUMsRUFBRWIsQ0FBQyxDQUFDYSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxDQUFDTCxDQUFDLENBQUNNLE9BQU8sQ0FBQyxDQUFDLEVBQUU7TUFDZCxNQUFNLEVBQUUsR0FBR3BELHFCQUFTLENBQUNxRCxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNDOztJQUVBLElBQUksQ0FBQ2YsQ0FBQyxDQUFDYyxPQUFPLENBQUMsQ0FBQyxFQUFFO01BQ2QsTUFBTSxFQUFFLEdBQUdwRCxxQkFBUyxDQUFDc0QsY0FBYyxDQUFDLENBQUM7SUFDekM7O0lBRUFULFVBQVUsQ0FBQ1UsU0FBUyxHQUFHTixLQUFLO0VBQ2hDOztFQUVBLE1BQU1PLFFBQVEsR0FBR2xFLE1BQU0sQ0FBQ21FLE1BQU0sQ0FBQ2pDLEtBQUssRUFBRXFCLFVBQVUsQ0FBQzs7RUFFakQsT0FBT1csUUFBUTtBQUNuQixDQUFDOzs7Ozs7Ozs7OytGQzNGRCxJQUFBdkksT0FBQSxHQUFBQyxtQkFBQSx5QkFBdUIsSUFBQUMsUUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBLFdBQUFHLHVCQUFBRSxHQUFBLFVBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsS0FBQUUsT0FBQSxFQUFBRixHQUFBOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1vSSxVQUFVLEdBQUE3RixrQkFBQSxHQUFHLFVBQVVRLEtBQUssRUFBRXNGLGFBQWEsRUFBRTtFQUN0RCxJQUFJQyxtQkFBbUIsR0FBRzFHLGdCQUFDLENBQUMyRyxLQUFLLENBQUNGLGFBQWEsQ0FBQztFQUNoRCxJQUFJdEMsS0FBSyxHQUFHbkUsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ1AsS0FBSyxFQUFFLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzNELElBQUl5RixJQUFJLEdBQUc1RyxnQkFBQyxDQUFDMEIsR0FBRyxDQUFDeUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxZQUFZOztFQUU3RCxPQUFPeUMsSUFBSSxDQUFDMUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDcUMsTUFBTSxDQUFDLENBQUNDLEdBQUcsRUFBRUMsSUFBSSxLQUFLOztJQUV6QyxNQUFNb0MsUUFBUSxHQUFHcEMsSUFBSSxDQUFDcUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBR3JDLElBQUksQ0FBQ3NDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBR3RDLElBQUk7O0lBRWhFLElBQUl6RSxnQkFBQyxDQUFDMEIsR0FBRyxDQUFDZ0YsbUJBQW1CLEVBQUVHLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRTtNQUM1QyxNQUFNRyxRQUFRLEdBQUcsRUFBRTs7TUFFbkJILFFBQVEsQ0FBQzNFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQytFLE9BQU8sQ0FBQyxDQUFDQyxlQUFlLEtBQUs7UUFDN0NGLFFBQVEsQ0FBQ0csSUFBSSxDQUFDRCxlQUFlLENBQUM7TUFDbEMsQ0FBQyxDQUFDOztNQUVGLElBQUl6QyxJQUFJLENBQUNxQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3pCRSxRQUFRLENBQUNHLElBQUksQ0FBQyxNQUFNLENBQUM7TUFDekIsQ0FBQyxNQUFNO1FBQ0hILFFBQVEsQ0FBQ0csSUFBSSxDQUFDLEtBQUssQ0FBQztNQUN4QjtNQUNBM0MsR0FBRyxDQUFDMkMsSUFBSSxDQUFDSCxRQUFRLENBQUM7SUFDdEI7O0lBRUEsT0FBT3hDLEdBQUc7RUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ1YsQ0FBQzs7Ozs7Ozs7OztzRkN4QjZCLEdBQWQ0QyxjQUFjLENBQUF6Ryw0QkFhTSxHQUFwQjBHLG9CQUFvQixDQXhCcEMsSUFBQXRKLE9BQUEsR0FBQUMsbUJBQUEseUJBQXVCLElBQUFDLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQSxFQUN2QixJQUFBNkYsVUFBQSxHQUFBNUYsbUJBQUEsK0JBQTJCLElBQUE2RixXQUFBLEdBQUEzRixzQkFBQSxDQUFBMEYsVUFBQSxXQUFBMUYsdUJBQUFFLEdBQUEsVUFBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUEsS0FFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNPLFNBQVNnSixjQUFjQSxDQUFDRSxNQUFNLEVBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUNwREQsTUFBTSxHQUFHdEgsZ0JBQUMsQ0FBQzJHLEtBQUssQ0FBQ1csTUFBTSxDQUFDLENBRXhCLE1BQU1FLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FFbEJILG9CQUFvQixDQUFDQyxNQUFNLEVBQUVFLE9BQU8sQ0FBQyxDQUNyQ3BGLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDa0YsVUFBVSxDQUFDLENBQUNOLE9BQU8sQ0FBQyxDQUFDUSxHQUFHLEtBQUssQ0FDckNKLG9CQUFvQixDQUFDRSxVQUFVLENBQUNFLEdBQUcsQ0FBQyxFQUFFRCxPQUFPLEVBQUVDLEdBQUcsQ0FBQyxDQUN2RCxDQUFDLENBQUMsQ0FFRixPQUFPRCxPQUFPLENBQ2xCLENBRU8sU0FBU0gsb0JBQW9CQSxDQUFDQyxNQUFNLEVBQUVJLFdBQVcsRUFBRUMsU0FBUyxHQUFHLEVBQUUsRUFBRSxDQUN0RSxNQUFNQyxXQUFXLEdBQUc1SCxnQkFBQyxDQUFDMEIsR0FBRyxDQUFDNEYsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDN0NBLE1BQU0sR0FBR3RILGdCQUFDLENBQUMwQixHQUFHLENBQUM0RixNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUlBLE1BQU0sQ0FFMUMsT0FBT2xGLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDaUYsTUFBTSxDQUFDLENBQUMvQyxNQUFNLENBQUMsQ0FBQ0MsR0FBRyxFQUFFQyxJQUFJLEtBQUssQ0FDN0MsSUFBSWdELEdBQUcsR0FBR2hELElBQUksQ0FFZCxJQUFJbUQsV0FBVyxFQUFFO1FBQ2JwRCxHQUFHLENBQUNvRCxXQUFXLENBQUMsR0FBRyxFQUFFdkMsSUFBSSxFQUFFUCxtQkFBRSxDQUFDK0MsTUFBTSxFQUFFaEQsVUFBVSxFQUFFQyxtQkFBRSxDQUFDQyxFQUFFLENBQUMrQyxFQUFFLENBQUMsQ0FBQztNQUNoRTs7TUFFQSxJQUFJSCxTQUFTLEVBQUU7UUFDWEYsR0FBRyxHQUFJLEdBQUVFLFNBQVUsSUFBR2xELElBQUssRUFBQztNQUNoQzs7TUFFQSxJQUFJNkMsTUFBTSxDQUFDN0MsSUFBSSxDQUFDLENBQUNJLFVBQVUsRUFBRTtRQUN6QkwsR0FBRyxDQUFDaUQsR0FBRyxDQUFDLEdBQUcsRUFBRTVDLFVBQVUsRUFBRXlDLE1BQU0sQ0FBQzdDLElBQUksQ0FBQyxDQUFDSSxVQUFVLENBQUMsQ0FBQzs7UUFFbEQsT0FBT0wsR0FBRztNQUNkOztNQUVBLE1BQU11RCxRQUFRLEdBQUdDLGtCQUFrQixJQUFJVixNQUFNLENBQUM3QyxJQUFJLENBQUMsQ0FBQ1ksSUFBSTs7TUFFeEQ7TUFDQSxRQUFRMEMsUUFBUTtRQUNaLEtBQUtqRCxtQkFBRSxDQUFDbUQsSUFBSTtRQUNaLEtBQUtuRCxtQkFBRSxDQUFDK0MsTUFBTTtRQUNkLEtBQUsvQyxtQkFBRSxDQUFDb0QsSUFBSTtVQUNSMUQsR0FBRyxDQUFDaUQsR0FBRyxDQUFDLEdBQUcsRUFBRTVDLFVBQVUsRUFBRUMsbUJBQUUsQ0FBQ0MsRUFBRSxDQUFDQyxLQUFLLENBQUMsQ0FBQztVQUN0Qzs7UUFFSixLQUFLRixtQkFBRSxDQUFDcUQsT0FBTztVQUNYM0QsR0FBRyxDQUFDaUQsR0FBRyxDQUFDLEdBQUcsRUFBRTVDLFVBQVUsRUFBRUMsbUJBQUUsQ0FBQ0MsRUFBRSxDQUFDRSxFQUFFLENBQUMsQ0FBQztVQUNuQzs7UUFFSixLQUFLSCxtQkFBRSxDQUFDUSxPQUFPO1FBQ2YsS0FBS1IsbUJBQUUsQ0FBQ3NELE1BQU07UUFDZCxLQUFLdEQsbUJBQUUsQ0FBQ3VELE9BQU87VUFDWDdELEdBQUcsQ0FBQ2lELEdBQUcsQ0FBQyxHQUFHLEVBQUVwQyxJQUFJLEVBQUUwQyxRQUFRLEVBQUVsRCxVQUFVLEVBQUVDLG1CQUFFLENBQUNDLEVBQUUsQ0FBQytDLEVBQUUsQ0FBQyxDQUFDO1VBQ25EOztRQUVKLEtBQUtoRCxtQkFBRSxDQUFDd0QsSUFBSTtRQUNaLEtBQUt4RCxtQkFBRSxDQUFDeUQsUUFBUTtVQUNaL0QsR0FBRyxDQUFDaUQsR0FBRyxDQUFDLEdBQUcsRUFBRTVDLFVBQVUsRUFBRUMsbUJBQUUsQ0FBQ0MsRUFBRSxDQUFDeUQsRUFBRSxDQUFDLENBQUM7VUFDbkM7TUFDUjs7TUFFQTtNQUNBLElBQUlULFFBQVEsWUFBWWpELG1CQUFFLENBQUMrQyxNQUFNLEVBQUU7UUFDL0JyRCxHQUFHLENBQUNpRCxHQUFHLENBQUMsR0FBRyxFQUFFNUMsVUFBVSxFQUFFQyxtQkFBRSxDQUFDQyxFQUFFLENBQUNDLEtBQUssQ0FBQyxDQUFDO01BQzFDLENBQUMsTUFBTSxJQUFJK0MsUUFBUSxZQUFZakQsbUJBQUUsQ0FBQ3FELE9BQU8sRUFBRTtRQUN2QzNELEdBQUcsQ0FBQ2lELEdBQUcsQ0FBQyxHQUFHLEVBQUU1QyxVQUFVLEVBQUVDLG1CQUFFLENBQUNDLEVBQUUsQ0FBQ0UsRUFBRSxDQUFDLENBQUM7TUFDdkMsQ0FBQyxNQUFNLElBQUk4QyxRQUFRLFlBQVlqRCxtQkFBRSxDQUFDdUQsT0FBTyxFQUFFO1FBQ3ZDN0QsR0FBRyxDQUFDaUQsR0FBRyxDQUFDLEdBQUcsRUFBRTVDLFVBQVUsRUFBRUMsbUJBQUUsQ0FBQ0MsRUFBRSxDQUFDRSxFQUFFLENBQUMsQ0FBQztNQUN2QyxDQUFDLE1BQU0sSUFBSThDLFFBQVEsWUFBWWpELG1CQUFFLENBQUNzRCxNQUFNLEVBQUU7UUFDdEM1RCxHQUFHLENBQUNpRCxHQUFHLENBQUMsR0FBRyxFQUFFNUMsVUFBVSxFQUFFQyxtQkFBRSxDQUFDQyxFQUFFLENBQUNFLEVBQUUsQ0FBQyxDQUFDO01BQ3ZDLENBQUMsTUFBTSxJQUFJOEMsUUFBUSxZQUFZakQsbUJBQUUsQ0FBQ1EsT0FBTyxFQUFFO1FBQ3ZDZCxHQUFHLENBQUNpRCxHQUFHLENBQUMsR0FBRyxFQUFFcEMsSUFBSSxFQUFFMEMsUUFBUSxFQUFFbEQsVUFBVSxFQUFFQyxtQkFBRSxDQUFDQyxFQUFFLENBQUMrQyxFQUFFLENBQUMsQ0FBQztNQUN2RCxDQUFDLE1BQU0sSUFBSUMsUUFBUSxZQUFZakQsbUJBQUUsQ0FBQzJELEtBQUssRUFBRTtRQUNyQ2pFLEdBQUcsQ0FBQ2lELEdBQUcsQ0FBQyxHQUFHLEVBQUVwQyxJQUFJLEVBQUUwQyxRQUFRLEVBQUVsRCxVQUFVLEVBQUVDLG1CQUFFLENBQUNDLEVBQUUsQ0FBQzJELFFBQVEsQ0FBQyxDQUFDO01BQzdELENBQUMsTUFBTSxJQUFJWCxRQUFRLFlBQVlqRCxtQkFBRSxDQUFDeUQsUUFBUSxFQUFFO1FBQ3hDL0QsR0FBRyxDQUFDaUQsR0FBRyxDQUFDLEdBQUcsRUFBRXBDLElBQUksRUFBRTBDLFFBQVEsRUFBRWxELFVBQVUsRUFBRUMsbUJBQUUsQ0FBQ0MsRUFBRSxDQUFDK0MsRUFBRSxDQUFDLENBQUM7TUFDdkQ7O01BRUE7TUFDQXRELEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFYSxJQUFJLEVBQUVQLG1CQUFFLENBQUN3RCxJQUFJLEVBQUV6RCxVQUFVLEVBQUVDLG1CQUFFLENBQUNDLEVBQUUsQ0FBQ3lELEVBQUUsQ0FBQyxDQUFDO01BQzFEaEUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUVhLElBQUksRUFBRVAsbUJBQUUsQ0FBQ3dELElBQUksRUFBRXpELFVBQVUsRUFBRUMsbUJBQUUsQ0FBQ0MsRUFBRSxDQUFDeUQsRUFBRSxDQUFDLENBQUM7TUFDMURoRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRWEsSUFBSSxFQUFFUCxtQkFBRSxDQUFDdUQsT0FBTyxFQUFFeEQsVUFBVSxFQUFFQyxtQkFBRSxDQUFDQyxFQUFFLENBQUMrQyxFQUFFLENBQUMsQ0FBQzs7TUFFdEQsT0FBT3RELEdBQUc7SUFDZCxDQUFDLEVBQUVrRCxXQUFXLENBQUM7QUFDbkI7Ozs7Ozs7Ozs7Z0dDekZ3QyxHQUF4QmlCLHdCQUF3QixDQUFBaEksZUF3QlgsR0FBUGlJLE9BQU8sRUE5QjdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNPLFNBQVNELHdCQUF3QkEsQ0FBQ0UsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRSxDQUM1REYsTUFBTSxHQUFHQSxNQUFNLElBQUksRUFBRSxDQUNyQkMsS0FBSyxHQUFHQSxLQUFLLElBQUksQ0FBQyxDQUNsQkMsTUFBTSxHQUFHQSxNQUFNLElBQUksQ0FBQyxDQUVwQixNQUFNQyxPQUFPLEdBQUdILE1BQU0sQ0FBQ2pILE1BQU0sR0FBR2tILEtBQUssQ0FDckMsSUFBSUUsT0FBTyxFQUFFLENBQ1RILE1BQU0sQ0FBQ0ksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN4QixDQUNBLE1BQU1DLFVBQVUsR0FBRyxFQUNmSCxNQUFNLEVBQUVBLE1BQU0sRUFDZEQsS0FBSyxFQUFFQSxLQUFLLEVBQ1pLLElBQUksRUFBRU4sTUFBTSxFQUNaRyxPQUFPLEVBQUVBLE9BQU8sQ0FDcEIsQ0FBQyxDQUVELE9BQU9FLFVBQVUsQ0FDckIsQ0FBQyxDQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FDTyxlQUFlTixPQUFPQSxDQUFDUSxLQUFLLEVBQUVDLE9BQU8sRUFBRSxDQUUxQyxNQUFNUCxLQUFLLEdBQUdPLE9BQU8sQ0FBQ1AsS0FBSyxJQUFJLENBQUMsQ0FDaEMsTUFBTVEsUUFBUSxHQUFHbEgsTUFBTSxDQUFDbUUsTUFBTSxDQUFDLEVBQUNnRCxPQUFPLEVBQUUsRUFBRUMsR0FBRyxFQUFFLElBQUksRUFBRUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUMsRUFBRUosT0FBTyxFQUFFLEVBQUVQLEtBQUssRUFBRUEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDckcsTUFBTVksT0FBTyxHQUFHLE1BQU1OLEtBQUssQ0FBQ1IsT0FBTyxDQUFDVSxRQUFRLENBQUMsQ0FDN0MsT0FBT1gsd0JBQXdCLENBQUNlLE9BQU8sRUFBRVosS0FBSyxFQUFFTyxPQUFPLENBQUNOLE1BQU0sQ0FBQyxDQUNuRSxDQUVBLE1BQU1ZLFNBQVMsR0FBRyxFQUNkZjtBQUNKLENBQUMsQ0FBQ2pJLGtCQUFBO0FBQ2FnSixTQUFTOzs7Ozs7Ozs7O2dFQ3pDeEIsSUFBQUMsWUFBQSxHQUFBNUwsbUJBQUE7QUFDQSxJQUFBNkwsZUFBQSxHQUFBN0wsbUJBQUE7O0FBRUEsTUFBTThMLFVBQVUsR0FBRztFQUNmcEksR0FBRyxFQUFFQSxDQUFDcUksTUFBTSxLQUFLckksR0FBRyxDQUFDcUksTUFBTTtBQUMvQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLGVBQWVySSxHQUFHQSxDQUFDcUksTUFBTSxFQUFFO0VBQ3ZCLE1BQU1DLFFBQVEsR0FBR0MsNkJBQWdCLENBQUNDLElBQUksQ0FBQyxJQUFJQyx3QkFBUSxDQUFDLENBQUMsQ0FBQztFQUN0RCxPQUFPSCxRQUFRLENBQUN0SSxHQUFHLENBQUNxSSxNQUFNLENBQUM7QUFDL0IsQ0FBQ3BKLGtCQUFBOztBQUVjbUosVUFBVTs7Ozs7Ozs7OztvRkNYRyxHQUFaTSxZQUFZLENBSjVCLElBQUFDLFdBQUEsR0FBQXJNLG1CQUFBLDREQUNBLElBQUFELE9BQUEsR0FBQUMsbUJBQUEseUJBQXVCLElBQUFDLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQSxFQUN2QixJQUFBdU0sU0FBQSxHQUFBdE0sbUJBQUEsNkJBQStCLElBQUF1TSxVQUFBLEdBQUFyTSxzQkFBQSxDQUFBb00sU0FBQSxXQUFBcE0sdUJBQUFFLEdBQUEsVUFBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUEsSUFFeEIsU0FBU2dNLFlBQVlBLENBQUNqSixLQUFLLEVBQUVxSixXQUFXLEVBQUVDLG1CQUFtQixFQUFFQyx1QkFBdUIsR0FBRyxLQUFLLEVBQUVDLGVBQWUsRUFBRTtFQUNwSCxJQUFJLENBQUN4SixLQUFLLElBQUksQ0FBQ0EsS0FBSyxDQUFDeUosT0FBTyxFQUFFO0lBQzFCLE9BQU9DLGtCQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0VBQzVCOztFQUVBLElBQUlDLFNBQVMsR0FBRyxLQUFLOztFQUVyQixPQUFPRixrQkFBTyxDQUFDM0ssR0FBRyxDQUFDaUIsS0FBSyxDQUFDeUosT0FBTyxFQUFFLENBQUNJLE1BQU0sS0FBSztJQUMxQyxNQUFNQyxPQUFPLEdBQUdqSixJQUFJLENBQUNDLEtBQUssQ0FBQ2pDLGdCQUFDLENBQUMwQixHQUFHLENBQUNzSixNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELE1BQU1FLFFBQVEsR0FBR0QsT0FBTyxDQUFDRSxNQUFNO0lBQy9CLE1BQU1DLEtBQUssR0FBR0gsT0FBTyxDQUFDRyxLQUFLLElBQUksRUFBRTs7SUFFakMsT0FBT1Asa0JBQU8sQ0FBQzNLLEdBQUcsQ0FBQ2tMLEtBQUssRUFBRSxDQUFDQyxJQUFJLEtBQUs7TUFDaEMsSUFBSUMsSUFBSSxHQUFHQyxrQkFBa0IsQ0FBQ0YsSUFBSSxDQUFDO01BQ25DLElBQUlDLElBQUksRUFBRTtRQUNOLE9BQU8sSUFBQUUsc0JBQVUsRUFBQ0YsSUFBSSxFQUFFSixRQUFRLEVBQUVWLFdBQVcsRUFBRSxFQUFFRSx1QkFBdUIsRUFBRUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDOUssS0FBSyxDQUFDLENBQUM0TCxHQUFHLEtBQUs7VUFDeEcsSUFBSWhCLG1CQUFtQixJQUFJLENBQUNBLG1CQUFtQixDQUFDZ0IsR0FBRyxFQUFFSCxJQUFJLENBQUMsRUFBRTtZQUN4RFAsU0FBUyxHQUFHLElBQUk7VUFDcEI7UUFDSixDQUFDLENBQUM7TUFDTjtJQUNKLENBQUMsQ0FBQztFQUNOLENBQUMsQ0FBQyxDQUFDMUssSUFBSSxDQUFDLE1BQU07SUFDVixJQUFJMEssU0FBUyxFQUFFO01BQ1gsTUFBTSwrRUFBK0U7SUFDekY7RUFDSixDQUFDLENBQUM7QUFDTjs7Ozs7Ozs7OztrRkM1QmdDLEdBQVZTLFVBQVUsQ0FIaEMsSUFBQXpOLE9BQUEsR0FBQUMsbUJBQUEseUJBQXVCLElBQUFDLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQSxFQUN2QixJQUFBMk4sUUFBQSxHQUFBMU4sbUJBQUEsc0VBQWlELElBQUEyTixTQUFBLEdBQUF6TixzQkFBQSxDQUFBd04sUUFBQSxXQUFBeE4sdUJBQUFFLEdBQUEsVUFBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUEsSUFFMUMsZUFBZW9OLFVBQVVBLENBQUNGLElBQUksRUFBRUosUUFBUSxFQUFFVixXQUFXLEVBQUVuQixPQUFPLEVBQUU7RUFDbkUsTUFBTXFCLHVCQUF1QixHQUFHMUssZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQzJILE9BQU8sRUFBRSx5QkFBeUIsQ0FBQztFQUN6RSxNQUFNc0IsZUFBZSxHQUFHM0ssZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQzJILE9BQU8sRUFBRSxpQkFBaUIsQ0FBQztFQUN6RCxNQUFNVSxNQUFNLEdBQUc7SUFDWDZCLE1BQU0sRUFBRVYsUUFBUTtJQUNoQlcsR0FBRyxFQUFFUDtFQUNULENBQUM7RUFDRCxJQUFJUSxJQUFJLEdBQUcsSUFBSTtFQUNmLElBQUk7SUFDQUEsSUFBSSxHQUFHLE1BQU1DLGlCQUFNLENBQUNDLFNBQVMsQ0FBQ2pDLE1BQU0sQ0FBQztJQUNyQyxNQUFNa0MsVUFBVSxHQUFHakssSUFBSSxDQUFDQyxLQUFLLENBQUM2SixJQUFJLENBQUM7SUFDbkMsTUFBTUksYUFBYSxHQUFHLE1BQU0xQixXQUFXLENBQUN5QixVQUFVLENBQUM7SUFDbkQsTUFBTUYsaUJBQU0sQ0FBQ0ksWUFBWSxDQUFDcEMsTUFBTSxDQUFDOztJQUVqQyxPQUFPbUMsYUFBYTtFQUN4QixDQUFDLENBQUMsT0FBTzNMLEtBQUssRUFBRTtJQUNaZixPQUFPLENBQUNlLEtBQUssQ0FBQyxtQkFBbUIsRUFBRUEsS0FBSyxDQUFDOztJQUV6QyxJQUFJQSxLQUFLLENBQUM2TCxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUNOLElBQUksRUFBRTtNQUNyQztJQUNKOztJQUVBLElBQUlPLE9BQU8sR0FBRyxFQUFFOztJQUVoQixJQUFJMUIsZUFBZSxFQUFFO01BQ2pCO01BQ0EsTUFBTTJCLFlBQVksR0FBR2xLLE1BQU0sQ0FBQ21LLE1BQU0sQ0FBQzVCLGVBQWUsQ0FBQztNQUNuRCxNQUFNNkIsS0FBSyxHQUFHbEIsSUFBSSxDQUFDcEosS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUM3QixNQUFNdUssUUFBUSxHQUFHek0sZ0JBQUMsQ0FBQzBNLElBQUksQ0FBQ0YsS0FBSyxDQUFDO01BQzlCLE1BQU1HLFVBQVUsR0FBRzNNLGdCQUFDLENBQUM0TSxLQUFLLENBQUNKLEtBQUssQ0FBQzs7TUFFakMsSUFBSUYsWUFBWSxDQUFDeEYsT0FBTyxDQUFDNkYsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDdkMsSUFBSWpDLHVCQUF1QixFQUFFO1VBQ3pCMkIsT0FBTyxHQUFJLEdBQUVNLFVBQVcsVUFBU0YsUUFBUyxFQUFDO1FBQy9DLENBQUMsTUFBTSxJQUFJek0sZ0JBQUMsQ0FBQzZNLFVBQVUsQ0FBQ3ZCLElBQUksRUFBRyxHQUFFcUIsVUFBVyxlQUFjLENBQUMsRUFBRTtVQUN6RE4sT0FBTyxHQUFHck0sZ0JBQUMsQ0FBQzhNLE9BQU8sQ0FBQ3hCLElBQUksRUFBRyxHQUFFcUIsVUFBVyxlQUFjLEVBQUcsR0FBRUEsVUFBVyxnQkFBZSxDQUFDO1FBQzFGLENBQUMsTUFBTSxJQUFJM00sZ0JBQUMsQ0FBQzZNLFVBQVUsQ0FBQ3ZCLElBQUksRUFBRyxHQUFFcUIsVUFBVyxnQkFBZSxDQUFDLEVBQUU7VUFDMUROLE9BQU8sR0FBR3JNLGdCQUFDLENBQUM4TSxPQUFPLENBQUN4QixJQUFJLEVBQUcsR0FBRXFCLFVBQVcsZ0JBQWUsRUFBRyxHQUFFQSxVQUFXLFNBQVEsQ0FBQztRQUNwRixDQUFDLE1BQU07VUFDSE4sT0FBTyxHQUFJLEdBQUVNLFVBQVcsZ0JBQWVGLFFBQVMsRUFBQztRQUNyRDtNQUNKLENBQUMsTUFBTTtRQUNISixPQUFPLEdBQUksNkJBQTRCZixJQUFLLEVBQUM7TUFDakQ7O0lBRUosQ0FBQyxNQUFNO01BQ0gsSUFBSVosdUJBQXVCLEVBQUU7UUFDekIyQixPQUFPLEdBQUksU0FBUWYsSUFBSyxFQUFDO01BQzdCLENBQUMsTUFBTSxJQUFJdEwsZ0JBQUMsQ0FBQzZNLFVBQVUsQ0FBQ3ZCLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRTtRQUMzQ2UsT0FBTyxHQUFHck0sZ0JBQUMsQ0FBQzhNLE9BQU8sQ0FBQ3hCLElBQUksRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDO01BQzlELENBQUMsTUFBTSxJQUFJdEwsZ0JBQUMsQ0FBQzZNLFVBQVUsQ0FBQ3ZCLElBQUksRUFBRSxlQUFlLENBQUMsRUFBRTtRQUM1Q2UsT0FBTyxHQUFHck0sZ0JBQUMsQ0FBQzhNLE9BQU8sQ0FBQ3hCLElBQUksRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDO01BQ3hELENBQUMsTUFBTTtRQUNILElBQUl0TCxnQkFBQyxDQUFDNEUsUUFBUSxDQUFDMEcsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1VBQ2pDQSxJQUFJLEdBQUd0TCxnQkFBQyxDQUFDME0sSUFBSSxDQUFDcEIsSUFBSSxDQUFDcEosS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDOztRQUVBbUssT0FBTyxHQUFJLGVBQWNmLElBQUssRUFBQztNQUNuQztJQUNKOztJQUVBLE1BQU15QixTQUFTLEdBQUc7TUFDZG5CLE1BQU0sRUFBRVYsUUFBUTtNQUNoQlcsR0FBRyxFQUFFUSxPQUFPO01BQ1pXLElBQUksRUFBRWxCO0lBQ1YsQ0FBQzs7SUFFRCxNQUFNQyxpQkFBTSxDQUFDa0IsU0FBUyxDQUFDRixTQUFTLENBQUM7SUFDakMsTUFBTWhCLGlCQUFNLENBQUNJLFlBQVksQ0FBQ3BDLE1BQU0sQ0FBQzs7SUFFakMsTUFBTXhKLEtBQUs7RUFDZjtBQUNKOzs7Ozs7Ozs7OzRFQy9EMEIsR0FBSjJNLElBQUksQ0FBQXZNLHFCQW1EUyxHQUFid00sYUFBYSxDQS9EbkMsSUFBQXBQLE9BQUEsR0FBQUMsbUJBQUEseUJBQXVCLElBQUFDLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQSxFQUN2QixJQUFBK0YsT0FBQSxHQUFBOUYsbUJBQUEseUJBQTRCLElBQUErRixRQUFBLEdBQUE3RixzQkFBQSxDQUFBNEYsT0FBQSxFQUM1QixJQUFBd0csU0FBQSxHQUFBdE0sbUJBQUEsNkJBQStCLElBQUF1TSxVQUFBLEdBQUFyTSxzQkFBQSxDQUFBb00sU0FBQSxFQUMvQixJQUFBb0IsUUFBQSxHQUFBMU4sbUJBQUEsc0VBQWtELElBQUEyTixTQUFBLEdBQUF6TixzQkFBQSxDQUFBd04sUUFBQSxFQUNsRCxJQUFBMEIsU0FBQSxHQUFBcFAsbUJBQUEsb0RBQXlDLElBQUFxUCxVQUFBLEdBQUFuUCxzQkFBQSxDQUFBa1AsU0FBQSxFQUN6QyxJQUFBRSxZQUFBLEdBQUF0UCxtQkFBQSxnRUFBa0QsSUFBQXVQLGFBQUEsR0FBQXJQLHNCQUFBLENBQUFvUCxZQUFBLFdBQUFwUCx1QkFBQUUsR0FBQSxVQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQSxLQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQ08sZUFBZThPLElBQUlBLENBQUMvQixNQUFNLEVBQUVxQyxPQUFPLEVBQUU3QyxlQUFlLEVBQUUsQ0FDekQsSUFBSThDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FDckIsSUFBSUMsUUFBUSxHQUFHLEVBQUUsQ0FFakIsTUFBTUMsV0FBVyxHQUFHLElBQUE5SCxnQkFBTSxFQUFDLENBQUMsQ0FFNUIsR0FBRyxDQUNDNEgsWUFBWSxHQUFHLE1BQU1HLGlCQUFPLENBQUNDLGFBQWEsQ0FBQyxFQUN2Q2pDLE1BQU0sRUFBRVQsTUFBTSxFQUNkMkMsT0FBTyxFQUFFTixPQUFPLEVBQ2hCTyxpQkFBaUIsRUFBRS9OLGdCQUFDLENBQUMwQixHQUFHLENBQUMrTCxZQUFZLEVBQUUsdUJBQXVCLENBQUMsQ0FDbkUsQ0FBQyxDQUFDLENBRUYsSUFBSU8sUUFBUSxHQUFHaE8sZ0JBQUMsQ0FBQ2lPLE1BQU0sQ0FBQ1IsWUFBWSxDQUFDUyxRQUFRLEVBQUUsQ0FBQzdDLElBQUksS0FBSyxDQUNyRCxJQUFJckwsZ0JBQUMsQ0FBQzZNLFVBQVUsQ0FBQzdNLGdCQUFDLENBQUMwQixHQUFHLENBQUMySixJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FDakQsTUFBTThDLGFBQWEsR0FBR25PLGdCQUFDLENBQUMwQixHQUFHLENBQUMySixJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUNuSixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RELE9BQU8sSUFBQTJELGdCQUFNLEVBQUNzSSxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUNDLGNBQWMsQ0FBQ1QsV0FBVyxDQUFDLENBQzVFLENBQ0EsSUFBSWhELGVBQWUsRUFBRSxDQUNqQjtVQUNBLE1BQU0yQixZQUFZLEdBQUdsSyxNQUFNLENBQUNtSyxNQUFNLENBQUM1QixlQUFlLENBQUMsQ0FDbkQsTUFBTTZCLEtBQUssR0FBR25CLElBQUksQ0FBQ1EsR0FBRyxDQUFDM0osS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUNqQyxNQUFNdUssUUFBUSxHQUFHek0sZ0JBQUMsQ0FBQzBNLElBQUksQ0FBQ0YsS0FBSyxDQUFDLENBQzlCLE1BQU1HLFVBQVUsR0FBRzNNLGdCQUFDLENBQUM0TSxLQUFLLENBQUNKLEtBQUssQ0FBQyxDQUNqQyxJQUFJeE0sZ0JBQUMsQ0FBQ3lCLE9BQU8sQ0FBQ2dMLFFBQVEsQ0FBQyxFQUFFLENBQ3JCLE9BQU8sS0FBSyxDQUVoQixDQUFDLE1BQU0sSUFBSUgsWUFBWSxDQUFDeEYsT0FBTyxDQUFDNkYsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FDaEQsT0FBTyxLQUFLLENBQ2hCLENBRUEsT0FBTyxDQUFDM00sZ0JBQUMsQ0FBQzZNLFVBQVUsQ0FBQ3hCLElBQUksQ0FBQ1EsR0FBRyxFQUFHLEdBQUVjLFVBQVcsUUFBTyxDQUFDLENBQ3pELENBQ0EsT0FBTyxDQUFDM00sZ0JBQUMsQ0FBQzZNLFVBQVUsQ0FBQ3hCLElBQUksQ0FBQ1EsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUMzQyxDQUFDLENBQUMsQ0FFRjZCLFFBQVEsR0FBRzFOLGdCQUFDLENBQUNxTyxNQUFNLENBQUNYLFFBQVEsRUFBRU0sUUFBUSxDQUFDLENBQzNDLENBQUMsUUFBUVAsWUFBWSxDQUFDYSxXQUFXLElBQUliLFlBQVksQ0FBQ2MscUJBQXFCLElBQUliLFFBQVEsQ0FBQzlMLE1BQU0sR0FBRzRMLE9BQU8sRUFFcEcsT0FBT0UsUUFBUSxDQUNuQixDQUFDLENBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQ08sZUFBZVAsYUFBYUEsQ0FBQ3FCLFdBQVcsRUFBRUMsUUFBUSxFQUFFdEQsTUFBTSxFQUFFdUQsUUFBUSxFQUFFL0QsZUFBZSxFQUFFLENBQzFGLElBQUk5QixNQUFNLENBQ1YsSUFBSSxDQUNBQSxNQUFNLEdBQUcsTUFBTWlCLHFCQUFVLENBQUNwSSxHQUFHLENBQUMsRUFDMUJpTixTQUFTLEVBQUVILFdBQVcsRUFDdEIzQyxHQUFHLEVBQUUsRUFBRXBFLEdBQUcsRUFBRWdILFFBQVEsQ0FBQyxDQUFDLENBQzFCLENBQUMsQ0FBQyxDQUNOLENBQUMsQ0FBQyxPQUFPckosQ0FBQyxFQUFFLENBQ1I1RixPQUFPLENBQUNlLEtBQUssQ0FBRSw4QkFBNkJrTyxRQUFTLFdBQVVELFdBQVksdUNBQXNDLEVBQUVwSixDQUFDLENBQUMsQ0FDekgsQ0FDQSxJQUFJd0osU0FBUyxHQUFHNU8sZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ21ILE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FDckQsSUFBSWdHLFdBQVcsR0FBRzdPLGdCQUFDLENBQUMwQixHQUFHLENBQUNtSCxNQUFNLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBRTFELE1BQU1pRyxzQkFBc0IsR0FBRyxNQUFNQyxrQkFBTyxDQUFDQyxXQUFXLENBQUMsRUFBRUMsSUFBSSxFQUFFUCxRQUFRLENBQUMsQ0FBQyxDQUFDO0VBQzVFLE1BQU1RLFFBQVEsR0FBR0osc0JBQXNCLENBQUNLLFFBQVE7RUFDaEQsTUFBTTNCLE9BQU8sR0FBR29CLFNBQVMsR0FBR0MsV0FBVzs7RUFFdkMsTUFBTW5CLFFBQVEsR0FBRyxNQUFNUixJQUFJLENBQUMvQixNQUFNLEVBQUVxQyxPQUFPLEVBQUU3QyxlQUFlLENBQUM7O0VBRTdELE1BQU15RSxXQUFXLEdBQUdwUCxnQkFBQyxDQUFDQyxLQUFLLENBQUN5TixRQUFRLENBQUM7RUFDaEN4TixHQUFHLENBQUMsS0FBSyxDQUFDO0VBQ1ZtUCxLQUFLLENBQUNULFNBQVMsQ0FBQztFQUNoQlUsS0FBSyxDQUFDLENBQUMsRUFBRVQsV0FBVyxDQUFDO0VBQ3JCek8sS0FBSyxDQUFDLENBQUM7OztFQUdaLE9BQU95SyxrQkFBTyxDQUFDM0ssR0FBRyxDQUFDa1AsV0FBVyxFQUFFLENBQUNoRSxLQUFLLEtBQUs7SUFDdkMsT0FBTzJELGtCQUFPLENBQUNRLE9BQU8sQ0FBQztNQUNuQkMsT0FBTyxFQUFFeE4sSUFBSSxDQUFDeU4sU0FBUyxDQUFDO1FBQ3BCdEUsTUFBTSxFQUFFQSxNQUFNO1FBQ2RDLEtBQUssRUFBRUE7TUFDWCxDQUFDLENBQUM7TUFDRitELFFBQVEsRUFBRUQ7SUFDZCxDQUFDLENBQUM7RUFDTixDQUFDLENBQUM7QUFDTjs7Ozs7Ozs7OzttRkNoRjJCLEdBQVhRLFdBQVcsQ0FsQjNCLElBQUFDLGNBQUEsR0FBQTNSLG1CQUFBLGtFQUNBLElBQUE0UixhQUFBLEdBQUE1UixtQkFBQSxnRUFDQSxJQUFBRCxPQUFBLEdBQUFDLG1CQUFBLHlCQUF1QixJQUFBQyxRQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUEsV0FBQUcsdUJBQUFFLEdBQUEsVUFBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUEsS0FFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNPLFNBQVNzUixXQUFXQSxDQUFDLEVBQ0l2TyxLQUFLLEVBQ0wwTyxpQkFBaUIsRUFDakJDLGVBQWUsRUFDZjVFLFFBQVEsRUFDUndELFFBQVEsRUFDUmxFLFdBQVcsRUFDWEMsbUJBQW1CLEdBQUd6SyxnQkFBQyxDQUFDK1AsSUFBSSxFQUM1QnJGLHVCQUF1QixHQUFHLEtBQUssRUFDL0JDLGVBQWUsQ0FDbkIsQ0FBQyxFQUFFLENBQzNCLElBQUksQ0FBQ3hKLEtBQUssSUFBSSxDQUFDME8saUJBQWlCLElBQUksQ0FBQ0MsZUFBZSxJQUFJLENBQUM1RSxRQUFRLElBQUksQ0FBQ3dELFFBQVEsSUFBSSxDQUFDbEUsV0FBVyxFQUFFLENBQzVGLE1BQU0sSUFBSWhLLEtBQUssQ0FBQyw4R0FBOEcsQ0FBQyxDQUNuSTs7RUFFQSxNQUFNd1AsV0FBVyxHQUFHaFEsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ1AsS0FBSyxFQUFFLHdCQUF3QixDQUFDO0VBQzFELElBQUluQixnQkFBQyxDQUFDaVEsT0FBTyxDQUFDRCxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7SUFDbkMsT0FBTyxJQUFBNUYsMEJBQVksRUFBQ2pKLEtBQUssRUFBRXFKLFdBQVcsRUFBRUMsbUJBQW1CLEVBQUVDLHVCQUF1QixFQUFFQyxlQUFlLENBQUM7RUFDMUcsQ0FBQyxNQUFNO0lBQ0g7SUFDQSxPQUFPLElBQUF3Qyw0QkFBYSxFQUFDMEMsaUJBQWlCLEVBQUVDLGVBQWUsRUFBRTVFLFFBQVEsRUFBRXdELFFBQVEsRUFBRS9ELGVBQWUsQ0FBQztFQUNqRztBQUNKOzs7Ozs7Ozs7O2dFQ3hDTyxNQUFNN0gsU0FBUyxHQUFBbkMsaUJBQUEsR0FBRztFQUNyQnVQLDhCQUE4QixFQUFFO0lBQzVCQyxPQUFPLEVBQUUseUNBQXlDO0lBQ2xEQyxTQUFTLEVBQUUsTUFBTTtJQUNqQkMsVUFBVSxFQUFFO0VBQ2hCLENBQUM7RUFDREMsZUFBZSxFQUFFO0lBQ2JILE9BQU8sRUFBRSxrQkFBa0I7SUFDM0JDLFNBQVMsRUFBRSxNQUFNO0lBQ2pCQyxVQUFVLEVBQUU7RUFDaEIsQ0FBQztFQUNERSxlQUFlLEVBQUU7SUFDYkosT0FBTyxFQUFFLDZCQUE2QjtJQUN0Q0MsU0FBUyxFQUFFLE1BQU07SUFDakJDLFVBQVUsRUFBRTtFQUNoQixDQUFDO0VBQ0RHLG1CQUFtQixFQUFFO0lBQ2pCTCxPQUFPLEVBQUUsOEJBQThCO0lBQ3ZDQyxTQUFTLEVBQUUsTUFBTTtJQUNqQkMsVUFBVSxFQUFFO0VBQ2hCLENBQUM7RUFDREksU0FBUyxFQUFFO0lBQ1BOLE9BQU8sRUFBRSxlQUFlO0lBQ3hCQyxTQUFTLEVBQUUsTUFBTTtJQUNqQkMsVUFBVSxFQUFFO0VBQ2hCLENBQUM7RUFDREssaUJBQWlCLEVBQUU7SUFDZlAsT0FBTyxFQUFFLHNDQUFzQztJQUMvQ0MsU0FBUyxFQUFFLE1BQU07SUFDakJDLFVBQVUsRUFBRTtFQUNoQixDQUFDO0VBQ0RNLGNBQWMsRUFBRTtJQUNaUixPQUFPLEVBQUUsc0JBQXNCO0lBQy9CQyxTQUFTLEVBQUUsTUFBTTtJQUNqQkMsVUFBVSxFQUFFO0VBQ2hCLENBQUM7RUFDRE8sYUFBYSxFQUFFO0lBQ1hULE9BQU8sRUFBRSx1Q0FBdUM7SUFDaERDLFNBQVMsRUFBRSxNQUFNO0lBQ2pCQyxVQUFVLEVBQUU7RUFDaEIsQ0FBQztFQUNEUSxlQUFlLEVBQUU7SUFDYlYsT0FBTyxFQUFFLHdEQUF3RDtJQUNqRUMsU0FBUyxFQUFFLE1BQU07SUFDakJDLFVBQVUsRUFBRTtFQUNoQixDQUFDO0VBQ0RTLFlBQVksRUFBRTtJQUNWWCxPQUFPLEVBQUUsbURBQW1EO0lBQzVEQyxTQUFTLEVBQUUsTUFBTTtJQUNqQkMsVUFBVSxFQUFFO0VBQ2hCLENBQUM7RUFDRFUsaUJBQWlCLEVBQUU7SUFDZlosT0FBTyxFQUFFLHFCQUFxQjtJQUM5QkMsU0FBUyxFQUFFLE1BQU07SUFDakJDLFVBQVUsRUFBRTtFQUNoQixDQUFDO0VBQ0RsSyxnQkFBZ0IsRUFBRTtJQUNkZ0ssT0FBTyxFQUFFLG9CQUFvQjtJQUM3QkMsU0FBUyxFQUFFLE1BQU07SUFDakJDLFVBQVUsRUFBRTtFQUNoQixDQUFDO0VBQ0RqSyxjQUFjLEVBQUU7SUFDWitKLE9BQU8sRUFBRSxrQkFBa0I7SUFDM0JDLFNBQVMsRUFBRSxNQUFNO0lBQ2pCQyxVQUFVLEVBQUU7RUFDaEIsQ0FBQztFQUNEVyxrQkFBa0IsRUFBRTtJQUNoQmIsT0FBTyxFQUFFLG1FQUFtRTtJQUM1RUMsU0FBUyxFQUFFLE1BQU07SUFDakJDLFVBQVUsRUFBRTtFQUNoQixDQUFDO0VBQ0RZLG9CQUFvQixFQUFFO0lBQ2xCZCxPQUFPLEVBQUUsc0RBQXNEO0lBQy9EQyxTQUFTLEVBQUUsTUFBTTtJQUNqQkMsVUFBVSxFQUFFO0VBQ2hCLENBQUM7RUFDRGEsb0JBQW9CLEVBQUU7SUFDbEJmLE9BQU8sRUFBRSx1REFBdUQ7SUFDaEVDLFNBQVMsRUFBRSxNQUFNO0lBQ2pCQyxVQUFVLEVBQUU7RUFDaEIsQ0FBQztFQUNEYyx1QkFBdUIsRUFBRTtJQUNyQmhCLE9BQU8sRUFBRSw2REFBNkQ7SUFDdEVDLFNBQVMsRUFBRSxPQUFPO0lBQ2xCQyxVQUFVLEVBQUU7RUFDaEIsQ0FBQztFQUNEZSxXQUFXLEVBQUM7SUFDUmpCLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCQyxTQUFTLEVBQUUsTUFBTTtJQUNqQkMsVUFBVSxFQUFFO0VBQ2hCLENBQUM7RUFDRGdCLGFBQWEsRUFBQztJQUNWbEIsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QkMsU0FBUyxFQUFFLE1BQU07SUFDakJDLFVBQVUsRUFBRTtFQUNoQixDQUFDO0VBQ0RpQixxQkFBcUIsRUFBQztJQUNsQm5CLE9BQU8sRUFBRSwyQkFBMkI7SUFDcENDLFNBQVMsRUFBRSxNQUFNO0lBQ2pCQyxVQUFVLEVBQUU7RUFDaEIsQ0FBQztFQUNEa0IsY0FBYyxFQUFDO0lBQ1hwQixPQUFPLEVBQUUsaUNBQWlDO0lBQzFDQyxTQUFTLEVBQUUsTUFBTTtJQUNqQkMsVUFBVSxFQUFFO0VBQ2hCLENBQUM7RUFDRHROLFlBQVksRUFBQztJQUNUb04sT0FBTyxFQUFFLGNBQWM7SUFDdkJDLFNBQVMsRUFBRSxNQUFNO0lBQ2pCQyxVQUFVLEVBQUU7RUFDaEIsQ0FBQztFQUNEbUIsUUFBUSxFQUFDO0lBQ0xyQixPQUFPLEVBQUUsZ0JBQWdCO0lBQ3pCQyxTQUFTLEVBQUUsTUFBTTtJQUNqQkMsVUFBVSxFQUFFO0VBQ2hCLENBQUM7RUFDRG9CLGFBQWEsRUFBQztJQUNWdEIsT0FBTyxFQUFFLHlDQUF5QztJQUNsREMsU0FBUyxFQUFFLE1BQU07SUFDakJDLFVBQVUsRUFBRTtFQUNoQixDQUFDO0VBQ0RxQixtQkFBbUIsRUFBQztJQUNoQnZCLE9BQU8sRUFBRSxtREFBbUQ7SUFDNURDLFNBQVMsRUFBRSxNQUFNO0lBQ2pCQyxVQUFVLEVBQUU7RUFDaEIsQ0FBQztFQUNEc0Isa0JBQWtCLEVBQUU7SUFDaEJ4QixPQUFPLEVBQUUsc0JBQXNCO0lBQy9CQyxTQUFTLEVBQUUsTUFBTTtJQUNqQkMsVUFBVSxFQUFFO0VBQ2hCO0FBQ0osQ0FBQzs7Ozs7Ozs7OzsrRUM1SHNCLEdBQVB1QixPQUFPLENBQUFqUixtQkFXSSxHQUFYa1IsV0FBVyxDQUFBbFIsMENBbUJ1QixHQUFsQ21SLGtDQUFrQyxDQUFBblIsc0JBWXBCLEdBQWRvUixjQUFjLENBQUFwUixlQXNCUCxHQUFQcVIsT0FBTyxDQUFBclIsaUJBaURFLEdBQVQwQyxTQUFTLENBQUExQyxrQkEwQkMsR0FBVnNSLFVBQVUsQ0FBQXRSLDRCQTRCVSxHQUFwQnVSLG9CQUFvQixDQUFBdlIsc0JBY04sR0FBZHdSLGNBQWMsQ0E1TDlCLElBQUFwVSxPQUFBLEdBQUFDLG1CQUFBLHlCQUF1QixJQUFBQyxRQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUEsRUFDdkIsSUFBQWtELFdBQUEsR0FBQWpELG1CQUFBLDhEQUE0QyxTQUFBRSx1QkFBQUUsR0FBQSxVQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQSxLQUU1QztBQUNBO0FBQ0E7QUFDQSxHQUNPLFNBQVN3VCxPQUFPQSxDQUFDOUYsSUFBSSxFQUFFekMsT0FBTyxFQUFFLENBQ25DLE1BQU0rSSxPQUFPLEdBQUdwUyxnQkFBQyxDQUFDMEIsR0FBRyxDQUFDMkgsT0FBTyxFQUFFLFNBQVMsRUFBRXJKLGdCQUFDLENBQUMrUCxJQUFJLENBQUMsQ0FDakRxQyxPQUFPLENBQUMsQ0FBQyxDQUVULE9BQU9DLGFBQWEsQ0FBQyxHQUFHLEVBQUV2RyxJQUFJLENBQUMsQ0FDbkMsQ0FBQyxDQUVEO0FBQ0E7QUFDQTtBQUNBLEdBQ08sU0FBUytGLFdBQVdBLENBQUNTLElBQUksRUFBRWpKLE9BQU8sRUFBRSxDQUN2QyxNQUFNK0ksT0FBTyxHQUFHcFMsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQzJILE9BQU8sRUFBRSxTQUFTLEVBQUVySixnQkFBQyxDQUFDK1AsSUFBSSxDQUFDLENBRWpEcUMsT0FBTyxDQUFDLENBQUMsQ0FDVCxPQUFPLEVBQ0gvQixVQUFVLEVBQUUsR0FBRyxFQUNma0MsT0FBTyxFQUFFLEVBQ0wsY0FBYyxFQUFFLFdBQVcsRUFDM0IsNkJBQTZCLEVBQUUsR0FBRyxFQUNsQyxrQ0FBa0MsRUFBRSxJQUFJLENBQzVDLENBQUMsRUFDRHpHLElBQUksRUFBRXdHLElBQUksQ0FDZCxDQUFDLENBQ0wsQ0FBQyxDQUVEO0FBQ0E7QUFDQTtBQUNBLEdBQ08sU0FBU1Isa0NBQWtDQSxDQUFDM1EsS0FBSyxFQUFFLENBQ3RELE1BQU1xUixVQUFVLEdBQUd4UyxnQkFBQyxDQUFDMEIsR0FBRyxDQUFDUCxLQUFLLEVBQUUsd0JBQXdCLENBQUMsQ0FFekQsT0FBT3FSLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLGNBQWMsQ0FDOUQsQ0FBQyxDQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNPLFNBQVNULGNBQWNBLENBQUM1USxLQUFLLEVBQUUsQ0FDbEMsSUFBSVcsV0FBVyxHQUFHOUIsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ1AsS0FBSyxFQUFFLDZDQUE2QyxDQUFDLElBQ3pFbkIsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ1AsS0FBSyxFQUFFLHNDQUFzQyxDQUFDLElBQ3BELEdBQUcsQ0FFUCxNQUFNc0MsRUFBRSxHQUFHekIsSUFBSSxDQUFDQyxLQUFLLENBQUNILFdBQVcsQ0FBQyxDQUVsQyxNQUFNMlEsUUFBUSxHQUFHelMsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQ1AsS0FBSyxFQUFFLHdDQUF3QyxDQUFDLElBQUluQixnQkFBQyxDQUFDMEIsR0FBRyxDQUFDUCxLQUFLLEVBQUUsaUNBQWlDLENBQUMsSUFBSSxpQkFBaUIsQ0FFL0ksT0FBTyxFQUNIc1IsUUFBUSxFQUNSaFAsRUFBRSxDQUNOLENBQUMsQ0FDTCxDQUFDLENBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FDTyxTQUFTdU8sT0FBT0EsQ0FBQ2xHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRXpDLE9BQU8sRUFBRSxDQUN4QyxNQUFNK0ksT0FBTyxHQUFHcFMsZ0JBQUMsQ0FBQzBCLEdBQUcsQ0FBQzJILE9BQU8sRUFBRSxTQUFTLEVBQUVySixnQkFBQyxDQUFDK1AsSUFBSSxDQUFDLENBQ2pEcUMsT0FBTyxDQUFDLENBQUMsQ0FDVCxJQUFJTSxnQkFBZ0IsQ0FFcEIsSUFBSS9ULE9BQU8sQ0FBQ0MsR0FBRyxDQUFDK1QsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUNwQ25ULE9BQU8sQ0FBQ2UsS0FBSyxDQUFDLHFCQUFxQixFQUFFdUwsSUFBSSxDQUFDLENBQzlDLENBRUEsTUFBTThHLFlBQVksR0FBRyxFQUFFdkMsVUFBVSxFQUFFLEdBQUcsRUFBRUQsU0FBUyxFQUFFLEtBQUssRUFBRUQsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FDMUZ1QyxnQkFBZ0IsR0FBRzVHLElBQUksQ0FDdkIsSUFBSSxDQUFDOUwsZ0JBQUMsQ0FBQzZTLFdBQVcsQ0FBQy9HLElBQUksQ0FBQ2dILE9BQU8sQ0FBQyxFQUFFLENBQzlCSixnQkFBZ0IsR0FBR1AsY0FBYyxDQUFDckcsSUFBSSxDQUFDLENBQzNDLENBQUMsTUFBTSxJQUFJOUwsZ0JBQUMsQ0FBQzZTLFdBQVcsQ0FBQy9HLElBQUksQ0FBQ3NFLFNBQVMsQ0FBQyxJQUFJcFEsZ0JBQUMsQ0FBQzZTLFdBQVcsQ0FBQy9HLElBQUksQ0FBQ3VFLFVBQVUsQ0FBQyxFQUFFLENBQ3hFcUMsZ0JBQWdCLEdBQUdSLG9CQUFvQixDQUFDcEcsSUFBSSxDQUFDLENBQ2pELENBQ0EsSUFBRzlMLGdCQUFDLENBQUMwQixHQUFHLENBQUNvSyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsRUFBRSxDQUNyQ3RNLE9BQU8sQ0FBQ2UsS0FBSyxDQUFDLHNCQUFzQixHQUFDUCxnQkFBQyxDQUFDMEIsR0FBRyxDQUFDb0ssSUFBSSxFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FDOUUsQ0FFQSxNQUFNaUgsT0FBTyxHQUFHL1MsZ0JBQUMsQ0FBQ2dULEtBQUssQ0FBQ0osWUFBWSxFQUFFRixnQkFBZ0IsQ0FBQyxDQUV2RCxPQUFPTCxhQUFhLENBQUNVLE9BQU8sQ0FBQzFDLFVBQVUsRUFBRTBDLE9BQU8sQ0FBQyxDQUNyRCxDQUFDLENBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FDQSxTQUFTVixhQUFhQSxDQUFDaEMsVUFBVSxFQUFFdkUsSUFBSSxFQUFFLENBQ3JDLE9BQU8sRUFDSHVFLFVBQVUsRUFBRUEsVUFBVSxFQUN0QmtDLE9BQU8sRUFBRSxFQUNMLDZCQUE2QixFQUFFLEdBQUcsRUFDbEMsa0NBQWtDLEVBQUUsSUFBSSxDQUM1QyxDQUFDLEVBQ0R6RyxJQUFJLEVBQUU5SixJQUFJLENBQUN5TixTQUFTLENBQUMzRCxJQUFJLENBQUMsQ0FDOUIsQ0FBQyxDQUNMLENBQUMsQ0FFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FDTyxTQUFTekksU0FBU0EsQ0FBQzRQLFlBQVksRUFBRSxDQUVwQyxJQUFJN1AsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUNsQixJQUFJcEQsZ0JBQUMsQ0FBQ2tULFFBQVEsQ0FBQ0QsWUFBWSxDQUFDbkgsSUFBSSxDQUFDLEVBQUUsQ0FDL0IsSUFBSSxDQUNBMUksU0FBUyxHQUFHcEIsSUFBSSxDQUFDQyxLQUFLLENBQUNnUixZQUFZLENBQUNuSCxJQUFJLENBQUMsQ0FDN0MsQ0FBQyxDQUFDLE9BQU8xRyxDQUFDLEVBQUUsQ0FDUjtNQUNBaEMsU0FBUyxHQUFHLElBQUksQ0FFaEIsTUFBTU4scUJBQVMsQ0FBQ3NPLFdBQVcsQ0FDL0IsQ0FDSixDQUFDLE1BQU0sSUFBSXBSLGdCQUFDLENBQUNtVCxRQUFRLENBQUNGLFlBQVksQ0FBQ25ILElBQUksQ0FBQyxFQUFFLENBQ3RDMUksU0FBUyxHQUFHNlAsWUFBWSxDQUFDbkgsSUFBSSxDQUNqQyxDQUVBLE9BQU8xSSxTQUFTLENBQ3BCLENBQUMsQ0FFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNPLFNBQVM2TyxVQUFVQSxDQUFDZ0IsWUFBWSxFQUFFRyxRQUFRLEVBQUUsQ0FDL0MsSUFBSWpTLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FDZCxJQUFJbkIsZ0JBQUMsQ0FBQ2tULFFBQVEsQ0FBQ0QsWUFBWSxDQUFDLEVBQUUsQ0FDMUIsSUFBSSxDQUNBOVIsS0FBSyxHQUFHYSxJQUFJLENBQUNDLEtBQUssQ0FBQ2dSLFlBQVksQ0FBQyxDQUNwQyxDQUFDLENBQUMsT0FBTzdOLENBQUMsRUFBRSxDQUNSO01BQ0FqRSxLQUFLLEdBQUcsSUFBSSxDQUVaLElBQUlpUyxRQUFRLEVBQUUsQ0FDVkEsUUFBUSxDQUFDNVMsS0FBSyxDQUFDNEUsQ0FBQyxDQUFDLENBQUMsQ0FDdEIsQ0FDSixDQUNKLENBQUMsTUFBTSxJQUFJcEYsZ0JBQUMsQ0FBQ21ULFFBQVEsQ0FBQ0YsWUFBWSxDQUFDLEVBQUUsQ0FDakM5UixLQUFLLEdBQUc4UixZQUFZLENBQ3hCLENBRUEsT0FBTzlSLEtBQUssQ0FDaEIsQ0FBQyxDQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FDTyxTQUFTK1Esb0JBQW9CQSxDQUFDcEcsSUFBSSxFQUFFLENBQ3ZDLE1BQU11SCxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBRXBCLElBQUlDLGNBQWMsR0FBR3RULGdCQUFDLENBQUMwQixHQUFHLENBQUNvSyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDdkgsTUFBTSxDQUFDLENBQUNDLEdBQUcsRUFBRWlILEdBQUcsS0FBSyxDQUNoRWpILEdBQUcsR0FBR0EsR0FBRyxHQUFHLEdBQUcsR0FBR3hFLGdCQUFDLENBQUMwQixHQUFHLENBQUMrSixHQUFHLEVBQUUsU0FBUyxDQUFDLENBQ3ZDLE9BQU9qSCxHQUFHLENBQ2QsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNOLE1BQU0rTyxXQUFXLEdBQUd2VCxnQkFBQyxDQUFDMEIsR0FBRyxDQUFDb0ssSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FFN0N3SCxjQUFjLEdBQUdBLGNBQWMsR0FBR3RULGdCQUFDLENBQUMwQixHQUFHLENBQUNvSyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLEdBQUc5TCxnQkFBQyxDQUFDMEIsR0FBRyxDQUFDb0ssSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBR3lILFdBQVcsQ0FDakhGLFNBQVMsQ0FBQ2xELE9BQU8sR0FBR21ELGNBQWMsQ0FBQ0UsSUFBSSxDQUFDLENBQUMsQ0FDekMsT0FBT0gsU0FBUyxDQUNwQixDQUVPLFNBQVNsQixjQUFjQSxDQUFDckcsSUFBSSxFQUFFLENBQ2pDLE1BQU11SCxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQ3BCLE1BQU1JLFFBQVEsR0FBR3pULGdCQUFDLENBQUMwQixHQUFHLENBQUNvSyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzlDdE0sT0FBTyxDQUFDZSxLQUFLLENBQUMsd0JBQXdCLEVBQUV1TCxJQUFJLENBQUMsQ0FFN0N1SCxTQUFTLENBQUNsRCxPQUFPLEdBQUdzRCxRQUFRLENBQUN0RCxPQUFPLENBQ3BDa0QsU0FBUyxDQUFDaEQsVUFBVSxHQUFHLEdBQUcsQ0FDMUJnRCxTQUFTLENBQUNqRCxTQUFTLEdBQUcsTUFBTSxDQUM1QixPQUFPaUQsU0FBUyxDQUNwQjs7Ozs7Ozs7OzsrRUNuTXVCLEdBQVBLLE9BQU8sQ0FGdkIsSUFBQUMsUUFBQSxHQUFBM1YsbUJBQUEsaURBRU8sU0FBUzBWLE9BQU9BLENBQUNFLE1BQU0sRUFBRTdKLE1BQU0sRUFBRTtFQUNwQyxNQUFNOEosRUFBRSxHQUFHLElBQUlDLFdBQUUsQ0FBQyxDQUFDO0VBQ25CLE9BQU9ELEVBQUUsQ0FBQ0QsTUFBTSxDQUFDLENBQUM3SixNQUFNLENBQUM7QUFDN0I7O0FBRUEsTUFBTWdDLE1BQU0sR0FBRztFQUNYQyxTQUFTLEVBQUVBLENBQUNqQyxNQUFNLEtBQUtnSyxLQUFLLENBQUNoSyxNQUFNLENBQUM7RUFDcENvQyxZQUFZLEVBQUVBLENBQUNwQyxNQUFNLEtBQUsySixPQUFPLENBQUMsY0FBYyxFQUFFM0osTUFBTSxDQUFDO0VBQ3pEa0QsU0FBUyxFQUFFQSxDQUFDbEQsTUFBTSxLQUFLMkosT0FBTyxDQUFDLFdBQVcsRUFBRTNKLE1BQU0sQ0FBQztFQUNuRDhELGFBQWEsRUFBRUEsQ0FBQzlELE1BQU0sS0FBSzJKLE9BQU8sQ0FBQyxlQUFlLEVBQUUzSixNQUFNO0FBQzlELENBQUMsQ0FBQ3BKLGtCQUFBO0FBQ2FvTCxNQUFNOztBQUVyQixlQUFlZ0ksS0FBS0EsQ0FBQ2hLLE1BQU0sRUFBRTtFQUN6QixNQUFNOEosRUFBRSxHQUFHLElBQUlDLFdBQUUsQ0FBQyxDQUFDO0VBQ25CLE1BQU1FLFFBQVEsR0FBRyxNQUFNSCxFQUFFLENBQUM3SCxTQUFTLENBQUNqQyxNQUFNLENBQUM7RUFDM0MsT0FBT2lLLFFBQVEsQ0FBQ2hILElBQUksQ0FBQ2lILGlCQUFpQixDQUFDLE9BQU8sQ0FBQztBQUNuRDs7Ozs7Ozs7OztnRUNuQkEsSUFBQUMsVUFBQSxHQUFBbFcsbUJBQUE7O0FBRUEsTUFBTStRLE9BQU8sR0FBRztFQUNaUSxPQUFPLEVBQUVBLENBQUN4RixNQUFNLEtBQUt3RixPQUFPLENBQUN4RixNQUFNLENBQUM7RUFDcENpRixXQUFXLEVBQUVBLENBQUNqRixNQUFNLEtBQUtpRixXQUFXLENBQUNqRixNQUFNO0FBQy9DLENBQUM7O0FBRUQsZUFBZXdGLE9BQU9BLENBQUN4RixNQUFNLEVBQUU7RUFDM0IsTUFBTW9LLEdBQUcsR0FBRyxJQUFJQyxjQUFHLENBQUMsQ0FBQztFQUNyQixPQUFPLE1BQU1ELEdBQUcsQ0FBQzVFLE9BQU8sQ0FBQ3hGLE1BQU0sQ0FBQztBQUNwQzs7QUFFQSxlQUFlaUYsV0FBV0EsQ0FBQ2pGLE1BQU0sRUFBRTtFQUMvQixNQUFNb0ssR0FBRyxHQUFHLElBQUlDLGNBQUcsQ0FBQyxDQUFDO0VBQ3JCLE9BQU8sTUFBTUQsR0FBRyxDQUFDbkYsV0FBVyxDQUFDakYsTUFBTSxDQUFDO0FBQ3hDLENBQUNwSixrQkFBQTs7QUFFY29PLE9BQU87Ozs7Ozs7Ozs7QUNqQnRCOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7VUNBQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7Ozs7Ozs7O3dpQkN0QkEsSUFBQTFFLFdBQUEsR0FBQXJNLG1CQUFBO0FBQ0EsSUFBQXFXLFlBQUEsR0FBQXJXLG1CQUFBO0FBQ0EsSUFBQTJSLGNBQUEsR0FBQTNSLG1CQUFBO0FBQ0EsSUFBQXNXLGNBQUEsR0FBQXRXLG1CQUFBO0FBQ0EsSUFBQXVXLFdBQUEsR0FBQXZXLG1CQUFBO0FBQ0EsSUFBQXdXLFFBQUEsR0FBQXhXLG1CQUFBO0FBQ0EsSUFBQWdHLGtCQUFBLEdBQUFoRyxtQkFBQTtBQUNBLElBQUFrRCxnQkFBQSxHQUFBbEQsbUJBQUE7QUFDQSxJQUFBeVcsV0FBQSxHQUFBelcsbUJBQUE7Ozs7QUFJQSxJQUFBMFcsZUFBQSxHQUFBMVcsbUJBQUE7Ozs7Ozs7O0FBUU8sTUFBTXdOLFVBQVUsR0FBQTdLLGtCQUFBLEdBQUdnVSxzQkFBZ0I7QUFDbkMsTUFBTWpGLFdBQVcsR0FBQS9PLG1CQUFBLEdBQUdpVSx3QkFBaUI7QUFDckMsTUFBTXpILGFBQWEsR0FBQXhNLHFCQUFBLEdBQUdrVSw0QkFBbUI7QUFDekMsTUFBTTVRLGFBQWEsR0FBQXRELHFCQUFBLEdBQUdtVSw0QkFBbUI7QUFDekMsTUFBTXRPLFVBQVUsR0FBQTdGLGtCQUFBLEdBQUdvVSxzQkFBZ0I7QUFDbkMsTUFBTW5NLE9BQU8sR0FBQWpJLGVBQUEsR0FBR3FVLGdCQUFhO0FBQzdCLE1BQU1qVSxXQUFXLEdBQUFKLG1CQUFBLEdBQUdzVSw4QkFBaUI7QUFDckMsTUFBTWpELE9BQU8sR0FBQXJSLGVBQUEsR0FBR3VVLHdCQUFhO0FBQzdCLE1BQU10RCxPQUFPLEdBQUFqUixlQUFBLEdBQUd3VSx3QkFBYTtBQUM3QixNQUFNclgsYUFBYSxHQUFBNkMscUJBQUEsR0FBR3lVLHlCQUFtQjtBQUN6QyxNQUFNckQsY0FBYyxHQUFBcFIsc0JBQUEsR0FBRzBVLCtCQUFvQjtBQUMzQyxNQUFNeEQsV0FBVyxHQUFBbFIsbUJBQUEsR0FBRzJVLDRCQUFpQjtBQUNyQyxNQUFNeEQsa0NBQWtDLEdBQUFuUiwwQ0FBQSxHQUFHNFUsbURBQXdDO0FBQ25GLE1BQU1uTyxjQUFjLEdBQUF6RyxzQkFBQSxHQUFHNlUsOEJBQW9CO0FBQzNDLE1BQU05VSxpQkFBaUIsR0FBQUMseUJBQUEsR0FBRzhVLG9DQUF1QjtBQUNqRCxNQUFNcFMsU0FBUyxHQUFBMUMsaUJBQUEsR0FBRytVLDBCQUFlO0FBQ2pDLE1BQU16RCxVQUFVLEdBQUF0UixrQkFBQSxHQUFHZ1YsMkJBQWdCO0FBQ25DLE1BQU05VSxpQkFBaUIsR0FBQUYseUJBQUEsR0FBR2lWLG9DQUF1QjtBQUNqRCxNQUFNaFYsY0FBYyxHQUFBRCxzQkFBQSxHQUFHa1YsaUNBQW9CO0FBQzNDLE1BQU03VSxnQkFBZ0IsR0FBQUwsd0JBQUEsR0FBR21WLG1DQUFzQixDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJTZXR1cC9taWdyYXRpb25zLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlRmlsdGVycy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlU29ydC5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvZGVmYXVsdEZpbHRlcnMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2ZpbmRBbGwuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZHluYW1vL2R5bmFtb1V0aWxzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2V2ZW50TWFuYWdlci9oYW5kbGVFdmVudHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZXZlbnRNYW5hZ2VyL2hhbmRsZUZpbGUuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZXZlbnRNYW5hZ2VyL3B1Ymxpc2hFdmVudHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZXZlbnRNYW5hZ2VyL3dhdGNoQnVja2V0LmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL3JlcXVlc3RSZXNvbnNlL2Vycm9yQ29kZXMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL3MzL1MzVXRpbHMuanMvUzNVdGlscy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9zbnMvU05TVXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwiQGF3cy1zZGsvY2xpZW50LXNuc1wiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwiQGF3cy1zZGsvbGliLWR5bmFtb2RiXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJibHVlYmlyZFwiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcIm1vbWVudC9tb21lbnQuanNcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcInNlcXVlbGl6ZVwiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwidW16dWdcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU2VxdWVsaXplU3RvcmFnZSwgVW16dWcgfSBmcm9tICd1bXp1Zyc7XG5cbi8qKlxuICogRXhlY3V0ZSBkYXRhYmFzZSBtaWdyYXRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YWJhc2VOYW1lIC0gbmFtZSBvZiBkYXRhYmFzZSB0byBjcmVhdGUgKG9yIHZlcmlmeSBleGlzdGVuY2UpXG4gKiBAcGFyYW0ge29iamVjdH0gc2VxdWVsaXplSW5zdGFuY2UgLSBpbnN0YW5jZSBvZiBTZXF1ZWxpemUgKG11c3QgYmUgaW5pdGlhbGl6ZWQpXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBpbml0aWFsaXplTW9kZWxzIC0gZnVuY3Rpb24gdG8gcnVuIHRvIHN5bmMgU2VxdWVsaXplIG1vZGVscyB3aXRoIGRhdGFiYXNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFRvTWlncmF0aW9uRm9sZGVyIC0gcGFzcyBpbiB0aGUgcGF0aCBpZiB1c2luZyB3aW5kb3dzLiB3aW5kb3dzIGFuZCBsaW51eCBQV0Qgd2lsbCBiZSBkaWZmZXJlbnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bk1pZ3JhdGlvbnMoZGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVsaXplSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplTW9kZWxzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFRvTWlncmF0aW9uRm9sZGVyID0gYCR7cHJvY2Vzcy5lbnYuUFdEfS9taWdyYXRpb25zLyouanNgKSB7XG4gICAgY29uc3QgdW16dWcgPSBuZXcgVW16dWcoe1xuICAgICAgICBtaWdyYXRpb25zOiB7IGdsb2I6IHBhdGhUb01pZ3JhdGlvbkZvbGRlciB9LFxuICAgICAgICBjb250ZXh0OiBzZXF1ZWxpemVJbnN0YW5jZS5nZXRRdWVyeUludGVyZmFjZSgpLFxuICAgICAgICBzdG9yYWdlOiBuZXcgU2VxdWVsaXplU3RvcmFnZSh7IHNlcXVlbGl6ZTogc2VxdWVsaXplSW5zdGFuY2UgfSksXG4gICAgICAgIGxvZ2dlcjogY29uc29sZVxuICAgIH0pO1xuXG4gICAgY29uc3QgcGVuZGluZ01pZ3JhdGlvbnMgPSBhd2FpdCB1bXp1Zy5wZW5kaW5nKCk7XG4gICAgY29uc29sZS5sb2coJy0tLS0tLS0+VVRJTCBQZW5kaW5nIE1pZ3JhdGlvbnM6JywgcGVuZGluZ01pZ3JhdGlvbnMsIHBhdGhUb01pZ3JhdGlvbkZvbGRlcik7XG4gICAgYXdhaXQgdW16dWcudXAoKS5jYXRjaCgodXBFcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gdW16dWcuZG93bih7XG4gICAgICAgICAgICBtaWdyYXRpb25zOiBfLmNoYWluKHBlbmRpbmdNaWdyYXRpb25zKVxuICAgICAgICAgICAgICAgIC5tYXAoJ2ZpbGUnKVxuICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAudmFsdWUoKVxuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9ICdVVElMIEVycm9yOiBFcnJvciB3aXRoIG1pZ3JhdGluZyB1cDonICsgdXBFcnJvcjtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9LCAoZG93bkVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSAnVVRJTCBFcnJvcjogRXJyb3Igd2l0aCBtaWdyYXRpbmcgZG93bjonICsgZG93bkVycm9yO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBsaW5lIGlzIG5lZWRlZCB0byBzeW5jIChjcmVhdGUpIHRhYmxlcywgYnV0IG5vdCB0byBkYXRhYmFzZSB1cGRhdGVzXG4gICAgLy8gaW4gdGhlIHBhc3QgaXQgd29ya2VkIHRvIGxlYXZlIGl0IGluLCBidXQgbm93IHRoZSB0YWdzIG1vZHVsZSBjYXVzZXMgZm9yZWlnbiBrZXkgcHJvYmxlbXNcbiAgICAvLyBUaGUgdGFibGVzIGFyZSBzdGlsbCBpbml0aWF0ZWQgYnkgYmVpbmcgcGFzc2VkIGluIHRvIHJ1biBtaWdyYXRpb25zXG4gICAgYXdhaXQgaW5pdGlhbGl6ZU1vZGVscygpO1xufSIsImltcG9ydCBfLCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JMaXN0IH0gZnJvbSAnLi4vLi4vLi4vcmVxdWVzdFJlc29uc2UvZXJyb3JDb2Rlcy5qcyc7XG5pbXBvcnQgeyBwYXJzZUJvZHkgfSBmcm9tICcuLi8uLi8uLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuXG4vKipcbiAqIEdldCB0aGUgYWxsb3dlZCBidXNpbmVzc0lkcyBmb3IgYSB1c2VyIGZyb20gdGhlIGxhbWJkYSBldmVudCwgY29tcGFyZSBpdCB0byBidXNpbmVzc0lkcywgcmV0dXJuIHdoYXQgdXNlciBoYXMgYWNjZXNzIHRvLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIFRoZSBsYW1iZGEgZXZlbnQgcGFzc2VkIGluIGJ5IGEgdmFsaWRhdGVkIGFwaSByZXF1ZXN0LlxuICogQHJldHVybnMge2FycmF5fSBBICBsaXN0IG9mIGJ1c2luZXNzSWRzIHRoYXQgaGF2ZSBiZWVuIHJlcXVlc3RlZCBhbmQgYXJlIGFsbG93ZWQgdG8gZm9yIHNvbWUgdXNlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjY2Vzc1JpZ2h0c1V0aWxzKGV2ZW50KSB7XG4gICAgY29uc3QgcmVxdWVzdGVkQnVzaW5lc3NJZHMgPSBnZXRSZXF1ZXN0ZWRCdXNpbmVzc0lkcyhldmVudCk7XG4gICAgY29uc3QgYWxsb3dlZEJ1c2luZXNzSWRzID0gZ2V0QWxsb3dlZEJ1c2luZXNzSWRzKGV2ZW50KTtcbiAgICBjb25zdCBsb2NhbEJpZExpc3QgPSBbJzEnXTtcblxuICAgIC8vIGlmIHdlIGFyZSBvbiBsb2NhbCByZXR1cm4gZm9yIGFsbCBiaWRzIGluIGFjY2VzcyByaWdodHNcbiAgICBpZiAoXy5pc0VtcHR5KGFsbG93ZWRCdXNpbmVzc0lkcykgJiZcbiAgICAgICAgIV8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMnKSAmJlxuICAgICAgICAhXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpBUicpICYmXG4gICAgICAgIHByb2Nlc3MuZW52LkJVSUxEX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgIHByb2Nlc3MuZW52LkJVSUxEX0VOViAhPT0gJ3N0YWdpbmcnKSB7XG4gICAgICAgIGlmIChyZXF1ZXN0ZWRCdXNpbmVzc0lkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbEJpZExpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXy5pbnRlcnNlY3Rpb24ocmVxdWVzdGVkQnVzaW5lc3NJZHMsIGxvY2FsQmlkTGlzdCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RlZEJ1c2luZXNzSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYWxsb3dlZEJ1c2luZXNzSWRzO1xuICAgIH1cblxuICAgIHJldHVybiBfLmludGVyc2VjdGlvbihyZXF1ZXN0ZWRCdXNpbmVzc0lkcywgYWxsb3dlZEJ1c2luZXNzSWRzKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGJ1c2luZXNzSUQgc2V0IGluIGNvZ25pdG8gYXMgY3VzdG9tOkRCSS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBidXNpbmVzc0lEIHNldCBpbiBjb2duaXRvIGFzIGN1c3RvbTpEQklcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJEZWZhdWx0QmlkKGV2ZW50KSB7XG4gICAgbGV0IGpzb25Ub1BhcnNlID0gXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5jdXN0b206REJJJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpEQkknKSB8fFxuICAgICAgICAne30nO1xuXG4gICAgY29uc3QgZGJpID0gSlNPTi5wYXJzZShqc29uVG9QYXJzZSk7XG4gICAgcmV0dXJuIF8uZ2V0KGRiaSwgJ2RlZmF1bHRCaWQnLCAnJykgfHwgJzEnO1xufVxuXG4vKipcbiAqIEdldCAgcmVxdWVzdGVkIGJ1c2luZXNzSWRzIGZyb20gdGhlIHF1ZXJ5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHthcnJheX0gVGhlIGJ1c2luZXNzSUQgcmVxdWVzdGVkIGJ5IHRoZSBxdWVyeSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0UmVxdWVzdGVkQnVzaW5lc3NJZHMoZXZlbnQpIHtcbiAgICBsZXQgcmVxdWVzdGVkQnVzaW5lc3NJZHMgPSBfLmdldChldmVudCwgJ3F1ZXJ5U3RyaW5nUGFyYW1ldGVycy5idXNpbmVzc0lkcycsIG51bGwpO1xuXG4gICAgcmV0dXJuIHJlcXVlc3RlZEJ1c2luZXNzSWRzID8gcmVxdWVzdGVkQnVzaW5lc3NJZHMuc3BsaXQoJywnKSA6IFtdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgYWxsb3dlZCBidXNpbmVzc0lkcyBmb3IgYSB1c2VyIGZyb20gY29nbml0byBjdXN0b206QVIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gVGhlIGxhbWJkYSBldmVudCBwYXNzZWQgaW4gYnkgYSB2YWxpZGF0ZWQgYXBpIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7YXJyYXl9IFRoZSBidXNpbmVzc0lEIHJlcXVlc3RlZCBieSB0aGUgcXVlcnkgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEFsbG93ZWRCdXNpbmVzc0lkcyhldmVudCkge1xuICAgIGNvbnN0IGJ1c2luZXNzZXMgPSBnZXRCdXNpbmVzc2VzSW5mbyhldmVudCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGJ1c2luZXNzZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnVzaW5lc3Nlc0luZm8oZXZlbnQpIHtcbiAgICBsZXQganNvblRvUGFyc2UgPSBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLmN1c3RvbTpBUicpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jdXN0b206QVInKSB8fFxuICAgICAgICAne30nO1xuICAgIGNvbnN0IGFjY2Vzc1JpZ2h0cyA9IEpTT04ucGFyc2UoanNvblRvUGFyc2UpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LkJVSUxEX0VOViA9PT0gJ2xvY2FsJykge1xuICAgICAgICBpZiAoIWlzRW1wdHkoYWNjZXNzUmlnaHRzKSkge1xuICAgICAgICAgICAgY29uc3QgYmlkcyA9IF8uZ2V0KGFjY2Vzc1JpZ2h0cywgJ2J1c2luZXNzSWRzJywge30pO1xuICAgICAgICAgICAgY29uc3Qgd2l0aExvY2FsID0geyAuLi5iaWRzLCAnMSc6ICdBJyB9O1xuICAgICAgICAgICAgXy5zZXQoYWNjZXNzUmlnaHRzLCAnYnVzaW5lc3NJZHMnLCB3aXRoTG9jYWwpO1xuXG4gICAgICAgICAgICByZXR1cm4gXy5nZXQoYWNjZXNzUmlnaHRzLCAnYnVzaW5lc3NJZHMnLCB7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhciA9IHsgJ2J1c2luZXNzSWRzJzogeyAnMSc6ICdBJyB9IH07XG4gICAgICAgICAgICByZXR1cm4gXy5nZXQoYXIsICdidXNpbmVzc0lkcycsIHt9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfLmdldChhY2Nlc3NSaWdodHMsICdidXNpbmVzc0lkcycsIHt9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1vZHVsZXMgbGlzdGVkIGluIGN1c3RvbTpNT0QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gVGhlIGxhbWJkYSBldmVudCBwYXNzZWQgaW4gYnkgYSB2YWxpZGF0ZWQgYXBpIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7YXJyYXl9IFRoZSBNb2R1bGUgYWNjZXNzIGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZHVsZUluZm8oZXZlbnQpIHtcbiAgICBsZXQganNvblRvUGFyc2UgPVxuICAgICAgICBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLmN1c3RvbTpNT0QnKSB8fFxuICAgICAgICBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY3VzdG9tOk1PRCcpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMuY3VzdG9tOkFSJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpBUicpIHx8XG5cbiAgICAgICAgJ3t9JztcblxuICAgIGNvbnN0IG1vZHVsZVJpZ2h0cyA9IEpTT04ucGFyc2UoanNvblRvUGFyc2UpO1xuICAgIHJldHVybiBfLmdldChtb2R1bGVSaWdodHMsICdtb2R1bGUnLCB7fSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtb2R1bGVzIGxpc3RlZCBpbiBjdXN0b206TU9ELlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVOYW1lIC0gQSBzdGluZyBuYW1lIGZvciBhIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIFRoZSBsYW1iZGEgZXZlbnQgcGFzc2VkIGluIGJ5IGEgdmFsaWRhdGVkIGFwaSByZXF1ZXN0LlxuICogQHJldHVybnMge2FycmF5fSBUaGUgTW9kdWxlIGFjY2VzcyBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja01vZHVsZShtb2R1bGVOYW1lLCBldmVudCkge1xuICAgIGNvbnN0IG1vZHVsZVJpZ2h0cyA9IGdldE1vZHVsZUluZm8oZXZlbnQpO1xuICAgIGxldCBhbGxvd0FjY2VzcyA9IF8uZ2V0KG1vZHVsZVJpZ2h0cywgbW9kdWxlTmFtZSwgZmFsc2UpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LkJVSUxEX0VOViA9PT0gJ2xvY2FsJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYWxsb3dBY2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JMaXN0LnVuYXV0aG9yaXplZDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VyUm9sZXMgPSB7XG4gICAgYWRtaW46ICdBJyxcbiAgICByZWFkOiAnUicsXG4gICAgd3JpdGU6ICdXJ1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge3tib2R5OiBzdHJpbmd9fSBldmVudFxuICogQHJldHVybnMge3N0cmluZ30gYnVzaW5lc3NJZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tXcml0ZUFjY2VzcyhldmVudCkge1xuICAgIGNvbnN0IGV2ZW50Qm9keSA9IHBhcnNlQm9keShldmVudCk7XG4gICAgY29uc3QgYnVzaW5lc3NJZHMgPSBhY2Nlc3NSaWdodHNVdGlscyhldmVudCkgfHwgW107XG4gICAgY29uc3QgYnVzaW5lc3NJZCA9IGJ1c2luZXNzSWRzLmZpbmQoKGlkKSA9PiBpZCA9PT0gZXZlbnRCb2R5LmJ1c2luZXNzSWQpO1xuICAgIGNvbnN0IHJhdyA9IGdldEJ1c2luZXNzZXNJbmZvKGV2ZW50KTtcbiAgICBjb25zdCB1c2VyUmlnaHQgPSByYXdbYnVzaW5lc3NJZF07XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERfRU5WID09PSAnbG9jYWwnKSB7XG4gICAgICAgIHJldHVybiBldmVudEJvZHkuYnVzaW5lc3NJZDtcbiAgICB9XG5cbiAgICBpZiAoKHVzZXJSaWdodCAhPT0gdXNlclJvbGVzLmFkbWluICYmIHVzZXJSaWdodCAhPT0gdXNlclJvbGVzLndyaXRlKSB8fCAoIXVzZXJSaWdodCkpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JMaXN0LnVuYXV0aG9yaXplZDtcbiAgICB9XG4gICAgcmV0dXJuIGJ1c2luZXNzSWQ7XG59XG5cbiIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgREIgZnJvbSAnc2VxdWVsaXplJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudC5qcyc7XG5pbXBvcnQgeyBlcnJvckxpc3QgfSBmcm9tICcuLi8uLi8uLi9yZXF1ZXN0UmVzb25zZS9lcnJvckNvZGVzLmpzJztcbmltcG9ydCB7IGFjY2Vzc1JpZ2h0c1V0aWxzIH0gZnJvbSAnLi9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIHNlcXVlbGl6ZSB3aGVyZSBjbGF1c2UgZnJvbSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBhbmQgZGVmYXVsdCBzb3J0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gdGhlIGV2ZW50IHBhc3NlZCBieSBsYW1iZGFcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RGaWx0ZXJzIC0gdGhlIGRlZmF1bHQgZmlsdGVycyBvYmplY3QgY3JlYXRlZCBieSBjcmVhdGVEZWZhdWx0RmlsdGVyc1xuICogQHJldHVybnMge29iamVjdH0gQW4gc2VxdWVsaXplIHdoZXJlIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRmlsdGVycyA9IGZ1bmN0aW9uIChldmVudCwgb2JqZWN0RmlsdGVycyl7XG4gICAgbGV0IHF1ZXJ5ID0gXy5nZXQoZXZlbnQsICdxdWVyeVN0cmluZ1BhcmFtZXRlcnMnLCB7fSkgfHwge307XG4gICAgY29uc3Qgc3RhcnREYXRlID0gXy5nZXQocXVlcnksICdzdGFydERhdGUnKTtcbiAgICBjb25zdCBlbmREYXRlID0gXy5nZXQocXVlcnksICdlbmREYXRlJyk7XG4gICAgY29uc3Qgd2hlcmUgPSBPYmplY3Qua2V5cyhxdWVyeSkucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gXy5nZXQob2JqZWN0RmlsdGVycywgaXRlbSwgbnVsbCk7XG5cbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbU5hbWUgPSBpdGVtLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICA/IGAkJHtpdGVtfSRgXG4gICAgICAgICAgICAgICAgOiBpdGVtO1xuXG4gICAgICAgICAgICBhY2NbaXRlbU5hbWVdID0ge307XG4gICAgICAgICAgICBpZiAodmFsLmZpbHRlclR5cGUgPT09IERCLk9wLmlMaWtlKSB7XG4gICAgICAgICAgICAgICAgYWNjW2l0ZW1OYW1lXVt2YWwuZmlsdGVyVHlwZV0gPSBgJSR7cXVlcnlbaXRlbV19JWA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5maWx0ZXJUeXBlID09PSBEQi5PcC5vcikge1xuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gWy0xICogK3F1ZXJ5W2l0ZW1dLCArcXVlcnlbaXRlbV1dO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwuZmlsdGVyVHlwZSA9PT0gREIuT3AuaW4pIHtcbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IHF1ZXJ5W2l0ZW1dLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5maWx0ZXJUeXBlID09PSBEQi5PcC5pbikge1xuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gcXVlcnlbaXRlbV0uc3BsaXQoJywnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZEpzb247XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgSlNPTiwgcGFyc2UgaXRcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSnNvbiA9IEpTT04ucGFyc2UocXVlcnlbaXRlbV0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgbm90IEpTT04sIHBhc3MgdGhyb3VnaCBhcyBhIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWRKc29uID0gcXVlcnlbaXRlbV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gcGFyc2VkSnNvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbC50eXBlID09PSBEQi5CT09MRUFOKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnlWYWx1ZSA9IF8uZ2V0KHF1ZXJ5LCBpdGVtLCAnJykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJvb2xlYW5NYXAgPSB7XG4gICAgICAgICAgICAgICAgICAgICdmYWxzZSc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAnbnVsbCc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICd0cnVlJzogdHJ1ZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IGJvb2xlYW5NYXBbcXVlcnlWYWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGlmIChvYmplY3RGaWx0ZXJzPy5hY3RpdmUgJiYgIXdoZXJlPy5hY3RpdmUpIHtcbiAgICAgICAgd2hlcmUuYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBidXNpbmVzc0lkcyA9IGFjY2Vzc1JpZ2h0c1V0aWxzKGV2ZW50KTtcbiAgICBjb25zdCBmaWx0ZXJBZGRzID0ge1xuICAgICAgICBidXNpbmVzc0lkOiBidXNpbmVzc0lkc1xuICAgIH07XG5cbiAgICBpZiAoc3RhcnREYXRlICYmIGVuZERhdGUpIHtcbiAgICAgICAgY29uc3QgcyA9IG1vbWVudC51dGMoc3RhcnREYXRlKTtcbiAgICAgICAgY29uc3QgZSA9IG1vbWVudC51dGMoZW5kRGF0ZSk7XG4gICAgICAgIGNvbnN0IGRhdGVzID0ge1xuICAgICAgICAgICAgW0RCLk9wLmJldHdlZW5dOiBbcy50b0RhdGUoKSwgZS50b0RhdGUoKV1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgeyAuLi5lcnJvckxpc3QuaW52YWxpZFN0YXJ0RGF0ZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgeyAuLi5lcnJvckxpc3QuaW52YWxpZEVuZERhdGUgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlckFkZHMuY3JlYXRlZEF0ID0gZGF0ZXM7XG4gICAgfVxuXG4gICAgY29uc3Qgd2l0aERhdGUgPSBPYmplY3QuYXNzaWduKHdoZXJlLCBmaWx0ZXJBZGRzKTtcblxuICAgIHJldHVybiB3aXRoRGF0ZTtcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIENyZWF0ZSBzZXF1ZWxpemUgb3JkZXIgY2xhdXNlIGZyb20gcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgYW5kIGRlZmF1bHQgc29ydCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSB0aGUgZXZlbnQgY3JlYXRlZCBBV1MgbGFtYmRhLCBpdCB3aWxsIGNvbnRhaW4gcXVlcnlTdHJpbmdQYXJhbWV0ZXJzIHdpdGggc29ydCBwcm9wZXJ0eSBhIGNvbW1hIHNlcGVyYXRlZCBsaXN0IG9mIHNvcnRhYmxlIGZpZWxkcyAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RGaWx0ZXJzIC0gdGhlIGRlZmF1bHQgZmlsdGVycyBvYmplY3QgY3JlYXRlZCBieSBjcmVhdGVEZWZhdWx0RmlsdGVyc1xuICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRGaWx0ZXIgLSBBIGRlZmF1bHQgZmlsdGVyIG9iamVjdCBhcyBidWlsdCBieSBjcmVhdGVEZWZhdWx0IEZpbHRlcnMsIGlmIGl0ZW1zIGFyZSBub3Qgb24gdGhlIHNjaGVtYSB0aGV5IHdpbGwgbm90IGJlIGluIHRoZSBvcmRlciBieVxuICogQHJldHVybnMge29iamVjdH0gIEFuIHNlcXVlbGl6ZSBvcmRlciBieSBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNvcnQgPSBmdW5jdGlvbiAoZXZlbnQsIGRlZmF1bHRGaWx0ZXIpIHtcbiAgICBsZXQgY29weU9mRGVmYXVsdEZpbHRlciA9IF8uY2xvbmUoZGVmYXVsdEZpbHRlcik7XG4gICAgbGV0IHF1ZXJ5ID0gXy5nZXQoZXZlbnQsICdxdWVyeVN0cmluZ1BhcmFtZXRlcnMnLCB7fSkgfHwge307XG4gICAgbGV0IHNvcnQgPSBfLmdldChxdWVyeSwgJ3NvcnQnLCAnLXVwZGF0ZWRBdCcpIHx8ICctdXBkYXRlZEF0JztcblxuICAgIHJldHVybiBzb3J0LnNwbGl0KCcsJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcblxuICAgICAgICBjb25zdCB0ZXN0SXRlbSA9IGl0ZW0uaW5kZXhPZignLScpID09PSAwID8gaXRlbS5zdWJzdHIoMSkgOiBpdGVtO1xuXG4gICAgICAgIGlmIChfLmdldChjb3B5T2ZEZWZhdWx0RmlsdGVyLCB0ZXN0SXRlbSwgbnVsbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRJdGVtID0gW107XG5cbiAgICAgICAgICAgIHRlc3RJdGVtLnNwbGl0KCcuJykuZm9yRWFjaCgocGFyZW50Q2hpbGRMaXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgc29ydEl0ZW0ucHVzaChwYXJlbnRDaGlsZExpc3QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtLmluZGV4T2YoJy0nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNvcnRJdGVtLnB1c2goJ0RFU0MnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc29ydEl0ZW0ucHVzaCgnQVNDJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2MucHVzaChzb3J0SXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbn07XG4iLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IERCIGZyb20gJ3NlcXVlbGl6ZSc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCB3aXRoIGRlZmF1bHQgZmlsdGVycyBmb3IgYSBnaXZlbiBzZXF1ZWxpYXplIFNjaGVtYSBPYmplY3QsIGFuZCBzZXQgb2Ygc3ViIHNjaGVtYXNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hIC0gdHlwZSBpcyBzZXF1ZWxpemUgZGF0YSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViU2NoZW1hcyAtIEFuIG9iamVjdCB3aXRoIGFsaWFzIGFzIHRoZSBrZXkgYW5kIHNlcXVlbGl6ZSBzY2hlbWEgYXMgdGhlIHZhbHVlIGh0dHA6Ly9kb2NzLnNlcXVlbGl6ZWpzLmNvbS9jbGFzcy9saWIvc2VxdWVsaXplLmpzflNlcXVlbGl6ZS5odG1sI2luc3RhbmNlLW1ldGhvZC1kZWZpbmVcbiAqIHN1YiBzY2hlbWEgY2FuIGJlIHtsb2NhdGlvbjogbG9jYXRpb25TY2hlbWF9IG9yIHtsb2NhdGlvbjoge2FzOiBcImFzQWxpYXNcIiwgc2NoZW1hOiBzY2hlbWF9fVxuICogQHJldHVybnMge29iamVjdH0gQW4gT2JqZWN0IHdpdGggYSBkZWZhdWx0IGZpbHRlciBmb3IgZWFjaCBkYXRhVHlwZSBDSEFSIGFuZCBURVhUIHdpbGwgZ2V0IGEgJGxpa2Ugb3BlcmF0b3IsIElOVEVHRVIsIERFQ0lNQUwgYW5kIEJPT0xFQU4gd2lsbCBnZXQgYSAkZXEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0RmlsdGVycyhzY2hlbWEsIHN1YlNjaGVtYXMgPSB7fSkge1xuICAgIHNjaGVtYSA9IF8uY2xvbmUoc2NoZW1hKTtcblxuICAgIGNvbnN0IGZpbHRlcnMgPSB7fTtcblxuICAgIGFkZEZpbHRlcnNGcm9tU2NoZW1hKHNjaGVtYSwgZmlsdGVycyk7XG4gICAgT2JqZWN0LmtleXMoc3ViU2NoZW1hcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGFkZEZpbHRlcnNGcm9tU2NoZW1hKHN1YlNjaGVtYXNba2V5XSwgZmlsdGVycywga2V5KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmaWx0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkRmlsdGVyc0Zyb21TY2hlbWEoc2NoZW1hLCBhY2N1bXVsYXRvciwga2V5UHJlZml4ID0gJycpIHtcbiAgICBjb25zdCBhc0xpbmtBbGlhcyA9IF8uZ2V0KHNjaGVtYSwgJ2FzJywgbnVsbCk7XG4gICAgc2NoZW1hID0gXy5nZXQoc2NoZW1hLCAnc2NoZW1hJykgfHwgc2NoZW1hO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNjaGVtYSkucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgbGV0IGtleSA9IGl0ZW07XG5cbiAgICAgICAgaWYgKGFzTGlua0FsaWFzKSB7XG4gICAgICAgICAgICBhY2NbYXNMaW5rQWxpYXNdID0geyB0eXBlOiBEQi5TVFJJTkcsIGZpbHRlclR5cGU6IERCLk9wLmVxIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5UHJlZml4KSB7XG4gICAgICAgICAgICBrZXkgPSBgJHtrZXlQcmVmaXh9LiR7aXRlbX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYVtpdGVtXS5maWx0ZXJUeXBlKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogc2NoZW1hW2l0ZW1dLmZpbHRlclR5cGUgfTtcblxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gZmlsdGVyVHlwZU92ZXJSaWRlIHx8IHNjaGVtYVtpdGVtXS50eXBlO1xuXG4gICAgICAgIC8vdG9kbyB0aGVzZSBzaG91bGQgYmUgcmVtb3ZlZCwgdGhlcmUgYXJlIGp1c3QgaGVyZSBmb3Igc29ydCB0ZXN0c1xuICAgICAgICBzd2l0Y2ggKGl0ZW1UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIERCLkNIQVI6XG4gICAgICAgICAgICBjYXNlIERCLlNUUklORzpcbiAgICAgICAgICAgIGNhc2UgREIuVEVYVDpcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3AuaUxpa2UgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBEQi5ERUNJTUFMOlxuICAgICAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5vciB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIERCLkJPT0xFQU46XG4gICAgICAgICAgICBjYXNlIERCLkJJR0lOVDpcbiAgICAgICAgICAgIGNhc2UgREIuSU5URUdFUjpcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IHsgdHlwZTogaXRlbVR5cGUsIGZpbHRlclR5cGU6IERCLk9wLmVxIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgREIuREFURTpcbiAgICAgICAgICAgIGNhc2UgREIuREFURU9OTFk6XG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLmx0IH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvL25ldyBzZXF1ZWxpemUgdXNlcyBjbGFzc2VzIGluc3RlYWQgb2Ygb2JqZWN0c1xuICAgICAgICBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5TVFJJTkcpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5pTGlrZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuREVDSU1BTCkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLm9yIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5JTlRFR0VSKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3Aub3IgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSBpbnN0YW5jZW9mIERCLkJJR0lOVCkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLm9yIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5CT09MRUFOKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgdHlwZTogaXRlbVR5cGUsIGZpbHRlclR5cGU6IERCLk9wLmVxIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5KU09OQikge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IHR5cGU6IGl0ZW1UeXBlLCBmaWx0ZXJUeXBlOiBEQi5PcC5jb250YWlucyB9O1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuREFURU9OTFkpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyB0eXBlOiBpdGVtVHlwZSwgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vdGhlc2UgYXJlIG5vdCBwYXJ0IG9mIHRoZSBtb2RlbHMgc28gYWRkIHRoZW0gYWx3YXlzXG4gICAgICAgIGFjY1snY3JlYXRlZEF0J10gPSB7IHR5cGU6IERCLkRBVEUsIGZpbHRlclR5cGU6IERCLk9wLmx0IH07XG4gICAgICAgIGFjY1sndXBkYXRlZEF0J10gPSB7IHR5cGU6IERCLkRBVEUsIGZpbHRlclR5cGU6IERCLk9wLmx0IH07XG4gICAgICAgIGFjY1snaWQnXSA9IHsgdHlwZTogREIuSU5URUdFUiwgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGFjY3VtdWxhdG9yKTtcbn1cbiIsIi8qKlxuICogY3JlYXRlIHBhZ2luYXRpb24gb2JqZWN0IGZyb20gU2VxdWVsaXplIGZpbmRBbGxcbiAqIEBwYXJhbSB7b2JqZWN0fSByZXN1bHQgLSBzZXF1ZWxpemUgcmVzdWx0XG4gKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBtYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gcGFnZSBvZmZzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2luYXRpb25Gcm9tRmluZEFsbChyZXN1bHQsIGxpbWl0LCBvZmZzZXQpIHtcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgW107XG4gICAgbGltaXQgPSBsaW1pdCB8fCAwO1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgY29uc3QgaGFzTW9yZSA9IHJlc3VsdC5sZW5ndGggPiBsaW1pdDtcbiAgICBpZiAoaGFzTW9yZSkge1xuICAgICAgICByZXN1bHQuc3BsaWNlKC0xLCAxKTtcbiAgICB9XG4gICAgY29uc3QgcGFnZU9iamVjdCA9IHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIGxpbWl0OiBsaW1pdCxcbiAgICAgICAgcm93czogcmVzdWx0LFxuICAgICAgICBoYXNNb3JlOiBoYXNNb3JlXG4gICAgfTtcblxuICAgIHJldHVybiBwYWdlT2JqZWN0O1xufVxuXG4vKipcbiAqIHdyYXBwZXIgZm9yIFNlcXVlbGl6ZSBmaW5kQWxsXG4gKiBAcGFyYW0ge29iamVjdH0gbW9kZWwgLSBpbnN0YW5jZSBvZiBTZXF1ZWxpemUgKG11c3QgYmUgaW5pdGlhbGl6ZWQpXG4gKiBAcGFyYW0geyome2luY2x1ZGU6IFt7bW9kZWw6ICp9XSwgd2hlcmU6IHtidXNpbmVzc0lkOiBBcnJheX0sIG9yZGVyOiBbc3RyaW5nW11dfX0gb3B0aW9ucyAtIGluc3RhbmNlIG9mIFNlcXVlbGl6ZSAobXVzdCBiZSBpbml0aWFsaXplZClcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRBbGwobW9kZWwsIG9wdGlvbnMpIHtcblxuICAgIGNvbnN0IGxpbWl0ID0gb3B0aW9ucy5saW1pdCB8fCAwO1xuICAgIGNvbnN0IGZpbmRBcmdzID0gT2JqZWN0LmFzc2lnbih7aW5jbHVkZTogeyBhbGw6IHRydWUsIG5lc3RlZDogdHJ1ZSB9fSwgb3B0aW9ucywgeyBsaW1pdDogbGltaXQgKyAxIH0pO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBtb2RlbC5maW5kQWxsKGZpbmRBcmdzKTtcbiAgICByZXR1cm4gZ2V0UGFnaW5hdGlvbkZyb21GaW5kQWxsKHJlc3VsdHMsIGxpbWl0LCBvcHRpb25zLm9mZnNldCk7XG59XG5cbmNvbnN0IGZpbmRVdGlscyA9IHtcbiAgICBmaW5kQWxsXG59O1xuZXhwb3J0IGRlZmF1bHQgZmluZFV0aWxzOyIsImltcG9ydCB7IER5bmFtb0RCRG9jdW1lbnQgfSBmcm9tICdAYXdzLXNkay9saWItZHluYW1vZGInO1xyXG5pbXBvcnQgeyBEeW5hbW9EQiB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1keW5hbW9kYic7XHJcblxyXG5jb25zdCBkeW5hbW9VdGlsID0ge1xyXG4gICAgZ2V0OiAocGFyYW1zKSA9PiBnZXQocGFyYW1zKVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7e1RhYmxlTmFtZTpzdHJpbmcsIEtleTp7a2V5OnN0cmluZ319fSBwYXJhbXNcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIGdldChwYXJhbXMpIHtcclxuICAgIGNvbnN0IGR5bmFtb0RiID0gRHluYW1vREJEb2N1bWVudC5mcm9tKG5ldyBEeW5hbW9EQigpKTtcclxuICAgIHJldHVybiBkeW5hbW9EYi5nZXQocGFyYW1zKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZHluYW1vVXRpbDsiLCJpbXBvcnQgeyBoYW5kbGVGaWxlIH0gZnJvbSAnLi9oYW5kbGVGaWxlLmpzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICdibHVlYmlyZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVFdmVudHMoZXZlbnQsIHRyYW5zZm9ybWVyLCBlcnJvckhhbmRsZXJQZXJGaWxlLCBzaG91bGRTa2lwRmFpbGVkRm9sZGVycyA9IGZhbHNlLCB1c2VySW1wb3J0VHlwZXMpIHtcbiAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5SZWNvcmRzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5tYXAoZXZlbnQuUmVjb3JkcywgKHJlY29yZCkgPT4ge1xuICAgICAgICBjb25zdCBzbnNJbmZvID0gSlNPTi5wYXJzZShfLmdldChyZWNvcmQsICdTbnMuTWVzc2FnZScsICd7fScpKTtcbiAgICAgICAgY29uc3QgczNCdWNrZXQgPSBzbnNJbmZvLmJ1Y2tldDtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBzbnNJbmZvLmZpbGVzIHx8IFtdO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLm1hcChmaWxlcywgKGZpbGUpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGUpO1xuICAgICAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlRmlsZShwYXRoLCBzM0J1Y2tldCwgdHJhbnNmb3JtZXIsIHsgc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMsIHVzZXJJbXBvcnRUeXBlcyB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvckhhbmRsZXJQZXJGaWxlICYmICFlcnJvckhhbmRsZXJQZXJGaWxlKGVyciwgcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChoYXNFcnJvcnMpIHtcbiAgICAgICAgICAgIHRocm93ICdFcnJvcnMgcHJvY2Vzc2luZyBvbmUgb3IgbW9yZSBmaWxlcy4gU2VlIGVycm9yIGxvZ3MgZm9yIGRldGFpbCBvbiBlYWNoIGVycm9yLic7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUzNVdGlsIGZyb20gJy4uL3MzL1MzVXRpbHMuanMvUzNVdGlscy5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVGaWxlKHBhdGgsIHMzQnVja2V0LCB0cmFuc2Zvcm1lciwgb3B0aW9ucykge1xuICAgIGNvbnN0IHNob3VsZFNraXBGYWlsZWRGb2xkZXJzID0gXy5nZXQob3B0aW9ucywgJ3Nob3VsZFNraXBGYWlsZWRGb2xkZXJzJyk7XG4gICAgY29uc3QgdXNlckltcG9ydFR5cGVzID0gXy5nZXQob3B0aW9ucywgJ3VzZXJJbXBvcnRUeXBlcycpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgQnVja2V0OiBzM0J1Y2tldCxcbiAgICAgICAgS2V5OiBwYXRoXG4gICAgfTtcbiAgICBsZXQgYm9keSA9ICd7fSdcbiAgICB0cnkge1xuICAgICAgICBib2R5ID0gYXdhaXQgUzNVdGlsLmdldE9iamVjdChwYXJhbXMpO1xuICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gSlNPTi5wYXJzZShib2R5KTtcbiAgICAgICAgY29uc3QgcmV0dXJuZWRWYWx1ZSA9IGF3YWl0IHRyYW5zZm9ybWVyKHBhcnNlZEJvZHkpO1xuICAgICAgICBhd2FpdCBTM1V0aWwuZGVsZXRlT2JqZWN0KHBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIHJldHVybmVkVmFsdWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignaGFuZGxlLWZpbGUtZXJyb3InLCBlcnJvcik7XG5cbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdOb1N1Y2hLZXknIHx8ICFib2R5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3UGF0aCA9ICcnO1xuXG4gICAgICAgIGlmICh1c2VySW1wb3J0VHlwZXMpIHtcbiAgICAgICAgICAgIC8vIGxvb2sgZm9yIGl0ZW1zIGluIHRoZSB1c2VySW1wb3J0VHlwZXNcbiAgICAgICAgICAgIGNvbnN0IHVzZXJzSW1wb3J0cyA9IE9iamVjdC52YWx1ZXModXNlckltcG9ydFR5cGVzKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBfLmxhc3QoaXRlbXMpO1xuICAgICAgICAgICAgY29uc3QgZm9sZGVyTmFtZSA9IF8uZmlyc3QoaXRlbXMpO1xuXG4gICAgICAgICAgICBpZiAodXNlcnNJbXBvcnRzLmluZGV4T2YoZm9sZGVyTmFtZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTa2lwRmFpbGVkRm9sZGVycykge1xuICAgICAgICAgICAgICAgICAgICBuZXdQYXRoID0gYCR7Zm9sZGVyTmFtZX0vZXJyb3IvJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5zdGFydHNXaXRoKHBhdGgsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC1vbmNlL2ApKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BhdGggPSBfLnJlcGxhY2UocGF0aCwgYCR7Zm9sZGVyTmFtZX0vZmFpbGVkLW9uY2UvYCwgYCR7Zm9sZGVyTmFtZX0vZmFpbGVkLXR3aWNlL2ApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5zdGFydHNXaXRoKHBhdGgsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC10d2ljZS9gKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdQYXRoID0gXy5yZXBsYWNlKHBhdGgsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC10d2ljZS9gLCBgJHtmb2xkZXJOYW1lfS9lcnJvci9gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdQYXRoID0gYCR7Zm9sZGVyTmFtZX0vZmFpbGVkLW9uY2UvJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IGBwYXRoQW5kRXZlbnRNaXNNYXRjaEVycm9yLyR7cGF0aH1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMpIHtcbiAgICAgICAgICAgICAgICBuZXdQYXRoID0gYGVycm9yLyR7cGF0aH1gO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfLnN0YXJ0c1dpdGgocGF0aCwgJ2ZhaWxlZC1vbmNlLycpKSB7XG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IF8ucmVwbGFjZShwYXRoLCAnZmFpbGVkLW9uY2UvJywgJ2ZhaWxlZC10d2ljZS8nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5zdGFydHNXaXRoKHBhdGgsICdmYWlsZWQtdHdpY2UvJykpIHtcbiAgICAgICAgICAgICAgICBuZXdQYXRoID0gXy5yZXBsYWNlKHBhdGgsICdmYWlsZWQtdHdpY2UvJywgJ2Vycm9yLycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhwYXRoLCAnZGVsYXlVbnRpbC8nKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoID0gXy5sYXN0KHBhdGguc3BsaXQoJy8nKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IGBmYWlsZWQtb25jZS8ke3BhdGh9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IHtcbiAgICAgICAgICAgIEJ1Y2tldDogczNCdWNrZXQsXG4gICAgICAgICAgICBLZXk6IG5ld1BhdGgsXG4gICAgICAgICAgICBCb2R5OiBib2R5XG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgUzNVdGlsLnB1dE9iamVjdChuZXdQYXJhbXMpO1xuICAgICAgICBhd2FpdCBTM1V0aWwuZGVsZXRlT2JqZWN0KHBhcmFtcyk7XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufVxuIiwiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBQcm9taXNlIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBTM1V0aWxzIGZyb20gJy4uL3MzL1MzVXRpbHMuanMvUzNVdGlscy5qcyc7XG5pbXBvcnQgU05TVXRpbCBmcm9tICcuLi9zbnMvU05TVXRpbHMuanMnO1xuaW1wb3J0IGR5bmFtb1V0aWwgZnJvbSAnLi4vZHluYW1vL2R5bmFtb1V0aWxzLmpzJztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gYnVja2V0XG4gKiBAcGFyYW0ge251bWJlcn0gbWF4S2V5c1xuICogQHBhcmFtIHtPYmplY3R9IHVzZXJJbXBvcnRUeXBlc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9vcChidWNrZXQsIG1heEtleXMsIHVzZXJJbXBvcnRUeXBlcykge1xuICAgIGxldCBidWNrZXRSZXN1bHQgPSB7fTtcbiAgICBsZXQgZmlsZUxpc3QgPSBbXTtcblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbW9tZW50KCk7XG5cbiAgICBkbyB7XG4gICAgICAgIGJ1Y2tldFJlc3VsdCA9IGF3YWl0IFMzVXRpbHMubGlzdE9iamVjdHNWMih7XG4gICAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICAgIE1heEtleXM6IG1heEtleXMsXG4gICAgICAgICAgICBDb250aW51YXRpb25Ub2tlbjogXy5nZXQoYnVja2V0UmVzdWx0LCAnTmV4dENvbnRpbnVhdGlvblRva2VuJylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IG5ld0ZpbGVzID0gXy5maWx0ZXIoYnVja2V0UmVzdWx0LkNvbnRlbnRzLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKF8uc3RhcnRzV2l0aChfLmdldChmaWxlLCAnS2V5JyksICdkZWxheVVudGlsLycpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURlbGF5VGltZSA9IF8uZ2V0KGZpbGUsICdLZXknKS5zcGxpdCgnLycpWzFdO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb21lbnQoZmlsZURlbGF5VGltZSwgJ1lZWVlNTURESEhtbScpLmlzU2FtZU9yQmVmb3JlKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1c2VySW1wb3J0VHlwZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBsb29rIGZvciBpdGVtcyBpbiB0aGUgdXNlckltcG9ydFR5cGVzXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcnNJbXBvcnRzID0gT2JqZWN0LnZhbHVlcyh1c2VySW1wb3J0VHlwZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZmlsZS5LZXkuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IF8ubGFzdChpdGVtcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9sZGVyTmFtZSA9IF8uZmlyc3QoaXRlbXMpO1xuICAgICAgICAgICAgICAgIGlmIChfLmlzRW1wdHkoZmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlcnNJbXBvcnRzLmluZGV4T2YoZm9sZGVyTmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gIV8uc3RhcnRzV2l0aChmaWxlLktleSwgYCR7Zm9sZGVyTmFtZX0vZXJyb3JgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAhXy5zdGFydHNXaXRoKGZpbGUuS2V5LCAnZXJyb3InKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZmlsZUxpc3QgPSBfLmNvbmNhdChmaWxlTGlzdCwgbmV3RmlsZXMpO1xuICAgIH0gd2hpbGUgKGJ1Y2tldFJlc3VsdC5Jc1RydW5jYXRlZCAmJiBidWNrZXRSZXN1bHQuTmV4dENvbnRpbnVhdGlvblRva2VuICYmIGZpbGVMaXN0Lmxlbmd0aCA8IG1heEtleXMpO1xuXG4gICAgcmV0dXJuIGZpbGVMaXN0O1xufVxuXG4vKipcbiAqIFB1Ymxpc2hlZCBTTlMgZXZlbnRzIGF0IGEgc3RlYWR5IHBhY2UgZm9yIGRhdGEgaW4gYSBwYXJ0aWN1bGFyIGJ1Y2tldC4gU2hvdWxkIGJlIGV4ZWN1dGVkIHZpYSBhIGNsb3VkIHdhdGNoIGNyb24gam9iIGFzIGEgcGFydCBvZiBhIG1pY3JvIHNlcnZpY2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnVGFibGUgLSBUaGUgRHluYW1vIERCIHRhYmxlIHdoZXJlIHRvIGdldCB0aGUgY2h1bmstc2l6ZSBhbmQgbWF4TWVzc2FnZSBzaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFibGVLZXkgLSBUaGUga2V5IHRvIHRoZSBpdGVtIGluIHRoZSBEeW5hbW8gREIgdGFibGUgdGhhdCBob2xkcyB0aGUgY2h1bmstc2l6ZSBhbmQgbWF4TWVzc2FnZSBzaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gYnVja2V0IC0gVGhlIG5hbWUgb2YgdGhlIHMzIGJ1Y2tldCB0byB3YXRjaCwgd2hlbiB5b3UgZHJvcCBpdGVtcyBpbnRvIHRoaXMgdGFibGUgZXZlbnRzIHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtzdHJpbmd9IHNuc1RvcGljIC0gVGhlIG5hbWUgb2YgdGhlIHNuc0V2ZW50IHRvIHB1Ymxpc2hcbiAqIEBwYXJhbSB7b2JqZWN0fSB1c2VySW1wb3J0VHlwZXMgLSBpbXBvcnQgdHlwZXMgdG8gZmlsdGVyIG9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoRXZlbnRzKGNvbmZpZ1RhYmxlLCB0YWJsZUtleSwgYnVja2V0LCBzbnNUb3BpYywgdXNlckltcG9ydFR5cGVzKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBkeW5hbW9VdGlsLmdldCh7XG4gICAgICAgICAgICBUYWJsZU5hbWU6IGNvbmZpZ1RhYmxlLFxuICAgICAgICAgICAgS2V5OiB7IGtleTogdGFibGVLZXkgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBnZXQgY29uZmlnIGZvciBrZXk6ICR7dGFibGVLZXl9IHRhYmxlOiAke2NvbmZpZ1RhYmxlfSBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMgb2YgMiBhbmQgMTBgLCBlKTtcbiAgICB9XG4gICAgbGV0IGNodW5rU2l6ZSA9IF8uZ2V0KHJlc3VsdCwgJ0l0ZW0uc25zQ2h1bmtTaXplJywgMik7XG4gICAgbGV0IG1heE1lc3NhZ2VzID0gXy5nZXQocmVzdWx0LCAnSXRlbS5zbnNNYXhNZXNzYWdlcycsIDEwKTtcblxuICAgIGNvbnN0IHNuc0NyZWF0ZVRvcGljUmVzcG9uc2UgPSBhd2FpdCBTTlNVdGlsLmNyZWF0ZVRvcGljKHsgTmFtZTogc25zVG9waWMgfSk7XG4gICAgY29uc3QgdG9waWNBcm4gPSBzbnNDcmVhdGVUb3BpY1Jlc3BvbnNlLlRvcGljQXJuO1xuICAgIGNvbnN0IG1heEtleXMgPSBjaHVua1NpemUgKiBtYXhNZXNzYWdlcztcblxuICAgIGNvbnN0IGZpbGVMaXN0ID0gYXdhaXQgbG9vcChidWNrZXQsIG1heEtleXMsIHVzZXJJbXBvcnRUeXBlcyk7XG5cbiAgICBjb25zdCBtZXNzYWdlTGlzdCA9IF8uY2hhaW4oZmlsZUxpc3QpXG4gICAgICAgIC5tYXAoJ0tleScpXG4gICAgICAgIC5jaHVuayhjaHVua1NpemUpXG4gICAgICAgIC5zbGljZSgwLCBtYXhNZXNzYWdlcylcbiAgICAgICAgLnZhbHVlKClcbiAgICA7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5tYXAobWVzc2FnZUxpc3QsIChmaWxlcykgPT4ge1xuICAgICAgICByZXR1cm4gU05TVXRpbC5wdWJsaXNoKHtcbiAgICAgICAgICAgIE1lc3NhZ2U6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBidWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICAgICAgICBmaWxlczogZmlsZXNcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgVG9waWNBcm46IHRvcGljQXJuXG4gICAgICAgIH0pO1xuICAgIH0pO1xufSIsImltcG9ydCB7IHB1Ymxpc2hFdmVudHMgfSBmcm9tICcuL3B1Ymxpc2hFdmVudHMuanMnO1xuaW1wb3J0IHsgaGFuZGxlRXZlbnRzIH0gZnJvbSAnLi9oYW5kbGVFdmVudHMuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBidWNrZXQgd2F0Y2hlciB3YXRjaGVzIGEgczMgYnVja2V0IGFuZCBwdWJsaXNoZXMgZXZlbnRzIHRvIGEgc25zIHRvcGljLCB0aGlzIGFsbG93cyB5b3UgdG8gcHJvY2VzcyBmaWxlcyBpbiBzMyB3aXRoIGEgc29tZSB0cmFuc2Zvcm1lciBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3Igd2F0Y2hCdWNrZXQsIHNlZSBiZWxvd1xuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcy5ldmVudCAtIFRoZSBldmVudCBvZiB0aGUgbGFtYmRhXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmR5bmFtb0NvbmZpZ1RhYmxlIC0gVGhlIER5bmFtbyBEQiB0YWJsZSB3aGVyZSB0byBnZXQgdGhlIGNodW5rU2l6ZSBhbmQgbWF4TWVzc2FnZSBzaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmR5bmFtb0NvbmZpZ0tleSAtIFRoZSBrZXkgdG8gdGhlIGl0ZW0gaW4gdGhlIER5bmFtbyBEQiB0YWJsZSB0aGF0IGhvbGRzIHRoZSBjaHVua1NpemUgYW5kIG1heE1lc3NhZ2Ugc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5zM0J1Y2tldCAtIFRoZSBuYW1lIG9mIHRoZSBzMyBidWNrZXQgdG8gd2F0Y2gsIHdoZW4geW91IGRyb3AgaXRlbXMgaW50byB0aGlzIHRhYmxlIGV2ZW50cyB3aWxsIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuc25zVG9waWMgLSBUaGUgbmFtZSBvZiB0aGUgc25zRXZlbnQgdG8gcHVibGlzaFxuICogQHBhcmFtIHtmdW5jdGlvbn0gcGFyYW1zLnRyYW5zZm9ybWVyIC0gdGhlIGZ1bmN0aW9uIHRvIHJ1biBvbiBlYWNoIGZpbGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtwYXJhbXMuZXJyb3JIYW5kbGVyUGVyRmlsZV0gLSB0aGUgZnVuY3Rpb24gdG8gcnVuIG9uIGFzIGEgY2F0Y2ggb24gZWFjaCBmaWxlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwYXJhbXMuc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnNdIC0gd2hldGhlciB0byB1c2UgdGhlIGZhaWxlZC1vbmNlLCBmYWlsZWQtdHdpY2UsIGVycm9yIG9yIGp1c3QgZXJyb3IgZm9sZGVyc1xuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXMudXNlckltcG9ydFR5cGVzXSAtIHVzZXIgaW1wb3J0IHN1YiBkaXJlY3RvcmllcyBvYmplY3QgbWFwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaEJ1Y2tldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbW9Db25maWdUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1vQ29uZmlnS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM0J1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25zVG9waWMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXJQZXJGaWxlID0gXy5ub29wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRTa2lwRmFpbGVkRm9sZGVycyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW1wb3J0VHlwZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB7XG4gICAgaWYgKCFldmVudCB8fCAhZHluYW1vQ29uZmlnVGFibGUgfHwgIWR5bmFtb0NvbmZpZ0tleSB8fCAhczNCdWNrZXQgfHwgIXNuc1RvcGljIHx8ICF0cmFuc2Zvcm1lcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVycy4gTmVlZCBldmVudCwgZHluYW1vQ29uZmlnVGFibGUsIGR5bmFtb0NvbmZpZ0tleSwgczNCdWNrZXQsIHNuc1RvcGljLCB0cmFuc2Zvcm1lcicpO1xuICAgIH1cblxuICAgIGNvbnN0IEV2ZW50U291cmNlID0gXy5nZXQoZXZlbnQsICdSZWNvcmRzWzBdLkV2ZW50U291cmNlJyk7XG4gICAgaWYgKF8uaXNFcXVhbChFdmVudFNvdXJjZSwgJ2F3czpzbnMnKSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlRXZlbnRzKGV2ZW50LCB0cmFuc2Zvcm1lciwgZXJyb3JIYW5kbGVyUGVyRmlsZSwgc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMsIHVzZXJJbXBvcnRUeXBlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHJ1biBmcm9tIHRoZSBjcm9uIGpvYiBzbyBwdWJsaXNoIFNOUyBldmVudHNcbiAgICAgICAgcmV0dXJuIHB1Ymxpc2hFdmVudHMoZHluYW1vQ29uZmlnVGFibGUsIGR5bmFtb0NvbmZpZ0tleSwgczNCdWNrZXQsIHNuc1RvcGljLCB1c2VySW1wb3J0VHlwZXMpO1xuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBlcnJvckxpc3QgPSB7XG4gICAgaW52YWxpZEludmVudG9yeVJlbGVhc2VSZXF1ZXN0OiB7XG4gICAgICAgIG1lc3NhZ2U6ICdOT1QgRU5PVUdIIElOVkVOVE9SWSBUTyBGVUxGSUxMIFJFTEVBU0UnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDEwJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBhbHJlYWR5UmVsZWFzZWQ6IHtcbiAgICAgICAgbWVzc2FnZTogJ0FMUkVBRFkgUkVMRUFTRUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDExJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBhbHJlYWR5UmVjZWl2ZWQ6IHtcbiAgICAgICAgbWVzc2FnZTogJ1JFQ0VJVkFCTEUgQUxSRUFEWSBSRUNFSVZFRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTInLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRJdGVtc1JlcXVlc3Q6IHtcbiAgICAgICAgbWVzc2FnZTogJ1ZBTElEIElURU1TIE1VU1QgQkUgSU5DTFVERUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDEzJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkSUQ6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lEIGlzIGludmFsaWQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDE0JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkUmVjZWl2YWJsZToge1xuICAgICAgICBtZXNzYWdlOiAnTVVTVCBDT05UQUlOIEFUIExFQVNUIE9ORSBSRUNFSVZBQkxFJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxNScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFJlcXVlc3Q6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgUkVRVUVTVCBEQVRBJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxNicsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZEFQSUtleToge1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBSRVFVRVNUIC0gQVBJIE1BWSBLRVkgSU5WQUxJRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTcnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIHFiQ3JlYXRpb25FcnJvcjoge1xuICAgICAgICBtZXNzYWdlOiAnUVVJQ0tCT09LUyBFUlJPUiAtIEVSUk9SIENSRUFUSU5HIE9CSkVDVCBJTiBRVUlDS0JPT0tTJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxOCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgY2Fubm90UmVvcGVuOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdDQU5OT1QgUkVPUEVOIC0gVEhFIE9SREVSIEhBUyBBTFJFQURZIEJFRU4gT1BFTkVEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxOCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZERhdGVGb3JtYXQ6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgREFURSBGT1JNQVQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDE5JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkU3RhcnREYXRlOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIFNUQVJUIERBVEUnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDIwJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkRW5kRGF0ZToge1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBFTkQgREFURScsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjEnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRPcmRlclN0YXR1czoge1xuICAgICAgICBtZXNzYWdlOiAnVU5BQkxFIFRPIEVESVQgT1JERVIgSVRFTVMgVU5MRVNTIFRIRSBPUkRFUiBJUyBJTiBFU1RJTUFURSBTVEFUVVMnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDIyJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkUGF5bWVudFN0YXR1czoge1xuICAgICAgICBtZXNzYWdlOiAnVU5BQkxFIFRPIFVQREFURSBQQVlNRU5UIFNUQVRVUyBQQVlNRU5UIE1VU1QgQkUgT1BFTicsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjMnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRSZWxlYXNlU3RhdHVzOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdVTkFCTEUgVE8gVVBEQVRFIFJFTEVBU0UsIFNUQVRVUyBSRUxFQVNFIE1VU1QgQkUgT1BFTicsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjQnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRSZWNlaXZhYmxlU3RhdHVzOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdVTkFCTEUgVE8gVVBEQVRFIFJFQ0VJVkFCTEUsIFNUQVRVUyBSRUNFSVZBQkxFIE1VU1QgQkUgT1BFTicsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMDI1JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkSnNvbjp7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIEpTT04nLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDA1JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkRmlsdGVyOntcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgRklMVEVSJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyNicsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFVzZXJOYW1lVXBkYXRlOntcbiAgICAgICAgbWVzc2FnZTogJ1VOQUJMRSBUTyBVUERBVEUgVVNFUk5BTUUnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDI3JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbWFnZVNpemVMaW1pdDp7XG4gICAgICAgIG1lc3NhZ2U6ICdJTUFHRSBTSVpFIExJTUlUIDEwMEtCIEVYQ0VFREVEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyOCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgdW5hdXRob3JpemVkOntcbiAgICAgICAgbWVzc2FnZTogJ1VOQVVUSE9SSVpFRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQxMTEnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDFcbiAgICB9LFxuICAgIG5vdEZvdW5kOntcbiAgICAgICAgbWVzc2FnZTogJ0lURU0gTk9UIEZPVU5EJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAwNCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwNFxuICAgIH0sXG4gICAgZW1haWxSZXF1aXJlZDp7XG4gICAgICAgIG1lc3NhZ2U6ICdOTyBFTUFJTCBQUk9WSURFRCwgQ0hFQ0sgQ1VTVE9NRVIgRU1BSUwnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDA0JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDA0XG4gICAgfSxcbiAgICBtb2JpbGVQaG9uZVJlcXVpcmVkOntcbiAgICAgICAgbWVzc2FnZTogJ05PIE1PQklMRSBQSE9ORSBQUk9WSURFRCwgQ0hFQ0sgQ1VTVE9NRVIgQ09OVEFDVFMnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDA0JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDA0XG4gICAgfSxcbiAgICBpbnZhbGlkQ2FkZW5jZVR5cGU6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgQ0FERU5DRSBUWVBFJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNTAwMScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDUwMFxuICAgIH0sXG59OyIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvckxpc3QgfSBmcm9tICcuL2Vycm9yQ29kZXMuanMnO1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBib2R5XG4gKiBAcGFyYW0ge3t9fSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzKGJvZHksIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYkNsb3NlID0gXy5nZXQob3B0aW9ucywgJ2RiQ2xvc2UnLCBfLm5vb3ApO1xuICAgIGRiQ2xvc2UoKTtcblxuICAgIHJldHVybiBidWlsZFJlc3BvbnNlKDIwMCwgYm9keSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEBwYXJhbSB7e2RiQ2xvc2U6ZnVuY3Rpb258dW5kZWZpbmVkfX0gb3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3VjY2Vzc0h0bWwoaHRtbCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRiQ2xvc2UgPSBfLmdldChvcHRpb25zLCAnZGJDbG9zZScsIF8ubm9vcCk7XG5cbiAgICBkYkNsb3NlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvaHRtbCcsXG4gICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJzogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBodG1sXG4gICAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAqIEByZXR1cm5zIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFVzZXJOYW1lRnJvbUNvZ25pdG9FdmVudChldmVudCkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBfLmdldChldmVudCwgJ3JlcXVlc3QudXNlckF0dHJpYnV0ZXMnKTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzWydjb2duaXRvOmVtYWlsX2FsaWFzJ10gfHwgJ1VOS05PV04gVVNFUic7XG59XG5cbi8qKlxuICogR2V0IHRoZSB1c2VyIGluZm9ybWF0aW9uIGZyb20gdGhlIGV2ZW50IG9iamVjdFxuICpcbiAqIEBwYXJhbSBldmVudCB7T2JqZWN0fSBhbiBldmVudCBvYmplY3RcbiAqIEByZXR1cm5zIHt7dXNlcm5hbWU6IHN0cmluZywgaWQ6IG51bWJlcn19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50VXNlcihldmVudCkge1xuICAgIGxldCBqc29uVG9QYXJzZSA9IF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMuY3VzdG9tOlVJRCcpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jdXN0b206VUlEJykgfHxcbiAgICAgICAgJzAnO1xuXG4gICAgY29uc3QgaWQgPSBKU09OLnBhcnNlKGpzb25Ub1BhcnNlKTtcblxuICAgIGNvbnN0IHVzZXJuYW1lID0gXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5lbWFpbCcpIHx8IF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5lbWFpbCcpIHx8ICdMT0NBTCBURVNUIFVTRVInO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgIGlkXG4gICAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmYWlsdXJlIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIGJvZHkge09iamVjdH0gYW4gZXZlbnQgb2JqZWN0XG4gKiBAcGFyYW0gb3B0aW9ucyB7T2JqZWN0fSBhbiBvcHRpb25zIG9iamVjdFxuICogQHJldHVybnMge3tzdGF0dXNDb2RlOm51bWJlciwgaGVhZGVyczpvYmplY3QsIGJvZHk6c3RyaW5nfX0gYSByZXNwb25zZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhaWx1cmUoYm9keSA9IHt9LCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGJDbG9zZSA9IF8uZ2V0KG9wdGlvbnMsICdkYkNsb3NlJywgXy5ub29wKTtcbiAgICBkYkNsb3NlKCk7XG4gICAgbGV0IGNsZWFuZWRFcnJvckJvZHk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuVVRJTF9MT0cgPT09ICdMT0dfQUxMJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCctLS0tLS0tPlVUSUwgRVJST1I6JywgYm9keSk7XG4gICAgfVxuXG4gICAgY29uc3QgTk9STUFMX0VSUk9SID0geyBzdGF0dXNDb2RlOiA1MDAsIGVycm9yQ29kZTogJzVYWCcsIG1lc3NhZ2U6ICdJTlRFUk5BTCBVVElMIEVSUk9SJyB9O1xuICAgIGNsZWFuZWRFcnJvckJvZHkgPSBib2R5O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChib2R5LmRldGFpbHMpKSB7XG4gICAgICAgIGNsZWFuZWRFcnJvckJvZHkgPSBkZXRlY3RKb3lFcnJvcihib2R5KTtcbiAgICB9IGVsc2UgaWYgKF8uaXNVbmRlZmluZWQoYm9keS5lcnJvckNvZGUpIHx8IF8uaXNVbmRlZmluZWQoYm9keS5zdGF0dXNDb2RlKSkge1xuICAgICAgICBjbGVhbmVkRXJyb3JCb2R5ID0gZGV0ZWN0U2VxdWVsaXplRXJyb3IoYm9keSk7XG4gICAgfVxuICAgIGlmKF8uZ2V0KGJvZHksICdyZXNwb25zZS5kYXRhLm1lc3NhZ2UnKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCctLS0tLS0tPlVUSUwgRVJST1I6ICcrXy5nZXQoYm9keSwgJ3Jlc3BvbnNlLmRhdGEubWVzc2FnZScpKVxuICAgIH1cblxuICAgIGNvbnN0IG5ld0JvZHkgPSBfLm1lcmdlKE5PUk1BTF9FUlJPUiwgY2xlYW5lZEVycm9yQm9keSk7XG5cbiAgICByZXR1cm4gYnVpbGRSZXNwb25zZShuZXdCb2R5LnN0YXR1c0NvZGUsIG5ld0JvZHkpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZhaWx1cmUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHBhcmFtIHN0YXR1c0NvZGUge051bWJlcn0gYSBzdGF0dXMgY29kZVxuICogQHBhcmFtIGJvZHkge09iamVjdH0gYW4gZXZlbnQgb2JqZWN0XG4gKiBAcmV0dXJucyB7e3N0YXR1c0NvZGU6bnVtYmVyLCBoZWFkZXJzOm9iamVjdCwgYm9keTpzdHJpbmd9fSBhIHJlc3BvbnNlIG9iamVjdFxuICovXG5mdW5jdGlvbiBidWlsZFJlc3BvbnNlKHN0YXR1c0NvZGUsIGJvZHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJzogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KVxuICAgIH07XG59XG5cbi8qKlxuICogcGFyc2UgdGhlIGJvZHkgb2YgdGhlIGV2ZW50IG9iamVjdFxuICpcbiAqIEBwYXJhbSByZXF1ZXN0RXZlbnQge3tib2R5OnN0cmluZ319IGFuIGV2ZW50IG9iamVjdFxuICogQHJldHVybnMgZXZlbnQgeyp9IHRoZSBqc29uIG9iamVjdCBvZiB0aGUgYm9keVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCb2R5KHJlcXVlc3RFdmVudCkge1xuXG4gICAgbGV0IGV2ZW50Qm9keSA9IHt9O1xuICAgIGlmIChfLmlzU3RyaW5nKHJlcXVlc3RFdmVudC5ib2R5KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZXZlbnRCb2R5ID0gSlNPTi5wYXJzZShyZXF1ZXN0RXZlbnQuYm9keSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIEludmFsaWQgSlNPTlxuICAgICAgICAgICAgZXZlbnRCb2R5ID0gbnVsbDtcblxuICAgICAgICAgICAgdGhyb3cgZXJyb3JMaXN0LmludmFsaWRKc29uO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChfLmlzT2JqZWN0KHJlcXVlc3RFdmVudC5ib2R5KSkge1xuICAgICAgICBldmVudEJvZHkgPSByZXF1ZXN0RXZlbnQuYm9keTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnRCb2R5O1xufVxuXG4vKipcbiAqIHBhcnNlIHRoZSBib2R5IG9mIHRoZSBldmVudCBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcmVxdWVzdEV2ZW50IHtzdHJpbmd8b2JqZWN0fSBhbiBldmVudCBvYmplY3RcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gdW5kZWZpbmVkIGEgY2FsbCBiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBldmVudCB7Kn0gdGhlIGpzb24gb2JqZWN0IG9mIHRoZSBib2R5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUV2ZW50KHJlcXVlc3RFdmVudCwgY2FsbGJhY2spIHtcbiAgICBsZXQgZXZlbnQgPSB7fTtcbiAgICBpZiAoXy5pc1N0cmluZyhyZXF1ZXN0RXZlbnQpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBldmVudCA9IEpTT04ucGFyc2UocmVxdWVzdEV2ZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSW52YWxpZCBKU09OXG4gICAgICAgICAgICBldmVudCA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yKGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChyZXF1ZXN0RXZlbnQpKSB7XG4gICAgICAgIGV2ZW50ID0gcmVxdWVzdEV2ZW50O1xuICAgIH1cblxuICAgIHJldHVybiBldmVudDtcbn1cblxuLyoqXG4gKiBwYXJzZSB0aGUgYm9keSBvZiB0aGUgZXZlbnQgb2JqZWN0XG4gKiBsb29rIGZvciBzZXF1ZWxpemUgZXJyb3JzIGFuZCByZXR1cm4gYSBtZXNzYWdlXG4gKiBFUlJPUlMgc2hvdWxkIG5vdCBiZSBjYXVnaHQgaGVyZSB0aGlzIGlzIGEgZmFsbGJhY2sgZm9yIHVua25vd24gZGF0YWJhc2UgZXJyb3JzXG4gKlxuICogQHBhcmFtIGJvZHkge29iamVjdH0gcGFydCBvZiBhIGJvZHkgcmVzcG9uc2VcbiAqIEByZXR1cm5zIGVycm9yIG1lc3NhZ2Ugb2JqZWN0IHttZXNzYWdlOnN0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFNlcXVlbGl6ZUVycm9yKGJvZHkpIHtcbiAgICBjb25zdCBlcnJvckJvZHkgPSB7fTtcblxuICAgIGxldCBzZXF1ZWxpemVFcnJvciA9IF8uZ2V0KGJvZHksICdlcnJvcnMnLCBbXSkucmVkdWNlKChhY2MsIGVycikgPT4ge1xuICAgICAgICBhY2MgPSBhY2MgKyAnICcgKyBfLmdldChlcnIsICdtZXNzYWdlJyk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgJycpO1xuICAgIGNvbnN0IHBhcmVudEVycm9yID0gXy5nZXQoYm9keSwgJ3BhcmVudCcsICcnKTtcblxuICAgIHNlcXVlbGl6ZUVycm9yID0gc2VxdWVsaXplRXJyb3IgKyBfLmdldChib2R5LCAnb3JpZ2luYWwuZGV0YWlsJywgJycpICsgXy5nZXQoYm9keSwgJ1R5cGVFcnJvcicsICcnKSArIHBhcmVudEVycm9yO1xuICAgIGVycm9yQm9keS5tZXNzYWdlID0gc2VxdWVsaXplRXJyb3IudHJpbSgpO1xuICAgIHJldHVybiBlcnJvckJvZHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RKb3lFcnJvcihib2R5KSB7XG4gICAgY29uc3QgZXJyb3JCb2R5ID0ge307XG4gICAgY29uc3Qgam95RXJyb3IgPSBfLmdldChib2R5LCAnZGV0YWlsc1swXScsIHt9KTtcbiAgICBjb25zb2xlLmVycm9yKCdVU0VSIFZBTElEQVRJT04gRVJST1I6JywgYm9keSk7XG5cbiAgICBlcnJvckJvZHkubWVzc2FnZSA9IGpveUVycm9yLm1lc3NhZ2U7XG4gICAgZXJyb3JCb2R5LnN0YXR1c0NvZGUgPSA0MDA7XG4gICAgZXJyb3JCb2R5LmVycm9yQ29kZSA9ICc0MDAwJztcbiAgICByZXR1cm4gZXJyb3JCb2R5O1xufSIsImltcG9ydCB7IFMzIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzM1V0aWxzKGFjdGlvbiwgcGFyYW1zKSB7XHJcbiAgICBjb25zdCBzMyA9IG5ldyBTMygpO1xyXG4gICAgcmV0dXJuIHMzW2FjdGlvbl0ocGFyYW1zKTtcclxufVxyXG5cclxuY29uc3QgUzNVdGlsID0ge1xyXG4gICAgZ2V0T2JqZWN0OiAocGFyYW1zKSA9PiBnZXRTMyhwYXJhbXMpLFxyXG4gICAgZGVsZXRlT2JqZWN0OiAocGFyYW1zKSA9PiBzM1V0aWxzKCdkZWxldGVPYmplY3QnLCBwYXJhbXMpLFxyXG4gICAgcHV0T2JqZWN0OiAocGFyYW1zKSA9PiBzM1V0aWxzKCdwdXRPYmplY3QnLCBwYXJhbXMpLFxyXG4gICAgbGlzdE9iamVjdHNWMjogKHBhcmFtcykgPT4gczNVdGlscygnbGlzdE9iamVjdHNWMicsIHBhcmFtcylcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgUzNVdGlsO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0UzMocGFyYW1zKSB7XHJcbiAgICBjb25zdCBzMyA9IG5ldyBTMygpO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5nZXRPYmplY3QocGFyYW1zKTtcclxuICAgIHJldHVybiByZXNwb25zZS5Cb2R5LnRyYW5zZm9ybVRvU3RyaW5nKCd1dGYtOCcpO1xyXG59IiwiaW1wb3J0IHsgU05TIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNucyc7XHJcblxyXG5jb25zdCBTTlNVdGlsID0ge1xyXG4gICAgcHVibGlzaDogKHBhcmFtcykgPT4gcHVibGlzaChwYXJhbXMpLFxyXG4gICAgY3JlYXRlVG9waWM6IChwYXJhbXMpID0+IGNyZWF0ZVRvcGljKHBhcmFtcylcclxufTtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHB1Ymxpc2gocGFyYW1zKSB7XHJcbiAgICBjb25zdCBzbnMgPSBuZXcgU05TKCk7XHJcbiAgICByZXR1cm4gYXdhaXQgc25zLnB1Ymxpc2gocGFyYW1zKTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVG9waWMocGFyYW1zKSB7XHJcbiAgICBjb25zdCBzbnMgPSBuZXcgU05TKCk7XHJcbiAgICByZXR1cm4gYXdhaXQgc25zLmNyZWF0ZVRvcGljKHBhcmFtcyk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNOU1V0aWw7XHJcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYXdzLXNkay9jbGllbnQtczNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LXNuc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYXdzLXNkay9saWItZHluYW1vZGJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vbWVudFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb21lbnQvbW9tZW50LmpzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInNlcXVlbGl6ZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1bXp1Z1wiKTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiaW1wb3J0IHsgaGFuZGxlRmlsZSBhcyBoYW5kbGVGaWxlSW1wb3J0IH0gZnJvbSAnLi9ldmVudE1hbmFnZXIvaGFuZGxlRmlsZS5qcyc7XG5pbXBvcnQgeyB3YXRjaEJ1Y2tldCBhcyB3YXRjaEJ1Y2tldEltcG9ydCB9IGZyb20gJy4vZXZlbnRNYW5hZ2VyL3dhdGNoQnVja2V0LmpzJztcbmltcG9ydCB7IHB1Ymxpc2hFdmVudHMgYXMgcHVibGlzaEV2ZW50c0ltcG9ydCB9IGZyb20gJy4vZXZlbnRNYW5hZ2VyL3B1Ymxpc2hFdmVudHMuanMnO1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVycyBhcyBjcmVhdGVGaWx0ZXJzSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlRmlsdGVycy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTb3J0IGFzIGNyZWF0ZVNvcnRJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9jcmVhdGVTb3J0LmpzJztcbmltcG9ydCB7IGZpbmRBbGwgYXMgZmluZEFsbEltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2ZpbmRBbGwuanMnO1xuaW1wb3J0IHsgY2hlY2tNb2R1bGUgYXMgY2hlY2tNb2R1bGVJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5pbXBvcnQgeyBmYWlsdXJlIGFzIGZhaWx1cmVJbXBvcnQsIHN1Y2Nlc3MgYXMgc3VjY2Vzc0ltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IHJ1bk1pZ3JhdGlvbnMgYXMgcnVuTWlncmF0aW9uc0ltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJTZXR1cC9taWdyYXRpb25zLmpzJztcbmltcG9ydCB7IGdldEN1cnJlbnRVc2VyIGFzIGdldEN1cnJlbnRVc2VySW1wb3J0IH0gZnJvbSAnLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc3VjY2Vzc0h0bWwgYXMgc3VjY2Vzc0h0bWxJbXBvcnQgfSBmcm9tICcuL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50IGFzIGdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnRJbXBvcnQgfSBmcm9tICcuL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0RmlsdGVycyBhcyBkZWZhdWx0RmlsdGVyc0ltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2RlZmF1bHRGaWx0ZXJzLmpzJztcbmltcG9ydCB7IGFjY2Vzc1JpZ2h0c1V0aWxzIGFzIGFjY2Vzc1JpZ2h0c1V0aWxzSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VCb2R5IGFzIHBhcnNlQm9keUltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IHBhcnNlRXZlbnQgYXMgcGFyc2VFdmVudEltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IGdldEJ1c2luZXNzZXNJbmZvIGFzIGdldEJ1c2luZXNzZXNJbmZvSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuaW1wb3J0IHsgdXNlckRlZmF1bHRCaWQgYXMgdXNlckRlZmF1bHRCaWRJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5pbXBvcnQgeyBjaGVja1dyaXRlQWNjZXNzIGFzIGNoZWNrV3JpdGVBY2Nlc3NJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVGaWxlID0gaGFuZGxlRmlsZUltcG9ydDtcbmV4cG9ydCBjb25zdCB3YXRjaEJ1Y2tldCA9IHdhdGNoQnVja2V0SW1wb3J0O1xuZXhwb3J0IGNvbnN0IHB1Ymxpc2hFdmVudHMgPSBwdWJsaXNoRXZlbnRzSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUZpbHRlcnMgPSBjcmVhdGVGaWx0ZXJzSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNvcnQgPSBjcmVhdGVTb3J0SW1wb3J0O1xuZXhwb3J0IGNvbnN0IGZpbmRBbGwgPSBmaW5kQWxsSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNoZWNrTW9kdWxlID0gY2hlY2tNb2R1bGVJbXBvcnQ7XG5leHBvcnQgY29uc3QgZmFpbHVyZSA9IGZhaWx1cmVJbXBvcnQ7XG5leHBvcnQgY29uc3Qgc3VjY2VzcyA9IHN1Y2Nlc3NJbXBvcnQ7XG5leHBvcnQgY29uc3QgcnVuTWlncmF0aW9ucyA9IHJ1bk1pZ3JhdGlvbnNJbXBvcnQ7XG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFVzZXIgPSBnZXRDdXJyZW50VXNlckltcG9ydDtcbmV4cG9ydCBjb25zdCBzdWNjZXNzSHRtbCA9IHN1Y2Nlc3NIdG1sSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnQgPSBnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50SW1wb3J0O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRGaWx0ZXJzID0gZGVmYXVsdEZpbHRlcnNJbXBvcnQ7XG5leHBvcnQgY29uc3QgYWNjZXNzUmlnaHRzVXRpbHMgPSBhY2Nlc3NSaWdodHNVdGlsc0ltcG9ydDtcbmV4cG9ydCBjb25zdCBwYXJzZUJvZHkgPSBwYXJzZUJvZHlJbXBvcnQ7XG5leHBvcnQgY29uc3QgcGFyc2VFdmVudCA9IHBhcnNlRXZlbnRJbXBvcnQ7XG5leHBvcnQgY29uc3QgZ2V0QnVzaW5lc3Nlc0luZm8gPSBnZXRCdXNpbmVzc2VzSW5mb0ltcG9ydDtcbmV4cG9ydCBjb25zdCB1c2VyRGVmYXVsdEJpZCA9IHVzZXJEZWZhdWx0QmlkSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNoZWNrV3JpdGVBY2Nlc3MgPSBjaGVja1dyaXRlQWNjZXNzSW1wb3J0O1xuIl0sIm5hbWVzIjpbInJ1bk1pZ3JhdGlvbnMiLCJfbG9kYXNoIiwicmVxdWlyZSIsIl9sb2Rhc2gyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91bXp1ZyIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGF0YWJhc2VOYW1lIiwic2VxdWVsaXplSW5zdGFuY2UiLCJpbml0aWFsaXplTW9kZWxzIiwicGF0aFRvTWlncmF0aW9uRm9sZGVyIiwicHJvY2VzcyIsImVudiIsIlBXRCIsInVtenVnIiwiVW16dWciLCJtaWdyYXRpb25zIiwiZ2xvYiIsImNvbnRleHQiLCJnZXRRdWVyeUludGVyZmFjZSIsInN0b3JhZ2UiLCJTZXF1ZWxpemVTdG9yYWdlIiwic2VxdWVsaXplIiwibG9nZ2VyIiwiY29uc29sZSIsInBlbmRpbmdNaWdyYXRpb25zIiwicGVuZGluZyIsImxvZyIsInVwIiwiY2F0Y2giLCJ1cEVycm9yIiwiZG93biIsIl8iLCJjaGFpbiIsIm1hcCIsInJldmVyc2UiLCJ2YWx1ZSIsInRoZW4iLCJtc2ciLCJlcnJvciIsIkVycm9yIiwiZG93bkVycm9yIiwiYWNjZXNzUmlnaHRzVXRpbHMiLCJleHBvcnRzIiwidXNlckRlZmF1bHRCaWQiLCJnZXRCdXNpbmVzc2VzSW5mbyIsImdldE1vZHVsZUluZm8iLCJjaGVja01vZHVsZSIsImNoZWNrV3JpdGVBY2Nlc3MiLCJfZXJyb3JDb2RlcyIsIl9yZXF1ZXN0UmVzcG9uc2UiLCJldmVudCIsInJlcXVlc3RlZEJ1c2luZXNzSWRzIiwiZ2V0UmVxdWVzdGVkQnVzaW5lc3NJZHMiLCJhbGxvd2VkQnVzaW5lc3NJZHMiLCJnZXRBbGxvd2VkQnVzaW5lc3NJZHMiLCJsb2NhbEJpZExpc3QiLCJpc0VtcHR5IiwiZ2V0IiwiQlVJTERfRU5WIiwibGVuZ3RoIiwiaW50ZXJzZWN0aW9uIiwianNvblRvUGFyc2UiLCJkYmkiLCJKU09OIiwicGFyc2UiLCJzcGxpdCIsImJ1c2luZXNzZXMiLCJPYmplY3QiLCJrZXlzIiwiYWNjZXNzUmlnaHRzIiwiYmlkcyIsIndpdGhMb2NhbCIsInNldCIsImFyIiwibW9kdWxlUmlnaHRzIiwibW9kdWxlTmFtZSIsImFsbG93QWNjZXNzIiwiZXJyb3JMaXN0IiwidW5hdXRob3JpemVkIiwidXNlclJvbGVzIiwiYWRtaW4iLCJyZWFkIiwid3JpdGUiLCJldmVudEJvZHkiLCJwYXJzZUJvZHkiLCJidXNpbmVzc0lkcyIsImJ1c2luZXNzSWQiLCJmaW5kIiwiaWQiLCJyYXciLCJ1c2VyUmlnaHQiLCJfc2VxdWVsaXplIiwiX3NlcXVlbGl6ZTIiLCJfbW9tZW50IiwiX21vbWVudDIiLCJfYWNjZXNzUmlnaHRzVXRpbHMiLCJjcmVhdGVGaWx0ZXJzIiwib2JqZWN0RmlsdGVycyIsInF1ZXJ5Iiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsIndoZXJlIiwicmVkdWNlIiwiYWNjIiwiaXRlbSIsInZhbCIsIml0ZW1OYW1lIiwiaW5jbHVkZXMiLCJmaWx0ZXJUeXBlIiwiREIiLCJPcCIsImlMaWtlIiwib3IiLCJpbiIsInBhcnNlZEpzb24iLCJlIiwidHlwZSIsIkJPT0xFQU4iLCJxdWVyeVZhbHVlIiwidG9Mb3dlckNhc2UiLCJib29sZWFuTWFwIiwiYWN0aXZlIiwiZmlsdGVyQWRkcyIsInMiLCJtb21lbnQiLCJ1dGMiLCJkYXRlcyIsImJldHdlZW4iLCJ0b0RhdGUiLCJpc1ZhbGlkIiwiaW52YWxpZFN0YXJ0RGF0ZSIsImludmFsaWRFbmREYXRlIiwiY3JlYXRlZEF0Iiwid2l0aERhdGUiLCJhc3NpZ24iLCJjcmVhdGVTb3J0IiwiZGVmYXVsdEZpbHRlciIsImNvcHlPZkRlZmF1bHRGaWx0ZXIiLCJjbG9uZSIsInNvcnQiLCJ0ZXN0SXRlbSIsImluZGV4T2YiLCJzdWJzdHIiLCJzb3J0SXRlbSIsImZvckVhY2giLCJwYXJlbnRDaGlsZExpc3QiLCJwdXNoIiwiZGVmYXVsdEZpbHRlcnMiLCJhZGRGaWx0ZXJzRnJvbVNjaGVtYSIsInNjaGVtYSIsInN1YlNjaGVtYXMiLCJmaWx0ZXJzIiwia2V5IiwiYWNjdW11bGF0b3IiLCJrZXlQcmVmaXgiLCJhc0xpbmtBbGlhcyIsIlNUUklORyIsImVxIiwiaXRlbVR5cGUiLCJmaWx0ZXJUeXBlT3ZlclJpZGUiLCJDSEFSIiwiVEVYVCIsIkRFQ0lNQUwiLCJCSUdJTlQiLCJJTlRFR0VSIiwiREFURSIsIkRBVEVPTkxZIiwibHQiLCJKU09OQiIsImNvbnRhaW5zIiwiZ2V0UGFnaW5hdGlvbkZyb21GaW5kQWxsIiwiZmluZEFsbCIsInJlc3VsdCIsImxpbWl0Iiwib2Zmc2V0IiwiaGFzTW9yZSIsInNwbGljZSIsInBhZ2VPYmplY3QiLCJyb3dzIiwibW9kZWwiLCJvcHRpb25zIiwiZmluZEFyZ3MiLCJpbmNsdWRlIiwiYWxsIiwibmVzdGVkIiwicmVzdWx0cyIsImZpbmRVdGlscyIsIl9saWJEeW5hbW9kYiIsIl9jbGllbnREeW5hbW9kYiIsImR5bmFtb1V0aWwiLCJwYXJhbXMiLCJkeW5hbW9EYiIsIkR5bmFtb0RCRG9jdW1lbnQiLCJmcm9tIiwiRHluYW1vREIiLCJoYW5kbGVFdmVudHMiLCJfaGFuZGxlRmlsZSIsIl9ibHVlYmlyZCIsIl9ibHVlYmlyZDIiLCJ0cmFuc2Zvcm1lciIsImVycm9ySGFuZGxlclBlckZpbGUiLCJzaG91bGRTa2lwRmFpbGVkRm9sZGVycyIsInVzZXJJbXBvcnRUeXBlcyIsIlJlY29yZHMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImhhc0Vycm9ycyIsInJlY29yZCIsInNuc0luZm8iLCJzM0J1Y2tldCIsImJ1Y2tldCIsImZpbGVzIiwiZmlsZSIsInBhdGgiLCJkZWNvZGVVUklDb21wb25lbnQiLCJoYW5kbGVGaWxlIiwiZXJyIiwiX1MzVXRpbHMiLCJfUzNVdGlsczIiLCJCdWNrZXQiLCJLZXkiLCJib2R5IiwiUzNVdGlsIiwiZ2V0T2JqZWN0IiwicGFyc2VkQm9keSIsInJldHVybmVkVmFsdWUiLCJkZWxldGVPYmplY3QiLCJjb2RlIiwibmV3UGF0aCIsInVzZXJzSW1wb3J0cyIsInZhbHVlcyIsIml0ZW1zIiwiZmlsZU5hbWUiLCJsYXN0IiwiZm9sZGVyTmFtZSIsImZpcnN0Iiwic3RhcnRzV2l0aCIsInJlcGxhY2UiLCJuZXdQYXJhbXMiLCJCb2R5IiwicHV0T2JqZWN0IiwibG9vcCIsInB1Ymxpc2hFdmVudHMiLCJfU05TVXRpbHMiLCJfU05TVXRpbHMyIiwiX2R5bmFtb1V0aWxzIiwiX2R5bmFtb1V0aWxzMiIsIm1heEtleXMiLCJidWNrZXRSZXN1bHQiLCJmaWxlTGlzdCIsImN1cnJlbnRUaW1lIiwiUzNVdGlscyIsImxpc3RPYmplY3RzVjIiLCJNYXhLZXlzIiwiQ29udGludWF0aW9uVG9rZW4iLCJuZXdGaWxlcyIsImZpbHRlciIsIkNvbnRlbnRzIiwiZmlsZURlbGF5VGltZSIsImlzU2FtZU9yQmVmb3JlIiwiY29uY2F0IiwiSXNUcnVuY2F0ZWQiLCJOZXh0Q29udGludWF0aW9uVG9rZW4iLCJjb25maWdUYWJsZSIsInRhYmxlS2V5Iiwic25zVG9waWMiLCJUYWJsZU5hbWUiLCJjaHVua1NpemUiLCJtYXhNZXNzYWdlcyIsInNuc0NyZWF0ZVRvcGljUmVzcG9uc2UiLCJTTlNVdGlsIiwiY3JlYXRlVG9waWMiLCJOYW1lIiwidG9waWNBcm4iLCJUb3BpY0FybiIsIm1lc3NhZ2VMaXN0IiwiY2h1bmsiLCJzbGljZSIsInB1Ymxpc2giLCJNZXNzYWdlIiwic3RyaW5naWZ5Iiwid2F0Y2hCdWNrZXQiLCJfcHVibGlzaEV2ZW50cyIsIl9oYW5kbGVFdmVudHMiLCJkeW5hbW9Db25maWdUYWJsZSIsImR5bmFtb0NvbmZpZ0tleSIsIm5vb3AiLCJFdmVudFNvdXJjZSIsImlzRXF1YWwiLCJpbnZhbGlkSW52ZW50b3J5UmVsZWFzZVJlcXVlc3QiLCJtZXNzYWdlIiwiZXJyb3JDb2RlIiwic3RhdHVzQ29kZSIsImFscmVhZHlSZWxlYXNlZCIsImFscmVhZHlSZWNlaXZlZCIsImludmFsaWRJdGVtc1JlcXVlc3QiLCJpbnZhbGlkSUQiLCJpbnZhbGlkUmVjZWl2YWJsZSIsImludmFsaWRSZXF1ZXN0IiwiaW52YWxpZEFQSUtleSIsInFiQ3JlYXRpb25FcnJvciIsImNhbm5vdFJlb3BlbiIsImludmFsaWREYXRlRm9ybWF0IiwiaW52YWxpZE9yZGVyU3RhdHVzIiwiaW52YWxpZFBheW1lbnRTdGF0dXMiLCJpbnZhbGlkUmVsZWFzZVN0YXR1cyIsImludmFsaWRSZWNlaXZhYmxlU3RhdHVzIiwiaW52YWxpZEpzb24iLCJpbnZhbGlkRmlsdGVyIiwiaW52YWxpZFVzZXJOYW1lVXBkYXRlIiwiaW1hZ2VTaXplTGltaXQiLCJub3RGb3VuZCIsImVtYWlsUmVxdWlyZWQiLCJtb2JpbGVQaG9uZVJlcXVpcmVkIiwiaW52YWxpZENhZGVuY2VUeXBlIiwic3VjY2VzcyIsInN1Y2Nlc3NIdG1sIiwiZ2V0Q3VycmVudFVzZXJOYW1lRnJvbUNvZ25pdG9FdmVudCIsImdldEN1cnJlbnRVc2VyIiwiZmFpbHVyZSIsInBhcnNlRXZlbnQiLCJkZXRlY3RTZXF1ZWxpemVFcnJvciIsImRldGVjdEpveUVycm9yIiwiZGJDbG9zZSIsImJ1aWxkUmVzcG9uc2UiLCJodG1sIiwiaGVhZGVycyIsImF0dHJpYnV0ZXMiLCJ1c2VybmFtZSIsImNsZWFuZWRFcnJvckJvZHkiLCJVVElMX0xPRyIsIk5PUk1BTF9FUlJPUiIsImlzVW5kZWZpbmVkIiwiZGV0YWlscyIsIm5ld0JvZHkiLCJtZXJnZSIsInJlcXVlc3RFdmVudCIsImlzU3RyaW5nIiwiaXNPYmplY3QiLCJjYWxsYmFjayIsImVycm9yQm9keSIsInNlcXVlbGl6ZUVycm9yIiwicGFyZW50RXJyb3IiLCJ0cmltIiwiam95RXJyb3IiLCJzM1V0aWxzIiwiX2NsaWVudFMiLCJhY3Rpb24iLCJzMyIsIlMzIiwiZ2V0UzMiLCJyZXNwb25zZSIsInRyYW5zZm9ybVRvU3RyaW5nIiwiX2NsaWVudFNucyIsInNucyIsIlNOUyIsIl93YXRjaEJ1Y2tldCIsIl9jcmVhdGVGaWx0ZXJzIiwiX2NyZWF0ZVNvcnQiLCJfZmluZEFsbCIsIl9taWdyYXRpb25zIiwiX2RlZmF1bHRGaWx0ZXJzIiwiaGFuZGxlRmlsZUltcG9ydCIsIndhdGNoQnVja2V0SW1wb3J0IiwicHVibGlzaEV2ZW50c0ltcG9ydCIsImNyZWF0ZUZpbHRlcnNJbXBvcnQiLCJjcmVhdGVTb3J0SW1wb3J0IiwiZmluZEFsbEltcG9ydCIsImNoZWNrTW9kdWxlSW1wb3J0IiwiZmFpbHVyZUltcG9ydCIsInN1Y2Nlc3NJbXBvcnQiLCJydW5NaWdyYXRpb25zSW1wb3J0IiwiZ2V0Q3VycmVudFVzZXJJbXBvcnQiLCJzdWNjZXNzSHRtbEltcG9ydCIsImdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnRJbXBvcnQiLCJkZWZhdWx0RmlsdGVyc0ltcG9ydCIsImFjY2Vzc1JpZ2h0c1V0aWxzSW1wb3J0IiwicGFyc2VCb2R5SW1wb3J0IiwicGFyc2VFdmVudEltcG9ydCIsImdldEJ1c2luZXNzZXNJbmZvSW1wb3J0IiwidXNlckRlZmF1bHRCaWRJbXBvcnQiLCJjaGVja1dyaXRlQWNjZXNzSW1wb3J0Il0sInNvdXJjZVJvb3QiOiIifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "piper-utils",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "utility library for piper",
5
5
  "main": "bin/main.js",
6
6
  "scripts": {
@@ -1,4 +1,4 @@
1
- import _ from 'lodash';
1
+ import _, { isEmpty } from 'lodash';
2
2
  import { errorList } from '../../../requestResonse/errorCodes.js';
3
3
  import { parseBody } from '../../../requestResonse/requestResponse.js';
4
4
 
@@ -73,12 +73,21 @@ export function getBusinessesInfo(event) {
73
73
  let jsonToParse = _.get(event, 'requestContext.authorizer.claims.custom:AR') ||
74
74
  _.get(event, 'requestContext.authorizer.custom:AR') ||
75
75
  '{}';
76
+ const accessRights = JSON.parse(jsonToParse);
77
+
76
78
  if (process.env.BUILD_ENV === 'local') {
77
- const ar = { 'businessIds': { '1': 'A' } };
78
- return _.get(ar, 'businessIds', {});
79
+ if (!isEmpty(accessRights)) {
80
+ const bids = _.get(accessRights, 'businessIds', {});
81
+ const withLocal = { ...bids, '1': 'A' };
82
+ _.set(accessRights, 'businessIds', withLocal);
83
+
84
+ return _.get(accessRights, 'businessIds', {});
85
+ } else {
86
+ const ar = { 'businessIds': { '1': 'A' } };
87
+ return _.get(ar, 'businessIds', {});
88
+ }
79
89
  }
80
90
 
81
- const accessRights = JSON.parse(jsonToParse);
82
91
  return _.get(accessRights, 'businessIds', {});
83
92
  }
84
93
 
@@ -1,4 +1,4 @@
1
- import { accessRightsUtils, checkModule, checkWriteAccess, userDefaultBid } from '../../../index.js';
1
+ import { accessRightsUtils, checkModule, checkWriteAccess, getBusinessesInfo, userDefaultBid } from '../../../index.js';
2
2
  import { getModuleInfo } from './accessRightsUtils.js';
3
3
 
4
4
  export const mock = {
@@ -86,6 +86,13 @@ export const mock3 = {
86
86
  };
87
87
 
88
88
  describe('accessRightsUtils', () => {
89
+ describe('getBusinessesInfo', () => {
90
+ it('should handle local', () => {
91
+ process.env.BUILD_ENV = 'local';
92
+ const result = getBusinessesInfo(mock);
93
+ expect(result).toEqual({ '1': 'A', ABC: 'A', XYZ: 'A' });
94
+ })
95
+ });
89
96
  describe('accessRightsUtils', () => {
90
97
  it('should return localBidList', () => {
91
98
  const event = {
@@ -4,7 +4,7 @@ import DB from 'sequelize';
4
4
  /**
5
5
  * Create an object with default filters for a given sequeliaze Schema Object, and set of sub schemas
6
6
  *
7
- * @param {{type:{}, filterOverRide:string}} schema - type is sequelize data type filterOverRide is used to overide default filterType implied by type
7
+ * @param {object} schema - type is sequelize data type
8
8
  * @param {object} subSchemas - An object with alias as the key and sequelize schema as the value http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#instance-method-define
9
9
  * sub schema can be {location: locationSchema} or {location: {as: "asAlias", schema: schema}}
10
10
  * @returns {object} An Object with a default filter for each dataType CHAR and TEXT will get a $like operator, INTEGER, DECIMAL and BOOLEAN will get a $eq.
@@ -22,10 +22,6 @@ export function defaultFilters(schema, subSchemas = {}) {
22
22
  return filters;
23
23
  }
24
24
 
25
- export const filterOverRideTypes = {
26
- equal:'equal'
27
- }
28
-
29
25
  export function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {
30
26
  const asLinkAlias = _.get(schema, 'as', null);
31
27
  schema = _.get(schema, 'schema') || schema;
@@ -47,9 +43,6 @@ export function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {
47
43
  return acc;
48
44
  }
49
45
 
50
- //create a custom filter to overrider defaults implied by the db value
51
- const filterTypeOverRide = _.get(schema,`[${item}].filterOverRide`);
52
-
53
46
  const itemType = filterTypeOverRide || schema[item].type;
54
47
 
55
48
  //todo these should be removed, there are just here for sort tests
@@ -81,9 +74,9 @@ export function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {
81
74
  acc[key] = { filterType: DB.Op.iLike };
82
75
  } else if (itemType instanceof DB.DECIMAL) {
83
76
  acc[key] = { filterType: DB.Op.or };
84
- } else if (itemType instanceof DB.INTEGER) {
77
+ } else if (itemType instanceof DB.INTEGER) {
85
78
  acc[key] = { filterType: DB.Op.or };
86
- } else if (itemType instanceof DB.BIGINT) {
79
+ } else if (itemType instanceof DB.BIGINT) {
87
80
  acc[key] = { filterType: DB.Op.or };
88
81
  } else if (itemType instanceof DB.BOOLEAN) {
89
82
  acc[key] = { type: itemType, filterType: DB.Op.eq };
@@ -98,11 +91,6 @@ export function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {
98
91
  acc['updatedAt'] = { type: DB.DATE, filterType: DB.Op.lt };
99
92
  acc['id'] = { type: DB.INTEGER, filterType: DB.Op.eq };
100
93
 
101
- //filter overRides
102
- if (itemType === filterOverRideTypes.equal) {
103
- acc[key] = { filterType: DB.Op.eq };
104
- }
105
-
106
94
  return acc;
107
95
  }, accumulator);
108
96
  }