@ditojs/server 0.272.0 → 0.273.0
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/lib/app/Application.js +39 -5
- package/lib/app/SessionStore.js +3 -1
- package/lib/app/Validator.js +13 -1
- package/lib/app/index.js +7 -1
- package/lib/cli/console.js +11 -1
- package/lib/cli/db/createMigration.js +13 -1
- package/lib/cli/db/index.js +7 -1
- package/lib/cli/db/seed.js +10 -2
- package/lib/cli/index.js +6 -2
- package/lib/controllers/AdminController.js +12 -2
- package/lib/controllers/CollectionController.js +15 -1
- package/lib/controllers/Controller.js +25 -1
- package/lib/controllers/ControllerAction.js +23 -14
- package/lib/controllers/RelationController.js +7 -1
- package/lib/controllers/UserController.js +15 -1
- package/lib/controllers/index.js +7 -1
- package/lib/decorators/index.js +7 -1
- package/lib/decorators/parameters.js +3 -1
- package/lib/decorators/returns.js +3 -1
- package/lib/errors/DatabaseError.js +5 -19
- package/lib/errors/ResponseError.js +4 -16
- package/lib/errors/index.js +7 -1
- package/lib/graph/DitoGraphProcessor.js +5 -1
- package/lib/graph/expression.js +5 -1
- package/lib/graph/graph.js +18 -2
- package/lib/graph/index.js +7 -1
- package/lib/index.js +7 -1
- package/lib/lib/index.js +7 -1
- package/lib/middleware/findRoute.js +7 -1
- package/lib/middleware/index.js +7 -1
- package/lib/mixins/AssetMixin.js +4 -4
- package/lib/mixins/SessionMixin.js +4 -4
- package/lib/mixins/TimeStampedMixin.js +4 -4
- package/lib/mixins/UserMixin.js +10 -4
- package/lib/mixins/index.js +7 -1
- package/lib/models/Model.js +21 -4
- package/lib/models/definitions/filters.js +9 -1
- package/lib/models/definitions/properties.js +7 -1
- package/lib/models/definitions/scopes.js +9 -1
- package/lib/models/index.js +7 -1
- package/lib/query/QueryBuilder.js +11 -1
- package/lib/query/QueryFilters.js +11 -1
- package/lib/query/index.js +7 -1
- package/lib/schema/formats/index.js +7 -1
- package/lib/schema/index.js +10 -2
- package/lib/schema/keywords/index.js +7 -1
- package/lib/schema/properties.js +11 -1
- package/lib/schema/relations.js +18 -4
- package/lib/services/index.js +7 -1
- package/lib/storage/DiskStorage.js +7 -1
- package/lib/storage/Storage.js +5 -1
- package/lib/storage/index.js +7 -1
- package/lib/utils/emitter.js +5 -1
- package/lib/utils/index.js +7 -1
- package/lib/utils/object.js +9 -3
- package/package.json +29 -29
- package/src/app/Application.js +23 -3
- package/src/controllers/AdminController.js +1 -1
- package/src/controllers/ControllerAction.js +7 -13
- package/src/errors/DatabaseError.js +2 -23
- package/src/errors/ResponseError.js +1 -9
- package/src/models/Model.js +10 -8
package/lib/models/Model.js
CHANGED
|
@@ -3,8 +3,24 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.Model = void 0;
|
|
5
5
|
|
|
6
|
+
require("core-js/modules/esnext.async-iterator.for-each.js");
|
|
7
|
+
|
|
8
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
9
|
+
|
|
10
|
+
require("core-js/modules/esnext.iterator.for-each.js");
|
|
11
|
+
|
|
12
|
+
require("core-js/modules/esnext.async-iterator.reduce.js");
|
|
13
|
+
|
|
14
|
+
require("core-js/modules/esnext.iterator.reduce.js");
|
|
15
|
+
|
|
16
|
+
require("core-js/modules/esnext.async-iterator.filter.js");
|
|
17
|
+
|
|
18
|
+
require("core-js/modules/esnext.iterator.filter.js");
|
|
19
|
+
|
|
6
20
|
require("core-js/modules/esnext.weak-map.delete-all.js");
|
|
7
21
|
|
|
22
|
+
require("core-js/modules/esnext.weak-map.emplace.js");
|
|
23
|
+
|
|
8
24
|
var _objection = _interopRequireDefault(require("objection"));
|
|
9
25
|
|
|
10
26
|
var _query = require("../query");
|
|
@@ -196,7 +212,7 @@ class Model extends _objection.default.Model {
|
|
|
196
212
|
|
|
197
213
|
static query(trx) {
|
|
198
214
|
return super.query(trx).onError(err => {
|
|
199
|
-
err = err instanceof _errors.ResponseError ? err : err instanceof _objection.default.DBError ?
|
|
215
|
+
err = err instanceof _errors.ResponseError ? err : err instanceof _objection.default.DBError ? this.app.createDatabaseError(err) : new _errors.WrappedError(err);
|
|
200
216
|
return Promise.reject(err);
|
|
201
217
|
});
|
|
202
218
|
}
|
|
@@ -669,9 +685,10 @@ class Model extends _objection.default.Model {
|
|
|
669
685
|
case 'ModelValidation':
|
|
670
686
|
return this.app.createValidationError({
|
|
671
687
|
type,
|
|
672
|
-
message: message || `The provided data for the ${this.name} model is not valid
|
|
688
|
+
message: message || `The provided data for the ${this.name} model is not valid`,
|
|
673
689
|
errors,
|
|
674
|
-
options
|
|
690
|
+
options,
|
|
691
|
+
json
|
|
675
692
|
});
|
|
676
693
|
|
|
677
694
|
case 'RelationExpression':
|
|
@@ -933,4 +950,4 @@ function mapFilesByKey(files) {
|
|
|
933
950
|
return map;
|
|
934
951
|
}, {});
|
|
935
952
|
}
|
|
936
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvTW9kZWwuanMiXSwibmFtZXMiOlsiTW9kZWwiLCJvYmplY3Rpb24iLCJjb25zdHJ1Y3RvciIsImpzb24iLCIkc2V0SnNvbiIsInNldHVwIiwia25leCIsInJlbGF0aW9uIiwiT2JqZWN0IiwidmFsdWVzIiwiZ2V0UmVsYXRpb25zIiwic2V0dXBSZWxhdGlvbiIsImVycm9yIiwiUmVsYXRpb25FcnJvciIsInJlZmVyZW5jZVZhbGlkYXRvciIsInJlbGF0ZWRNb2RlbENsYXNzIiwiZ2V0UmVsYXRlZFJlbGF0aW9ucyIsInB1c2giLCJhY2Nlc3NvciIsIm5hbWUiLCJwcm90b3R5cGUiLCJkZWZpbmVBY2Nlc3NvciIsInRhcmdldCIsImlzQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInZhbHVlIiwiUmVsYXRpb25BY2Nlc3NvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJpbml0aWFsaXplIiwiaG9va3MiLCJhc3NldHMiLCJkZWZpbml0aW9uIiwiX3NldHVwRW1pdHRlciIsIl9zZXR1cEFzc2V0c0V2ZW50cyIsIiRpbml0aWFsaXplIiwiJGFwcCIsImFwcCIsIiRpcyIsIm1vZGVsIiwiaWQiLCIkaGFzIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwiJHVwZGF0ZSIsInRyeCIsIiRxdWVyeSIsInVwZGF0ZSIsInJ1bkFmdGVyIiwicmVzdWx0IiwicXVlcnkiLCJoYXMiLCIkc2V0IiwiJHBhdGNoIiwicGF0Y2giLCIkdHJhbnNhY3Rpb24iLCJoYW5kbGVyIiwidHJhbnNhY3Rpb24iLCIkdmFsaWRhdGUiLCJvcHRpb25zIiwic2tpcFZhbGlkYXRpb24iLCJncmFwaCIsImFzeW5jIiwiaW5wdXRKc29uIiwic2hhbGxvdyIsIiRpc09iamVjdGlvbk1vZGVsIiwiY2xvbmUiLCJtdXRhYmxlIiwidmFsaWRhdG9yIiwiZ2V0VmFsaWRhdG9yIiwiYXJncyIsImN0eCIsImNyZWF0ZSIsImJlZm9yZVZhbGlkYXRlIiwidmFsaWRhdGUiLCJoYW5kbGVSZXN1bHQiLCJhZnRlclZhbGlkYXRlIiwidGhlbiIsIiR2YWxpZGF0ZUdyYXBoIiwiZnJvbUpzb24iLCJvbkVycm9yIiwiZXJyIiwiUmVzcG9uc2VFcnJvciIsIkRCRXJyb3IiLCJEYXRhYmFzZUVycm9yIiwiV3JhcHBlZEVycm9yIiwiUHJvbWlzZSIsInJlamVjdCIsImNvdW50IiwiZmlyc3QiLCJ0YWJsZU5hbWUiLCJtYXRjaCIsImlkQ29sdW1uIiwiaWRzIiwiZW50cmllcyIsInByaW1hcnkiLCJsZW5ndGgiLCJnZXRSZWZlcmVuY2UiLCJtb2RlbE9ySWQiLCJpbmNsdWRlUHJvcGVydGllcyIsInJlZiIsImlkUHJvcGVydGllcyIsImdldElkUHJvcGVydHlBcnJheSIsImFkZFByb3BlcnR5Iiwia2V5IiwidW5kZWZpbmVkIiwidWlkUmVmUHJvcCIsImZvckVhY2giLCJNb2RlbEVycm9yIiwiaW5kZXgiLCJpc1JlZmVyZW5jZSIsIm9iaiIsImNvbXBpbGVWYWxpZGF0b3IiLCJvbmVPZiIsInR5cGUiLCJyZWR1Y2UiLCJpZFByb3BlcnR5IiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJ0aHJvdyIsImdldFNjb3BlIiwic2NvcGVzIiwiaGFzU2NvcGUiLCJnZXRNb2RpZmllcnMiLCJtb2RpZmllcnMiLCJyZWxhdGlvbk1hcHBpbmdzIiwiX2dldENhY2hlZCIsInJlbGF0aW9ucyIsIm1vZGVscyIsImpzb25TY2hlbWEiLCJzY2hlbWEiLCIkaWQiLCIkc2NoZW1hIiwidmlydHVhbEF0dHJpYnV0ZXMiLCJjb21wdXRlZEF0dHJpYnV0ZXMiLCJqc29uQXR0cmlidXRlcyIsImdldEF0dHJpYnV0ZXMiLCJzcGVjaWZpY1R5cGUiLCJjb21wdXRlZCIsImJvb2xlYW5BdHRyaWJ1dGVzIiwiZGF0ZUF0dHJpYnV0ZXMiLCJpbmNsdWRlcyIsImhpZGRlbkF0dHJpYnV0ZXMiLCJoaWRkZW4iLCJmaWx0ZXIiLCJhdHRyaWJ1dGVzIiwiaWRlbnRpZmllciIsImNhbGN1bGF0ZSIsImVtcHR5IiwiY2FjaGUiLCJnZXRNZXRhIiwiZW50cnkiLCJwYXJ0Iiwic3BsaXQiLCJwcm9wZXJ0eU5hbWVUb0NvbHVtbk5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJjb2x1bW5OYW1lVG9Qcm9wZXJ0eU5hbWUiLCJjb2x1bW5OYW1lIiwiY2FsbEluaXRpYWxpemUiLCIkZm9ybWF0RGF0YWJhc2VKc29uIiwiZGF0ZSIsInRvSVNPU3RyaW5nIiwiaXNTUUxpdGUiLCJib29sIiwiJHBhcnNlRGF0YWJhc2VKc29uIiwiJHBhcnNlSnNvbiIsIkRhdGUiLCJkYXRhUGF0aCIsInN0b3JhZ2UiLCJnZXRTdG9yYWdlIiwiZGF0YSIsImNvbnZlcnRUb0Fzc2V0RmlsZXMiLCJjb252ZXJ0QXNzZXRGaWxlIiwiJGZvcm1hdEpzb24iLCIkZmlsdGVyR3JhcGgiLCJtb2RlbEdyYXBoIiwiZXhwciIsIiRwb3B1bGF0ZUdyYXBoIiwiZmlsdGVyR3JhcGgiLCJwb3B1bGF0ZUdyYXBoIiwiZ2V0UHJvcGVydHlPclJlbGF0aW9uQXREYXRhUGF0aCIsInBhcnNlZERhdGFQYXRoIiwiZ2V0UmVzdWx0IiwiZm91bmQiLCJuZXh0Iiwic2xpY2UiLCJuZXN0ZWREYXRhUGF0aCIsImV4cHJlc3Npb24iLCJqb2luIiwiZmlyc3RUb2tlbiIsIm90aGVyVG9rZW5zIiwidG9rZW4iLCJpc09uZVRvT25lIiwicmVsYXRlZFF1ZXJ5IiwicmVsYXRpb25OYW1lIiwiYWxpYXMiLCJtb2RpZmllck5vdEZvdW5kIiwibW9kaWZpZXIiLCJtb2RlbENsYXNzIiwiYXBwbHlTY29wZSIsImlnbm9yZVNjb3BlIiwic2VsZWN0IiwiY3JlYXRlTm90Rm91bmRFcnJvciIsIk5vdEZvdW5kRXJyb3IiLCJieUlkIiwiY3JlYXRlVmFsaWRhdG9yIiwiY3JlYXRlVmFsaWRhdGlvbkVycm9yIiwibWVzc2FnZSIsImVycm9ycyIsIkdyYXBoRXJyb3IiLCJzZXREZWZpbml0aW9uIiwiZ2V0RGVmaW5pdGlvbiIsImRlc2MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjYWxsIiwiZ2V0UHJvdG90eXBlT2YiLCJtZXJnZWQiLCJkZWZpbml0aW9ucyIsIiRlbWl0IiwiZXZlbnQiLCJlbWl0IiwiYmVmb3JlRmluZCIsIl9lbWl0U3RhdGljSG9vayIsImFmdGVyRmluZCIsImJlZm9yZUluc2VydCIsImFmdGVySW5zZXJ0IiwiYmVmb3JlVXBkYXRlIiwiYWZ0ZXJVcGRhdGUiLCJiZWZvcmVEZWxldGUiLCJhZnRlckRlbGV0ZSIsIm9yaWdpbmFsQXJncyIsImxpc3RlbmVycyIsImxpc3RlbmVyIiwicmVzIiwiYXNzZXREYXRhUGF0aHMiLCJrZXlzIiwib24iLCJpbnB1dEl0ZW1zIiwiYXNGaW5kUXVlcnkiLCJhZnRlckl0ZW1zIiwiZGF0YVBhdGhzIiwicGF0aCIsImdldFZhbHVlQXRBc3NldERhdGFQYXRoIiwiYmVmb3JlSXRlbXMiLCJsb2FkQXNzZXREYXRhUGF0aHMiLCJiZWZvcmVGaWxlc1BlckRhdGFQYXRoIiwiZ2V0RmlsZXNQZXJBc3NldERhdGFQYXRoIiwiYWZ0ZXJGaWxlc1BlckRhdGFQYXRoIiwiaW1wb3J0ZWRGaWxlcyIsIm1vZGlmaWVkRmlsZXMiLCJyb2xsYmFjayIsInNldE1heExpc3RlbmVycyIsImNvbnNvbGUiLCJpbmZvIiwibWFwIiwiZmlsZSIsImFsbCIsInJlbW92ZUZpbGUiLCJiZWZvcmVGaWxlcyIsImFmdGVyRmlsZXMiLCJiZWZvcmVCeUtleSIsIm1hcEZpbGVzQnlLZXkiLCJhZnRlckJ5S2V5IiwicmVtb3ZlZEZpbGVzIiwiYWRkZWRGaWxlcyIsImhhbmRsZUFkZGRlZEFuZFJlbW92ZWRBc3NldHMiLCJoYW5kbGVNb2RpZmllZEFzc2V0cyIsIlF1ZXJ5QnVpbGRlciIsImNsb25lT2JqZWN0QXR0cmlidXRlcyIsInBpY2tKc29uU2NoZW1hUHJvcGVydGllcyIsInVzZUxpbWl0SW5GaXJzdCIsIkV2ZW50RW1pdHRlciIsIm1peGluIiwiS25leEhlbHBlciIsIm1ldGFNYXAiLCJXZWFrTWFwIiwibWV0YSIsInNldCIsImxvYWREYXRhUGF0aCIsIml0ZW0iLCJp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QUFDNUIsU0FBT0EsS0FBSyxDQUFDdEssTUFBTixDQUNMLENBQUMwSSxHQUFELEVBQU1DLElBQU4sS0FBZTtBQUNiRCxJQUFBQSxHQUFHLENBQUNDLElBQUksQ0FBQ3RKLEdBQU4sQ0FBSCxHQUFnQnNKLElBQWhCO0FBQ0EsV0FBT0QsR0FBUDtBQUNELEdBSkksRUFLTCxFQUxLLENBQVA7QUFPRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvYmplY3Rpb24gZnJvbSAnb2JqZWN0aW9uJ1xuaW1wb3J0IHsgUXVlcnlCdWlsZGVyIH0gZnJvbSAnQC9xdWVyeSdcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgS25leEhlbHBlciB9IGZyb20gJ0AvbGliJ1xuaW1wb3J0IHsgY29udmVydFNjaGVtYSwgYWRkUmVsYXRpb25TY2hlbWFzLCBjb252ZXJ0UmVsYXRpb25zIH0gZnJvbSAnQC9zY2hlbWEnXG5pbXBvcnQgeyBwb3B1bGF0ZUdyYXBoLCBmaWx0ZXJHcmFwaCB9IGZyb20gJ0AvZ3JhcGgnXG5pbXBvcnQgeyBmb3JtYXRKc29uIH0gZnJvbSAnQC91dGlscydcbmltcG9ydCB7XG4gIFJlc3BvbnNlRXJyb3IsIERhdGFiYXNlRXJyb3IsIEdyYXBoRXJyb3IsIE1vZGVsRXJyb3IsIE5vdEZvdW5kRXJyb3IsXG4gIFJlbGF0aW9uRXJyb3IsIFdyYXBwZWRFcnJvclxufSBmcm9tICdAL2Vycm9ycydcbmltcG9ydCB7XG4gIGlzU3RyaW5nLCBpc09iamVjdCwgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBhc0FycmF5LCBtZXJnZSwgZmxhdHRlbixcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGgsIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFJlbGF0aW9uQWNjZXNzb3IgZnJvbSAnLi9SZWxhdGlvbkFjY2Vzc29yJ1xuaW1wb3J0IGRlZmluaXRpb25zIGZyb20gJy4vZGVmaW5pdGlvbnMnXG5cbmV4cG9ydCBjbGFzcyBNb2RlbCBleHRlbmRzIG9iamVjdGlvbi5Nb2RlbCB7XG4gIC8vIERlZmluZSBhIGRlZmF1bHQgY29uc3RydWN0b3IgdG8gYWxsb3cgbmV3IE1vZGVsKGpzb24pIGFzIGEgc2hvcnQtY3V0IHRvXG4gIC8vIGBNb2RlbC5mcm9tSnNvbihqc29uLCB7IHNraXBWYWxpZGF0aW9uOiB0cnVlIH0pYFxuICBjb25zdHJ1Y3Rvcihqc29uKSB7XG4gICAgc3VwZXIoKVxuICAgIGlmIChqc29uKSB7XG4gICAgICB0aGlzLiRzZXRKc29uKGpzb24pXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHNldHVwKGtuZXgpIHtcbiAgICB0aGlzLmtuZXgoa25leClcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCByZWxhdGlvbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuZ2V0UmVsYXRpb25zKCkpKSB7XG4gICAgICAgIHRoaXMuc2V0dXBSZWxhdGlvbihyZWxhdGlvbilcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3IgaW5zdGFuY2VvZiBSZWxhdGlvbkVycm9yID8gZXJyb3IgOiBuZXcgUmVsYXRpb25FcnJvcihlcnJvcilcbiAgICB9XG4gICAgdGhpcy5yZWZlcmVuY2VWYWxpZGF0b3IgPSBudWxsXG4gIH1cblxuICBzdGF0aWMgc2V0dXBSZWxhdGlvbihyZWxhdGlvbikge1xuICAgIC8vIEFkZCB0aGlzIHJlbGF0aW9uIHRvIHRoZSByZWxhdGVkIG1vZGVsJ3MgcmVsYXRlZFJlbGF0aW9ucywgc28gaXQgY2FuXG4gICAgLy8gcmVnaXN0ZXIgYWxsIHJlcXVpcmVkIGZvcmVpZ24ga2V5cyBpbiBpdHMgcHJvcGVydGllcy5cbiAgICByZWxhdGlvbi5yZWxhdGVkTW9kZWxDbGFzcy5nZXRSZWxhdGVkUmVsYXRpb25zKCkucHVzaChyZWxhdGlvbilcbiAgICAvLyBUT0RPOiBDaGVjayBgdGhyb3VnaGAgc2V0dGluZ3MgdG8gbWFrZSBzdXJlIHRoZXkncmUgY29ycmVjdD9cblxuICAgIC8vIEV4cG9zZSBSZWxhdGlvbkFjY2Vzc29yIGluc3RhbmNlcyBmb3IgZWFjaCByZWxhdGlvbiB1bmRlciBzaG9ydC1jdXQgJG5hbWVcbiAgICAvLyBmb3IgYWNjZXNzIHRvIHJlbGF0aW9ucyBhbmQgaW1wbGljaXQgY2FsbHMgdG8gJHJlbGF0ZWRRdWVyeShuYW1lKS5cbiAgICBjb25zdCBhY2Nlc3NvciA9IGAkJHtyZWxhdGlvbi5uYW1lfWBcbiAgICBpZiAoYWNjZXNzb3IgaW4gdGhpcy5wcm90b3R5cGUpIHtcbiAgICAgIHRocm93IG5ldyBSZWxhdGlvbkVycm9yKFxuICAgICAgICBgTW9kZWwgJyR7dGhpcy5uYW1lfScgYWxyZWFkeSBkZWZpbmVzIGEgcHJvcGVydHkgd2l0aCBuYW1lIGAgK1xuICAgICAgICBgJyR7YWNjZXNzb3J9JyB0aGF0IGNsYXNoZXMgd2l0aCB0aGUgcmVsYXRpb24gYWNjZXNzb3IuYClcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgYW4gYWNjZXNzb3Igb24gdGhlIGNsYXNzIGFzIHdlbGwgYXMgb24gdGhlIHByb3RvdHlwZSB0aGF0IHdoZW5cbiAgICAvLyBmaXJzdCBjYWxsZWQgY3JlYXRlcyBhIFJlbGF0aW9uQWNjZXNzb3IgaW5zdGFuY2UgYW5kIHRoZW4gb3ZlcnJpZGVzIHRoZVxuICAgIC8vIGFjY2Vzc29yIHdpdGggb25lIHRoYXQgdGhlbiBqdXN0IHJldHVybnMgdGhlIHNhbWUgdmFsdWUgYWZ0ZXJ3YXJkcy5cbiAgICBjb25zdCBkZWZpbmVBY2Nlc3NvciA9ICh0YXJnZXQsIGlzQ2xhc3MpID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGFjY2Vzc29yLCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5ldyBSZWxhdGlvbkFjY2Vzc29yKFxuICAgICAgICAgICAgcmVsYXRpb24sXG4gICAgICAgICAgICBpc0NsYXNzID8gdGhpcyA6IG51bGwsIC8vIG1vZGVsQ2xhc3NcbiAgICAgICAgICAgIGlzQ2xhc3MgPyBudWxsIDogdGhpcyAvLyBtb2RlbFxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBPdmVycmlkZSBhY2Nlc3NvciB3aXRoIHZhbHVlIG9uIGZpcnN0IGNhbGwgZm9yIGNhY2hpbmcuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFjY2Vzc29yLCB7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBkZWZpbmVBY2Nlc3Nvcih0aGlzLCB0cnVlKVxuICAgIGRlZmluZUFjY2Vzc29yKHRoaXMucHJvdG90eXBlLCBmYWxzZSlcbiAgfVxuXG4gIC8vIEBvdmVycmlkYWJsZVxuICBzdGF0aWMgaW5pdGlhbGl6ZSgpIHtcbiAgICBjb25zdCB7IGhvb2tzLCBhc3NldHMgfSA9IHRoaXMuZGVmaW5pdGlvblxuICAgIHRoaXMuX3NldHVwRW1pdHRlcihob29rcylcbiAgICBpZiAoYXNzZXRzKSB7XG4gICAgICB0aGlzLl9zZXR1cEFzc2V0c0V2ZW50cyhhc3NldHMpXG4gICAgfVxuICB9XG5cbiAgLy8gQG92ZXJyaWRhYmxlXG4gICRpbml0aWFsaXplKCkge1xuICB9XG5cbiAgZ2V0ICRhcHAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuYXBwXG4gIH1cblxuICAkaXMobW9kZWwpIHtcbiAgICByZXR1cm4gbW9kZWw/LmNvbnN0cnVjdG9yID09PSB0aGlzLmNvbnN0cnVjdG9yICYmIG1vZGVsPy5pZCA9PT0gdGhpcy5pZFxuICB9XG5cbiAgJGhhcyguLi5wcm9wZXJ0aWVzKSB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoIShwcm9wZXJ0eSBpbiB0aGlzKSkgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAkdXBkYXRlKHByb3BlcnRpZXMsIHRyeCkge1xuICAgIHJldHVybiB0aGlzLiRxdWVyeSh0cngpXG4gICAgICAudXBkYXRlKHByb3BlcnRpZXMpXG4gICAgICAucnVuQWZ0ZXIoKHJlc3VsdCwgcXVlcnkpID0+XG4gICAgICAgIC8vIE9ubHkgcGVyZm9ybSBgJHNldCgpYCBhbmQgcmV0dXJuIGB0aGlzYCBpZiB0aGUgcXVlcnkgd2Fzbid0IG1vZGlmaWVkXG4gICAgICAgIC8vIGluIGEgd2F5IHRoYXQgd291bGQgcmVtb3ZlIHRoZSBgdXBkYXRlKClgIGNvbW1hbmQsIGUuZy4gdG9GaW5kUXVlcnkoKVxuICAgICAgICBxdWVyeS5oYXMoJ3VwZGF0ZScpID8gdGhpcy4kc2V0KHJlc3VsdCkgOiByZXN1bHRcbiAgICAgIClcbiAgfVxuXG4gICRwYXRjaChwcm9wZXJ0aWVzLCB0cngpIHtcbiAgICByZXR1cm4gdGhpcy4kcXVlcnkodHJ4KVxuICAgICAgLnBhdGNoKHByb3BlcnRpZXMpXG4gICAgICAucnVuQWZ0ZXIoKHJlc3VsdCwgcXVlcnkpID0+XG4gICAgICAgIC8vIE9ubHkgcGVyZm9ybSBgJHNldCgpYCBhbmQgcmV0dXJuIGB0aGlzYCBpZiB0aGUgcXVlcnkgd2Fzbid0IG1vZGlmaWVkXG4gICAgICAgIC8vIGluIGEgd2F5IHRoYXQgd291bGQgcmVtb3ZlIHRoZSBgcGF0Y2goKWAgY29tbWFuZCwgZS5nLiB0b0ZpbmRRdWVyeSgpXG4gICAgICAgIHF1ZXJ5LmhhcygncGF0Y2gnKSA/IHRoaXMuJHNldChyZXN1bHQpIDogcmVzdWx0XG4gICAgICApXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgJHRyYW5zYWN0aW9uKHRyeCwgaGFuZGxlcikge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRyYW5zYWN0aW9uKHRyeCwgaGFuZGxlcilcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBzdGF0aWMgdHJhbnNhY3Rpb24odHJ4LCBoYW5kbGVyKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGB0cmFuc2FjdGlvbih0cngsIGhhbmRsZXIpYCAmIGB0cmFuc2FjdGlvbihoYW5kbGVyKWBcbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgIGhhbmRsZXIgPSB0cnhcbiAgICAgIHRyeCA9IG51bGxcbiAgICB9XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIC8vIFVzZSBleGlzdGluZyB0cmFuc2FjdGlvbiwgb3IgY3JlYXRlIG5ldyBvbmUsIHRvIGV4ZWN1dGUgaGFuZGxlciB3aXRoOlxuICAgICAgcmV0dXJuIHRyeFxuICAgICAgICA/IGhhbmRsZXIodHJ4KVxuICAgICAgICA6IHRoaXMua25leCgpLnRyYW5zYWN0aW9uKGhhbmRsZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGFyZ3VtZW50cywgc2ltcGx5IGRlbGVnYXRlIHRvIG9iamVjdGlvbidzIHRyYW5zYWN0aW9uKClcbiAgICAgIHJldHVybiBzdXBlci50cmFuc2FjdGlvbigpXG4gICAgfVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gICR2YWxpZGF0ZShqc29uLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAob3B0aW9ucy5za2lwVmFsaWRhdGlvbikge1xuICAgICAgcmV0dXJuIGpzb25cbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmdyYXBoICYmICFvcHRpb25zLmFzeW5jKSB7XG4gICAgICAvLyBGYWxsIGJhY2sgdG8gT2JqZWN0aW9uJ3MgJHZhbGlkYXRlKCkgaWYgd2UgZG9uJ3QgbmVlZCBhbnkgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25zIChhc3luYyBhbmQgZ3JhcGggZm9yIG5vdyk6XG4gICAgICByZXR1cm4gc3VwZXIuJHZhbGlkYXRlKGpzb24sIG9wdGlvbnMpXG4gICAgfVxuICAgIGpzb24gPSBqc29uIHx8IHRoaXNcbiAgICBjb25zdCBpbnB1dEpzb24gPSBqc29uXG4gICAgY29uc3Qgc2hhbGxvdyA9IGpzb24uJGlzT2JqZWN0aW9uTW9kZWwgJiYgIW9wdGlvbnMuZ3JhcGhcbiAgICBpZiAoc2hhbGxvdykge1xuICAgICAgLy8gU3RyaXAgYXdheSByZWxhdGlvbnMgYW5kIG90aGVyIGludGVybmFsIHN0dWZmLlxuICAgICAganNvbiA9IGpzb24uY2xvbmUoeyBzaGFsbG93OiB0cnVlIH0pXG4gICAgICAvLyBXZSBjYW4gbXV0YXRlIGBqc29uYCBub3cgdGhhdCB3ZSB0b29rIGEgY29weSBvZiBpdC5cbiAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIG11dGFibGU6IHRydWUgfVxuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuY29uc3RydWN0b3IuZ2V0VmFsaWRhdG9yKClcbiAgICBjb25zdCBhcmdzID0ge1xuICAgICAgb3B0aW9ucyxcbiAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAganNvbixcbiAgICAgIGN0eDogT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgIH1cblxuICAgIHZhbGlkYXRvci5iZWZvcmVWYWxpZGF0ZShhcmdzKVxuICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRvci52YWxpZGF0ZShhcmdzKVxuICAgIGNvbnN0IGhhbmRsZVJlc3VsdCA9IHJlc3VsdCA9PiB7XG4gICAgICB2YWxpZGF0b3IuYWZ0ZXJWYWxpZGF0ZShhcmdzKVxuICAgICAgLy8gSWYgYGpzb25gIHdhcyBzaGFsbG93LWNsb25lZCwgY29weSBvdmVyIHRoZSBwb3NzaWJsZSBkZWZhdWx0IHZhbHVlcy5cbiAgICAgIHJldHVybiBzaGFsbG93ID8gaW5wdXRKc29uLiRzZXQocmVzdWx0KSA6IHJlc3VsdFxuICAgIH1cbiAgICAvLyBIYW5kbGUgYm90aCBhc3luYyBhbmQgc3luYyB2YWxpZGF0aW9uIGhlcmU6XG4gICAgcmV0dXJuIGlzUHJvbWlzZShyZXN1bHQpXG4gICAgICA/IHJlc3VsdC50aGVuKGhhbmRsZVJlc3VsdClcbiAgICAgIDogaGFuZGxlUmVzdWx0KHJlc3VsdClcbiAgfVxuXG4gIGFzeW5jICR2YWxpZGF0ZUdyYXBoKG9wdGlvbnMgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMuJHZhbGlkYXRlKG51bGwsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBncmFwaDogdHJ1ZSxcbiAgICAgIC8vIEFsd2F5cyB1c2UgYGFzeW5jOiB0cnVlYCBvcHRpb24gaGVyZSBmb3Igc2ltcGxpY2l0eTpcbiAgICAgIGFzeW5jOiB0cnVlXG4gICAgfSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHN0YXRpYyBmcm9tSnNvbihqc29uLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAob3B0aW9ucy5hc3luYyAmJiAhb3B0aW9ucy5za2lwVmFsaWRhdGlvbikge1xuICAgICAgLy8gSGFuZGxlIGFzeW5jIHZhbGlkYXRpb24sIGFzIHN1cHBvcnRlZCBieSBEaXRvOlxuICAgICAgY29uc3QgbW9kZWwgPSBuZXcgdGhpcygpXG4gICAgICByZXR1cm4gbW9kZWwuJHZhbGlkYXRlKGpzb24sIG9wdGlvbnMpLnRoZW4oXG4gICAgICAgIGpzb24gPT4gbW9kZWwuJHNldEpzb24oanNvbiwge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgc2tpcFZhbGlkYXRpb246IHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gICAgLy8gRmFsbCBiYWNrIHRvIE9iamVjdGlvbidzIGZyb21Kc29uKCkgaWYgd2UgZG9uJ3QgbmVlZCBhc3luYyBoYW5kbGluZzpcbiAgICByZXR1cm4gc3VwZXIuZnJvbUpzb24oanNvbiwgb3B0aW9ucylcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBzdGF0aWMgcXVlcnkodHJ4KSB7XG4gICAgcmV0dXJuIHN1cGVyLnF1ZXJ5KHRyeCkub25FcnJvcihlcnIgPT4ge1xuICAgICAgLy8gVE9ETzogU2hvdWxkbid0IHRoaXMgd3JhcHBpbmcgaGFwcGVuIG9uIHRoZSBDb250cm9sbGVyIGxldmVsP1xuICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgUmVzcG9uc2VFcnJvciA/IGVyclxuICAgICAgICA6IGVyciBpbnN0YW5jZW9mIG9iamVjdGlvbi5EQkVycm9yID8gbmV3IERhdGFiYXNlRXJyb3IoZXJyKVxuICAgICAgICA6IG5ldyBXcmFwcGVkRXJyb3IoZXJyKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcbiAgICB9KVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNvdW50KC4uLmFyZ3MpIHtcbiAgICBjb25zdCB7IGNvdW50IH0gPSBhd2FpdCB0aGlzLnF1ZXJ5KCkuY291bnQoLi4uYXJncykuZmlyc3QoKSB8fCB7fVxuICAgIHJldHVybiArY291bnQgfHwgMFxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHN0YXRpYyBnZXQgdGFibGVOYW1lKCkge1xuICAgIC8vIElmIHRoZSBjbGFzcyBuYW1lIGVuZHMgaW4gJ01vZGVsJywgcmVtb3ZlIHRoYXQgZnJvbSB0aGUgdGFibGUgbmFtZS5cbiAgICByZXR1cm4gdGhpcy5uYW1lLm1hdGNoKC9eKC4qPykoPzpNb2RlbHwpJC8pWzFdXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgc3RhdGljIGdldCBpZENvbHVtbigpIHtcbiAgICAvLyBUcnkgZXh0cmFjdGluZyB0aGUgaWQgY29sdW1uIG5hbWUgZnJvbSB0aGUgcmF3IHByb3BlcnRpZXMgZGVmaW5pdGlvbnMsXG4gICAgLy8gbm90IHRoZSByZXNvbHZlZCBgZGVmaW5pdGlvbi5wcm9wZXJ0aWVzYCB3aGljaCBhcmVuJ3QgcmVhZHkgYXQgdGhpcyBwb2ludFxuICAgIC8vIHdpdGggZmFsbC1iYWNrIG9udG8gZGVmYXVsdCBPYmplY3Rpb24uanMgYmVoYXZpb3IuXG4gICAgY29uc3QgeyBwcm9wZXJ0aWVzIH0gPSB0aGlzXG4gICAgY29uc3QgaWRzID0gW11cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBwcm9wZXJ0eV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcyB8fCB7fSkpIHtcbiAgICAgIGlmIChwcm9wZXJ0eT8ucHJpbWFyeSkge1xuICAgICAgICBpZHMucHVzaChuYW1lKVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gaWRzXG4gICAgcmV0dXJuIGxlbmd0aCA+IDEgPyBpZHMgOiBsZW5ndGggPiAwID8gaWRzWzBdIDogc3VwZXIuaWRDb2x1bW5cbiAgfVxuXG4gIHN0YXRpYyBnZXRSZWZlcmVuY2UobW9kZWxPcklkLCBpbmNsdWRlUHJvcGVydGllcykge1xuICAgIC8vIENyZWF0ZXMgYSByZWZlcmVuY2UgbW9kZWwgdGhhdCB0YWtlcyBvdmVyIHRoZSBpZCAvICNyZWYgcHJvcGVydGllcyBmcm9tXG4gICAgLy8gdGhlIHBhc3NlZCBtb2RlbCBvciBpZCB2YWx1ZS9hcnJheSwgb21pdHRpbmcgYW55IG90aGVyIHByb3BlcnRpZXMgaW4gaXQsXG4gICAgLy8gZXhjZXB0IGZvciBhbnl0aGluZyBtZW50aW9uZWQgaW4gdGhlIG9wdGlvbmFsIGBpbmNsdWRlUHJvcGVydGllc2AgYXJnLlxuICAgIGNvbnN0IHJlZiA9IG5ldyB0aGlzKClcbiAgICBjb25zdCBpZFByb3BlcnRpZXMgPSB0aGlzLmdldElkUHJvcGVydHlBcnJheSgpXG4gICAgaWYgKGlzT2JqZWN0KG1vZGVsT3JJZCkpIHtcbiAgICAgIGNvbnN0IGFkZFByb3BlcnR5ID0ga2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBtb2RlbE9ySWRba2V5XVxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlZltrZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzdXBwb3J0IE9iamVjdGlvbidzICNyZWYgdHlwZSByZWZlcmVuY2VzIG5leHQgdG8gaWQgcHJvcGVydGllcy5cbiAgICAgIGFkZFByb3BlcnR5KHRoaXMudWlkUmVmUHJvcClcbiAgICAgIGlkUHJvcGVydGllcy5mb3JFYWNoKGFkZFByb3BlcnR5KVxuICAgICAgaW5jbHVkZVByb3BlcnRpZXM/LmZvckVhY2goYWRkUHJvcGVydHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFuIGlkIHZhbHVlL2FycmF5OiBNYXAgaXQgdG8gdGhlIHByb3BlcnRpZXMgaW4gYGdldElkUHJvcGVydHlBcnJheSgpYDpcbiAgICAgIGNvbnN0IGlkcyA9IGFzQXJyYXkobW9kZWxPcklkKVxuICAgICAgaWYgKGlkcy5sZW5ndGggIT09IGlkUHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IE1vZGVsRXJyb3IoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgSW52YWxpZCBhbW91bnQgb2YgaWQgdmFsdWVzIHByb3ZpZGVkIGZvciByZWZlcmVuY2U6IFVuYWJsZSB0byBtYXAgJHtcbiAgICAgICAgICAgIGZvcm1hdEpzb24obW9kZWxPcklkLCBmYWxzZSlcbiAgICAgICAgICB9IHRvICR7XG4gICAgICAgICAgICBmb3JtYXRKc29uKGlkUHJvcGVydGllcywgZmFsc2UpXG4gICAgICAgICAgfS5gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlkUHJvcGVydGllcy5mb3JFYWNoKChrZXksIGluZGV4KSA9PiB7XG4gICAgICAgIHJlZltrZXldID0gaWRzW2luZGV4XVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJlZlxuICB9XG5cbiAgc3RhdGljIGlzUmVmZXJlbmNlKG9iaikge1xuICAgIGxldCB2YWxpZGF0b3IgPSB0aGlzLnJlZmVyZW5jZVZhbGlkYXRvclxuICAgIGlmICghdmFsaWRhdG9yKSB7XG4gICAgICAvLyBGb3IgYGRhdGFgIHRvIGJlIGNvbnNpZGVyZWQgYSByZWZlcmVuY2UsIGl0IG5lZWRzIHRvIGhvbGQgb25seSBvbmVcbiAgICAgIC8vIHZhbHVlIHRoYXQgaXMgZWl0aGVyIHRoZSB0YXJnZXQncyBpZCwgb3IgYW4gT2JqZWN0aW9uLmpzICNyZWYgdmFsdWU6XG4gICAgICB2YWxpZGF0b3IgPSB0aGlzLnJlZmVyZW5jZVZhbGlkYXRvciA9IHRoaXMuYXBwLmNvbXBpbGVWYWxpZGF0b3IoXG4gICAgICAgIHtcbiAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgLy8gU3VwcG9ydCBjb21wb3NpdGUga2V5cyBhbmQgYWRkIGEgcHJvcGVydHkgZm9yIGVhY2gga2V5OlxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLmdldElkUHJvcGVydHlBcnJheSgpLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoaWRQcm9wZXJ0aWVzLCBpZFByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZFByb3BlcnRpZXNbaWRQcm9wZXJ0eV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMuZGVmaW5pdGlvbi5wcm9wZXJ0aWVzW2lkUHJvcGVydHldLnR5cGVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBpZFByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBbdGhpcy51aWRSZWZQcm9wXToge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gUmVjZWl2ZSBgZmFsc2VgIGluc3RlYWQgb2YgdGhyb3duIGV4Y2VwdGlvbnMgd2hlbiB2YWxpZGF0aW9uIGZhaWxzOlxuICAgICAgICB7IHRocm93OiBmYWxzZSB9XG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0b3Iob2JqKVxuICB9XG5cbiAgc3RhdGljIGdldFNjb3BlKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uLnNjb3Blc1tuYW1lXVxuICB9XG5cbiAgc3RhdGljIGhhc1Njb3BlKG5hbWUpIHtcbiAgICByZXR1cm4gISF0aGlzLmdldFNjb3BlKG5hbWUpXG4gIH1cblxuICBzdGF0aWMgZ2V0TW9kaWZpZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmluaXRpb24ubW9kaWZpZXJzXG4gIH1cblxuICBzdGF0aWMgZ2V0IHJlbGF0aW9uTWFwcGluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENhY2hlZCgncmVsYXRpb25NYXBwaW5ncycsICgpID0+IChcbiAgICAgIGNvbnZlcnRSZWxhdGlvbnModGhpcywgdGhpcy5kZWZpbml0aW9uLnJlbGF0aW9ucywgdGhpcy5hcHAubW9kZWxzKVxuICAgICksIHt9KVxuICB9XG5cbiAgc3RhdGljIGdldCBqc29uU2NoZW1hKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRDYWNoZWQoJ2pzb25TY2hlbWEnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzY2hlbWEgPSBjb252ZXJ0U2NoZW1hKHRoaXMuZGVmaW5pdGlvbi5wcm9wZXJ0aWVzKVxuICAgICAgYWRkUmVsYXRpb25TY2hlbWFzKHRoaXMsIHNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgICAgLy8gTWVyZ2UgaW4gcm9vdC1sZXZlbCBzY2hlbWEgYWRkaXRpb25zXG4gICAgICBtZXJnZShzY2hlbWEsIHRoaXMuZGVmaW5pdGlvbi5zY2hlbWEpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAkaWQ6IHRoaXMubmFtZSxcbiAgICAgICAgJHNjaGVtYTogJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hJyxcbiAgICAgICAgLi4uc2NoZW1hXG4gICAgICB9XG4gICAgfSwge30pXG4gIH1cblxuICBzdGF0aWMgZ2V0IHZpcnR1YWxBdHRyaWJ1dGVzKCkge1xuICAgIC8vIExldmVyYWdlIE9iamVjdGlvbidzIG93biBtZWNoYW5pc20gY2FsbGVkIGB2aXJ0dWFsQXR0cmlidXRlc2AgdG8gaGFuZGxlXG4gICAgLy8gYGNvbXB1dGVkQXR0cmlidXRlc2Agd2hlbiBzZXR0aW5nIEpTT04gZGF0YS5cbiAgICByZXR1cm4gdGhpcy5jb21wdXRlZEF0dHJpYnV0ZXNcbiAgfVxuXG4gIHN0YXRpYyBnZXQganNvbkF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENhY2hlZCgnanNvblNjaGVtYTpqc29uQXR0cmlidXRlcycsICgpID0+IChcbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlcygoeyB0eXBlLCBzcGVjaWZpY1R5cGUsIGNvbXB1dGVkIH0pID0+XG4gICAgICAgICFjb21wdXRlZCAmJiAhc3BlY2lmaWNUeXBlICYmICh0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlID09PSAnYXJyYXknKSlcbiAgICApLCBbXSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYm9vbGVhbkF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENhY2hlZCgnanNvblNjaGVtYTpib29sZWFuQXR0cmlidXRlcycsICgpID0+IChcbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlcygoeyB0eXBlLCBjb21wdXRlZCB9KSA9PlxuICAgICAgICAhY29tcHV0ZWQgJiYgdHlwZSA9PT0gJ2Jvb2xlYW4nKVxuICAgICksIFtdKVxuICB9XG5cbiAgc3RhdGljIGdldCBkYXRlQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2FjaGVkKCdqc29uU2NoZW1hOmRhdGVBdHRyaWJ1dGVzJywgKCkgPT4gKFxuICAgICAgdGhpcy5nZXRBdHRyaWJ1dGVzKCh7IHR5cGUsIGNvbXB1dGVkIH0pID0+XG4gICAgICAgICFjb21wdXRlZCAmJiBbJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZXN0YW1wJ10uaW5jbHVkZXModHlwZSkpXG4gICAgKSwgW10pXG4gIH1cblxuICBzdGF0aWMgZ2V0IGNvbXB1dGVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2FjaGVkKCdqc29uU2NoZW1hOmNvbXB1dGVkQXR0cmlidXRlcycsICgpID0+IChcbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlcygoeyBjb21wdXRlZCB9KSA9PiBjb21wdXRlZClcbiAgICApLCBbXSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaGlkZGVuQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2FjaGVkKCdqc29uU2NoZW1hOmhpZGRlbkF0dHJpYnV0ZXMnLCAoKSA9PiAoXG4gICAgICB0aGlzLmdldEF0dHJpYnV0ZXMoKHsgaGlkZGVuIH0pID0+IGhpZGRlbilcbiAgICApLCBbXSlcbiAgfVxuXG4gIHN0YXRpYyBnZXRBdHRyaWJ1dGVzKGZpbHRlcikge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbXVxuICAgIGNvbnN0IHsgcHJvcGVydGllcyB9ID0gdGhpcy5kZWZpbml0aW9uXG4gICAgZm9yIChjb25zdCBbbmFtZSwgcHJvcGVydHldIG9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpKSB7XG4gICAgICBpZiAoZmlsdGVyKHByb3BlcnR5KSkge1xuICAgICAgICBhdHRyaWJ1dGVzLnB1c2gobmFtZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgfVxuXG4gIHN0YXRpYyBfZ2V0Q2FjaGVkKGlkZW50aWZpZXIsIGNhbGN1bGF0ZSwgZW1wdHkgPSB7fSkge1xuICAgIGxldCBjYWNoZSA9IGdldE1ldGEodGhpcywgJ2NhY2hlJywge30pXG4gICAgLy8gVXNlIGEgc2ltcGxlIGRlcGVuZGVuY3kgdHJhY2tpbmcgbWVjaGFuaXNtIHdpdGggY2FjaGUgaWRlbnRpZmllcnMgdGhhdFxuICAgIC8vIGNhbiBiZSBjaGlsZHJlbiBvZiBvdGhlciBjYWNoZWQgdmFsdWVzLCBlLmcuOlxuICAgIC8vICdqc29uU2NoZW1hOmpzb25BdHRyaWJ1dGVzJyBhcyBhIGNoaWxkIG9mICdqc29uU2NoZW1hJywgc28gdGhhdCB3aGVuZXZlclxuICAgIC8vICdqc29uU2NoZW1hJyBjaGFuZ2VzLCBhbGwgY2FjaGVkIGNoaWxkIHZhbHVlcyAgYXJlIGludmFsaWRhdGVkLlxuICAgIGxldCBlbnRyeVxuICAgIGZvciAoY29uc3QgcGFydCBvZiBpZGVudGlmaWVyLnNwbGl0KCc6JykpIHtcbiAgICAgIGVudHJ5ID0gY2FjaGVbcGFydF0gPSBjYWNoZVtwYXJ0XSB8fCB7XG4gICAgICAgIGNhY2hlOiB7fSxcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgY2FjaGUgPSBlbnRyeS5jYWNoZVxuICAgIH1cbiAgICBpZiAoZW50cnk/LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRlbXBvcmFyaWx5IHNldCBjYWNoZSB0byBhbiBlbXB0eSBvYmplY3QgdG8gcHJldmVudCBlbmRsZXNzXG4gICAgICAvLyByZWN1cnNpb24gd2l0aCBpbnRlcmRlcGVuZGVudCBqc29uU2NoZW1hIHJlbGF0ZWQgY2FsbHMuLi5cbiAgICAgIGVudHJ5LnZhbHVlID0gZW1wdHlcbiAgICAgIGVudHJ5LnZhbHVlID0gY2FsY3VsYXRlKClcbiAgICAgIC8vIENsZWFyIGNoaWxkIGRlcGVuZGVuY2llcyBvbmNlIHBhcmVudCB2YWx1ZSBoYXMgY2hhbmdlZDpcbiAgICAgIGVudHJ5LmNhY2hlID0ge31cbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5Py52YWx1ZVxuICB9XG5cbiAgc3RhdGljIGdldFJlbGF0ZWRSZWxhdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldE1ldGEodGhpcywgJ3JlbGF0ZWRSZWxhdGlvbnMnLCBbXSlcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIHByb3BlcnR5TmFtZVRvQ29sdW1uTmFtZSgpIC8gY29sdW1uTmFtZVRvUHJvcGVydHlOYW1lKCkgdG8gbm90XG4gIC8vIHJlbHkgb24gJGZvcm1hdERhdGFiYXNlSnNvbigpIC8gICRwYXJzZURhdGFiYXNlSnNvbigpIGRvIGRldGVjdCBuYW1pbmdcbiAgLy8gY29udmVudGlvbnMgYnV0IGFzc3VtZSBzaW1wbHkgdGhhdCB0aGV5J3JlIGFsd2F5cyB0aGUgc2FtZS5cbiAgLy8gVGhpcyBpcyBmaW5lIHNpbmNlIHdlIGNhbiBub3cgY2hhbmdlIG5hbWluZyBhdCBLbmV4IGxldmVsLlxuICAvLyBTZWUga25leFNuYWtlQ2FzZU1hcHBlcnMoKVxuXG4gIC8vIEBvdmVycmlkZVxuICBzdGF0aWMgcHJvcGVydHlOYW1lVG9Db2x1bW5OYW1lKHByb3BlcnR5TmFtZSkge1xuICAgIHJldHVybiBwcm9wZXJ0eU5hbWVcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBzdGF0aWMgY29sdW1uTmFtZVRvUHJvcGVydHlOYW1lKGNvbHVtbk5hbWUpIHtcbiAgICByZXR1cm4gY29sdW1uTmFtZVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gICRzZXRKc29uKGpzb24sIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICAgIGNvbnN0IGNhbGxJbml0aWFsaXplID0gKFxuICAgICAgLy8gT25seSBjYWxsIGluaXRpYWxpemUgd2hlbjpcbiAgICAgIC8vIDEuIHdlJ3JlIG5vdCBwYXJ0aWFsbHkgcGF0Y2hpbmc6XG4gICAgICAhb3B0aW9ucy5wYXRjaCAmJlxuICAgICAgLy8gMi4gJGluaXRpYWxpemUoKSBpcyBhY3R1YWxseSBkb2luZyBzb21ldGhpbmc6XG4gICAgICB0aGlzLiRpbml0aWFsaXplICE9PSBNb2RlbC5wcm90b3R5cGUuJGluaXRpYWxpemUgJiZcbiAgICAgIC8vIDMuIHRoZSBkYXRhIGlzIG5vdCBqdXN0IGEgcmVmZXJlbmNlOlxuICAgICAgIXRoaXMuY29uc3RydWN0b3IuaXNSZWZlcmVuY2UoanNvbilcbiAgICApXG4gICAgaWYgKCFjYWxsSW5pdGlhbGl6ZSB8fCBvcHRpb25zLnNraXBWYWxpZGF0aW9uKSB7XG4gICAgICBzdXBlci4kc2V0SnNvbihqc29uLCBvcHRpb25zKVxuICAgICAgaWYgKGNhbGxJbml0aWFsaXplKSB7XG4gICAgICAgIHRoaXMuJGluaXRpYWxpemUoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB2YWxpZGF0aW9uIGlzbid0IHNraXBwZWQgb3IgdGhlIG1vZGVsIHByb3ZpZGVzIGl0cyBvd24gJGluaXRpYWxpemUoKVxuICAgICAgLy8gbWV0aG9kLCBjYWxsICRzZXRKc29uKCkgd2l0aCBwYXRjaCB2YWxpZGF0aW9uIGZpcnN0IHRvIG5vdCBjb21wbGFpblxuICAgICAgLy8gYWJvdXQgbWlzc2luZyBmaWVsZHMsIHRoZW4gcGVyZm9ybSBhIGZ1bGwgdmFsaWRhdGlvbiBhZnRlciBjYWxsaW5nXG4gICAgICAvLyAkaW5pdGlhbGl6ZSgpLCB0byBnaXZlIHRoZSBtb2RlbCBhIGNoYW5jZSB0byBjb25maWd1cmUgaXRzZWxmLlxuICAgICAgc3VwZXIuJHNldEpzb24oanNvbiwgeyAuLi5vcHRpb25zLCBwYXRjaDogdHJ1ZSB9KVxuICAgICAgdGhpcy4kaW5pdGlhbGl6ZSgpXG4gICAgICB0aGlzLiR2YWxpZGF0ZSh0aGlzLCBvcHRpb25zKVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gICRmb3JtYXREYXRhYmFzZUpzb24oanNvbikge1xuICAgIGNvbnN0IHsgY29uc3RydWN0b3IgfSA9IHRoaXNcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25zdHJ1Y3Rvci5kYXRlQXR0cmlidXRlcykge1xuICAgICAgY29uc3QgZGF0ZSA9IGpzb25ba2V5XVxuICAgICAgaWYgKGRhdGU/LnRvSVNPU3RyaW5nKSB7XG4gICAgICAgIGpzb25ba2V5XSA9IGRhdGUudG9JU09TdHJpbmcoKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uc3RydWN0b3IuaXNTUUxpdGUoKSkge1xuICAgICAgLy8gU1FMaXRlIGRvZXMgbm90IHN1cHBvcnQgYm9vbGVhbiBuYXRpdmVseSBhbmQgbmVlZHMgY29udmVyc2lvbi4uLlxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgY29uc3RydWN0b3IuYm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgY29uc3QgYm9vbCA9IGpzb25ba2V5XVxuICAgICAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAganNvbltrZXldID0gYm9vbCA/IDEgOiAwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBjb21wdXRlZCBwcm9wZXJ0aWVzIHNvIHRoZXkgZG9uJ3QgYXR0ZW1wdCB0byBnZXQgc2V0LlxuICAgIGZvciAoY29uc3Qga2V5IG9mIGNvbnN0cnVjdG9yLmNvbXB1dGVkQXR0cmlidXRlcykge1xuICAgICAgZGVsZXRlIGpzb25ba2V5XVxuICAgIH1cbiAgICAvLyBOT1RFOiBObyBuZWVkIHRvIG5vcm1hbGl6ZSB0aGUgaWRlbnRpZmllcnMgaW4gdGhlIEpTT04gaW4gY2FzZSBvZlxuICAgIC8vIG5vcm1hbGl6ZURiTmFtZXMsIGFzIHRoaXMgYWxyZWFkeSBoYXBwZW5zIHRocm91Z2hcbiAgICAvLyBrbmV4LmNvbmZpZy53cmFwSWRlbnRpZmllcigpLCBzZWUgQXBwbGljYXRpb24uanNcbiAgICByZXR1cm4gc3VwZXIuJGZvcm1hdERhdGFiYXNlSnNvbihqc29uKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gICRwYXJzZURhdGFiYXNlSnNvbihqc29uKSB7XG4gICAgY29uc3QgeyBjb25zdHJ1Y3RvciB9ID0gdGhpc1xuICAgIGpzb24gPSBzdXBlci4kcGFyc2VEYXRhYmFzZUpzb24oanNvbilcbiAgICBpZiAoY29uc3RydWN0b3IuaXNTUUxpdGUoKSkge1xuICAgICAgLy8gU1FMaXRlIGRvZXMgbm90IHN1cHBvcnQgYm9vbGVhbiBuYXRpdmVseSBhbmQgbmVlZHMgY29udmVyc2lvbi4uLlxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgY29uc3RydWN0b3IuYm9vbGVhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgY29uc3QgYm9vbCA9IGpzb25ba2V5XVxuICAgICAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAganNvbltrZXldID0gISFib29sXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQWxzbyBydW4gdGhyb3VnaCBub3JtYWwgJHBhcnNlSnNvbigpLCBmb3IgaGFuZGxpbmcgb2YgYERhdGVgIGFuZFxuICAgIC8vIGBBc3NldEZpbGVgLlxuICAgIHJldHVybiB0aGlzLiRwYXJzZUpzb24oanNvbilcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICAkcGFyc2VKc29uKGpzb24pIHtcbiAgICBjb25zdCB7IGNvbnN0cnVjdG9yIH0gPSB0aGlzXG4gICAgZm9yIChjb25zdCBrZXkgb2YgY29uc3RydWN0b3IuZGF0ZUF0dHJpYnV0ZXMpIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBqc29uW2tleV1cbiAgICAgIGlmIChkYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAganNvbltrZXldID0gaXNTdHJpbmcoZGF0ZSkgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGVcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQ29udmVydCBwbGFpbiBhc3NldCBmaWxlcyBvYmplY3RzIHRvIEFzc2V0RmlsZSBpbnN0YW5jZXMgd2l0aCByZWZlcmVuY2VzXG4gICAgLy8gdG8gdGhlIGxpbmtlZCBzdG9yYWdlLlxuICAgIGNvbnN0IHsgYXNzZXRzIH0gPSBjb25zdHJ1Y3Rvci5kZWZpbml0aW9uXG4gICAgaWYgKGFzc2V0cykge1xuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBpbiBhc3NldHMpIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IGNvbnN0cnVjdG9yLmFwcC5nZXRTdG9yYWdlKGFzc2V0c1tkYXRhUGF0aF0uc3RvcmFnZSlcbiAgICAgICAgY29uc3QgZGF0YSA9IGdldFZhbHVlQXREYXRhUGF0aChqc29uLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBjb25zdCBjb252ZXJ0VG9Bc3NldEZpbGVzID0gZGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICBpZiAoaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEuZm9yRWFjaChjb252ZXJ0VG9Bc3NldEZpbGVzKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0b3JhZ2UuY29udmVydEFzc2V0RmlsZShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnZlcnRUb0Fzc2V0RmlsZXMoZGF0YSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ganNvblxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gICRmb3JtYXRKc29uKGpzb24pIHtcbiAgICBjb25zdCB7IGNvbnN0cnVjdG9yIH0gPSB0aGlzXG4gICAgLy8gQ2FsY3VsYXRlIGFuZCBzZXQgdGhlIGNvbXB1dGVkIHByb3BlcnRpZXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgY29uc3RydWN0b3IuY29tcHV0ZWRBdHRyaWJ1dGVzKSB7XG4gICAgICAvLyBQZXJoYXBzIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSBpcyBwcm9kdWNlZCBpbiB0aGUgU1FMIHN0YXRlbWVudCxcbiAgICAgIC8vIGluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBhbnltb3JlIGhlcmUuXG4gICAgICBpZiAoIShrZXkgaW4ganNvbikpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV1cbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBqc29uW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSBoaWRkZW4gYXR0cmlidXRlcy5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25zdHJ1Y3Rvci5oaWRkZW5BdHRyaWJ1dGVzKSB7XG4gICAgICBkZWxldGUganNvbltrZXldXG4gICAgfVxuICAgIHJldHVybiBqc29uXG4gIH1cblxuICAvLyBHcmFwaCBoYW5kbGluZ1xuXG4gICRmaWx0ZXJHcmFwaChtb2RlbEdyYXBoLCBleHByKSB7XG4gICAgcmV0dXJuIGZpbHRlckdyYXBoKHRoaXMuY29uc3RydWN0b3IsIG1vZGVsR3JhcGgsIGV4cHIpXG4gIH1cblxuICBhc3luYyAkcG9wdWxhdGVHcmFwaChtb2RlbEdyYXBoLCBleHByLCB0cngpIHtcbiAgICByZXR1cm4gcG9wdWxhdGVHcmFwaCh0aGlzLmNvbnN0cnVjdG9yLCBtb2RlbEdyYXBoLCBleHByLCB0cngpXG4gIH1cblxuICBzdGF0aWMgZmlsdGVyR3JhcGgobW9kZWxHcmFwaCwgZXhwcikge1xuICAgIHJldHVybiBmaWx0ZXJHcmFwaCh0aGlzLCBtb2RlbEdyYXBoLCBleHByKVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBvcHVsYXRlR3JhcGgobW9kZWxHcmFwaCwgZXhwciwgdHJ4KSB7XG4gICAgcmV0dXJuIHBvcHVsYXRlR3JhcGgodGhpcywgbW9kZWxHcmFwaCwgZXhwciwgdHJ4KVxuICB9XG5cbiAgc3RhdGljIGdldFByb3BlcnR5T3JSZWxhdGlvbkF0RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAvLyBGaW5kcyB0aGUgcHJvcGVydHkgb3IgcmVsYXRpb24gYXQgdGhlIGdpdmVuIHRoZSBkYXRhUGF0aCBvZiB0aGUgbW9kZWwgYnlcbiAgICAvLyBwYXJzaW5nIHRoZSBkYXRhUGF0aCBhbmQgbWF0Y2hpbmcgaXQgdG8gaXRzIHJlbGF0aW9ucyBhbmQgcHJvcGVydGllcy5cbiAgICBjb25zdCBwYXJzZWREYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgbGV0IGluZGV4ID0gMFxuXG4gICAgY29uc3QgZ2V0UmVzdWx0ID0gKHByb3BlcnR5ID0gbnVsbCwgcmVsYXRpb24gPSBudWxsKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IHByb3BlcnR5IHx8IHJlbGF0aW9uXG4gICAgICBjb25zdCBuYW1lID0gcGFyc2VkRGF0YVBhdGhbaW5kZXhdXG4gICAgICBjb25zdCBuZXh0ID0gaW5kZXggKyAxXG4gICAgICBjb25zdCBkYXRhUGF0aCA9IGZvdW5kXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VkRGF0YVBhdGguc2xpY2UoMCwgbmV4dCkpXG4gICAgICAgIDogbnVsbFxuICAgICAgY29uc3QgbmVzdGVkRGF0YVBhdGggPSBmb3VuZFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlZERhdGFQYXRoLnNsaWNlKG5leHQpKVxuICAgICAgICA6IG51bGxcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBmb3VuZFxuICAgICAgICA/IHBhcnNlZERhdGFQYXRoLnNsaWNlKDAsIHJlbGF0aW9uID8gbmV4dCA6IGluZGV4KS5qb2luKCcuJykgK1xuICAgICAgICAgIChwcm9wZXJ0eSA/IGAoIyR7bmFtZX0pYCA6ICcnKVxuICAgICAgICA6IG51bGxcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3BlcnR5LFxuICAgICAgICByZWxhdGlvbixcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICBuYW1lLFxuICAgICAgICBleHByZXNzaW9uLFxuICAgICAgICBpbmRleFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFtmaXJzdFRva2VuLCAuLi5vdGhlclRva2Vuc10gPSBwYXJzZWREYXRhUGF0aFxuICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5kZWZpbml0aW9uLnByb3BlcnRpZXNbZmlyc3RUb2tlbl1cbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBnZXRSZXN1bHQocHJvcGVydHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCByZWxhdGlvbiA9IHRoaXMuZ2V0UmVsYXRpb25zKClbZmlyc3RUb2tlbl1cbiAgICAgIGlmIChyZWxhdGlvbikge1xuICAgICAgICBsZXQgeyByZWxhdGVkTW9kZWxDbGFzcyB9ID0gcmVsYXRpb25cbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBvdGhlclRva2Vucykge1xuICAgICAgICAgIGluZGV4KytcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHJlbGF0ZWRNb2RlbENsYXNzLmRlZmluaXRpb24ucHJvcGVydGllc1t0b2tlbl1cbiAgICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRSZXN1bHQocHJvcGVydHkpXG4gICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJyonKSB7XG4gICAgICAgICAgICBpZiAocmVsYXRpb24uaXNPbmVUb09uZSgpKSB7XG4gICAgICAgICAgICAgIC8vIERvIG5vdCBzdXBwb3J0IHdpbGRjYXJkcyBvbiBvbmUtdG8tb25lIHJlbGF0aW9uczpcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFJlc3VsdCgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGb3VuZCBhIHJlbGF0aW9uPyBLZWVwIGl0ZXJhdGluZy5cbiAgICAgICAgICAgIHJlbGF0aW9uID0gcmVsYXRlZE1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zKClbdG9rZW5dXG4gICAgICAgICAgICBpZiAocmVsYXRpb24pIHtcbiAgICAgICAgICAgICAgcmVsYXRlZE1vZGVsQ2xhc3MgPSByZWxhdGlvbi5yZWxhdGVkTW9kZWxDbGFzc1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFJlc3VsdCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZWxhdGlvbikge1xuICAgICAgICAgIC8vIFN0aWxsIGhlcmU/IEZvdW5kIGEgcmVsYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgZGF0YS1wYXRoLlxuICAgICAgICAgIHJldHVybiBnZXRSZXN1bHQobnVsbCwgcmVsYXRpb24pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdldFJlc3VsdCgpXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgc3RhdGljIHJlbGF0ZWRRdWVyeShyZWxhdGlvbk5hbWUsIHRyeCkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9WaW5jaXQvb2JqZWN0aW9uLmpzL2lzc3Vlcy8xNzIwXG4gICAgcmV0dXJuIHN1cGVyLnJlbGF0ZWRRdWVyeShyZWxhdGlvbk5hbWUsIHRyeCkuYWxpYXMocmVsYXRpb25OYW1lKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHN0YXRpYyBtb2RpZmllck5vdEZvdW5kKHF1ZXJ5LCBtb2RpZmllcikge1xuICAgIGlmIChpc1N0cmluZyhtb2RpZmllcikpIHtcbiAgICAgIGlmIChxdWVyeS5tb2RlbENsYXNzKCkuaGFzU2NvcGUobW9kaWZpZXIpKSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5hcHBseVNjb3BlKG1vZGlmaWVyKVxuICAgICAgfVxuICAgICAgLy8gTm93IGNoZWNrIHBvc3NpYmxlIHNjb3BlIHByZWZpeGVzIGFuZCBoYW5kbGUgdGhlbTpcbiAgICAgIHN3aXRjaCAobW9kaWZpZXJbMF0pIHtcbiAgICAgIGNhc2UgJ14nOiAvLyBFYWdlci1hcHBsaWVkIHNjb3BlOlxuICAgICAgICAvLyBBbHdheXMgYXBwbHkgZWFnZXItc2NvcGVzLCBldmVuIGlmIHRoZSBtb2RlbCBpdHNlbGYgZG9lc24ndCBrbm93IGl0LlxuICAgICAgICAvLyBUaGUgc2NvcGUgbWF5IHN0aWxsIGJlIGtub3duIGluIGVhZ2VyLWxvYWRlZCByZWxhdGlvbnMuXG4gICAgICAgIC8vIE5vdGU6IGBhcHBseVNjb3BlKClgIHdpbGwgaGFuZGxlIHRoZSAnXicgc2lnbi5cbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmFwcGx5U2NvcGUobW9kaWZpZXIpXG4gICAgICBjYXNlICctJzogLy8gSWdub3JlIHNjb3BlOlxuICAgICAgICByZXR1cm4gcXVlcnkuaWdub3JlU2NvcGUobW9kaWZpZXIuc2xpY2UoMSkpXG4gICAgICBjYXNlICcjJzogLy8gU2VsZWN0IGNvbHVtbjpcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LnNlbGVjdChtb2RpZmllci5zbGljZSgxKSlcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIubW9kaWZpZXJOb3RGb3VuZChxdWVyeSwgbW9kaWZpZXIpXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgc3RhdGljIGNyZWF0ZU5vdEZvdW5kRXJyb3IoY3R4LCBlcnJvcikge1xuICAgIHJldHVybiBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgIGVycm9yIHx8IChcbiAgICAgICAgY3R4LmJ5SWRcbiAgICAgICAgICA/IGAnJHt0aGlzLm5hbWV9JyBtb2RlbCB3aXRoIGlkICR7Y3R4LmJ5SWR9IG5vdCBmb3VuZGBcbiAgICAgICAgICA6IGAnJHt0aGlzLm5hbWV9JyBtb2RlbCBub3QgZm91bmRgXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHN0YXRpYyBjcmVhdGVWYWxpZGF0b3IoKSB7XG4gICAgLy8gVXNlIGEgc2hhcmVkIHZhbGlkYXRvciBwZXIgYXBwLCBzbyBtb2RlbCBzY2hlbWEgY2FuIHJlZmVyZW5jZSBlYWNoIG90aGVyLlxuICAgIC8vIE5PVEU6IFRoZSBEaXRvIFZhbGlkYXRvciBjbGFzcyBjcmVhdGVzIGFuZCBtYW5hZ2VzIHRoaXMgc2hhcmVkIE9iamVjdGlvblxuICAgIC8vIFZhbGlkYXRvciBpbnN0YW5jZSBmb3IgdXMsIHdlIGp1c3QgbmVlZCB0byByZXR1cm4gaXQgaGVyZTpcbiAgICByZXR1cm4gdGhpcy5hcHAudmFsaWRhdG9yXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgc3RhdGljIGNyZWF0ZVZhbGlkYXRpb25FcnJvcih7IHR5cGUsIG1lc3NhZ2UsIGVycm9ycywgb3B0aW9ucywganNvbiB9KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnTW9kZWxWYWxpZGF0aW9uJzpcbiAgICAgIHJldHVybiB0aGlzLmFwcC5jcmVhdGVWYWxpZGF0aW9uRXJyb3Ioe1xuICAgICAgICB0eXBlLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8XG4gICAgICAgICAgYFRoZSBwcm92aWRlZCBkYXRhIGZvciB0aGUgJHt0aGlzLm5hbWV9IG1vZGVsIGlzIG5vdCB2YWxpZDogJHtcbiAgICAgICAgICAgIGZvcm1hdEpzb24oanNvbilcbiAgICAgICAgICB9YCxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICBvcHRpb25zXG4gICAgICB9KVxuICAgIGNhc2UgJ1JlbGF0aW9uRXhwcmVzc2lvbic6XG4gICAgY2FzZSAnVW5hbGxvd2VkUmVsYXRpb24nOlxuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbkVycm9yKHsgdHlwZSwgbWVzc2FnZSwgZXJyb3JzIH0pXG4gICAgY2FzZSAnSW52YWxpZEdyYXBoJzpcbiAgICAgIHJldHVybiBuZXcgR3JhcGhFcnJvcih7IHR5cGUsIG1lc3NhZ2UsIGVycm9ycyB9KVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlRXJyb3IoeyB0eXBlLCBtZXNzYWdlLCBlcnJvcnMgfSlcbiAgICB9XG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgc3RhdGljIFF1ZXJ5QnVpbGRlciA9IFF1ZXJ5QnVpbGRlclxuXG4gIC8vIGh0dHBzOi8vdmluY2l0LmdpdGh1Yi5pby9vYmplY3Rpb24uanMvYXBpL21vZGVsL3N0YXRpYy1wcm9wZXJ0aWVzLmh0bWwjc3RhdGljLWNsb25lb2JqZWN0YXR0cmlidXRlc1xuICBzdGF0aWMgY2xvbmVPYmplY3RBdHRyaWJ1dGVzID0gZmFsc2VcblxuICAvLyBPbmx5IHBpY2sgcHJvcGVydGllcyBmb3IgZGF0YWJhc2UgSlNPTiB0aGF0IGlzIG1lbnRpb25lZCBpbiB0aGUgc2NoZW1hLlxuICBzdGF0aWMgcGlja0pzb25TY2hlbWFQcm9wZXJ0aWVzID0gdHJ1ZVxuXG4gIC8vIFNlZSBodHRwczovL2dpdHRlci5pbS9WaW5jaXQvb2JqZWN0aW9uLmpzP2F0PTVhODFmODU5Y2U2OGMzYmM3NDc5ZDY1YVxuICBzdGF0aWMgdXNlTGltaXRJbkZpcnN0ID0gdHJ1ZVxuXG4gIHN0YXRpYyBnZXQgZGVmaW5pdGlvbigpIHtcbiAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBkZWZpbml0aW9uIG9iamVjdCBmb3IgdGhpcyBjbGFzcyBhbmQgcmV0dXJuIGl0XG4gICAgcmV0dXJuIGdldE1ldGEodGhpcywgJ2RlZmluaXRpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0ge31cblxuICAgICAgY29uc3Qgc2V0RGVmaW5pdGlvbiA9IChuYW1lLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVmaW5pdGlvbiwgbmFtZSwge1xuICAgICAgICAgIC4uLnByb3BlcnR5LFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0RGVmaW5pdGlvbiA9IG5hbWUgPT4ge1xuICAgICAgICBsZXQgbW9kZWxDbGFzcyA9IHRoaXNcbiAgICAgICAgLy8gQ29sbGVjdCBhbmNlc3RvciB2YWx1ZXMgZm9yIHByb3BlciBpbmhlcml0YW5jZS5cbiAgICAgICAgLy8gTk9URTogdmFsdWVzIGFyZSBjb2xsZWN0ZWQgaW4gc2VxdWVuY2Ugb2YgaW5oZXJpdGFuY2UsIGZyb20gc3ViLWNsYXNzXG4gICAgICAgIC8vIHRvIHN1cGVyLWNsYXNzLiBUbyBnbyBmcm9tIHN1cGVyLWNsYXNzIHRvIHN1Yi1jbGFzcyB3aGVuIG1lcmdpbmcsXG4gICAgICAgIC8vIGBtZXJnZVJldmVyc2VkKClgIGlzIHVzZWQgdG8gcHJldmVudCB3cm9uZyBvdmVycmlkZXMuXG4gICAgICAgIC8vIGBtZXJnZUFzUmV2ZXJzZWRBcnJheXMoKWAgY2FuIGJlIHVzZWQgdG8ga2VlcCBhcnJheXMgb2YgaW5oZXJpdGVkXG4gICAgICAgIC8vIHZhbHVlcyBwZXIga2V5LCBzZWUgYGRlZmluaXRpb25zLmhvb2tzYC5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gW11cbiAgICAgICAgd2hpbGUgKG1vZGVsQ2xhc3MgIT09IG9iamVjdGlvbi5Nb2RlbCkge1xuICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgbW9kZWwgY2xhc3NlcyB0aGF0IGFjdHVhbGx5IGRlZmluZSBgbmFtZWAgcHJvcGVydHkuXG4gICAgICAgICAgaWYgKG5hbWUgaW4gbW9kZWxDbGFzcykge1xuICAgICAgICAgICAgLy8gVXNlIHJlZmxlY3Rpb24gdGhyb3VnaCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSB0byBiZSBhYmxlIHRvXG4gICAgICAgICAgICAvLyBjYWxsIHRoZSBnZXR0ZXIgb24gYHRoaXNgIHJhdGhlciB0aGFuIG9uIGBtb2RlbENsYXNzYC4gVGhpcyBjYW5cbiAgICAgICAgICAgIC8vIGJlIHVzZWQgdG8gcHJvdmlkZSBhYnN0cmFjdCBiYXNlLWNsYXNzZXMgYW5kIGhhdmUgdGhlbSBjcmVhdGVcbiAgICAgICAgICAgIC8vIHRoZWlyIHJlbGF0aW9ucyBmb3IgYHRoaXNgIGluc2lkZSBgZ2V0IHJlbGF0aW9ucygpYCBhY2Nlc3NvcnMuXG4gICAgICAgICAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtb2RlbENsYXNzLCBuYW1lKVxuICAgICAgICAgICAgaWYgKGRlc2MpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkZXNjLmdldD8uY2FsbCh0aGlzKSB8fCBkZXNjLnZhbHVlXG4gICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG1vZGVsQ2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kZWxDbGFzcylcbiAgICAgICAgfVxuICAgICAgICAvLyBUbyBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHdpdGggaW50ZXJkZXBlbmRlbnQgY2FsbHMgcmVsYXRlZCB0b1xuICAgICAgICAvLyBwcm9wZXJ0aWVzLCBvdmVycmlkZSBkZWZpbml0aW9uIGJlZm9yZSBjYWxsaW5nIGhhbmRsZXIoKTpcbiAgICAgICAgc2V0RGVmaW5pdGlvbihuYW1lLCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiB7fVxuICAgICAgICB9KVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1lcmdlZCA9IGRlZmluaXRpb25zW25hbWVdLmNhbGwodGhpcywgdmFsdWVzKVxuICAgICAgICAgIC8vIE9uY2UgY2FsY3VsYXRlZCwgb3ZlcnJpZGUgZ2V0dGVyIHdpdGggZmluYWwgbWVyZ2VkIHZhbHVlLlxuICAgICAgICAgIHNldERlZmluaXRpb24obmFtZSwge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiBtZXJnZWRcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVybiBtZXJnZWRcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTW9kZWxFcnJvcih0aGlzLCBlcnJvci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vIGRlZmluaXRpb24gb2JqZWN0IHdhcyBkZWZpbmVkIHlldCwgY3JlYXRlIG9uZSB3aXRoIGFjY2Vzc29ycyBmb3JcbiAgICAgIC8vIGVhY2ggZW50cnkgaW4gYGRlZmluaXRpb25zYC4gRWFjaCBvZiB0aGVzZSBnZXR0ZXJzIHdoZW4gY2FsbGVkIG1lcmdlXG4gICAgICAvLyBkZWZpbml0aW9ucyB1cCB0aGUgaW5oZXJpdGFuY2UgY2hhaW4gYW5kIHN0b3JlIHRoZSBtZXJnZWQgcmVzdWx0IGluXG4gICAgICAvLyBgbW9kZWxDbGFzcy5kZWZpbml0aW9uW25hbWVdYCBmb3IgZnVydGhlciBjYWNoaW5nLlxuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRlZmluaXRpb25zKSB7XG4gICAgICAgIHNldERlZmluaXRpb24obmFtZSwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQ6ICgpID0+IGdldERlZmluaXRpb24obmFtZSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgfSlcbiAgfVxuXG4gIC8vIEhvb2tzXG5cbiAgJGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5lbWl0KGV2ZW50LCB0aGlzLCAuLi5hcmdzKVxuICB9XG5cbiAgc3RhdGljIGJlZm9yZUZpbmQoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYmVmb3JlOmZpbmQnLCBhcmdzKVxuICB9XG5cbiAgc3RhdGljIGFmdGVyRmluZChhcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VtaXRTdGF0aWNIb29rKCdhZnRlcjpmaW5kJywgYXJncylcbiAgfVxuXG4gIHN0YXRpYyBiZWZvcmVJbnNlcnQoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYmVmb3JlOmluc2VydCcsIGFyZ3MpXG4gIH1cblxuICBzdGF0aWMgYWZ0ZXJJbnNlcnQoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYWZ0ZXI6aW5zZXJ0JywgYXJncylcbiAgfVxuXG4gIHN0YXRpYyBiZWZvcmVVcGRhdGUoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYmVmb3JlOnVwZGF0ZScsIGFyZ3MpXG4gIH1cblxuICBzdGF0aWMgYWZ0ZXJVcGRhdGUoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYWZ0ZXI6dXBkYXRlJywgYXJncylcbiAgfVxuXG4gIHN0YXRpYyBiZWZvcmVEZWxldGUoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYmVmb3JlOmRlbGV0ZScsIGFyZ3MpXG4gIH1cblxuICBzdGF0aWMgYWZ0ZXJEZWxldGUoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYWZ0ZXI6ZGVsZXRlJywgYXJncylcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBfZW1pdFN0YXRpY0hvb2soZXZlbnQsIG9yaWdpbmFsQXJncykge1xuICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzKGV2ZW50KVxuICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gU3RhdGljIGhvb2tzIGFyZSBlbWl0dGVkIGluIHNlcXVlbmNlIChidXQgZWFjaCBldmVudCBjYW4gYmUgYXN5bmMpLCBhbmRcbiAgICAgIC8vIHJlc3VsdHMgYXJlIHBhc3NlZCB0aHJvdWdoIGFuZCByZXR1cm5lZCBpbiB0aGUgZW5kLlxuICAgICAgbGV0IHsgcmVzdWx0IH0gPSBvcmlnaW5hbEFyZ3NcbiAgICAgIC8vIFRoZSByZXN1bHQgb2YgYW55IGV2ZW50IGhhbmRsZXIgd2lsbCBvdmVycmlkZSBgYXJncy5yZXN1bHRgIGluIHRoZSBjYWxsXG4gICAgICAvLyBvZiB0aGUgbmV4dCBoYW5kbGVyIGluIHNlcXVlbmNlLiBBcyBgU3RhdGljSG9va0FyZ3VtZW50c2AgaW4gT2JqZWN0aW9uXG4gICAgICAvLyBpcyBwcml2YXRlLCB1c2UgYSBKUyBpbmhlcml0YW5jZSB0cmljayBoZXJlIHRvIG92ZXJyaWRlIGBhcmdzLnJlc3VsdGA6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbEFyZ3MsIHtcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgIHZhbHVlOiBldmVudFxuICAgICAgICB9LFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgbGlzdGVuZXIuY2FsbCh0aGlzLCBhcmdzKVxuICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVW5mb3J0dW5hdGVseSBgcmVzdWx0YCBpcyBhbHdheXMgYW4gYXJyYXksIGV2ZW4gd2hlbiB0aGUgYWN0dWFsIHJlc3VsdFxuICAgICAgLy8gaXMgYSBtb2RlbCBvYmplY3QuIEF2b2lkIHJldHVybmluZyBpdCB3aGVuIGl0J3Mgbm90IGFjdHVhbGx5IGNoYW5nZWQuXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9WaW5jaXQvb2JqZWN0aW9uLmpzL2lzc3Vlcy8xODQyXG4gICAgICBpZiAocmVzdWx0ICE9PSBvcmlnaW5hbEFyZ3MucmVzdWx0KSB7XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBc3NldHMgaGFuZGxpbmdcblxuICBzdGF0aWMgX3NldHVwQXNzZXRzRXZlbnRzKGFzc2V0cykge1xuICAgIGNvbnN0IGFzc2V0RGF0YVBhdGhzID0gT2JqZWN0LmtleXMoYXNzZXRzKVxuXG4gICAgdGhpcy5vbihbXG4gICAgICAnYmVmb3JlOmluc2VydCcsXG4gICAgICAnYmVmb3JlOnVwZGF0ZScsXG4gICAgICAnYmVmb3JlOmRlbGV0ZSdcbiAgICBdLCBhc3luYyAoeyB0eXBlLCB0cmFuc2FjdGlvbiwgaW5wdXRJdGVtcywgYXNGaW5kUXVlcnkgfSkgPT4ge1xuICAgICAgY29uc3QgYWZ0ZXJJdGVtcyA9IHR5cGUgPT09ICdiZWZvcmU6ZGVsZXRlJ1xuICAgICAgICA/IFtdXG4gICAgICAgIDogaW5wdXRJdGVtc1xuICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBhc3NldCBkYXRhIHBhdGhzIHdoZXJlIGFjdHVhbGx5IHByZXNlbnQgaW4gdGhlXG4gICAgICAvLyBzdWJtaXR0ZWQgZGF0YSwgYW5kIG9ubHkgY29tcGFyZSB0aGVzZS4gQnV0IHdoZW4gZGVsZXRpbmcsIHVzZSBhbGwuXG4gICAgICBjb25zdCBkYXRhUGF0aHMgPSBhZnRlckl0ZW1zLmxlbmd0aCA+IDBcbiAgICAgICAgPyBhc3NldERhdGFQYXRocy5maWx0ZXIoXG4gICAgICAgICAgcGF0aCA9PiBnZXRWYWx1ZUF0QXNzZXREYXRhUGF0aChhZnRlckl0ZW1zWzBdLCBwYXRoKSAhPT0gdW5kZWZpbmVkXG4gICAgICAgIClcbiAgICAgICAgOiBhc3NldERhdGFQYXRoc1xuXG4gICAgICAvLyBgZGF0YVBhdGhzYCB3aWxsIGJlIGVtcHR5IGluIHRoZSBjYXNlIG9mIGFuIHVwZGF0ZS9pbnNlcnQgdGhhdCBkbyBub3RcbiAgICAgIC8vIGFmZmVjdCB0aGUgYXNzZXRzLlxuICAgICAgaWYgKGRhdGFQYXRocy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIExvYWQgdGhlIG1vZGVsJ3MgYXNzZXQgZmlsZXMgaW4gdGhlaXIgY3VycmVudCBzdGF0ZSBiZWZvcmUgdGhlIHF1ZXJ5IGlzXG4gICAgICAvLyBleGVjdXRlZC5cbiAgICAgIGNvbnN0IGJlZm9yZUl0ZW1zID0gdHlwZSA9PT0gJ2JlZm9yZTppbnNlcnQnXG4gICAgICAgID8gW11cbiAgICAgICAgOiBhd2FpdCBsb2FkQXNzZXREYXRhUGF0aHMoYXNGaW5kUXVlcnkoKSwgZGF0YVBhdGhzKVxuICAgICAgY29uc3QgYmVmb3JlRmlsZXNQZXJEYXRhUGF0aCA9IGdldEZpbGVzUGVyQXNzZXREYXRhUGF0aChcbiAgICAgICAgYmVmb3JlSXRlbXMsXG4gICAgICAgIGRhdGFQYXRoc1xuICAgICAgKVxuICAgICAgY29uc3QgYWZ0ZXJGaWxlc1BlckRhdGFQYXRoID0gZ2V0RmlsZXNQZXJBc3NldERhdGFQYXRoKFxuICAgICAgICBhZnRlckl0ZW1zLFxuICAgICAgICBkYXRhUGF0aHNcbiAgICAgIClcblxuICAgICAgY29uc3QgaW1wb3J0ZWRGaWxlcyA9IFtdXG4gICAgICBjb25zdCBtb2RpZmllZEZpbGVzID0gW11cblxuICAgICAgaWYgKHRyYW5zYWN0aW9uLnJvbGxiYWNrKSB7XG4gICAgICAgIC8vIFByZXZlbnQgd3JvbmcgbWVtb3J5IGxlYWsgZXJyb3IgbWVzc2FnZXMgd2hlbiBpbnN0YWxsaW5nIG1vcmUgdGhhbiAxMFxuICAgICAgICAvLyAncm9sbGJhY2snIGhhbmRsZXJzLCB3aGljaCBjYW4gaGFwcGVuIHdpdGggbW9yZSBjb21wbGV4IHF1ZXJpZXMuXG4gICAgICAgIHRyYW5zYWN0aW9uLnNldE1heExpc3RlbmVycygwKVxuICAgICAgICB0cmFuc2FjdGlvbi5vbigncm9sbGJhY2snLCBhc3luYyBlcnJvciA9PiB7XG4gICAgICAgICAgaWYgKGltcG9ydGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgICBgUmVjZWl2ZWQgJyR7ZXJyb3J9JywgcmVtb3ZpbmcgaW1wb3J0ZWQgZmlsZXMgYWdhaW46ICR7XG4gICAgICAgICAgICAgICAgaW1wb3J0ZWRGaWxlcy5tYXAoZmlsZSA9PiBgJyR7ZmlsZS5uYW1lfSdgKVxuICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGltcG9ydGVkRmlsZXMubWFwKFxuICAgICAgICAgICAgICAgIGZpbGUgPT4gZmlsZS5zdG9yYWdlLnJlbW92ZUZpbGUoZmlsZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobW9kaWZpZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBgbW9kaWZpZWRGaWxlc2Agc2hvdWxkIGJlIHJlc3RvcmVkIGFzIHdlbGwsIGJ1dCB0aGF0J3MgZmFyXG4gICAgICAgICAgICAvLyBmcm9tIHRyaXZpYWwgc2luY2Ugbm8gYmFja3VwIGlzIGtlcHQgaW4gYGhhbmRsZU1vZGlmaWVkQXNzZXRzYFxuICAgICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgICBgVW5hYmxlIHRvIHJlc3RvcmUgdGhlc2UgYWxyZWFkeSBtb2RpZmllZCBmaWxlczogJHtcbiAgICAgICAgICAgICAgICBtb2RpZmllZEZpbGVzLm1hcChmaWxlID0+IGAnJHtmaWxlLm5hbWV9J2ApXG4gICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIG9mIGRhdGFQYXRocykge1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5hcHAuZ2V0U3RvcmFnZShhc3NldHNbZGF0YVBhdGhdLnN0b3JhZ2UpXG4gICAgICAgIGNvbnN0IGJlZm9yZUZpbGVzID0gYmVmb3JlRmlsZXNQZXJEYXRhUGF0aFtkYXRhUGF0aF0gfHwgW11cbiAgICAgICAgY29uc3QgYWZ0ZXJGaWxlcyA9IGFmdGVyRmlsZXNQZXJEYXRhUGF0aFtkYXRhUGF0aF0gfHwgW11cbiAgICAgICAgY29uc3QgYmVmb3JlQnlLZXkgPSBtYXBGaWxlc0J5S2V5KGJlZm9yZUZpbGVzKVxuICAgICAgICBjb25zdCBhZnRlckJ5S2V5ID0gbWFwRmlsZXNCeUtleShhZnRlckZpbGVzKVxuICAgICAgICBjb25zdCByZW1vdmVkRmlsZXMgPSBiZWZvcmVGaWxlcy5maWx0ZXIoZmlsZSA9PiAhYWZ0ZXJCeUtleVtmaWxlLmtleV0pXG4gICAgICAgIGNvbnN0IGFkZGVkRmlsZXMgPSBhZnRlckZpbGVzLmZpbHRlcihmaWxlID0+ICFiZWZvcmVCeUtleVtmaWxlLmtleV0pXG4gICAgICAgIC8vIEFsc28gaGFuZGxlIG1vZGlmaWVkIGZpbGVzLCB3aGljaCBhcmUgZmlsZXMgd2hlcmUgdGhlIGRhdGEgcHJvcGVydHlcbiAgICAgICAgLy8gaXMgY2hhbmdlZCBiZWZvcmUgdXBkYXRlIC8gcGF0Y2gsIG1lYW50aW5nIHRoZSBmaWxlIGlzIGNoYW5nZWQuXG4gICAgICAgIC8vIE5PVEU6IFRoaXMgd2lsbCBjaGFuZ2UgdGhlIGNvbnRlbnQgZm9yIGFsbCB0aGUgcmVmZXJlbmNlcyB0byBpdCxcbiAgICAgICAgLy8gYW5kIHRodXMgc2hvdWxkIG9ubHkgcmVhbGx5IGJlIHVzZWQgd2hlbiB0aGVyZSdzIG9ubHkgb25lIHJlZmVyZW5jZS5cbiAgICAgICAgY29uc3QgbW9kaWZpZWRGaWxlcyA9IGFmdGVyRmlsZXMuZmlsdGVyKFxuICAgICAgICAgIGZpbGUgPT4gZmlsZS5kYXRhICYmIGJlZm9yZUJ5S2V5W2ZpbGUua2V5XVxuICAgICAgICApXG4gICAgICAgIGltcG9ydGVkRmlsZXMucHVzaChcbiAgICAgICAgICAuLi5hd2FpdCB0aGlzLmFwcC5oYW5kbGVBZGRkZWRBbmRSZW1vdmVkQXNzZXRzKFxuICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgIGFkZGVkRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXMsXG4gICAgICAgICAgICB0cmFuc2FjdGlvblxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICBtb2RpZmllZEZpbGVzLnB1c2goXG4gICAgICAgICAgLi4uYXdhaXQgdGhpcy5hcHAuaGFuZGxlTW9kaWZpZWRBc3NldHMoXG4gICAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgICAgbW9kaWZpZWRGaWxlcyxcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5FdmVudEVtaXR0ZXIubWl4aW4oTW9kZWwpXG5LbmV4SGVscGVyLm1peGluKE1vZGVsKVxuLy8gRXhwb3NlIGEgc2VsZWN0aW9uIG9mIFF1ZXJ5QnVpbGRlciBtZXRob2RzIGFzIHN0YXRpYyBtZXRob2RzIG9uIG1vZGVsIGNsYXNzZXNcblF1ZXJ5QnVpbGRlci5taXhpbihNb2RlbClcblxuY29uc3QgbWV0YU1hcCA9IG5ldyBXZWFrTWFwKClcblxuZnVuY3Rpb24gZ2V0TWV0YShtb2RlbENsYXNzLCBrZXksIHZhbHVlKSB7XG4gIGxldCBtZXRhID0gbWV0YU1hcC5nZXQobW9kZWxDbGFzcylcbiAgaWYgKCFtZXRhKSB7XG4gICAgbWV0YU1hcC5zZXQobW9kZWxDbGFzcywgbWV0YSA9IHt9KVxuICB9XG4gIGlmICghKGtleSBpbiBtZXRhKSkge1xuICAgIG1ldGFba2V5XSA9IGlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlXG4gIH1cbiAgcmV0dXJuIG1ldGFba2V5XVxufVxuXG5mdW5jdGlvbiBsb2FkQXNzZXREYXRhUGF0aHMocXVlcnksIGRhdGFQYXRocykge1xuICByZXR1cm4gZGF0YVBhdGhzLnJlZHVjZShcbiAgICAocXVlcnksIGRhdGFQYXRoKSA9PiBxdWVyeS5sb2FkRGF0YVBhdGgoZGF0YVBhdGgpLFxuICAgIHF1ZXJ5XG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWVBdEFzc2V0RGF0YVBhdGgoaXRlbSwgcGF0aCkge1xuICByZXR1cm4gZ2V0VmFsdWVBdERhdGFQYXRoKGl0ZW0sIHBhdGgsICgpID0+IHVuZGVmaW5lZClcbn1cblxuZnVuY3Rpb24gZ2V0RmlsZXNQZXJBc3NldERhdGFQYXRoKGl0ZW1zLCBkYXRhUGF0aHMpIHtcbiAgcmV0dXJuIGRhdGFQYXRocy5yZWR1Y2UoXG4gICAgKGFsbEZpbGVzLCBkYXRhUGF0aCkgPT4ge1xuICAgICAgYWxsRmlsZXNbZGF0YVBhdGhdID0gYXNBcnJheShpdGVtcykucmVkdWNlKFxuICAgICAgICAoZmlsZXMsIGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXNBcnJheShnZXRWYWx1ZUF0QXNzZXREYXRhUGF0aChpdGVtLCBkYXRhUGF0aCkpXG4gICAgICAgICAgLy8gVXNlIGZsYXR0ZW4oKSBhcyBkYXRhUGF0aCBtYXkgY29udGFpbiB3aWxkY2FyZHMsIHJlc3VsdGluZyBpblxuICAgICAgICAgIC8vIG5lc3RlZCBmaWxlcyBhcnJheXMuXG4gICAgICAgICAgZmlsZXMucHVzaCguLi5mbGF0dGVuKGRhdGEpLmZpbHRlcihmaWxlID0+ICEhZmlsZSkpXG4gICAgICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgICByZXR1cm4gYWxsRmlsZXNcbiAgICB9LFxuICAgIHt9XG4gIClcbn1cblxuZnVuY3Rpb24gbWFwRmlsZXNCeUtleShmaWxlcykge1xuICByZXR1cm4gZmlsZXMucmVkdWNlKFxuICAgIChtYXAsIGZpbGUpID0+IHtcbiAgICAgIG1hcFtmaWxlLmtleV0gPSBmaWxlXG4gICAgICByZXR1cm4gbWFwXG4gICAgfSxcbiAgICB7fVxuICApXG59XG4iXX0=
|
|
953
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvTW9kZWwuanMiXSwibmFtZXMiOlsiTW9kZWwiLCJvYmplY3Rpb24iLCJjb25zdHJ1Y3RvciIsImpzb24iLCIkc2V0SnNvbiIsInNldHVwIiwia25leCIsInJlbGF0aW9uIiwiT2JqZWN0IiwidmFsdWVzIiwiZ2V0UmVsYXRpb25zIiwic2V0dXBSZWxhdGlvbiIsImVycm9yIiwiUmVsYXRpb25FcnJvciIsInJlZmVyZW5jZVZhbGlkYXRvciIsInJlbGF0ZWRNb2RlbENsYXNzIiwiZ2V0UmVsYXRlZFJlbGF0aW9ucyIsInB1c2giLCJhY2Nlc3NvciIsIm5hbWUiLCJwcm90b3R5cGUiLCJkZWZpbmVBY2Nlc3NvciIsInRhcmdldCIsImlzQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInZhbHVlIiwiUmVsYXRpb25BY2Nlc3NvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJpbml0aWFsaXplIiwiaG9va3MiLCJhc3NldHMiLCJkZWZpbml0aW9uIiwiX3NldHVwRW1pdHRlciIsIl9zZXR1cEFzc2V0c0V2ZW50cyIsIiRpbml0aWFsaXplIiwiJGFwcCIsImFwcCIsIiRpcyIsIm1vZGVsIiwiaWQiLCIkaGFzIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwiJHVwZGF0ZSIsInRyeCIsIiRxdWVyeSIsInVwZGF0ZSIsInJ1bkFmdGVyIiwicmVzdWx0IiwicXVlcnkiLCJoYXMiLCIkc2V0IiwiJHBhdGNoIiwicGF0Y2giLCIkdHJhbnNhY3Rpb24iLCJoYW5kbGVyIiwidHJhbnNhY3Rpb24iLCIkdmFsaWRhdGUiLCJvcHRpb25zIiwic2tpcFZhbGlkYXRpb24iLCJncmFwaCIsImFzeW5jIiwiaW5wdXRKc29uIiwic2hhbGxvdyIsIiRpc09iamVjdGlvbk1vZGVsIiwiY2xvbmUiLCJtdXRhYmxlIiwidmFsaWRhdG9yIiwiZ2V0VmFsaWRhdG9yIiwiYXJncyIsImN0eCIsImNyZWF0ZSIsImJlZm9yZVZhbGlkYXRlIiwidmFsaWRhdGUiLCJoYW5kbGVSZXN1bHQiLCJhZnRlclZhbGlkYXRlIiwidGhlbiIsIiR2YWxpZGF0ZUdyYXBoIiwiZnJvbUpzb24iLCJvbkVycm9yIiwiZXJyIiwiUmVzcG9uc2VFcnJvciIsIkRCRXJyb3IiLCJjcmVhdGVEYXRhYmFzZUVycm9yIiwiV3JhcHBlZEVycm9yIiwiUHJvbWlzZSIsInJlamVjdCIsImNvdW50IiwiZmlyc3QiLCJ0YWJsZU5hbWUiLCJtYXRjaCIsImlkQ29sdW1uIiwiaWRzIiwiZW50cmllcyIsInByaW1hcnkiLCJsZW5ndGgiLCJnZXRSZWZlcmVuY2UiLCJtb2RlbE9ySWQiLCJpbmNsdWRlUHJvcGVydGllcyIsInJlZiIsImlkUHJvcGVydGllcyIsImdldElkUHJvcGVydHlBcnJheSIsImFkZFByb3BlcnR5Iiwia2V5IiwidW5kZWZpbmVkIiwidWlkUmVmUHJvcCIsImZvckVhY2giLCJNb2RlbEVycm9yIiwiaW5kZXgiLCJpc1JlZmVyZW5jZSIsIm9iaiIsImNvbXBpbGVWYWxpZGF0b3IiLCJvbmVPZiIsInR5cGUiLCJyZWR1Y2UiLCJpZFByb3BlcnR5IiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJ0aHJvdyIsImdldFNjb3BlIiwic2NvcGVzIiwiaGFzU2NvcGUiLCJnZXRNb2RpZmllcnMiLCJtb2RpZmllcnMiLCJyZWxhdGlvbk1hcHBpbmdzIiwiX2dldENhY2hlZCIsInJlbGF0aW9ucyIsIm1vZGVscyIsImpzb25TY2hlbWEiLCJzY2hlbWEiLCIkaWQiLCIkc2NoZW1hIiwidmlydHVhbEF0dHJpYnV0ZXMiLCJjb21wdXRlZEF0dHJpYnV0ZXMiLCJqc29uQXR0cmlidXRlcyIsImdldEF0dHJpYnV0ZXMiLCJzcGVjaWZpY1R5cGUiLCJjb21wdXRlZCIsImJvb2xlYW5BdHRyaWJ1dGVzIiwiZGF0ZUF0dHJpYnV0ZXMiLCJpbmNsdWRlcyIsImhpZGRlbkF0dHJpYnV0ZXMiLCJoaWRkZW4iLCJmaWx0ZXIiLCJhdHRyaWJ1dGVzIiwiaWRlbnRpZmllciIsImNhbGN1bGF0ZSIsImVtcHR5IiwiY2FjaGUiLCJnZXRNZXRhIiwiZW50cnkiLCJwYXJ0Iiwic3BsaXQiLCJwcm9wZXJ0eU5hbWVUb0NvbHVtbk5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJjb2x1bW5OYW1lVG9Qcm9wZXJ0eU5hbWUiLCJjb2x1bW5OYW1lIiwiY2FsbEluaXRpYWxpemUiLCIkZm9ybWF0RGF0YWJhc2VKc29uIiwiZGF0ZSIsInRvSVNPU3RyaW5nIiwiaXNTUUxpdGUiLCJib29sIiwiJHBhcnNlRGF0YWJhc2VKc29uIiwiJHBhcnNlSnNvbiIsIkRhdGUiLCJkYXRhUGF0aCIsInN0b3JhZ2UiLCJnZXRTdG9yYWdlIiwiZGF0YSIsImNvbnZlcnRUb0Fzc2V0RmlsZXMiLCJjb252ZXJ0QXNzZXRGaWxlIiwiJGZvcm1hdEpzb24iLCIkZmlsdGVyR3JhcGgiLCJtb2RlbEdyYXBoIiwiZXhwciIsIiRwb3B1bGF0ZUdyYXBoIiwiZmlsdGVyR3JhcGgiLCJwb3B1bGF0ZUdyYXBoIiwiZ2V0UHJvcGVydHlPclJlbGF0aW9uQXREYXRhUGF0aCIsInBhcnNlZERhdGFQYXRoIiwiZ2V0UmVzdWx0IiwiZm91bmQiLCJuZXh0Iiwic2xpY2UiLCJuZXN0ZWREYXRhUGF0aCIsImV4cHJlc3Npb24iLCJqb2luIiwiZmlyc3RUb2tlbiIsIm90aGVyVG9rZW5zIiwidG9rZW4iLCJpc09uZVRvT25lIiwicmVsYXRlZFF1ZXJ5IiwicmVsYXRpb25OYW1lIiwiYWxpYXMiLCJtb2RpZmllck5vdEZvdW5kIiwibW9kaWZpZXIiLCJtb2RlbENsYXNzIiwiYXBwbHlTY29wZSIsImlnbm9yZVNjb3BlIiwic2VsZWN0IiwiY3JlYXRlTm90Rm91bmRFcnJvciIsIk5vdEZvdW5kRXJyb3IiLCJieUlkIiwiY3JlYXRlVmFsaWRhdG9yIiwiY3JlYXRlVmFsaWRhdGlvbkVycm9yIiwibWVzc2FnZSIsImVycm9ycyIsIkdyYXBoRXJyb3IiLCJzZXREZWZpbml0aW9uIiwiZ2V0RGVmaW5pdGlvbiIsImRlc2MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjYWxsIiwiZ2V0UHJvdG90eXBlT2YiLCJtZXJnZWQiLCJkZWZpbml0aW9ucyIsIiRlbWl0IiwiZXZlbnQiLCJlbWl0IiwiYmVmb3JlRmluZCIsIl9lbWl0U3RhdGljSG9vayIsImFmdGVyRmluZCIsImJlZm9yZUluc2VydCIsImFmdGVySW5zZXJ0IiwiYmVmb3JlVXBkYXRlIiwiYWZ0ZXJVcGRhdGUiLCJiZWZvcmVEZWxldGUiLCJhZnRlckRlbGV0ZSIsIm9yaWdpbmFsQXJncyIsImxpc3RlbmVycyIsImxpc3RlbmVyIiwicmVzIiwiYXNzZXREYXRhUGF0aHMiLCJrZXlzIiwib24iLCJpbnB1dEl0ZW1zIiwiYXNGaW5kUXVlcnkiLCJhZnRlckl0ZW1zIiwiZGF0YVBhdGhzIiwicGF0aCIsImdldFZhbHVlQXRBc3NldERhdGFQYXRoIiwiYmVmb3JlSXRlbXMiLCJsb2FkQXNzZXREYXRhUGF0aHMiLCJiZWZvcmVGaWxlc1BlckRhdGFQYXRoIiwiZ2V0RmlsZXNQZXJBc3NldERhdGFQYXRoIiwiYWZ0ZXJGaWxlc1BlckRhdGFQYXRoIiwiaW1wb3J0ZWRGaWxlcyIsIm1vZGlmaWVkRmlsZXMiLCJyb2xsYmFjayIsInNldE1heExpc3RlbmVycyIsImNvbnNvbGUiLCJpbmZvIiwibWFwIiwiZmlsZSIsImFsbCIsInJlbW92ZUZpbGUiLCJiZWZvcmVGaWxlcyIsImFmdGVyRmlsZXMiLCJiZWZvcmVCeUtleSIsIm1hcEZpbGVzQnlLZXkiLCJhZnRlckJ5S2V5IiwicmVtb3ZlZEZpbGVzIiwiYWRkZWRGaWxlcyIsImhhbmRsZUFkZGRlZEFuZFJlbW92ZWRBc3NldHMiLCJoYW5kbGVNb2RpZmllZEFzc2V0cyIsIlF1ZXJ5QnVpbGRlciIsImNsb25lT2JqZWN0QXR0cmlidXRlcyIsInBpY2tKc29uU2NoZW1hUHJvcGVydGllcyIsInVzZUxpbWl0SW5GaXJzdCIsIkV2ZW50RW1pdHRlciIsIm1peGluIiwiS25leEhlbHBlciIsIm1ldGFNYXAiLCJXZWFrTWFwIiwibWV0YSIsInNldCIsImxvYWREYXRhUGF0aCIsIml0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QVNwQixhQUFULENBQXVCcUIsS0FBdkIsRUFBOEI7QUFDNUIsU0FBT0EsS0FBSyxDQUFDdEssTUFBTixDQUNMLENBQUMwSSxHQUFELEVBQU1DLElBQU4sS0FBZTtBQUNiRCxJQUFBQSxHQUFHLENBQUNDLElBQUksQ0FBQ3RKLEdBQU4sQ0FBSCxHQUFnQnNKLElBQWhCO0FBQ0EsV0FBT0QsR0FBUDtBQUNELEdBSkksRUFLTCxFQUxLLENBQVA7QUFPRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvYmplY3Rpb24gZnJvbSAnb2JqZWN0aW9uJ1xuaW1wb3J0IHsgUXVlcnlCdWlsZGVyIH0gZnJvbSAnQC9xdWVyeSdcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgS25leEhlbHBlciB9IGZyb20gJ0AvbGliJ1xuaW1wb3J0IHsgY29udmVydFNjaGVtYSwgYWRkUmVsYXRpb25TY2hlbWFzLCBjb252ZXJ0UmVsYXRpb25zIH0gZnJvbSAnQC9zY2hlbWEnXG5pbXBvcnQgeyBwb3B1bGF0ZUdyYXBoLCBmaWx0ZXJHcmFwaCB9IGZyb20gJ0AvZ3JhcGgnXG5pbXBvcnQgeyBmb3JtYXRKc29uIH0gZnJvbSAnQC91dGlscydcbmltcG9ydCB7XG4gIFJlc3BvbnNlRXJyb3IsXG4gIEdyYXBoRXJyb3IsIE1vZGVsRXJyb3IsXG4gIE5vdEZvdW5kRXJyb3IsXG4gIFJlbGF0aW9uRXJyb3IsXG4gIFdyYXBwZWRFcnJvclxufSBmcm9tICdAL2Vycm9ycydcbmltcG9ydCB7XG4gIGlzU3RyaW5nLCBpc09iamVjdCwgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBhc0FycmF5LCBtZXJnZSwgZmxhdHRlbixcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGgsIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFJlbGF0aW9uQWNjZXNzb3IgZnJvbSAnLi9SZWxhdGlvbkFjY2Vzc29yJ1xuaW1wb3J0IGRlZmluaXRpb25zIGZyb20gJy4vZGVmaW5pdGlvbnMnXG5cbmV4cG9ydCBjbGFzcyBNb2RlbCBleHRlbmRzIG9iamVjdGlvbi5Nb2RlbCB7XG4gIC8vIERlZmluZSBhIGRlZmF1bHQgY29uc3RydWN0b3IgdG8gYWxsb3cgbmV3IE1vZGVsKGpzb24pIGFzIGEgc2hvcnQtY3V0IHRvXG4gIC8vIGBNb2RlbC5mcm9tSnNvbihqc29uLCB7IHNraXBWYWxpZGF0aW9uOiB0cnVlIH0pYFxuICBjb25zdHJ1Y3Rvcihqc29uKSB7XG4gICAgc3VwZXIoKVxuICAgIGlmIChqc29uKSB7XG4gICAgICB0aGlzLiRzZXRKc29uKGpzb24pXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHNldHVwKGtuZXgpIHtcbiAgICB0aGlzLmtuZXgoa25leClcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCByZWxhdGlvbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuZ2V0UmVsYXRpb25zKCkpKSB7XG4gICAgICAgIHRoaXMuc2V0dXBSZWxhdGlvbihyZWxhdGlvbilcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3IgaW5zdGFuY2VvZiBSZWxhdGlvbkVycm9yID8gZXJyb3IgOiBuZXcgUmVsYXRpb25FcnJvcihlcnJvcilcbiAgICB9XG4gICAgdGhpcy5yZWZlcmVuY2VWYWxpZGF0b3IgPSBudWxsXG4gIH1cblxuICBzdGF0aWMgc2V0dXBSZWxhdGlvbihyZWxhdGlvbikge1xuICAgIC8vIEFkZCB0aGlzIHJlbGF0aW9uIHRvIHRoZSByZWxhdGVkIG1vZGVsJ3MgcmVsYXRlZFJlbGF0aW9ucywgc28gaXQgY2FuXG4gICAgLy8gcmVnaXN0ZXIgYWxsIHJlcXVpcmVkIGZvcmVpZ24ga2V5cyBpbiBpdHMgcHJvcGVydGllcy5cbiAgICByZWxhdGlvbi5yZWxhdGVkTW9kZWxDbGFzcy5nZXRSZWxhdGVkUmVsYXRpb25zKCkucHVzaChyZWxhdGlvbilcbiAgICAvLyBUT0RPOiBDaGVjayBgdGhyb3VnaGAgc2V0dGluZ3MgdG8gbWFrZSBzdXJlIHRoZXkncmUgY29ycmVjdD9cblxuICAgIC8vIEV4cG9zZSBSZWxhdGlvbkFjY2Vzc29yIGluc3RhbmNlcyBmb3IgZWFjaCByZWxhdGlvbiB1bmRlciBzaG9ydC1jdXQgJG5hbWVcbiAgICAvLyBmb3IgYWNjZXNzIHRvIHJlbGF0aW9ucyBhbmQgaW1wbGljaXQgY2FsbHMgdG8gJHJlbGF0ZWRRdWVyeShuYW1lKS5cbiAgICBjb25zdCBhY2Nlc3NvciA9IGAkJHtyZWxhdGlvbi5uYW1lfWBcbiAgICBpZiAoYWNjZXNzb3IgaW4gdGhpcy5wcm90b3R5cGUpIHtcbiAgICAgIHRocm93IG5ldyBSZWxhdGlvbkVycm9yKFxuICAgICAgICBgTW9kZWwgJyR7dGhpcy5uYW1lfScgYWxyZWFkeSBkZWZpbmVzIGEgcHJvcGVydHkgd2l0aCBuYW1lIGAgK1xuICAgICAgICBgJyR7YWNjZXNzb3J9JyB0aGF0IGNsYXNoZXMgd2l0aCB0aGUgcmVsYXRpb24gYWNjZXNzb3IuYClcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgYW4gYWNjZXNzb3Igb24gdGhlIGNsYXNzIGFzIHdlbGwgYXMgb24gdGhlIHByb3RvdHlwZSB0aGF0IHdoZW5cbiAgICAvLyBmaXJzdCBjYWxsZWQgY3JlYXRlcyBhIFJlbGF0aW9uQWNjZXNzb3IgaW5zdGFuY2UgYW5kIHRoZW4gb3ZlcnJpZGVzIHRoZVxuICAgIC8vIGFjY2Vzc29yIHdpdGggb25lIHRoYXQgdGhlbiBqdXN0IHJldHVybnMgdGhlIHNhbWUgdmFsdWUgYWZ0ZXJ3YXJkcy5cbiAgICBjb25zdCBkZWZpbmVBY2Nlc3NvciA9ICh0YXJnZXQsIGlzQ2xhc3MpID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGFjY2Vzc29yLCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5ldyBSZWxhdGlvbkFjY2Vzc29yKFxuICAgICAgICAgICAgcmVsYXRpb24sXG4gICAgICAgICAgICBpc0NsYXNzID8gdGhpcyA6IG51bGwsIC8vIG1vZGVsQ2xhc3NcbiAgICAgICAgICAgIGlzQ2xhc3MgPyBudWxsIDogdGhpcyAvLyBtb2RlbFxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBPdmVycmlkZSBhY2Nlc3NvciB3aXRoIHZhbHVlIG9uIGZpcnN0IGNhbGwgZm9yIGNhY2hpbmcuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFjY2Vzc29yLCB7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBkZWZpbmVBY2Nlc3Nvcih0aGlzLCB0cnVlKVxuICAgIGRlZmluZUFjY2Vzc29yKHRoaXMucHJvdG90eXBlLCBmYWxzZSlcbiAgfVxuXG4gIC8vIEBvdmVycmlkYWJsZVxuICBzdGF0aWMgaW5pdGlhbGl6ZSgpIHtcbiAgICBjb25zdCB7IGhvb2tzLCBhc3NldHMgfSA9IHRoaXMuZGVmaW5pdGlvblxuICAgIHRoaXMuX3NldHVwRW1pdHRlcihob29rcylcbiAgICBpZiAoYXNzZXRzKSB7XG4gICAgICB0aGlzLl9zZXR1cEFzc2V0c0V2ZW50cyhhc3NldHMpXG4gICAgfVxuICB9XG5cbiAgLy8gQG92ZXJyaWRhYmxlXG4gICRpbml0aWFsaXplKCkge1xuICB9XG5cbiAgZ2V0ICRhcHAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuYXBwXG4gIH1cblxuICAkaXMobW9kZWwpIHtcbiAgICByZXR1cm4gbW9kZWw/LmNvbnN0cnVjdG9yID09PSB0aGlzLmNvbnN0cnVjdG9yICYmIG1vZGVsPy5pZCA9PT0gdGhpcy5pZFxuICB9XG5cbiAgJGhhcyguLi5wcm9wZXJ0aWVzKSB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoIShwcm9wZXJ0eSBpbiB0aGlzKSkgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAkdXBkYXRlKHByb3BlcnRpZXMsIHRyeCkge1xuICAgIHJldHVybiB0aGlzLiRxdWVyeSh0cngpXG4gICAgICAudXBkYXRlKHByb3BlcnRpZXMpXG4gICAgICAucnVuQWZ0ZXIoKHJlc3VsdCwgcXVlcnkpID0+XG4gICAgICAgIC8vIE9ubHkgcGVyZm9ybSBgJHNldCgpYCBhbmQgcmV0dXJuIGB0aGlzYCBpZiB0aGUgcXVlcnkgd2Fzbid0IG1vZGlmaWVkXG4gICAgICAgIC8vIGluIGEgd2F5IHRoYXQgd291bGQgcmVtb3ZlIHRoZSBgdXBkYXRlKClgIGNvbW1hbmQsIGUuZy4gdG9GaW5kUXVlcnkoKVxuICAgICAgICBxdWVyeS5oYXMoJ3VwZGF0ZScpID8gdGhpcy4kc2V0KHJlc3VsdCkgOiByZXN1bHRcbiAgICAgIClcbiAgfVxuXG4gICRwYXRjaChwcm9wZXJ0aWVzLCB0cngpIHtcbiAgICByZXR1cm4gdGhpcy4kcXVlcnkodHJ4KVxuICAgICAgLnBhdGNoKHByb3BlcnRpZXMpXG4gICAgICAucnVuQWZ0ZXIoKHJlc3VsdCwgcXVlcnkpID0+XG4gICAgICAgIC8vIE9ubHkgcGVyZm9ybSBgJHNldCgpYCBhbmQgcmV0dXJuIGB0aGlzYCBpZiB0aGUgcXVlcnkgd2Fzbid0IG1vZGlmaWVkXG4gICAgICAgIC8vIGluIGEgd2F5IHRoYXQgd291bGQgcmVtb3ZlIHRoZSBgcGF0Y2goKWAgY29tbWFuZCwgZS5nLiB0b0ZpbmRRdWVyeSgpXG4gICAgICAgIHF1ZXJ5LmhhcygncGF0Y2gnKSA/IHRoaXMuJHNldChyZXN1bHQpIDogcmVzdWx0XG4gICAgICApXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgJHRyYW5zYWN0aW9uKHRyeCwgaGFuZGxlcikge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRyYW5zYWN0aW9uKHRyeCwgaGFuZGxlcilcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBzdGF0aWMgdHJhbnNhY3Rpb24odHJ4LCBoYW5kbGVyKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGB0cmFuc2FjdGlvbih0cngsIGhhbmRsZXIpYCAmIGB0cmFuc2FjdGlvbihoYW5kbGVyKWBcbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgIGhhbmRsZXIgPSB0cnhcbiAgICAgIHRyeCA9IG51bGxcbiAgICB9XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIC8vIFVzZSBleGlzdGluZyB0cmFuc2FjdGlvbiwgb3IgY3JlYXRlIG5ldyBvbmUsIHRvIGV4ZWN1dGUgaGFuZGxlciB3aXRoOlxuICAgICAgcmV0dXJuIHRyeFxuICAgICAgICA/IGhhbmRsZXIodHJ4KVxuICAgICAgICA6IHRoaXMua25leCgpLnRyYW5zYWN0aW9uKGhhbmRsZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGFyZ3VtZW50cywgc2ltcGx5IGRlbGVnYXRlIHRvIG9iamVjdGlvbidzIHRyYW5zYWN0aW9uKClcbiAgICAgIHJldHVybiBzdXBlci50cmFuc2FjdGlvbigpXG4gICAgfVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gICR2YWxpZGF0ZShqc29uLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAob3B0aW9ucy5za2lwVmFsaWRhdGlvbikge1xuICAgICAgcmV0dXJuIGpzb25cbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmdyYXBoICYmICFvcHRpb25zLmFzeW5jKSB7XG4gICAgICAvLyBGYWxsIGJhY2sgdG8gT2JqZWN0aW9uJ3MgJHZhbGlkYXRlKCkgaWYgd2UgZG9uJ3QgbmVlZCBhbnkgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25zIChhc3luYyBhbmQgZ3JhcGggZm9yIG5vdyk6XG4gICAgICByZXR1cm4gc3VwZXIuJHZhbGlkYXRlKGpzb24sIG9wdGlvbnMpXG4gICAgfVxuICAgIGpzb24gPSBqc29uIHx8IHRoaXNcbiAgICBjb25zdCBpbnB1dEpzb24gPSBqc29uXG4gICAgY29uc3Qgc2hhbGxvdyA9IGpzb24uJGlzT2JqZWN0aW9uTW9kZWwgJiYgIW9wdGlvbnMuZ3JhcGhcbiAgICBpZiAoc2hhbGxvdykge1xuICAgICAgLy8gU3RyaXAgYXdheSByZWxhdGlvbnMgYW5kIG90aGVyIGludGVybmFsIHN0dWZmLlxuICAgICAganNvbiA9IGpzb24uY2xvbmUoeyBzaGFsbG93OiB0cnVlIH0pXG4gICAgICAvLyBXZSBjYW4gbXV0YXRlIGBqc29uYCBub3cgdGhhdCB3ZSB0b29rIGEgY29weSBvZiBpdC5cbiAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIG11dGFibGU6IHRydWUgfVxuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuY29uc3RydWN0b3IuZ2V0VmFsaWRhdG9yKClcbiAgICBjb25zdCBhcmdzID0ge1xuICAgICAgb3B0aW9ucyxcbiAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAganNvbixcbiAgICAgIGN0eDogT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgIH1cblxuICAgIHZhbGlkYXRvci5iZWZvcmVWYWxpZGF0ZShhcmdzKVxuICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRvci52YWxpZGF0ZShhcmdzKVxuICAgIGNvbnN0IGhhbmRsZVJlc3VsdCA9IHJlc3VsdCA9PiB7XG4gICAgICB2YWxpZGF0b3IuYWZ0ZXJWYWxpZGF0ZShhcmdzKVxuICAgICAgLy8gSWYgYGpzb25gIHdhcyBzaGFsbG93LWNsb25lZCwgY29weSBvdmVyIHRoZSBwb3NzaWJsZSBkZWZhdWx0IHZhbHVlcy5cbiAgICAgIHJldHVybiBzaGFsbG93ID8gaW5wdXRKc29uLiRzZXQocmVzdWx0KSA6IHJlc3VsdFxuICAgIH1cbiAgICAvLyBIYW5kbGUgYm90aCBhc3luYyBhbmQgc3luYyB2YWxpZGF0aW9uIGhlcmU6XG4gICAgcmV0dXJuIGlzUHJvbWlzZShyZXN1bHQpXG4gICAgICA/IHJlc3VsdC50aGVuKGhhbmRsZVJlc3VsdClcbiAgICAgIDogaGFuZGxlUmVzdWx0KHJlc3VsdClcbiAgfVxuXG4gIGFzeW5jICR2YWxpZGF0ZUdyYXBoKG9wdGlvbnMgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMuJHZhbGlkYXRlKG51bGwsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBncmFwaDogdHJ1ZSxcbiAgICAgIC8vIEFsd2F5cyB1c2UgYGFzeW5jOiB0cnVlYCBvcHRpb24gaGVyZSBmb3Igc2ltcGxpY2l0eTpcbiAgICAgIGFzeW5jOiB0cnVlXG4gICAgfSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHN0YXRpYyBmcm9tSnNvbihqc29uLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAob3B0aW9ucy5hc3luYyAmJiAhb3B0aW9ucy5za2lwVmFsaWRhdGlvbikge1xuICAgICAgLy8gSGFuZGxlIGFzeW5jIHZhbGlkYXRpb24sIGFzIHN1cHBvcnRlZCBieSBEaXRvOlxuICAgICAgY29uc3QgbW9kZWwgPSBuZXcgdGhpcygpXG4gICAgICByZXR1cm4gbW9kZWwuJHZhbGlkYXRlKGpzb24sIG9wdGlvbnMpLnRoZW4oXG4gICAgICAgIGpzb24gPT4gbW9kZWwuJHNldEpzb24oanNvbiwge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgc2tpcFZhbGlkYXRpb246IHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gICAgLy8gRmFsbCBiYWNrIHRvIE9iamVjdGlvbidzIGZyb21Kc29uKCkgaWYgd2UgZG9uJ3QgbmVlZCBhc3luYyBoYW5kbGluZzpcbiAgICByZXR1cm4gc3VwZXIuZnJvbUpzb24oanNvbiwgb3B0aW9ucylcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBzdGF0aWMgcXVlcnkodHJ4KSB7XG4gICAgcmV0dXJuIHN1cGVyLnF1ZXJ5KHRyeCkub25FcnJvcihlcnIgPT4ge1xuICAgICAgLy8gVE9ETzogU2hvdWxkbid0IHRoaXMgd3JhcHBpbmcgaGFwcGVuIG9uIHRoZSBDb250cm9sbGVyIGxldmVsP1xuICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgUmVzcG9uc2VFcnJvciA/IGVyclxuICAgICAgICA6IGVyciBpbnN0YW5jZW9mIG9iamVjdGlvbi5EQkVycm9yID8gdGhpcy5hcHAuY3JlYXRlRGF0YWJhc2VFcnJvcihlcnIpXG4gICAgICAgIDogbmV3IFdyYXBwZWRFcnJvcihlcnIpXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgIH0pXG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY291bnQoLi4uYXJncykge1xuICAgIGNvbnN0IHsgY291bnQgfSA9IGF3YWl0IHRoaXMucXVlcnkoKS5jb3VudCguLi5hcmdzKS5maXJzdCgpIHx8IHt9XG4gICAgcmV0dXJuICtjb3VudCB8fCAwXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgc3RhdGljIGdldCB0YWJsZU5hbWUoKSB7XG4gICAgLy8gSWYgdGhlIGNsYXNzIG5hbWUgZW5kcyBpbiAnTW9kZWwnLCByZW1vdmUgdGhhdCBmcm9tIHRoZSB0YWJsZSBuYW1lLlxuICAgIHJldHVybiB0aGlzLm5hbWUubWF0Y2goL14oLio/KSg/Ok1vZGVsfCkkLylbMV1cbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBzdGF0aWMgZ2V0IGlkQ29sdW1uKCkge1xuICAgIC8vIFRyeSBleHRyYWN0aW5nIHRoZSBpZCBjb2x1bW4gbmFtZSBmcm9tIHRoZSByYXcgcHJvcGVydGllcyBkZWZpbml0aW9ucyxcbiAgICAvLyBub3QgdGhlIHJlc29sdmVkIGBkZWZpbml0aW9uLnByb3BlcnRpZXNgIHdoaWNoIGFyZW4ndCByZWFkeSBhdCB0aGlzIHBvaW50XG4gICAgLy8gd2l0aCBmYWxsLWJhY2sgb250byBkZWZhdWx0IE9iamVjdGlvbi5qcyBiZWhhdmlvci5cbiAgICBjb25zdCB7IHByb3BlcnRpZXMgfSA9IHRoaXNcbiAgICBjb25zdCBpZHMgPSBbXVxuICAgIGZvciAoY29uc3QgW25hbWUsIHByb3BlcnR5XSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzIHx8IHt9KSkge1xuICAgICAgaWYgKHByb3BlcnR5Py5wcmltYXJ5KSB7XG4gICAgICAgIGlkcy5wdXNoKG5hbWUpXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBpZHNcbiAgICByZXR1cm4gbGVuZ3RoID4gMSA/IGlkcyA6IGxlbmd0aCA+IDAgPyBpZHNbMF0gOiBzdXBlci5pZENvbHVtblxuICB9XG5cbiAgc3RhdGljIGdldFJlZmVyZW5jZShtb2RlbE9ySWQsIGluY2x1ZGVQcm9wZXJ0aWVzKSB7XG4gICAgLy8gQ3JlYXRlcyBhIHJlZmVyZW5jZSBtb2RlbCB0aGF0IHRha2VzIG92ZXIgdGhlIGlkIC8gI3JlZiBwcm9wZXJ0aWVzIGZyb21cbiAgICAvLyB0aGUgcGFzc2VkIG1vZGVsIG9yIGlkIHZhbHVlL2FycmF5LCBvbWl0dGluZyBhbnkgb3RoZXIgcHJvcGVydGllcyBpbiBpdCxcbiAgICAvLyBleGNlcHQgZm9yIGFueXRoaW5nIG1lbnRpb25lZCBpbiB0aGUgb3B0aW9uYWwgYGluY2x1ZGVQcm9wZXJ0aWVzYCBhcmcuXG4gICAgY29uc3QgcmVmID0gbmV3IHRoaXMoKVxuICAgIGNvbnN0IGlkUHJvcGVydGllcyA9IHRoaXMuZ2V0SWRQcm9wZXJ0eUFycmF5KClcbiAgICBpZiAoaXNPYmplY3QobW9kZWxPcklkKSkge1xuICAgICAgY29uc3QgYWRkUHJvcGVydHkgPSBrZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG1vZGVsT3JJZFtrZXldXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVmW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBbHNvIHN1cHBvcnQgT2JqZWN0aW9uJ3MgI3JlZiB0eXBlIHJlZmVyZW5jZXMgbmV4dCB0byBpZCBwcm9wZXJ0aWVzLlxuICAgICAgYWRkUHJvcGVydHkodGhpcy51aWRSZWZQcm9wKVxuICAgICAgaWRQcm9wZXJ0aWVzLmZvckVhY2goYWRkUHJvcGVydHkpXG4gICAgICBpbmNsdWRlUHJvcGVydGllcz8uZm9yRWFjaChhZGRQcm9wZXJ0eSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQW4gaWQgdmFsdWUvYXJyYXk6IE1hcCBpdCB0byB0aGUgcHJvcGVydGllcyBpbiBgZ2V0SWRQcm9wZXJ0eUFycmF5KClgOlxuICAgICAgY29uc3QgaWRzID0gYXNBcnJheShtb2RlbE9ySWQpXG4gICAgICBpZiAoaWRzLmxlbmd0aCAhPT0gaWRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgTW9kZWxFcnJvcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGBJbnZhbGlkIGFtb3VudCBvZiBpZCB2YWx1ZXMgcHJvdmlkZWQgZm9yIHJlZmVyZW5jZTogVW5hYmxlIHRvIG1hcCAke1xuICAgICAgICAgICAgZm9ybWF0SnNvbihtb2RlbE9ySWQsIGZhbHNlKVxuICAgICAgICAgIH0gdG8gJHtcbiAgICAgICAgICAgIGZvcm1hdEpzb24oaWRQcm9wZXJ0aWVzLCBmYWxzZSlcbiAgICAgICAgICB9LmBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWRQcm9wZXJ0aWVzLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgcmVmW2tleV0gPSBpZHNbaW5kZXhdXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gcmVmXG4gIH1cblxuICBzdGF0aWMgaXNSZWZlcmVuY2Uob2JqKSB7XG4gICAgbGV0IHZhbGlkYXRvciA9IHRoaXMucmVmZXJlbmNlVmFsaWRhdG9yXG4gICAgaWYgKCF2YWxpZGF0b3IpIHtcbiAgICAgIC8vIEZvciBgZGF0YWAgdG8gYmUgY29uc2lkZXJlZCBhIHJlZmVyZW5jZSwgaXQgbmVlZHMgdG8gaG9sZCBvbmx5IG9uZVxuICAgICAgLy8gdmFsdWUgdGhhdCBpcyBlaXRoZXIgdGhlIHRhcmdldCdzIGlkLCBvciBhbiBPYmplY3Rpb24uanMgI3JlZiB2YWx1ZTpcbiAgICAgIHZhbGlkYXRvciA9IHRoaXMucmVmZXJlbmNlVmFsaWRhdG9yID0gdGhpcy5hcHAuY29tcGlsZVZhbGlkYXRvcihcbiAgICAgICAge1xuICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAvLyBTdXBwb3J0IGNvbXBvc2l0ZSBrZXlzIGFuZCBhZGQgYSBwcm9wZXJ0eSBmb3IgZWFjaCBrZXk6XG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMuZ2V0SWRQcm9wZXJ0eUFycmF5KCkucmVkdWNlKFxuICAgICAgICAgICAgICAgIChpZFByb3BlcnRpZXMsIGlkUHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlkUHJvcGVydGllc1tpZFByb3BlcnR5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdGhpcy5kZWZpbml0aW9uLnByb3BlcnRpZXNbaWRQcm9wZXJ0eV0udHlwZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkUHJvcGVydGllc1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIFt0aGlzLnVpZFJlZlByb3BdOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICAvLyBSZWNlaXZlIGBmYWxzZWAgaW5zdGVhZCBvZiB0aHJvd24gZXhjZXB0aW9ucyB3aGVuIHZhbGlkYXRpb24gZmFpbHM6XG4gICAgICAgIHsgdGhyb3c6IGZhbHNlIH1cbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcihvYmopXG4gIH1cblxuICBzdGF0aWMgZ2V0U2NvcGUobmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRlZmluaXRpb24uc2NvcGVzW25hbWVdXG4gIH1cblxuICBzdGF0aWMgaGFzU2NvcGUobmFtZSkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0U2NvcGUobmFtZSlcbiAgfVxuXG4gIHN0YXRpYyBnZXRNb2RpZmllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbi5tb2RpZmllcnNcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcmVsYXRpb25NYXBwaW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2FjaGVkKCdyZWxhdGlvbk1hcHBpbmdzJywgKCkgPT4gKFxuICAgICAgY29udmVydFJlbGF0aW9ucyh0aGlzLCB0aGlzLmRlZmluaXRpb24ucmVsYXRpb25zLCB0aGlzLmFwcC5tb2RlbHMpXG4gICAgKSwge30pXG4gIH1cblxuICBzdGF0aWMgZ2V0IGpzb25TY2hlbWEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENhY2hlZCgnanNvblNjaGVtYScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGNvbnZlcnRTY2hlbWEodGhpcy5kZWZpbml0aW9uLnByb3BlcnRpZXMpXG4gICAgICBhZGRSZWxhdGlvblNjaGVtYXModGhpcywgc2NoZW1hLnByb3BlcnRpZXMpXG4gICAgICAvLyBNZXJnZSBpbiByb290LWxldmVsIHNjaGVtYSBhZGRpdGlvbnNcbiAgICAgIG1lcmdlKHNjaGVtYSwgdGhpcy5kZWZpbml0aW9uLnNjaGVtYSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgICRpZDogdGhpcy5uYW1lLFxuICAgICAgICAkc2NoZW1hOiAnaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEnLFxuICAgICAgICAuLi5zY2hlbWFcbiAgICAgIH1cbiAgICB9LCB7fSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdmlydHVhbEF0dHJpYnV0ZXMoKSB7XG4gICAgLy8gTGV2ZXJhZ2UgT2JqZWN0aW9uJ3Mgb3duIG1lY2hhbmlzbSBjYWxsZWQgYHZpcnR1YWxBdHRyaWJ1dGVzYCB0byBoYW5kbGVcbiAgICAvLyBgY29tcHV0ZWRBdHRyaWJ1dGVzYCB3aGVuIHNldHRpbmcgSlNPTiBkYXRhLlxuICAgIHJldHVybiB0aGlzLmNvbXB1dGVkQXR0cmlidXRlc1xuICB9XG5cbiAgc3RhdGljIGdldCBqc29uQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2FjaGVkKCdqc29uU2NoZW1hOmpzb25BdHRyaWJ1dGVzJywgKCkgPT4gKFxuICAgICAgdGhpcy5nZXRBdHRyaWJ1dGVzKCh7IHR5cGUsIHNwZWNpZmljVHlwZSwgY29tcHV0ZWQgfSkgPT5cbiAgICAgICAgIWNvbXB1dGVkICYmICFzcGVjaWZpY1R5cGUgJiYgKHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgPT09ICdhcnJheScpKVxuICAgICksIFtdKVxuICB9XG5cbiAgc3RhdGljIGdldCBib29sZWFuQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2FjaGVkKCdqc29uU2NoZW1hOmJvb2xlYW5BdHRyaWJ1dGVzJywgKCkgPT4gKFxuICAgICAgdGhpcy5nZXRBdHRyaWJ1dGVzKCh7IHR5cGUsIGNvbXB1dGVkIH0pID0+XG4gICAgICAgICFjb21wdXRlZCAmJiB0eXBlID09PSAnYm9vbGVhbicpXG4gICAgKSwgW10pXG4gIH1cblxuICBzdGF0aWMgZ2V0IGRhdGVBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRDYWNoZWQoJ2pzb25TY2hlbWE6ZGF0ZUF0dHJpYnV0ZXMnLCAoKSA9PiAoXG4gICAgICB0aGlzLmdldEF0dHJpYnV0ZXMoKHsgdHlwZSwgY29tcHV0ZWQgfSkgPT5cbiAgICAgICAgIWNvbXB1dGVkICYmIFsnZGF0ZScsICdkYXRldGltZScsICd0aW1lc3RhbXAnXS5pbmNsdWRlcyh0eXBlKSlcbiAgICApLCBbXSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY29tcHV0ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRDYWNoZWQoJ2pzb25TY2hlbWE6Y29tcHV0ZWRBdHRyaWJ1dGVzJywgKCkgPT4gKFxuICAgICAgdGhpcy5nZXRBdHRyaWJ1dGVzKCh7IGNvbXB1dGVkIH0pID0+IGNvbXB1dGVkKVxuICAgICksIFtdKVxuICB9XG5cbiAgc3RhdGljIGdldCBoaWRkZW5BdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRDYWNoZWQoJ2pzb25TY2hlbWE6aGlkZGVuQXR0cmlidXRlcycsICgpID0+IChcbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlcygoeyBoaWRkZW4gfSkgPT4gaGlkZGVuKVxuICAgICksIFtdKVxuICB9XG5cbiAgc3RhdGljIGdldEF0dHJpYnV0ZXMoZmlsdGVyKSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IFtdXG4gICAgY29uc3QgeyBwcm9wZXJ0aWVzIH0gPSB0aGlzLmRlZmluaXRpb25cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBwcm9wZXJ0eV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykpIHtcbiAgICAgIGlmIChmaWx0ZXIocHJvcGVydHkpKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChuYW1lKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXR0cmlidXRlc1xuICB9XG5cbiAgc3RhdGljIF9nZXRDYWNoZWQoaWRlbnRpZmllciwgY2FsY3VsYXRlLCBlbXB0eSA9IHt9KSB7XG4gICAgbGV0IGNhY2hlID0gZ2V0TWV0YSh0aGlzLCAnY2FjaGUnLCB7fSlcbiAgICAvLyBVc2UgYSBzaW1wbGUgZGVwZW5kZW5jeSB0cmFja2luZyBtZWNoYW5pc20gd2l0aCBjYWNoZSBpZGVudGlmaWVycyB0aGF0XG4gICAgLy8gY2FuIGJlIGNoaWxkcmVuIG9mIG90aGVyIGNhY2hlZCB2YWx1ZXMsIGUuZy46XG4gICAgLy8gJ2pzb25TY2hlbWE6anNvbkF0dHJpYnV0ZXMnIGFzIGEgY2hpbGQgb2YgJ2pzb25TY2hlbWEnLCBzbyB0aGF0IHdoZW5ldmVyXG4gICAgLy8gJ2pzb25TY2hlbWEnIGNoYW5nZXMsIGFsbCBjYWNoZWQgY2hpbGQgdmFsdWVzICBhcmUgaW52YWxpZGF0ZWQuXG4gICAgbGV0IGVudHJ5XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGlkZW50aWZpZXIuc3BsaXQoJzonKSkge1xuICAgICAgZW50cnkgPSBjYWNoZVtwYXJ0XSA9IGNhY2hlW3BhcnRdIHx8IHtcbiAgICAgICAgY2FjaGU6IHt9LFxuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBjYWNoZSA9IGVudHJ5LmNhY2hlXG4gICAgfVxuICAgIGlmIChlbnRyeT8udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVGVtcG9yYXJpbHkgc2V0IGNhY2hlIHRvIGFuIGVtcHR5IG9iamVjdCB0byBwcmV2ZW50IGVuZGxlc3NcbiAgICAgIC8vIHJlY3Vyc2lvbiB3aXRoIGludGVyZGVwZW5kZW50IGpzb25TY2hlbWEgcmVsYXRlZCBjYWxscy4uLlxuICAgICAgZW50cnkudmFsdWUgPSBlbXB0eVxuICAgICAgZW50cnkudmFsdWUgPSBjYWxjdWxhdGUoKVxuICAgICAgLy8gQ2xlYXIgY2hpbGQgZGVwZW5kZW5jaWVzIG9uY2UgcGFyZW50IHZhbHVlIGhhcyBjaGFuZ2VkOlxuICAgICAgZW50cnkuY2FjaGUgPSB7fVxuICAgIH1cbiAgICByZXR1cm4gZW50cnk/LnZhbHVlXG4gIH1cblxuICBzdGF0aWMgZ2V0UmVsYXRlZFJlbGF0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0TWV0YSh0aGlzLCAncmVsYXRlZFJlbGF0aW9ucycsIFtdKVxuICB9XG5cbiAgLy8gT3ZlcnJpZGUgcHJvcGVydHlOYW1lVG9Db2x1bW5OYW1lKCkgLyBjb2x1bW5OYW1lVG9Qcm9wZXJ0eU5hbWUoKSB0byBub3RcbiAgLy8gcmVseSBvbiAkZm9ybWF0RGF0YWJhc2VKc29uKCkgLyAgJHBhcnNlRGF0YWJhc2VKc29uKCkgZG8gZGV0ZWN0IG5hbWluZ1xuICAvLyBjb252ZW50aW9ucyBidXQgYXNzdW1lIHNpbXBseSB0aGF0IHRoZXkncmUgYWx3YXlzIHRoZSBzYW1lLlxuICAvLyBUaGlzIGlzIGZpbmUgc2luY2Ugd2UgY2FuIG5vdyBjaGFuZ2UgbmFtaW5nIGF0IEtuZXggbGV2ZWwuXG4gIC8vIFNlZSBrbmV4U25ha2VDYXNlTWFwcGVycygpXG5cbiAgLy8gQG92ZXJyaWRlXG4gIHN0YXRpYyBwcm9wZXJ0eU5hbWVUb0NvbHVtbk5hbWUocHJvcGVydHlOYW1lKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5TmFtZVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHN0YXRpYyBjb2x1bW5OYW1lVG9Qcm9wZXJ0eU5hbWUoY29sdW1uTmFtZSkge1xuICAgIHJldHVybiBjb2x1bW5OYW1lXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgJHNldEpzb24oanNvbiwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gICAgY29uc3QgY2FsbEluaXRpYWxpemUgPSAoXG4gICAgICAvLyBPbmx5IGNhbGwgaW5pdGlhbGl6ZSB3aGVuOlxuICAgICAgLy8gMS4gd2UncmUgbm90IHBhcnRpYWxseSBwYXRjaGluZzpcbiAgICAgICFvcHRpb25zLnBhdGNoICYmXG4gICAgICAvLyAyLiAkaW5pdGlhbGl6ZSgpIGlzIGFjdHVhbGx5IGRvaW5nIHNvbWV0aGluZzpcbiAgICAgIHRoaXMuJGluaXRpYWxpemUgIT09IE1vZGVsLnByb3RvdHlwZS4kaW5pdGlhbGl6ZSAmJlxuICAgICAgLy8gMy4gdGhlIGRhdGEgaXMgbm90IGp1c3QgYSByZWZlcmVuY2U6XG4gICAgICAhdGhpcy5jb25zdHJ1Y3Rvci5pc1JlZmVyZW5jZShqc29uKVxuICAgIClcbiAgICBpZiAoIWNhbGxJbml0aWFsaXplIHx8IG9wdGlvbnMuc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIHN1cGVyLiRzZXRKc29uKGpzb24sIG9wdGlvbnMpXG4gICAgICBpZiAoY2FsbEluaXRpYWxpemUpIHtcbiAgICAgICAgdGhpcy4kaW5pdGlhbGl6ZSgpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHZhbGlkYXRpb24gaXNuJ3Qgc2tpcHBlZCBvciB0aGUgbW9kZWwgcHJvdmlkZXMgaXRzIG93biAkaW5pdGlhbGl6ZSgpXG4gICAgICAvLyBtZXRob2QsIGNhbGwgJHNldEpzb24oKSB3aXRoIHBhdGNoIHZhbGlkYXRpb24gZmlyc3QgdG8gbm90IGNvbXBsYWluXG4gICAgICAvLyBhYm91dCBtaXNzaW5nIGZpZWxkcywgdGhlbiBwZXJmb3JtIGEgZnVsbCB2YWxpZGF0aW9uIGFmdGVyIGNhbGxpbmdcbiAgICAgIC8vICRpbml0aWFsaXplKCksIHRvIGdpdmUgdGhlIG1vZGVsIGEgY2hhbmNlIHRvIGNvbmZpZ3VyZSBpdHNlbGYuXG4gICAgICBzdXBlci4kc2V0SnNvbihqc29uLCB7IC4uLm9wdGlvbnMsIHBhdGNoOiB0cnVlIH0pXG4gICAgICB0aGlzLiRpbml0aWFsaXplKClcbiAgICAgIHRoaXMuJHZhbGlkYXRlKHRoaXMsIG9wdGlvbnMpXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgJGZvcm1hdERhdGFiYXNlSnNvbihqc29uKSB7XG4gICAgY29uc3QgeyBjb25zdHJ1Y3RvciB9ID0gdGhpc1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGNvbnN0cnVjdG9yLmRhdGVBdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBkYXRlID0ganNvbltrZXldXG4gICAgICBpZiAoZGF0ZT8udG9JU09TdHJpbmcpIHtcbiAgICAgICAganNvbltrZXldID0gZGF0ZS50b0lTT1N0cmluZygpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25zdHJ1Y3Rvci5pc1NRTGl0ZSgpKSB7XG4gICAgICAvLyBTUUxpdGUgZG9lcyBub3Qgc3VwcG9ydCBib29sZWFuIG5hdGl2ZWx5IGFuZCBuZWVkcyBjb252ZXJzaW9uLi4uXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25zdHJ1Y3Rvci5ib29sZWFuQXR0cmlidXRlcykge1xuICAgICAgICBjb25zdCBib29sID0ganNvbltrZXldXG4gICAgICAgIGlmIChib29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBqc29uW2tleV0gPSBib29sID8gMSA6IDBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGNvbXB1dGVkIHByb3BlcnRpZXMgc28gdGhleSBkb24ndCBhdHRlbXB0IHRvIGdldCBzZXQuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgY29uc3RydWN0b3IuY29tcHV0ZWRBdHRyaWJ1dGVzKSB7XG4gICAgICBkZWxldGUganNvbltrZXldXG4gICAgfVxuICAgIC8vIE5PVEU6IE5vIG5lZWQgdG8gbm9ybWFsaXplIHRoZSBpZGVudGlmaWVycyBpbiB0aGUgSlNPTiBpbiBjYXNlIG9mXG4gICAgLy8gbm9ybWFsaXplRGJOYW1lcywgYXMgdGhpcyBhbHJlYWR5IGhhcHBlbnMgdGhyb3VnaFxuICAgIC8vIGtuZXguY29uZmlnLndyYXBJZGVudGlmaWVyKCksIHNlZSBBcHBsaWNhdGlvbi5qc1xuICAgIHJldHVybiBzdXBlci4kZm9ybWF0RGF0YWJhc2VKc29uKGpzb24pXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgJHBhcnNlRGF0YWJhc2VKc29uKGpzb24pIHtcbiAgICBjb25zdCB7IGNvbnN0cnVjdG9yIH0gPSB0aGlzXG4gICAganNvbiA9IHN1cGVyLiRwYXJzZURhdGFiYXNlSnNvbihqc29uKVxuICAgIGlmIChjb25zdHJ1Y3Rvci5pc1NRTGl0ZSgpKSB7XG4gICAgICAvLyBTUUxpdGUgZG9lcyBub3Qgc3VwcG9ydCBib29sZWFuIG5hdGl2ZWx5IGFuZCBuZWVkcyBjb252ZXJzaW9uLi4uXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25zdHJ1Y3Rvci5ib29sZWFuQXR0cmlidXRlcykge1xuICAgICAgICBjb25zdCBib29sID0ganNvbltrZXldXG4gICAgICAgIGlmIChib29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBqc29uW2tleV0gPSAhIWJvb2xcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBBbHNvIHJ1biB0aHJvdWdoIG5vcm1hbCAkcGFyc2VKc29uKCksIGZvciBoYW5kbGluZyBvZiBgRGF0ZWAgYW5kXG4gICAgLy8gYEFzc2V0RmlsZWAuXG4gICAgcmV0dXJuIHRoaXMuJHBhcnNlSnNvbihqc29uKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gICRwYXJzZUpzb24oanNvbikge1xuICAgIGNvbnN0IHsgY29uc3RydWN0b3IgfSA9IHRoaXNcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25zdHJ1Y3Rvci5kYXRlQXR0cmlidXRlcykge1xuICAgICAgY29uc3QgZGF0ZSA9IGpzb25ba2V5XVxuICAgICAgaWYgKGRhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBqc29uW2tleV0gPSBpc1N0cmluZyhkYXRlKSA/IG5ldyBEYXRlKGRhdGUpIDogZGF0ZVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBDb252ZXJ0IHBsYWluIGFzc2V0IGZpbGVzIG9iamVjdHMgdG8gQXNzZXRGaWxlIGluc3RhbmNlcyB3aXRoIHJlZmVyZW5jZXNcbiAgICAvLyB0byB0aGUgbGlua2VkIHN0b3JhZ2UuXG4gICAgY29uc3QgeyBhc3NldHMgfSA9IGNvbnN0cnVjdG9yLmRlZmluaXRpb25cbiAgICBpZiAoYXNzZXRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIGluIGFzc2V0cykge1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gY29uc3RydWN0b3IuYXBwLmdldFN0b3JhZ2UoYXNzZXRzW2RhdGFQYXRoXS5zdG9yYWdlKVxuICAgICAgICBjb25zdCBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKGpzb24sIGRhdGFQYXRoLCAoKSA9PiBudWxsKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRUb0Fzc2V0RmlsZXMgPSBkYXRhID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGNvbnZlcnRUb0Fzc2V0RmlsZXMpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RvcmFnZS5jb252ZXJ0QXNzZXRGaWxlKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udmVydFRvQXNzZXRGaWxlcyhkYXRhKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBqc29uXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgJGZvcm1hdEpzb24oanNvbikge1xuICAgIGNvbnN0IHsgY29uc3RydWN0b3IgfSA9IHRoaXNcbiAgICAvLyBDYWxjdWxhdGUgYW5kIHNldCB0aGUgY29tcHV0ZWQgcHJvcGVydGllcy5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25zdHJ1Y3Rvci5jb21wdXRlZEF0dHJpYnV0ZXMpIHtcbiAgICAgIC8vIFBlcmhhcHMgdGhlIGNvbXB1dGVkIHByb3BlcnR5IGlzIHByb2R1Y2VkIGluIHRoZSBTUUwgc3RhdGVtZW50LFxuICAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGFueW1vcmUgaGVyZS5cbiAgICAgIGlmICghKGtleSBpbiBqc29uKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XVxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGpzb25ba2V5XSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIGhpZGRlbiBhdHRyaWJ1dGVzLlxuICAgIGZvciAoY29uc3Qga2V5IG9mIGNvbnN0cnVjdG9yLmhpZGRlbkF0dHJpYnV0ZXMpIHtcbiAgICAgIGRlbGV0ZSBqc29uW2tleV1cbiAgICB9XG4gICAgcmV0dXJuIGpzb25cbiAgfVxuXG4gIC8vIEdyYXBoIGhhbmRsaW5nXG5cbiAgJGZpbHRlckdyYXBoKG1vZGVsR3JhcGgsIGV4cHIpIHtcbiAgICByZXR1cm4gZmlsdGVyR3JhcGgodGhpcy5jb25zdHJ1Y3RvciwgbW9kZWxHcmFwaCwgZXhwcilcbiAgfVxuXG4gIGFzeW5jICRwb3B1bGF0ZUdyYXBoKG1vZGVsR3JhcGgsIGV4cHIsIHRyeCkge1xuICAgIHJldHVybiBwb3B1bGF0ZUdyYXBoKHRoaXMuY29uc3RydWN0b3IsIG1vZGVsR3JhcGgsIGV4cHIsIHRyeClcbiAgfVxuXG4gIHN0YXRpYyBmaWx0ZXJHcmFwaChtb2RlbEdyYXBoLCBleHByKSB7XG4gICAgcmV0dXJuIGZpbHRlckdyYXBoKHRoaXMsIG1vZGVsR3JhcGgsIGV4cHIpXG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcG9wdWxhdGVHcmFwaChtb2RlbEdyYXBoLCBleHByLCB0cngpIHtcbiAgICByZXR1cm4gcG9wdWxhdGVHcmFwaCh0aGlzLCBtb2RlbEdyYXBoLCBleHByLCB0cngpXG4gIH1cblxuICBzdGF0aWMgZ2V0UHJvcGVydHlPclJlbGF0aW9uQXREYXRhUGF0aChkYXRhUGF0aCkge1xuICAgIC8vIEZpbmRzIHRoZSBwcm9wZXJ0eSBvciByZWxhdGlvbiBhdCB0aGUgZ2l2ZW4gdGhlIGRhdGFQYXRoIG9mIHRoZSBtb2RlbCBieVxuICAgIC8vIHBhcnNpbmcgdGhlIGRhdGFQYXRoIGFuZCBtYXRjaGluZyBpdCB0byBpdHMgcmVsYXRpb25zIGFuZCBwcm9wZXJ0aWVzLlxuICAgIGNvbnN0IHBhcnNlZERhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgaW5kZXggPSAwXG5cbiAgICBjb25zdCBnZXRSZXN1bHQgPSAocHJvcGVydHkgPSBudWxsLCByZWxhdGlvbiA9IG51bGwpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gcHJvcGVydHkgfHwgcmVsYXRpb25cbiAgICAgIGNvbnN0IG5hbWUgPSBwYXJzZWREYXRhUGF0aFtpbmRleF1cbiAgICAgIGNvbnN0IG5leHQgPSBpbmRleCArIDFcbiAgICAgIGNvbnN0IGRhdGFQYXRoID0gZm91bmRcbiAgICAgICAgPyBub3JtYWxpemVEYXRhUGF0aChwYXJzZWREYXRhUGF0aC5zbGljZSgwLCBuZXh0KSlcbiAgICAgICAgOiBudWxsXG4gICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGZvdW5kXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VkRGF0YVBhdGguc2xpY2UobmV4dCkpXG4gICAgICAgIDogbnVsbFxuICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IGZvdW5kXG4gICAgICAgID8gcGFyc2VkRGF0YVBhdGguc2xpY2UoMCwgcmVsYXRpb24gPyBuZXh0IDogaW5kZXgpLmpvaW4oJy4nKSArXG4gICAgICAgICAgKHByb3BlcnR5ID8gYCgjJHtuYW1lfSlgIDogJycpXG4gICAgICAgIDogbnVsbFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvcGVydHksXG4gICAgICAgIHJlbGF0aW9uLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgIGluZGV4XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgW2ZpcnN0VG9rZW4sIC4uLm90aGVyVG9rZW5zXSA9IHBhcnNlZERhdGFQYXRoXG4gICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmRlZmluaXRpb24ucHJvcGVydGllc1tmaXJzdFRva2VuXVxuICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIGdldFJlc3VsdChwcm9wZXJ0eSlcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHJlbGF0aW9uID0gdGhpcy5nZXRSZWxhdGlvbnMoKVtmaXJzdFRva2VuXVxuICAgICAgaWYgKHJlbGF0aW9uKSB7XG4gICAgICAgIGxldCB7IHJlbGF0ZWRNb2RlbENsYXNzIH0gPSByZWxhdGlvblxuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIG90aGVyVG9rZW5zKSB7XG4gICAgICAgICAgaW5kZXgrK1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gcmVsYXRlZE1vZGVsQ2xhc3MuZGVmaW5pdGlvbi5wcm9wZXJ0aWVzW3Rva2VuXVxuICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldFJlc3VsdChwcm9wZXJ0eSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09PSAnKicpIHtcbiAgICAgICAgICAgIGlmIChyZWxhdGlvbi5pc09uZVRvT25lKCkpIHtcbiAgICAgICAgICAgICAgLy8gRG8gbm90IHN1cHBvcnQgd2lsZGNhcmRzIG9uIG9uZS10by1vbmUgcmVsYXRpb25zOlxuICAgICAgICAgICAgICByZXR1cm4gZ2V0UmVzdWx0KClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZvdW5kIGEgcmVsYXRpb24/IEtlZXAgaXRlcmF0aW5nLlxuICAgICAgICAgICAgcmVsYXRpb24gPSByZWxhdGVkTW9kZWxDbGFzcy5nZXRSZWxhdGlvbnMoKVt0b2tlbl1cbiAgICAgICAgICAgIGlmIChyZWxhdGlvbikge1xuICAgICAgICAgICAgICByZWxhdGVkTW9kZWxDbGFzcyA9IHJlbGF0aW9uLnJlbGF0ZWRNb2RlbENsYXNzXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0UmVzdWx0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbGF0aW9uKSB7XG4gICAgICAgICAgLy8gU3RpbGwgaGVyZT8gRm91bmQgYSByZWxhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhLXBhdGguXG4gICAgICAgICAgcmV0dXJuIGdldFJlc3VsdChudWxsLCByZWxhdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2V0UmVzdWx0KClcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBzdGF0aWMgcmVsYXRlZFF1ZXJ5KHJlbGF0aW9uTmFtZSwgdHJ4KSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1ZpbmNpdC9vYmplY3Rpb24uanMvaXNzdWVzLzE3MjBcbiAgICByZXR1cm4gc3VwZXIucmVsYXRlZFF1ZXJ5KHJlbGF0aW9uTmFtZSwgdHJ4KS5hbGlhcyhyZWxhdGlvbk5hbWUpXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgc3RhdGljIG1vZGlmaWVyTm90Rm91bmQocXVlcnksIG1vZGlmaWVyKSB7XG4gICAgaWYgKGlzU3RyaW5nKG1vZGlmaWVyKSkge1xuICAgICAgaWYgKHF1ZXJ5Lm1vZGVsQ2xhc3MoKS5oYXNTY29wZShtb2RpZmllcikpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmFwcGx5U2NvcGUobW9kaWZpZXIpXG4gICAgICB9XG4gICAgICAvLyBOb3cgY2hlY2sgcG9zc2libGUgc2NvcGUgcHJlZml4ZXMgYW5kIGhhbmRsZSB0aGVtOlxuICAgICAgc3dpdGNoIChtb2RpZmllclswXSkge1xuICAgICAgY2FzZSAnXic6IC8vIEVhZ2VyLWFwcGxpZWQgc2NvcGU6XG4gICAgICAgIC8vIEFsd2F5cyBhcHBseSBlYWdlci1zY29wZXMsIGV2ZW4gaWYgdGhlIG1vZGVsIGl0c2VsZiBkb2Vzbid0IGtub3cgaXQuXG4gICAgICAgIC8vIFRoZSBzY29wZSBtYXkgc3RpbGwgYmUga25vd24gaW4gZWFnZXItbG9hZGVkIHJlbGF0aW9ucy5cbiAgICAgICAgLy8gTm90ZTogYGFwcGx5U2NvcGUoKWAgd2lsbCBoYW5kbGUgdGhlICdeJyBzaWduLlxuICAgICAgICByZXR1cm4gcXVlcnkuYXBwbHlTY29wZShtb2RpZmllcilcbiAgICAgIGNhc2UgJy0nOiAvLyBJZ25vcmUgc2NvcGU6XG4gICAgICAgIHJldHVybiBxdWVyeS5pZ25vcmVTY29wZShtb2RpZmllci5zbGljZSgxKSlcbiAgICAgIGNhc2UgJyMnOiAvLyBTZWxlY3QgY29sdW1uOlxuICAgICAgICByZXR1cm4gcXVlcnkuc2VsZWN0KG1vZGlmaWVyLnNsaWNlKDEpKVxuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci5tb2RpZmllck5vdEZvdW5kKHF1ZXJ5LCBtb2RpZmllcilcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBzdGF0aWMgY3JlYXRlTm90Rm91bmRFcnJvcihjdHgsIGVycm9yKSB7XG4gICAgcmV0dXJuIG5ldyBOb3RGb3VuZEVycm9yKFxuICAgICAgZXJyb3IgfHwgKFxuICAgICAgICBjdHguYnlJZFxuICAgICAgICAgID8gYCcke3RoaXMubmFtZX0nIG1vZGVsIHdpdGggaWQgJHtjdHguYnlJZH0gbm90IGZvdW5kYFxuICAgICAgICAgIDogYCcke3RoaXMubmFtZX0nIG1vZGVsIG5vdCBmb3VuZGBcbiAgICAgIClcbiAgICApXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgc3RhdGljIGNyZWF0ZVZhbGlkYXRvcigpIHtcbiAgICAvLyBVc2UgYSBzaGFyZWQgdmFsaWRhdG9yIHBlciBhcHAsIHNvIG1vZGVsIHNjaGVtYSBjYW4gcmVmZXJlbmNlIGVhY2ggb3RoZXIuXG4gICAgLy8gTk9URTogVGhlIERpdG8gVmFsaWRhdG9yIGNsYXNzIGNyZWF0ZXMgYW5kIG1hbmFnZXMgdGhpcyBzaGFyZWQgT2JqZWN0aW9uXG4gICAgLy8gVmFsaWRhdG9yIGluc3RhbmNlIGZvciB1cywgd2UganVzdCBuZWVkIHRvIHJldHVybiBpdCBoZXJlOlxuICAgIHJldHVybiB0aGlzLmFwcC52YWxpZGF0b3JcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBzdGF0aWMgY3JlYXRlVmFsaWRhdGlvbkVycm9yKHsgdHlwZSwgbWVzc2FnZSwgZXJyb3JzLCBvcHRpb25zLCBqc29uIH0pIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdNb2RlbFZhbGlkYXRpb24nOlxuICAgICAgcmV0dXJuIHRoaXMuYXBwLmNyZWF0ZVZhbGlkYXRpb25FcnJvcih7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgbWVzc2FnZSB8fCBgVGhlIHByb3ZpZGVkIGRhdGEgZm9yIHRoZSAke3RoaXMubmFtZX0gbW9kZWwgaXMgbm90IHZhbGlkYCxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBqc29uXG4gICAgICB9KVxuICAgIGNhc2UgJ1JlbGF0aW9uRXhwcmVzc2lvbic6XG4gICAgY2FzZSAnVW5hbGxvd2VkUmVsYXRpb24nOlxuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbkVycm9yKHsgdHlwZSwgbWVzc2FnZSwgZXJyb3JzIH0pXG4gICAgY2FzZSAnSW52YWxpZEdyYXBoJzpcbiAgICAgIHJldHVybiBuZXcgR3JhcGhFcnJvcih7IHR5cGUsIG1lc3NhZ2UsIGVycm9ycyB9KVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlRXJyb3IoeyB0eXBlLCBtZXNzYWdlLCBlcnJvcnMgfSlcbiAgICB9XG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgc3RhdGljIFF1ZXJ5QnVpbGRlciA9IFF1ZXJ5QnVpbGRlclxuXG4gIC8vIGh0dHBzOi8vdmluY2l0LmdpdGh1Yi5pby9vYmplY3Rpb24uanMvYXBpL21vZGVsL3N0YXRpYy1wcm9wZXJ0aWVzLmh0bWwjc3RhdGljLWNsb25lb2JqZWN0YXR0cmlidXRlc1xuICBzdGF0aWMgY2xvbmVPYmplY3RBdHRyaWJ1dGVzID0gZmFsc2VcblxuICAvLyBPbmx5IHBpY2sgcHJvcGVydGllcyBmb3IgZGF0YWJhc2UgSlNPTiB0aGF0IGlzIG1lbnRpb25lZCBpbiB0aGUgc2NoZW1hLlxuICBzdGF0aWMgcGlja0pzb25TY2hlbWFQcm9wZXJ0aWVzID0gdHJ1ZVxuXG4gIC8vIFNlZSBodHRwczovL2dpdHRlci5pbS9WaW5jaXQvb2JqZWN0aW9uLmpzP2F0PTVhODFmODU5Y2U2OGMzYmM3NDc5ZDY1YVxuICBzdGF0aWMgdXNlTGltaXRJbkZpcnN0ID0gdHJ1ZVxuXG4gIHN0YXRpYyBnZXQgZGVmaW5pdGlvbigpIHtcbiAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBkZWZpbml0aW9uIG9iamVjdCBmb3IgdGhpcyBjbGFzcyBhbmQgcmV0dXJuIGl0XG4gICAgcmV0dXJuIGdldE1ldGEodGhpcywgJ2RlZmluaXRpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0ge31cblxuICAgICAgY29uc3Qgc2V0RGVmaW5pdGlvbiA9IChuYW1lLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVmaW5pdGlvbiwgbmFtZSwge1xuICAgICAgICAgIC4uLnByb3BlcnR5LFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0RGVmaW5pdGlvbiA9IG5hbWUgPT4ge1xuICAgICAgICBsZXQgbW9kZWxDbGFzcyA9IHRoaXNcbiAgICAgICAgLy8gQ29sbGVjdCBhbmNlc3RvciB2YWx1ZXMgZm9yIHByb3BlciBpbmhlcml0YW5jZS5cbiAgICAgICAgLy8gTk9URTogdmFsdWVzIGFyZSBjb2xsZWN0ZWQgaW4gc2VxdWVuY2Ugb2YgaW5oZXJpdGFuY2UsIGZyb20gc3ViLWNsYXNzXG4gICAgICAgIC8vIHRvIHN1cGVyLWNsYXNzLiBUbyBnbyBmcm9tIHN1cGVyLWNsYXNzIHRvIHN1Yi1jbGFzcyB3aGVuIG1lcmdpbmcsXG4gICAgICAgIC8vIGBtZXJnZVJldmVyc2VkKClgIGlzIHVzZWQgdG8gcHJldmVudCB3cm9uZyBvdmVycmlkZXMuXG4gICAgICAgIC8vIGBtZXJnZUFzUmV2ZXJzZWRBcnJheXMoKWAgY2FuIGJlIHVzZWQgdG8ga2VlcCBhcnJheXMgb2YgaW5oZXJpdGVkXG4gICAgICAgIC8vIHZhbHVlcyBwZXIga2V5LCBzZWUgYGRlZmluaXRpb25zLmhvb2tzYC5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gW11cbiAgICAgICAgd2hpbGUgKG1vZGVsQ2xhc3MgIT09IG9iamVjdGlvbi5Nb2RlbCkge1xuICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgbW9kZWwgY2xhc3NlcyB0aGF0IGFjdHVhbGx5IGRlZmluZSBgbmFtZWAgcHJvcGVydHkuXG4gICAgICAgICAgaWYgKG5hbWUgaW4gbW9kZWxDbGFzcykge1xuICAgICAgICAgICAgLy8gVXNlIHJlZmxlY3Rpb24gdGhyb3VnaCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSB0byBiZSBhYmxlIHRvXG4gICAgICAgICAgICAvLyBjYWxsIHRoZSBnZXR0ZXIgb24gYHRoaXNgIHJhdGhlciB0aGFuIG9uIGBtb2RlbENsYXNzYC4gVGhpcyBjYW5cbiAgICAgICAgICAgIC8vIGJlIHVzZWQgdG8gcHJvdmlkZSBhYnN0cmFjdCBiYXNlLWNsYXNzZXMgYW5kIGhhdmUgdGhlbSBjcmVhdGVcbiAgICAgICAgICAgIC8vIHRoZWlyIHJlbGF0aW9ucyBmb3IgYHRoaXNgIGluc2lkZSBgZ2V0IHJlbGF0aW9ucygpYCBhY2Nlc3NvcnMuXG4gICAgICAgICAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtb2RlbENsYXNzLCBuYW1lKVxuICAgICAgICAgICAgaWYgKGRlc2MpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkZXNjLmdldD8uY2FsbCh0aGlzKSB8fCBkZXNjLnZhbHVlXG4gICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG1vZGVsQ2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kZWxDbGFzcylcbiAgICAgICAgfVxuICAgICAgICAvLyBUbyBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHdpdGggaW50ZXJkZXBlbmRlbnQgY2FsbHMgcmVsYXRlZCB0b1xuICAgICAgICAvLyBwcm9wZXJ0aWVzLCBvdmVycmlkZSBkZWZpbml0aW9uIGJlZm9yZSBjYWxsaW5nIGhhbmRsZXIoKTpcbiAgICAgICAgc2V0RGVmaW5pdGlvbihuYW1lLCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiB7fVxuICAgICAgICB9KVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1lcmdlZCA9IGRlZmluaXRpb25zW25hbWVdLmNhbGwodGhpcywgdmFsdWVzKVxuICAgICAgICAgIC8vIE9uY2UgY2FsY3VsYXRlZCwgb3ZlcnJpZGUgZ2V0dGVyIHdpdGggZmluYWwgbWVyZ2VkIHZhbHVlLlxuICAgICAgICAgIHNldERlZmluaXRpb24obmFtZSwge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiBtZXJnZWRcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVybiBtZXJnZWRcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTW9kZWxFcnJvcih0aGlzLCBlcnJvci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vIGRlZmluaXRpb24gb2JqZWN0IHdhcyBkZWZpbmVkIHlldCwgY3JlYXRlIG9uZSB3aXRoIGFjY2Vzc29ycyBmb3JcbiAgICAgIC8vIGVhY2ggZW50cnkgaW4gYGRlZmluaXRpb25zYC4gRWFjaCBvZiB0aGVzZSBnZXR0ZXJzIHdoZW4gY2FsbGVkIG1lcmdlXG4gICAgICAvLyBkZWZpbml0aW9ucyB1cCB0aGUgaW5oZXJpdGFuY2UgY2hhaW4gYW5kIHN0b3JlIHRoZSBtZXJnZWQgcmVzdWx0IGluXG4gICAgICAvLyBgbW9kZWxDbGFzcy5kZWZpbml0aW9uW25hbWVdYCBmb3IgZnVydGhlciBjYWNoaW5nLlxuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRlZmluaXRpb25zKSB7XG4gICAgICAgIHNldERlZmluaXRpb24obmFtZSwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQ6ICgpID0+IGdldERlZmluaXRpb24obmFtZSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgfSlcbiAgfVxuXG4gIC8vIEhvb2tzXG5cbiAgJGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5lbWl0KGV2ZW50LCB0aGlzLCAuLi5hcmdzKVxuICB9XG5cbiAgc3RhdGljIGJlZm9yZUZpbmQoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYmVmb3JlOmZpbmQnLCBhcmdzKVxuICB9XG5cbiAgc3RhdGljIGFmdGVyRmluZChhcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VtaXRTdGF0aWNIb29rKCdhZnRlcjpmaW5kJywgYXJncylcbiAgfVxuXG4gIHN0YXRpYyBiZWZvcmVJbnNlcnQoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYmVmb3JlOmluc2VydCcsIGFyZ3MpXG4gIH1cblxuICBzdGF0aWMgYWZ0ZXJJbnNlcnQoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYWZ0ZXI6aW5zZXJ0JywgYXJncylcbiAgfVxuXG4gIHN0YXRpYyBiZWZvcmVVcGRhdGUoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYmVmb3JlOnVwZGF0ZScsIGFyZ3MpXG4gIH1cblxuICBzdGF0aWMgYWZ0ZXJVcGRhdGUoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYWZ0ZXI6dXBkYXRlJywgYXJncylcbiAgfVxuXG4gIHN0YXRpYyBiZWZvcmVEZWxldGUoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYmVmb3JlOmRlbGV0ZScsIGFyZ3MpXG4gIH1cblxuICBzdGF0aWMgYWZ0ZXJEZWxldGUoYXJncykge1xuICAgIHJldHVybiB0aGlzLl9lbWl0U3RhdGljSG9vaygnYWZ0ZXI6ZGVsZXRlJywgYXJncylcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBfZW1pdFN0YXRpY0hvb2soZXZlbnQsIG9yaWdpbmFsQXJncykge1xuICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzKGV2ZW50KVxuICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gU3RhdGljIGhvb2tzIGFyZSBlbWl0dGVkIGluIHNlcXVlbmNlIChidXQgZWFjaCBldmVudCBjYW4gYmUgYXN5bmMpLCBhbmRcbiAgICAgIC8vIHJlc3VsdHMgYXJlIHBhc3NlZCB0aHJvdWdoIGFuZCByZXR1cm5lZCBpbiB0aGUgZW5kLlxuICAgICAgbGV0IHsgcmVzdWx0IH0gPSBvcmlnaW5hbEFyZ3NcbiAgICAgIC8vIFRoZSByZXN1bHQgb2YgYW55IGV2ZW50IGhhbmRsZXIgd2lsbCBvdmVycmlkZSBgYXJncy5yZXN1bHRgIGluIHRoZSBjYWxsXG4gICAgICAvLyBvZiB0aGUgbmV4dCBoYW5kbGVyIGluIHNlcXVlbmNlLiBBcyBgU3RhdGljSG9va0FyZ3VtZW50c2AgaW4gT2JqZWN0aW9uXG4gICAgICAvLyBpcyBwcml2YXRlLCB1c2UgYSBKUyBpbmhlcml0YW5jZSB0cmljayBoZXJlIHRvIG92ZXJyaWRlIGBhcmdzLnJlc3VsdGA6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbEFyZ3MsIHtcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgIHZhbHVlOiBldmVudFxuICAgICAgICB9LFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgbGlzdGVuZXIuY2FsbCh0aGlzLCBhcmdzKVxuICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVW5mb3J0dW5hdGVseSBgcmVzdWx0YCBpcyBhbHdheXMgYW4gYXJyYXksIGV2ZW4gd2hlbiB0aGUgYWN0dWFsIHJlc3VsdFxuICAgICAgLy8gaXMgYSBtb2RlbCBvYmplY3QuIEF2b2lkIHJldHVybmluZyBpdCB3aGVuIGl0J3Mgbm90IGFjdHVhbGx5IGNoYW5nZWQuXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9WaW5jaXQvb2JqZWN0aW9uLmpzL2lzc3Vlcy8xODQyXG4gICAgICBpZiAocmVzdWx0ICE9PSBvcmlnaW5hbEFyZ3MucmVzdWx0KSB7XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBc3NldHMgaGFuZGxpbmdcblxuICBzdGF0aWMgX3NldHVwQXNzZXRzRXZlbnRzKGFzc2V0cykge1xuICAgIGNvbnN0IGFzc2V0RGF0YVBhdGhzID0gT2JqZWN0LmtleXMoYXNzZXRzKVxuXG4gICAgdGhpcy5vbihbXG4gICAgICAnYmVmb3JlOmluc2VydCcsXG4gICAgICAnYmVmb3JlOnVwZGF0ZScsXG4gICAgICAnYmVmb3JlOmRlbGV0ZSdcbiAgICBdLCBhc3luYyAoeyB0eXBlLCB0cmFuc2FjdGlvbiwgaW5wdXRJdGVtcywgYXNGaW5kUXVlcnkgfSkgPT4ge1xuICAgICAgY29uc3QgYWZ0ZXJJdGVtcyA9IHR5cGUgPT09ICdiZWZvcmU6ZGVsZXRlJ1xuICAgICAgICA/IFtdXG4gICAgICAgIDogaW5wdXRJdGVtc1xuICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBhc3NldCBkYXRhIHBhdGhzIHdoZXJlIGFjdHVhbGx5IHByZXNlbnQgaW4gdGhlXG4gICAgICAvLyBzdWJtaXR0ZWQgZGF0YSwgYW5kIG9ubHkgY29tcGFyZSB0aGVzZS4gQnV0IHdoZW4gZGVsZXRpbmcsIHVzZSBhbGwuXG4gICAgICBjb25zdCBkYXRhUGF0aHMgPSBhZnRlckl0ZW1zLmxlbmd0aCA+IDBcbiAgICAgICAgPyBhc3NldERhdGFQYXRocy5maWx0ZXIoXG4gICAgICAgICAgcGF0aCA9PiBnZXRWYWx1ZUF0QXNzZXREYXRhUGF0aChhZnRlckl0ZW1zWzBdLCBwYXRoKSAhPT0gdW5kZWZpbmVkXG4gICAgICAgIClcbiAgICAgICAgOiBhc3NldERhdGFQYXRoc1xuXG4gICAgICAvLyBgZGF0YVBhdGhzYCB3aWxsIGJlIGVtcHR5IGluIHRoZSBjYXNlIG9mIGFuIHVwZGF0ZS9pbnNlcnQgdGhhdCBkbyBub3RcbiAgICAgIC8vIGFmZmVjdCB0aGUgYXNzZXRzLlxuICAgICAgaWYgKGRhdGFQYXRocy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIExvYWQgdGhlIG1vZGVsJ3MgYXNzZXQgZmlsZXMgaW4gdGhlaXIgY3VycmVudCBzdGF0ZSBiZWZvcmUgdGhlIHF1ZXJ5IGlzXG4gICAgICAvLyBleGVjdXRlZC5cbiAgICAgIGNvbnN0IGJlZm9yZUl0ZW1zID0gdHlwZSA9PT0gJ2JlZm9yZTppbnNlcnQnXG4gICAgICAgID8gW11cbiAgICAgICAgOiBhd2FpdCBsb2FkQXNzZXREYXRhUGF0aHMoYXNGaW5kUXVlcnkoKSwgZGF0YVBhdGhzKVxuICAgICAgY29uc3QgYmVmb3JlRmlsZXNQZXJEYXRhUGF0aCA9IGdldEZpbGVzUGVyQXNzZXREYXRhUGF0aChcbiAgICAgICAgYmVmb3JlSXRlbXMsXG4gICAgICAgIGRhdGFQYXRoc1xuICAgICAgKVxuICAgICAgY29uc3QgYWZ0ZXJGaWxlc1BlckRhdGFQYXRoID0gZ2V0RmlsZXNQZXJBc3NldERhdGFQYXRoKFxuICAgICAgICBhZnRlckl0ZW1zLFxuICAgICAgICBkYXRhUGF0aHNcbiAgICAgIClcblxuICAgICAgY29uc3QgaW1wb3J0ZWRGaWxlcyA9IFtdXG4gICAgICBjb25zdCBtb2RpZmllZEZpbGVzID0gW11cblxuICAgICAgaWYgKHRyYW5zYWN0aW9uLnJvbGxiYWNrKSB7XG4gICAgICAgIC8vIFByZXZlbnQgd3JvbmcgbWVtb3J5IGxlYWsgZXJyb3IgbWVzc2FnZXMgd2hlbiBpbnN0YWxsaW5nIG1vcmUgdGhhbiAxMFxuICAgICAgICAvLyAncm9sbGJhY2snIGhhbmRsZXJzLCB3aGljaCBjYW4gaGFwcGVuIHdpdGggbW9yZSBjb21wbGV4IHF1ZXJpZXMuXG4gICAgICAgIHRyYW5zYWN0aW9uLnNldE1heExpc3RlbmVycygwKVxuICAgICAgICB0cmFuc2FjdGlvbi5vbigncm9sbGJhY2snLCBhc3luYyBlcnJvciA9PiB7XG4gICAgICAgICAgaWYgKGltcG9ydGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgICBgUmVjZWl2ZWQgJyR7ZXJyb3J9JywgcmVtb3ZpbmcgaW1wb3J0ZWQgZmlsZXMgYWdhaW46ICR7XG4gICAgICAgICAgICAgICAgaW1wb3J0ZWRGaWxlcy5tYXAoZmlsZSA9PiBgJyR7ZmlsZS5uYW1lfSdgKVxuICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGltcG9ydGVkRmlsZXMubWFwKFxuICAgICAgICAgICAgICAgIGZpbGUgPT4gZmlsZS5zdG9yYWdlLnJlbW92ZUZpbGUoZmlsZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobW9kaWZpZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBgbW9kaWZpZWRGaWxlc2Agc2hvdWxkIGJlIHJlc3RvcmVkIGFzIHdlbGwsIGJ1dCB0aGF0J3MgZmFyXG4gICAgICAgICAgICAvLyBmcm9tIHRyaXZpYWwgc2luY2Ugbm8gYmFja3VwIGlzIGtlcHQgaW4gYGhhbmRsZU1vZGlmaWVkQXNzZXRzYFxuICAgICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgICBgVW5hYmxlIHRvIHJlc3RvcmUgdGhlc2UgYWxyZWFkeSBtb2RpZmllZCBmaWxlczogJHtcbiAgICAgICAgICAgICAgICBtb2RpZmllZEZpbGVzLm1hcChmaWxlID0+IGAnJHtmaWxlLm5hbWV9J2ApXG4gICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIG9mIGRhdGFQYXRocykge1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5hcHAuZ2V0U3RvcmFnZShhc3NldHNbZGF0YVBhdGhdLnN0b3JhZ2UpXG4gICAgICAgIGNvbnN0IGJlZm9yZUZpbGVzID0gYmVmb3JlRmlsZXNQZXJEYXRhUGF0aFtkYXRhUGF0aF0gfHwgW11cbiAgICAgICAgY29uc3QgYWZ0ZXJGaWxlcyA9IGFmdGVyRmlsZXNQZXJEYXRhUGF0aFtkYXRhUGF0aF0gfHwgW11cbiAgICAgICAgY29uc3QgYmVmb3JlQnlLZXkgPSBtYXBGaWxlc0J5S2V5KGJlZm9yZUZpbGVzKVxuICAgICAgICBjb25zdCBhZnRlckJ5S2V5ID0gbWFwRmlsZXNCeUtleShhZnRlckZpbGVzKVxuICAgICAgICBjb25zdCByZW1vdmVkRmlsZXMgPSBiZWZvcmVGaWxlcy5maWx0ZXIoZmlsZSA9PiAhYWZ0ZXJCeUtleVtmaWxlLmtleV0pXG4gICAgICAgIGNvbnN0IGFkZGVkRmlsZXMgPSBhZnRlckZpbGVzLmZpbHRlcihmaWxlID0+ICFiZWZvcmVCeUtleVtmaWxlLmtleV0pXG4gICAgICAgIC8vIEFsc28gaGFuZGxlIG1vZGlmaWVkIGZpbGVzLCB3aGljaCBhcmUgZmlsZXMgd2hlcmUgdGhlIGRhdGEgcHJvcGVydHlcbiAgICAgICAgLy8gaXMgY2hhbmdlZCBiZWZvcmUgdXBkYXRlIC8gcGF0Y2gsIG1lYW50aW5nIHRoZSBmaWxlIGlzIGNoYW5nZWQuXG4gICAgICAgIC8vIE5PVEU6IFRoaXMgd2lsbCBjaGFuZ2UgdGhlIGNvbnRlbnQgZm9yIGFsbCB0aGUgcmVmZXJlbmNlcyB0byBpdCxcbiAgICAgICAgLy8gYW5kIHRodXMgc2hvdWxkIG9ubHkgcmVhbGx5IGJlIHVzZWQgd2hlbiB0aGVyZSdzIG9ubHkgb25lIHJlZmVyZW5jZS5cbiAgICAgICAgY29uc3QgbW9kaWZpZWRGaWxlcyA9IGFmdGVyRmlsZXMuZmlsdGVyKFxuICAgICAgICAgIGZpbGUgPT4gZmlsZS5kYXRhICYmIGJlZm9yZUJ5S2V5W2ZpbGUua2V5XVxuICAgICAgICApXG4gICAgICAgIGltcG9ydGVkRmlsZXMucHVzaChcbiAgICAgICAgICAuLi5hd2FpdCB0aGlzLmFwcC5oYW5kbGVBZGRkZWRBbmRSZW1vdmVkQXNzZXRzKFxuICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgIGFkZGVkRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXMsXG4gICAgICAgICAgICB0cmFuc2FjdGlvblxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICBtb2RpZmllZEZpbGVzLnB1c2goXG4gICAgICAgICAgLi4uYXdhaXQgdGhpcy5hcHAuaGFuZGxlTW9kaWZpZWRBc3NldHMoXG4gICAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgICAgbW9kaWZpZWRGaWxlcyxcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5FdmVudEVtaXR0ZXIubWl4aW4oTW9kZWwpXG5LbmV4SGVscGVyLm1peGluKE1vZGVsKVxuLy8gRXhwb3NlIGEgc2VsZWN0aW9uIG9mIFF1ZXJ5QnVpbGRlciBtZXRob2RzIGFzIHN0YXRpYyBtZXRob2RzIG9uIG1vZGVsIGNsYXNzZXNcblF1ZXJ5QnVpbGRlci5taXhpbihNb2RlbClcblxuY29uc3QgbWV0YU1hcCA9IG5ldyBXZWFrTWFwKClcblxuZnVuY3Rpb24gZ2V0TWV0YShtb2RlbENsYXNzLCBrZXksIHZhbHVlKSB7XG4gIGxldCBtZXRhID0gbWV0YU1hcC5nZXQobW9kZWxDbGFzcylcbiAgaWYgKCFtZXRhKSB7XG4gICAgbWV0YU1hcC5zZXQobW9kZWxDbGFzcywgbWV0YSA9IHt9KVxuICB9XG4gIGlmICghKGtleSBpbiBtZXRhKSkge1xuICAgIG1ldGFba2V5XSA9IGlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlXG4gIH1cbiAgcmV0dXJuIG1ldGFba2V5XVxufVxuXG5mdW5jdGlvbiBsb2FkQXNzZXREYXRhUGF0aHMocXVlcnksIGRhdGFQYXRocykge1xuICByZXR1cm4gZGF0YVBhdGhzLnJlZHVjZShcbiAgICAocXVlcnksIGRhdGFQYXRoKSA9PiBxdWVyeS5sb2FkRGF0YVBhdGgoZGF0YVBhdGgpLFxuICAgIHF1ZXJ5XG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWVBdEFzc2V0RGF0YVBhdGgoaXRlbSwgcGF0aCkge1xuICByZXR1cm4gZ2V0VmFsdWVBdERhdGFQYXRoKGl0ZW0sIHBhdGgsICgpID0+IHVuZGVmaW5lZClcbn1cblxuZnVuY3Rpb24gZ2V0RmlsZXNQZXJBc3NldERhdGFQYXRoKGl0ZW1zLCBkYXRhUGF0aHMpIHtcbiAgcmV0dXJuIGRhdGFQYXRocy5yZWR1Y2UoXG4gICAgKGFsbEZpbGVzLCBkYXRhUGF0aCkgPT4ge1xuICAgICAgYWxsRmlsZXNbZGF0YVBhdGhdID0gYXNBcnJheShpdGVtcykucmVkdWNlKFxuICAgICAgICAoZmlsZXMsIGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXNBcnJheShnZXRWYWx1ZUF0QXNzZXREYXRhUGF0aChpdGVtLCBkYXRhUGF0aCkpXG4gICAgICAgICAgLy8gVXNlIGZsYXR0ZW4oKSBhcyBkYXRhUGF0aCBtYXkgY29udGFpbiB3aWxkY2FyZHMsIHJlc3VsdGluZyBpblxuICAgICAgICAgIC8vIG5lc3RlZCBmaWxlcyBhcnJheXMuXG4gICAgICAgICAgZmlsZXMucHVzaCguLi5mbGF0dGVuKGRhdGEpLmZpbHRlcihmaWxlID0+ICEhZmlsZSkpXG4gICAgICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgICByZXR1cm4gYWxsRmlsZXNcbiAgICB9LFxuICAgIHt9XG4gIClcbn1cblxuZnVuY3Rpb24gbWFwRmlsZXNCeUtleShmaWxlcykge1xuICByZXR1cm4gZmlsZXMucmVkdWNlKFxuICAgIChtYXAsIGZpbGUpID0+IHtcbiAgICAgIG1hcFtmaWxlLmtleV0gPSBmaWxlXG4gICAgICByZXR1cm4gbWFwXG4gICAgfSxcbiAgICB7fVxuICApXG59XG4iXX0=
|
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = filters;
|
|
5
5
|
|
|
6
|
+
require("core-js/modules/es.error.cause.js");
|
|
7
|
+
|
|
8
|
+
require("core-js/modules/esnext.async-iterator.filter.js");
|
|
9
|
+
|
|
10
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
11
|
+
|
|
12
|
+
require("core-js/modules/esnext.iterator.filter.js");
|
|
13
|
+
|
|
6
14
|
var _utils = require("@ditojs/utils");
|
|
7
15
|
|
|
8
16
|
var _query = require("../../query");
|
|
@@ -90,4 +98,4 @@ function wrapWithValidation(filter, name, app) {
|
|
|
90
98
|
|
|
91
99
|
return filter;
|
|
92
100
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbHMvZGVmaW5pdGlvbnMvZmlsdGVycy5qcyJdLCJuYW1lcyI6WyJmaWx0ZXJzIiwidmFsdWVzIiwibmFtZSIsImRlZmluaXRpb24iLCJPYmplY3QiLCJlbnRyaWVzIiwiZmlsdGVyIiwiY29udmVydE9iamVjdEZpbHRlciIsIkVycm9yIiwid3JhcFdpdGhWYWxpZGF0aW9uIiwiYXBwIiwicHJvcGVydGllcyIsImFkZEZ1bmN0aW9uU2V0dGluZ3MiLCJxdWVyeUZpbHRlciIsIlF1ZXJ5RmlsdGVycyIsImdldCIsImZ1bmMiLCJxdWVyeSIsImFyZ3MiLCJwcm9wZXJ0eSIsIm9yV2hlcmUiLCJwYXJhbWV0ZXJzIiwidmFsaWRhdGUiLCJkYXRhTmFtZSIsInZhbGlkYXRvciIsImNvbXBpbGVQYXJhbWV0ZXJzVmFsaWRhdG9yIiwib2JqZWN0IiwiaW5kZXgiLCJsaXN0IiwiZXJyb3IiLCJjcmVhdGVWYWxpZGF0aW9uRXJyb3IiLCJ0eXBlIiwibWVzc2FnZSIsImVycm9ycyIsInByZWZpeERhdGFQYXRocyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVlLFNBQVNBLE9BQVQsQ0FBaUJDLE1BQWpCLEVBQXlCO0FBQ3RDLFFBQU1ELE9BQU8sR0FBRyxFQUFoQjs7QUFDQSxPQUFLLE1BQU0sQ0FBQ0UsSUFBRCxFQUFPQyxVQUFQLENBQVgsSUFBaUNDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlLDJCQUFjSixNQUFkLENBQWYsQ0FBakMsRUFBd0U7QUFDdEUsVUFBTUssTUFBTSxHQUFHLHVCQUFXSCxVQUFYLElBQ1hBLFVBRFcsR0FFWCxxQkFBU0EsVUFBVCxJQUNFSSxtQkFBbUIsQ0FBQ0osVUFBRCxFQUFhRCxJQUFiLENBRHJCLEdBRUUsSUFKTjs7QUFLQSxRQUFJLENBQUNJLE1BQUwsRUFBYTtBQUNYLFlBQU0sSUFBSUUsS0FBSixDQUNILG1CQUFrQk4sSUFBSywrQkFBOEJDLFVBQVcsR0FEN0QsQ0FB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LEdBQUcsQ0FBQ2MsU0FBSixDQUFjVSxlQUFkLENBQ05MLEtBQUssQ0FBQ0ksTUFEQSxFQUVMLElBQUcvQixJQUFLLEVBRkg7QUFKc0IsU0FBMUIsQ0FBTjtBQVNEOztBQUNELGFBQU9JLE1BQU0sQ0FBQ1csS0FBRCxFQUFRLEdBQUdDLElBQVgsQ0FBYjtBQUNELEtBdkJEO0FBd0JEOztBQUVELFNBQU9aLE1BQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzT2JqZWN0LCBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFF1ZXJ5RmlsdGVycyB9IGZyb20gJ0AvcXVlcnknXG5pbXBvcnQgeyBtZXJnZVJldmVyc2VkIH0gZnJvbSAnQC91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVycyh2YWx1ZXMpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIGZvciAoY29uc3QgW25hbWUsIGRlZmluaXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlUmV2ZXJzZWQodmFsdWVzKSkpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBpc0Z1bmN0aW9uKGRlZmluaXRpb24pXG4gICAgICA/IGRlZmluaXRpb25cbiAgICAgIDogaXNPYmplY3QoZGVmaW5pdGlvbilcbiAgICAgICAgPyBjb252ZXJ0T2JqZWN0RmlsdGVyKGRlZmluaXRpb24sIG5hbWUpXG4gICAgICAgIDogbnVsbFxuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtuYW1lfSc6IFVucmVjb2duaXplZCBkZWZpbml0aW9uOiAke2RlZmluaXRpb259LmBcbiAgICAgIClcbiAgICB9XG4gICAgZmlsdGVyc1tuYW1lXSA9IHdyYXBXaXRoVmFsaWRhdGlvbihmaWx0ZXIsIG5hbWUsIHRoaXMuYXBwKVxuICB9XG4gIHJldHVybiBmaWx0ZXJzXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRPYmplY3RGaWx0ZXIoZGVmaW5pdGlvbiwgbmFtZSkge1xuICBjb25zdCB7IGZpbHRlciwgcHJvcGVydGllcyB9ID0gZGVmaW5pdGlvblxuICBpZiAoaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGFkZEZ1bmN0aW9uU2V0dGluZ3MoZmlsdGVyLCBkZWZpbml0aW9uKVxuICB9IGVsc2Uge1xuICAgIC8vIENvbnZlcnQgUXVlcnlGaWx0ZXJzIHRvIG5vcm1hbCBmaWx0ZXIgZnVuY3Rpb25zXG4gICAgY29uc3QgcXVlcnlGaWx0ZXIgPSBRdWVyeUZpbHRlcnMuZ2V0KGZpbHRlcilcbiAgICBpZiAoIXF1ZXJ5RmlsdGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtuYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7ZmlsdGVyfScuYFxuICAgICAgKVxuICAgIH1cbiAgICBjb25zdCBmdW5jID0gcHJvcGVydGllc1xuICAgICAgPyAocXVlcnksIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgLy8gV2hlbiB0aGUgZmlsdGVyIHByb3ZpZGVzIG11bHRpcGxlIHByb3BlcnRpZXMsIG1hdGNoIHRoZW1cbiAgICAgICAgLy8gYWxsLCBidXQgY29tYmluZSB0aGUgZXhwcmVzc2lvbnMgd2l0aCBPUi5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgcXVlcnkub3JXaGVyZShxdWVyeSA9PiBxdWVyeUZpbHRlcihxdWVyeSwgcHJvcGVydHksIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICA6IChxdWVyeSwgLi4uYXJncykgPT4ge1xuICAgICAgICBxdWVyeUZpbHRlcihxdWVyeSwgbmFtZSwgLi4uYXJncylcbiAgICAgIH1cbiAgICByZXR1cm4gYWRkRnVuY3Rpb25TZXR0aW5ncyhmdW5jLCBxdWVyeUZpbHRlcilcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRGdW5jdGlvblNldHRpbmdzKGZpbHRlciwgZGVmaW5pdGlvbikge1xuICAvLyBDb3B5IG92ZXIgQHBhcmFtZXRlcnMoKSBhbmQgQHZhbGlkYXRlKCkgc2V0dGluZ3NcbiAgZmlsdGVyLnBhcmFtZXRlcnMgPSBkZWZpbml0aW9uLnBhcmFtZXRlcnNcbiAgZmlsdGVyLnZhbGlkYXRlID0gZGVmaW5pdGlvbi52YWxpZGF0ZVxuICByZXR1cm4gZmlsdGVyXG59XG5cbmZ1bmN0aW9uIHdyYXBXaXRoVmFsaWRhdGlvbihmaWx0ZXIsIG5hbWUsIGFwcCkge1xuICAvLyBJZiBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkLCB3cmFwIHRoZSBmdW5jdGlvbiBpbiBhIGNsb3N1cmUgdGhhdFxuICAvLyBwZXJmb3JtcyBwYXJhbWV0ZXIgdmFsaWRhdGlvbi4uLlxuICBjb25zdCBkYXRhTmFtZSA9ICdxdWVyeSdcbiAgY29uc3QgdmFsaWRhdG9yID0gZmlsdGVyICYmIGFwcC5jb21waWxlUGFyYW1ldGVyc1ZhbGlkYXRvcihcbiAgICBmaWx0ZXIucGFyYW1ldGVycyxcbiAgICB7IC4uLmZpbHRlci52YWxpZGF0ZSwgZGF0YU5hbWUgfVxuICApXG4gIGlmICh2YWxpZGF0b3I/LnZhbGlkYXRlKSB7XG4gICAgcmV0dXJuIChxdWVyeSwgLi4uYXJncykgPT4ge1xuICAgICAgLy8gQ29udmVydCBhcmdzIHRvIG9iamVjdCBmb3IgdmFsaWRhdGlvbjpcbiAgICAgIGNvbnN0IG9iamVjdCA9IHt9XG4gICAgICBsZXQgaW5kZXggPSAwXG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSB9IG9mIHZhbGlkYXRvci5saXN0KSB7XG4gICAgICAgIC8vIFVzZSBkYXRhTmFtZSBpZiBubyBuYW1lIGlzIGdpdmVuLCBzZWU6XG4gICAgICAgIC8vIEFwcGxpY2F0aW9uLmNvbXBpbGVQYXJhbWV0ZXJzVmFsaWRhdG9yKClcbiAgICAgICAgb2JqZWN0W25hbWUgfHwgZGF0YU5hbWVdID0gYXJnc1tpbmRleCsrXVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFsaWRhdG9yLnZhbGlkYXRlKG9iamVjdClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGFwcC5jcmVhdGVWYWxpZGF0aW9uRXJyb3Ioe1xuICAgICAgICAgIHR5cGU6ICdGaWx0ZXJWYWxpZGF0aW9uJyxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgYFRoZSBwcm92aWRlZCBkYXRhIGZvciBxdWVyeSBmaWx0ZXIgJyR7bmFtZX0nIGlzIG5vdCB2YWxpZGAsXG4gICAgICAgICAgZXJyb3JzOiBhcHAudmFsaWRhdG9yLnByZWZpeERhdGFQYXRocyhcbiAgICAgICAgICAgIGVycm9yLmVycm9ycyxcbiAgICAgICAgICAgIGAuJHtuYW1lfWBcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsdGVyKHF1ZXJ5LCAuLi5hcmdzKVxuICAgIH1cbiAgfVxuICAvLyAuLi5vdGhlcndpc2UgdXNlIHRoZSBkZWZpbmVkIGZpbHRlciBmdW5jdGlvbiB1bm1vZGlmaWVkLlxuICByZXR1cm4gZmlsdGVyXG59XG4iXX0=
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = properties;
|
|
5
5
|
|
|
6
|
+
require("core-js/modules/esnext.async-iterator.reduce.js");
|
|
7
|
+
|
|
8
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
9
|
+
|
|
10
|
+
require("core-js/modules/esnext.iterator.reduce.js");
|
|
11
|
+
|
|
6
12
|
var _utils = require("../../utils");
|
|
7
13
|
|
|
8
14
|
var _schema = require("../../schema");
|
|
@@ -78,4 +84,4 @@ function properties(values) {
|
|
|
78
84
|
return merged;
|
|
79
85
|
}, {});
|
|
80
86
|
}
|
|
81
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbHMvZGVmaW5pdGlvbnMvcHJvcGVydGllcy5qcyJdLCJuYW1lcyI6WyJwcm9wZXJ0aWVzIiwidmFsdWVzIiwiYWRkSWRQcm9wZXJ0eSIsIm5hbWUiLCJzY2hlbWEiLCJ0eXBlIiwiZ2V0SWRQcm9wZXJ0eUFycmF5IiwicHJpbWFyeSIsImFkZFJlbGF0aW9uUHJvcGVydGllcyIsInJlbGF0aW9uIiwicHJvcE5hbWUiLCJtb2RlbENsYXNzIiwib3duZXJNb2RlbENsYXNzIiwibnVsbGFibGUiLCJkZWZpbml0aW9uIiwicmVsYXRpb25zIiwicHJvcGVydHkiLCJwcm9wcyIsInVuc2lnbmVkIiwiZm9yZWlnbiIsImluZGV4IiwiT2JqZWN0IiwiZ2V0UmVsYXRpb25zIiwiZ2V0UmVsYXRlZFJlbGF0aW9ucyIsInVpZFByb3AiLCJ1aWRSZWZQcm9wIiwiaWRzIiwicmVzdCIsImVudHJpZXMiLCJlbnRyeSIsInVuc2hpZnQiLCJwdXNoIiwicmVkdWNlIiwibWVyZ2VkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVlLFNBQVNBLFVBQVQsQ0FBb0JDLE1BQXBCLEVBQTRCO0FBQ3pDLFFBQU1ELFVBQVUsR0FBRywwQkFBY0MsTUFBZCxDQUFuQjs7QUFFQSxRQUFNQyxhQUFhLEdBQUcsQ0FBQ0MsSUFBRCxFQUFPQyxNQUFQLEtBQWtCO0FBQ3RDLFFBQUksRUFBRUQsSUFBSSxJQUFJSCxVQUFWLENBQUosRUFBMkI7QUFDekJBLE1BQUFBLFVBQVUsQ0FBQ0csSUFBRCxDQUFWLEdBQW1CO0FBQ2pCRSxRQUFBQSxJQUFJLEVBQUUsU0FEVztBQUVqQixXQUFHRDtBQUZjLE9BQW5CO0FBSUQ7QUFDRixHQVBEOztBQVNBLE9BQUssTUFBTUQsSUFBWCxJQUFtQixLQUFLRyxrQkFBTCxFQUFuQixFQUE4QztBQUM1Q0osSUFBQUEsYUFBYSxDQUFDQyxJQUFELEVBQU87QUFDbEJJLE1BQUFBLE9BQU8sRUFBRTtBQURTLEtBQVAsQ0FBYjtBQUdEOztBQUVELFFBQU1DLHFCQUFxQixHQUFHLENBQUNDLFFBQUQsRUFBV0MsUUFBWCxLQUF3QjtBQUNwRCxVQUFNQyxVQUFVLEdBQUdGLFFBQVEsQ0FBQ0csZUFBNUI7QUFDQSxVQUFNO0FBQUVDLE1BQUFBO0FBQUYsUUFBZUYsVUFBVSxDQUFDRyxVQUFYLENBQXNCQyxTQUF0QixDQUFnQ04sUUFBUSxDQUFDTixJQUF6QyxDQUFyQjs7QUFDQSxTQUFLLE1BQU1hLFFBQVgsSUFBdUJQLFFBQVEsQ0FBQ0MsUUFBRCxDQUFSLENBQW1CTyxLQUExQyxFQUFpRDtBQUMvQ2YsTUFBQUEsYUFBYSxDQUFDYyxRQUFELEVBQVc7QUFDdEJFLFFBQUFBLFFBQVEsRUFBRSxJQURZO0FBRXRCQyxRQUFBQSxPQUFPLEVBQUUsSUFGYTtBQUd0QkMsUUFBQUEsS0FBSyxFQUFFLElBSGU7QUFJdEIsWUFBSVAsUUFBUSxJQUFJO0FBQUVBLFVBQUFBO0FBQUYsU0FBaEI7QUFKc0IsT0FBWCxDQUFiO0FBTUQ7QUFDRixHQVhEOztBQWFBLE9BQUssTUFBTUosUUFBWCxJQUF1QlksTUFBTSxDQUFDcEIsTUFBUCxDQUFjLEtBQUtxQixZQUFMLEVBQWQsQ0FBdkIsRUFBMkQ7QUFDekRkLElBQUFBLHFCQUFxQixDQUFDQyxRQUFELEVBQVcsV0FBWCxDQUFyQjtBQUNEOztBQUVELE9BQUssTUFBTUEsUUFBWCxJQUF1QixLQUFLYyxtQkFBTCxFQUF2QixFQUFtRDtBQUNqRGYsSUFBQUEscUJBQXFCLENBQUNDLFFBQUQsRUFBVyxhQUFYLENBQXJCO0FBQ0Q7O0FBR0RULEVBQUFBLFVBQVUsQ0FBQyxLQUFLd0IsT0FBTixDQUFWLEdBQTJCO0FBQ3pCbkIsSUFBQUEsSUFBSSxFQUFFO0FBRG1CLEdBQTNCO0FBR0FMLEVBQUFBLFVBQVUsQ0FBQyxLQUFLeUIsVUFBTixDQUFWLEdBQThCO0FBQzVCcEIsSUFBQUEsSUFBSSxFQUFFO0FBRHNCLEdBQTlCO0FBU0EsUUFBTXFCLEdBQUcsR0FBRyxFQUFaO0FBQ0EsUUFBTUMsSUFBSSxHQUFHLEVBQWI7O0FBQ0EsT0FBSyxJQUFJLENBQUN4QixJQUFELEVBQU9hLFFBQVAsQ0FBVCxJQUE2QkssTUFBTSxDQUFDTyxPQUFQLENBQWU1QixVQUFmLENBQTdCLEVBQXlEO0FBQ3ZEZ0IsSUFBQUEsUUFBUSxHQUFHLG1DQUFzQkEsUUFBdEIsQ0FBWDtBQUVBLFVBQU1hLEtBQUssR0FBRyxDQUFDMUIsSUFBRCxFQUFPYSxRQUFQLENBQWQ7O0FBQ0EsUUFBSUEsUUFBUSxDQUFDVCxPQUFiLEVBQXNCO0FBQ3BCbUIsTUFBQUEsR0FBRyxDQUFDSSxPQUFKLENBQVlELEtBQVo7QUFDRCxLQUZELE1BRU8sSUFBSWIsUUFBUSxDQUFDRyxPQUFiLEVBQXNCO0FBQzNCTyxNQUFBQSxHQUFHLENBQUNLLElBQUosQ0FBU0YsS0FBVDtBQUNELEtBRk0sTUFFQTtBQUNMRixNQUFBQSxJQUFJLENBQUNJLElBQUwsQ0FBVUYsS0FBVjtBQUNEO0FBQ0Y7O0FBRUQsU0FBTyxDQUFDLEdBQUdILEdBQUosRUFBUyxHQUFHQyxJQUFaLEVBQWtCSyxNQUFsQixDQUF5QixDQUFDQyxNQUFELEVBQVMsQ0FBQzlCLElBQUQsRUFBT2EsUUFBUCxDQUFULEtBQThCO0FBQzVEaUIsSUFBQUEsTUFBTSxDQUFDOUIsSUFBRCxDQUFOLEdBQWVhLFFBQWY7QUFDQSxXQUFPaUIsTUFBUDtBQUNELEdBSE0sRUFHSixFQUhJLENBQVA7QUFJRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1lcmdlUmV2ZXJzZWQgfSBmcm9tICdAL3V0aWxzJ1xuaW1wb3J0IHsgZXhwYW5kU2NoZW1hU2hvcnRoYW5kIH0gZnJvbSAnQC9zY2hlbWEnXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByb3BlcnRpZXModmFsdWVzKSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBtZXJnZVJldmVyc2VkKHZhbHVlcylcbiAgLy8gSW5jbHVkZSBhdXRvLWdlbmVyYXRlZCAnaWQnIHByb3BlcnRpZXMgZm9yIG1vZGVscyBhbmQgcmVsYXRpb25zLlxuICBjb25zdCBhZGRJZFByb3BlcnR5ID0gKG5hbWUsIHNjaGVtYSkgPT4ge1xuICAgIGlmICghKG5hbWUgaW4gcHJvcGVydGllcykpIHtcbiAgICAgIHByb3BlcnRpZXNbbmFtZV0gPSB7XG4gICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgLi4uc2NoZW1hXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBuYW1lIG9mIHRoaXMuZ2V0SWRQcm9wZXJ0eUFycmF5KCkpIHtcbiAgICBhZGRJZFByb3BlcnR5KG5hbWUsIHtcbiAgICAgIHByaW1hcnk6IHRydWVcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgYWRkUmVsYXRpb25Qcm9wZXJ0aWVzID0gKHJlbGF0aW9uLCBwcm9wTmFtZSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSByZWxhdGlvbi5vd25lck1vZGVsQ2xhc3NcbiAgICBjb25zdCB7IG51bGxhYmxlIH0gPSBtb2RlbENsYXNzLmRlZmluaXRpb24ucmVsYXRpb25zW3JlbGF0aW9uLm5hbWVdXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiByZWxhdGlvbltwcm9wTmFtZV0ucHJvcHMpIHtcbiAgICAgIGFkZElkUHJvcGVydHkocHJvcGVydHksIHtcbiAgICAgICAgdW5zaWduZWQ6IHRydWUsXG4gICAgICAgIGZvcmVpZ246IHRydWUsXG4gICAgICAgIGluZGV4OiB0cnVlLFxuICAgICAgICAuLi4obnVsbGFibGUgJiYgeyBudWxsYWJsZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHJlbGF0aW9uIG9mIE9iamVjdC52YWx1ZXModGhpcy5nZXRSZWxhdGlvbnMoKSkpIHtcbiAgICBhZGRSZWxhdGlvblByb3BlcnRpZXMocmVsYXRpb24sICdvd25lclByb3AnKVxuICB9XG5cbiAgZm9yIChjb25zdCByZWxhdGlvbiBvZiB0aGlzLmdldFJlbGF0ZWRSZWxhdGlvbnMoKSkge1xuICAgIGFkZFJlbGF0aW9uUHJvcGVydGllcyhyZWxhdGlvbiwgJ3JlbGF0ZWRQcm9wJylcbiAgfVxuXG4gIC8vIFN1cHBvcnQgT2JqZWN0aW9uJ3MgI2lkIGFuZCAjcmVmIHJlZmVyZW5jZXMgb24gYWxsIG1vZGVsczpcbiAgcHJvcGVydGllc1t0aGlzLnVpZFByb3BdID0ge1xuICAgIHR5cGU6ICdzdHJpbmcnXG4gIH1cbiAgcHJvcGVydGllc1t0aGlzLnVpZFJlZlByb3BdID0ge1xuICAgIHR5cGU6ICdzdHJpbmcnXG4gIH1cblxuICAvLyBDb252ZXJ0IHJvb3QtbGV2ZWwgc2hvcnQtZm9ybXMsIGZvciBlYXNpZXIgcHJvcGVydGllcyBoYW5kbGluZyBpblxuICAvLyBhdHRyaWJ1dGVzIGFuZCBpZENvbHVtbigpICYgY286XG4gIC8vIC0gYG5hbWU6IHR5cGVgIHRvIGBuYW1lOiB7IHR5cGUgfWBcbiAgLy8gLSBgbmFtZTogWy4uLml0ZW1zXWAgdG8gYG5hbWU6IHsgdHlwZTogJ2FycmF5JywgaXRlbXMgfVxuICAvLyBOT1RFOiBTdWJzdGl0dXRpb25zIG9uIGFsbCBvdGhlciBsZXZlbHMgaGFwcGVuIGluIGNvbnZlcnRTY2hlbWEoKVxuICBjb25zdCBpZHMgPSBbXVxuICBjb25zdCByZXN0ID0gW11cbiAgZm9yIChsZXQgW25hbWUsIHByb3BlcnR5XSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKSkge1xuICAgIHByb3BlcnR5ID0gZXhwYW5kU2NoZW1hU2hvcnRoYW5kKHByb3BlcnR5KVxuICAgIC8vIEFsc28gc29ydCBwcm9wZXJ0aWVzIGJ5IGtpbmQ6IHByaW1hcnkgaWQgPiBmb3JlaWduIGlkID4gcmVzdDpcbiAgICBjb25zdCBlbnRyeSA9IFtuYW1lLCBwcm9wZXJ0eV1cbiAgICBpZiAocHJvcGVydHkucHJpbWFyeSkge1xuICAgICAgaWRzLnVuc2hpZnQoZW50cnkpXG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5mb3JlaWduKSB7XG4gICAgICBpZHMucHVzaChlbnRyeSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdC5wdXNoKGVudHJ5KVxuICAgIH1cbiAgfVxuICAvLyBGaW5hbGx5IHJlY29tcGlsZSBhIG5ldyBwcm9wZXJ0aWVzIG9iamVjdCBvdXQgb2YgdGhlIHNvcnRlZCBwcm9wZXJ0aWVzLlxuICByZXR1cm4gWy4uLmlkcywgLi4ucmVzdF0ucmVkdWNlKChtZXJnZWQsIFtuYW1lLCBwcm9wZXJ0eV0pID0+IHtcbiAgICBtZXJnZWRbbmFtZV0gPSBwcm9wZXJ0eVxuICAgIHJldHVybiBtZXJnZWRcbiAgfSwge30pXG59XG4iXX0=
|
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = scopes;
|
|
5
5
|
|
|
6
|
+
require("core-js/modules/esnext.async-iterator.find.js");
|
|
7
|
+
|
|
8
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
9
|
+
|
|
10
|
+
require("core-js/modules/esnext.iterator.find.js");
|
|
11
|
+
|
|
12
|
+
require("core-js/modules/es.error.cause.js");
|
|
13
|
+
|
|
6
14
|
var _utils = require("@ditojs/utils");
|
|
7
15
|
|
|
8
16
|
var _errors = require("../../errors");
|
|
@@ -40,4 +48,4 @@ function scopes(values) {
|
|
|
40
48
|
|
|
41
49
|
return scopes;
|
|
42
50
|
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbHMvZGVmaW5pdGlvbnMvc2NvcGVzLmpzIl0sIm5hbWVzIjpbInNjb3BlcyIsInZhbHVlcyIsIm5hbWUiLCJzY29wZSIsIk9iamVjdCIsImVudHJpZXMiLCJmdW5jIiwicXVlcnkiLCJmaW5kIiwiRXJyb3IiLCJwYXJlbnRNb2RlbENsYXNzIiwiZ2V0UHJvdG90eXBlT2YiLCJhcHBseVBhcmVudFNjb3BlIiwicGFyZW50U2NvcGUiLCJnZXRTY29wZSIsIk1vZGVsRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFZSxTQUFTQSxNQUFULENBQWdCQyxNQUFoQixFQUF3QjtBQUNyQyxRQUFNRCxNQUFNLEdBQUcsRUFBZjs7QUFHQSxPQUFLLE1BQU0sQ0FBQ0UsSUFBRCxFQUFPQyxLQUFQLENBQVgsSUFBNEJDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlLDJCQUFjSixNQUFkLENBQWYsQ0FBNUIsRUFBbUU7QUFDakUsVUFBTUssSUFBSSxHQUFHLHVCQUFXSCxLQUFYLElBQ1RBLEtBRFMsR0FFVCxxQkFBU0EsS0FBVCxJQUNFSSxLQUFLLElBQUlBLEtBQUssQ0FBQ0MsSUFBTixDQUFXTCxLQUFYLENBRFgsR0FFRSxJQUpOOztBQUtBLFFBQUksQ0FBQ0csSUFBTCxFQUFXO0FBQ1QsWUFBTSxJQUFJRyxLQUFKLENBQVcsa0JBQWlCUCxJQUFLLE1BQUtDLEtBQU0sR0FBNUMsQ0FBTjtBQUNEOztBQUVELFVBQU1PLGdCQUFnQixHQUFHTixNQUFNLENBQUNPLGNBQVAsQ0FBc0IsSUFBdEIsQ0FBekI7O0FBRUEsVUFBTUMsZ0JBQWdCLEdBQUdMLEtBQUssSUFBSTtBQUNoQyxZQUFNTSxXQUFXLEdBQUdILGdCQUFnQixDQUFDSSxRQUFqQixDQUEwQlosSUFBMUIsQ0FBcEI7O0FBQ0EsVUFBSSxDQUFDVyxXQUFMLEVBQWtCO0FBQ2hCLGNBQU0sSUFBSUUsa0JBQUosQ0FBZSxJQUFmLEVBQXNCLDRCQUEyQmIsSUFBSyxHQUF0RCxDQUFOO0FBQ0Q7O0FBQ0RXLE1BQUFBLFdBQVcsQ0FBQ04sS0FBRCxDQUFYO0FBQ0EsYUFBT0EsS0FBUDtBQUNELEtBUEQ7O0FBU0FQLElBQUFBLE1BQU0sQ0FBQ0UsSUFBRCxDQUFOLEdBQWVLLEtBQUssSUFBSTtBQUN0QkQsTUFBQUEsSUFBSSxDQUFDQyxLQUFELEVBQVFLLGdCQUFSLENBQUo7QUFDQSxhQUFPTCxLQUFQO0FBQ0QsS0FIRDtBQUlEOztBQUNELFNBQU9QLE1BQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzT2JqZWN0LCBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IE1vZGVsRXJyb3IgfSBmcm9tICdAL2Vycm9ycydcbmltcG9ydCB7IG1lcmdlUmV2ZXJzZWQgfSBmcm9tICdAL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzY29wZXModmFsdWVzKSB7XG4gIGNvbnN0IHNjb3BlcyA9IHt9XG4gIC8vIFVzZSBtZXJnZUFzUmV2ZXJzZWRBcnJheXMoKSB0byBrZWVwIGxpc3RzIG9mIGZpbHRlcnMgdG8gYmUgaW5oZXJpdGVkIHBlclxuICAvLyBzY29wZSwgc28gdGhleSBjYW4gYmUgY2FsbGVkIGluIHNlcXVlbmNlLlxuICBmb3IgKGNvbnN0IFtuYW1lLCBzY29wZV0gb2YgT2JqZWN0LmVudHJpZXMobWVyZ2VSZXZlcnNlZCh2YWx1ZXMpKSkge1xuICAgIGNvbnN0IGZ1bmMgPSBpc0Z1bmN0aW9uKHNjb3BlKVxuICAgICAgPyBzY29wZVxuICAgICAgOiBpc09iamVjdChzY29wZSlcbiAgICAgICAgPyBxdWVyeSA9PiBxdWVyeS5maW5kKHNjb3BlKVxuICAgICAgICA6IG51bGxcbiAgICBpZiAoIWZ1bmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzY29wZSAnJHtuYW1lfSc6ICR7c2NvcGV9LmApXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50TW9kZWxDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKVxuXG4gICAgY29uc3QgYXBwbHlQYXJlbnRTY29wZSA9IHF1ZXJ5ID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudFNjb3BlID0gcGFyZW50TW9kZWxDbGFzcy5nZXRTY29wZShuYW1lKVxuICAgICAgaWYgKCFwYXJlbnRTY29wZSkge1xuICAgICAgICB0aHJvdyBuZXcgTW9kZWxFcnJvcih0aGlzLCBgVW5kZWZpbmVkIHBhcmVudCBzY29wZTogJyR7bmFtZX0nYClcbiAgICAgIH1cbiAgICAgIHBhcmVudFNjb3BlKHF1ZXJ5KVxuICAgICAgcmV0dXJuIHF1ZXJ5XG4gICAgfVxuXG4gICAgc2NvcGVzW25hbWVdID0gcXVlcnkgPT4ge1xuICAgICAgZnVuYyhxdWVyeSwgYXBwbHlQYXJlbnRTY29wZSlcbiAgICAgIHJldHVybiBxdWVyeVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NvcGVzXG59XG4iXX0=
|
package/lib/models/index.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
require("core-js/modules/esnext.async-iterator.for-each.js");
|
|
4
|
+
|
|
5
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
6
|
+
|
|
7
|
+
require("core-js/modules/esnext.iterator.for-each.js");
|
|
8
|
+
|
|
3
9
|
exports.__esModule = true;
|
|
4
10
|
|
|
5
11
|
var _Model = require("./Model");
|
|
@@ -41,4 +47,4 @@ Object.keys(_UserModel).forEach(function (key) {
|
|
|
41
47
|
if (key in exports && exports[key] === _UserModel[key]) return;
|
|
42
48
|
exports[key] = _UserModel[key];
|
|
43
49
|
});
|
|
44
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vTW9kZWwnXG5leHBvcnQgKiBmcm9tICcuL0Fzc2V0TW9kZWwnXG5leHBvcnQgKiBmcm9tICcuL1Nlc3Npb25Nb2RlbCdcbmV4cG9ydCAqIGZyb20gJy4vVGltZVN0YW1wZWRNb2RlbCdcbmV4cG9ydCAqIGZyb20gJy4vVXNlck1vZGVsJ1xuIl19
|