@uql/core 0.4.80 → 0.4.83
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/README.md +11 -11
- package/dialect/abstractSqlDialect-spec.d.ts +49 -0
- package/dialect/abstractSqlDialect-spec.js +765 -0
- package/dialect/abstractSqlDialect.js +11 -17
- package/dialect/mysqlDialect.js +2 -2
- package/dialect/mysqlDialect.spec.d.ts +6 -0
- package/dialect/mysqlDialect.spec.js +33 -0
- package/dialect/postgresDialect.js +2 -2
- package/dialect/postgresDialect.spec.d.ts +1 -0
- package/dialect/postgresDialect.spec.js +139 -0
- package/dialect/sqliteDialect.spec.d.ts +1 -0
- package/dialect/sqliteDialect.spec.js +12 -0
- package/entity/decorator/definition.js +22 -24
- package/entity/decorator/definition.spec.d.ts +1 -0
- package/entity/decorator/definition.spec.js +725 -0
- package/entity/decorator/relation.spec.d.ts +1 -0
- package/entity/decorator/relation.spec.js +55 -0
- package/options.js +2 -2
- package/options.spec.d.ts +1 -0
- package/options.spec.js +50 -0
- package/package.json +3 -3
- package/querier/abstractQuerier-it.d.ts +41 -0
- package/querier/abstractQuerier-it.js +410 -0
- package/querier/abstractSqlQuerier-it.d.ts +9 -0
- package/querier/abstractSqlQuerier-it.js +19 -0
- package/querier/abstractSqlQuerier-spec.d.ts +53 -0
- package/querier/abstractSqlQuerier-spec.js +607 -0
- package/querier/abstractSqlQuerier.js +2 -3
- package/querier/decorator/injectQuerier.js +2 -3
- package/querier/decorator/injectQuerier.spec.d.ts +1 -0
- package/querier/decorator/injectQuerier.spec.js +108 -0
- package/querier/decorator/transactional.js +2 -2
- package/querier/decorator/transactional.spec.d.ts +1 -0
- package/querier/decorator/transactional.spec.js +241 -0
- package/repository/genericRepository.spec.d.ts +1 -0
- package/repository/genericRepository.spec.js +86 -0
- package/test/entityMock.d.ts +180 -0
- package/test/entityMock.js +451 -0
- package/test/index.d.ts +3 -0
- package/test/index.js +7 -0
- package/test/it.util.d.ts +4 -0
- package/test/it.util.js +60 -0
- package/test/spec.util.d.ts +13 -0
- package/test/spec.util.js +54 -0
- package/type/entity.d.ts +12 -17
- package/type/entity.js +1 -1
- package/type/utility.d.ts +3 -2
- package/type/utility.js +1 -1
- package/util/dialect.util.js +2 -3
- package/util/dialect.util.spec.d.ts +1 -0
- package/util/dialect.util.spec.js +23 -0
- package/util/object.util.spec.d.ts +1 -0
- package/util/object.util.spec.js +26 -0
- package/util/sql.util.spec.d.ts +1 -0
- package/util/sql.util.spec.js +164 -0
- package/util/string.util.spec.d.ts +1 -0
- package/util/string.util.spec.js +26 -0
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.isValidEntityType = exports.getMeta = exports.getEntities = exports.defineEntity = exports.defineRelation = exports.defineId = exports.defineField = void 0;
|
|
5
4
|
require("reflect-metadata");
|
|
6
5
|
const util_1 = require("@uql/core/util");
|
|
7
6
|
const holder = globalThis;
|
|
8
7
|
const metaKey = '@uql/core/entity/decorator';
|
|
9
|
-
const metas =
|
|
8
|
+
const metas = holder[metaKey] ?? new Map();
|
|
10
9
|
holder[metaKey] = metas;
|
|
11
10
|
function defineField(entity, key, opts = {}) {
|
|
12
11
|
const meta = ensureMeta(entity);
|
|
@@ -14,9 +13,6 @@ function defineField(entity, key, opts = {}) {
|
|
|
14
13
|
const type = inferType(entity, key);
|
|
15
14
|
opts = { ...opts, type };
|
|
16
15
|
}
|
|
17
|
-
if (typeof opts.reference === 'function') {
|
|
18
|
-
opts = { ...opts, reference: { entity: opts.reference } };
|
|
19
|
-
}
|
|
20
16
|
meta.fields[key] = { ...meta.fields[key], ...{ name: key, ...opts } };
|
|
21
17
|
return meta;
|
|
22
18
|
}
|
|
@@ -41,7 +37,6 @@ function defineRelation(entity, key, opts) {
|
|
|
41
37
|
}
|
|
42
38
|
exports.defineRelation = defineRelation;
|
|
43
39
|
function defineEntity(entity, opts = {}) {
|
|
44
|
-
var _a;
|
|
45
40
|
const meta = ensureMeta(entity);
|
|
46
41
|
if (!(0, util_1.hasKeys)(meta.fields)) {
|
|
47
42
|
throw TypeError(`'${entity.name}' must have fields`);
|
|
@@ -56,7 +51,7 @@ function defineEntity(entity, opts = {}) {
|
|
|
56
51
|
}
|
|
57
52
|
meta.softDelete = onDeleteKeys[0];
|
|
58
53
|
}
|
|
59
|
-
meta.name =
|
|
54
|
+
meta.name = opts.name ?? entity.name;
|
|
60
55
|
let proto = Object.getPrototypeOf(entity.prototype);
|
|
61
56
|
while (proto.constructor !== Object) {
|
|
62
57
|
const parentMeta = ensureMeta(proto.constructor);
|
|
@@ -137,31 +132,32 @@ function fillInverseSideRelations(relOpts) {
|
|
|
137
132
|
const relEntity = relOpts.entity();
|
|
138
133
|
const relMeta = getMeta(relEntity);
|
|
139
134
|
relOpts.mappedBy = getMappedByRelationKey(relOpts);
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
relOpts.references = references.map(({ local, foreign }) => ({
|
|
144
|
-
local: foreign,
|
|
145
|
-
foreign: local,
|
|
146
|
-
}));
|
|
135
|
+
if (relMeta.fields[relOpts.mappedBy]) {
|
|
136
|
+
relOpts.references = [{ local: relMeta.id, foreign: relOpts.mappedBy }];
|
|
137
|
+
return;
|
|
147
138
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
relOpts.
|
|
139
|
+
const mappedByRelation = relMeta.relations[relOpts.mappedBy];
|
|
140
|
+
if (relOpts.cardinality === 'm1' || relOpts.cardinality === 'mm') {
|
|
141
|
+
relOpts.references = mappedByRelation.references.slice().reverse();
|
|
142
|
+
relOpts.through = mappedByRelation.through;
|
|
143
|
+
return;
|
|
151
144
|
}
|
|
145
|
+
relOpts.references = mappedByRelation.references.map(({ local, foreign }) => ({
|
|
146
|
+
local: foreign,
|
|
147
|
+
foreign: local,
|
|
148
|
+
}));
|
|
152
149
|
}
|
|
153
150
|
function fillThroughRelations(entity) {
|
|
154
151
|
const meta = ensureMeta(entity);
|
|
155
152
|
meta.relations = (0, util_1.getKeys)(meta.fields).reduce((relations, key) => {
|
|
156
153
|
const { reference } = meta.fields[key];
|
|
157
154
|
if (reference) {
|
|
158
|
-
const
|
|
159
|
-
const relEntity = relEntityGetter();
|
|
155
|
+
const relEntity = reference();
|
|
160
156
|
const relMeta = ensureMeta(relEntity);
|
|
161
157
|
const relKey = key.slice(0, -relMeta.id.length);
|
|
162
158
|
const relOpts = {
|
|
159
|
+
entity: reference,
|
|
163
160
|
cardinality: 'm1',
|
|
164
|
-
entity: relEntityGetter,
|
|
165
161
|
references: [{ local: key, foreign: relMeta.id }],
|
|
166
162
|
};
|
|
167
163
|
relations[relKey] = relOpts;
|
|
@@ -179,13 +175,15 @@ function getMappedByRelationKey(relOpts) {
|
|
|
179
175
|
return relOpts.mappedBy;
|
|
180
176
|
}
|
|
181
177
|
function getRelationKeyMap(meta) {
|
|
182
|
-
return (0, util_1.getKeys)(meta.
|
|
178
|
+
return (0, util_1.getKeys)(meta.fields)
|
|
179
|
+
.concat((0, util_1.getKeys)(meta.relations))
|
|
180
|
+
.reduce((acc, key) => {
|
|
183
181
|
acc[key] = key;
|
|
184
182
|
return acc;
|
|
185
183
|
}, {});
|
|
186
184
|
}
|
|
187
185
|
function getIdKey(meta) {
|
|
188
|
-
const id = (0, util_1.getKeys)(meta.fields).find((key) =>
|
|
186
|
+
const id = (0, util_1.getKeys)(meta.fields).find((key) => meta.fields[key]?.isId);
|
|
189
187
|
return id;
|
|
190
188
|
}
|
|
191
189
|
function extendMeta(target, source) {
|
|
@@ -207,7 +205,7 @@ function inferEntityType(entity, key) {
|
|
|
207
205
|
const inferredType = inferType(entity, key);
|
|
208
206
|
const isValidType = isValidEntityType(inferredType);
|
|
209
207
|
if (!isValidType) {
|
|
210
|
-
throw TypeError(`'${entity.name}.${key}' type was auto-inferred with invalid type '${inferredType
|
|
208
|
+
throw TypeError(`'${entity.name}.${key}' type was auto-inferred with invalid type '${inferredType?.name}'`);
|
|
211
209
|
}
|
|
212
210
|
return inferredType;
|
|
213
211
|
}
|
|
@@ -222,4 +220,4 @@ function isValidEntityType(type) {
|
|
|
222
220
|
type !== Object);
|
|
223
221
|
}
|
|
224
222
|
exports.isValidEntityType = isValidEntityType;
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnRpdHkvZGVjb3JhdG9yL2RlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDRCQUEwQjtBQUMxQix5Q0FBMEU7QUFjMUUsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQzFCLE1BQU0sT0FBTyxHQUFHLDRCQUE0QixDQUFDO0FBQzdDLE1BQU0sS0FBSyxHQUFvQyxNQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUNBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM1RSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBRXhCLFNBQWdCLFdBQVcsQ0FBSSxNQUFlLEVBQUUsR0FBVyxFQUFFLE9BQXFCLEVBQUU7SUFDbEYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ2QsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUMxQjtJQUNELElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtRQUN4QyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7S0FDM0Q7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7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cnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuaW1wb3J0IHsgaGFzS2V5cywgbG93ZXJGaXJzdCwgZ2V0S2V5cywgdXBwZXJGaXJzdCB9IGZyb20gJ0B1cWwvY29yZS91dGlsJztcbmltcG9ydCB7XG4gIFJlbGF0aW9uT3B0aW9ucyxcbiAgRmllbGRPcHRpb25zLFxuICBFbnRpdHlPcHRpb25zLFxuICBFbnRpdHlNZXRhLFxuICBUeXBlLFxuICBSZWxhdGlvbktleU1hcCxcbiAgUmVmZXJlbmNlT3B0aW9ucyxcbiAgUmVsYXRpb25LZXksXG4gIEZpZWxkS2V5LFxuICBJZEtleSxcbn0gZnJvbSAnQHVxbC9jb3JlL3R5cGUnO1xuXG5jb25zdCBob2xkZXIgPSBnbG9iYWxUaGlzO1xuY29uc3QgbWV0YUtleSA9ICdAdXFsL2NvcmUvZW50aXR5L2RlY29yYXRvcic7XG5jb25zdCBtZXRhczogTWFwPFR5cGU8YW55PiwgRW50aXR5TWV0YTxhbnk+PiA9IGhvbGRlclttZXRhS2V5XSA/PyBuZXcgTWFwKCk7XG5ob2xkZXJbbWV0YUtleV0gPSBtZXRhcztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUZpZWxkPEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBzdHJpbmcsIG9wdHM6IEZpZWxkT3B0aW9ucyA9IHt9KTogRW50aXR5TWV0YTxFPiB7XG4gIGNvbnN0IG1ldGEgPSBlbnN1cmVNZXRhKGVudGl0eSk7XG4gIGlmICghb3B0cy50eXBlKSB7XG4gICAgY29uc3QgdHlwZSA9IGluZmVyVHlwZShlbnRpdHksIGtleSk7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgdHlwZSB9O1xuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5yZWZlcmVuY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCByZWZlcmVuY2U6IHsgZW50aXR5OiBvcHRzLnJlZmVyZW5jZSB9IH07XG4gIH1cbiAgbWV0YS5maWVsZHNba2V5XSA9IHsgLi4ubWV0YS5maWVsZHNba2V5XSwgLi4ueyBuYW1lOiBrZXksIC4uLm9wdHMgfSB9O1xuICByZXR1cm4gbWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUlkPEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBzdHJpbmcsIG9wdHM6IEZpZWxkT3B0aW9ucyk6IEVudGl0eU1ldGE8RT4ge1xuICBjb25zdCBtZXRhID0gZW5zdXJlTWV0YShlbnRpdHkpO1xuICBjb25zdCBpZCA9IGdldElkS2V5KG1ldGEpO1xuICBpZiAoaWQpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfScgbXVzdCBoYXZlIGEgc2luZ2xlIGZpZWxkIGRlY29yYXRlZCB3aXRoIEBJZGApO1xuICB9XG4gIHJldHVybiBkZWZpbmVGaWVsZChlbnRpdHksIGtleSwgeyAuLi5vcHRzLCBpc0lkOiB0cnVlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVsYXRpb248RT4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IHN0cmluZywgb3B0czogUmVsYXRpb25PcHRpb25zPEU+KTogRW50aXR5TWV0YTxFPiB7XG4gIGlmICghb3B0cy5lbnRpdHkpIHtcbiAgICBjb25zdCBpbmZlcnJlZFR5cGUgPSBpbmZlckVudGl0eVR5cGUoZW50aXR5LCBrZXkpO1xuICAgIG9wdHMuZW50aXR5ID0gKCkgPT4gaW5mZXJyZWRUeXBlO1xuICB9XG4gIGNvbnN0IG1ldGEgPSBlbnN1cmVNZXRhKGVudGl0eSk7XG4gIG1ldGEucmVsYXRpb25zW2tleV0gPSB7IC4uLm1ldGEucmVsYXRpb25zW2tleV0sIC4uLm9wdHMgfTtcbiAgcmV0dXJuIG1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVFbnRpdHk8RT4oZW50aXR5OiBUeXBlPEU+LCBvcHRzOiBFbnRpdHlPcHRpb25zID0ge30pOiBFbnRpdHlNZXRhPEU+IHtcbiAgY29uc3QgbWV0YSA9IGVuc3VyZU1ldGEoZW50aXR5KTtcblxuICBpZiAoIWhhc0tleXMobWV0YS5maWVsZHMpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKGAnJHtlbnRpdHkubmFtZX0nIG11c3QgaGF2ZSBmaWVsZHNgKTtcbiAgfVxuXG4gIGNvbnN0IG9uRGVsZXRlS2V5cyA9IGdldEtleXMobWV0YS5maWVsZHMpLmZpbHRlcigoa2V5KSA9PiBtZXRhLmZpZWxkc1trZXldLm9uRGVsZXRlKSBhcyBGaWVsZEtleTxFPltdO1xuXG4gIGlmIChvbkRlbGV0ZUtleXMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBtdXN0IGhhdmUgb25lIGZpZWxkIHdpdGggJ29uRGVsZXRlJyBhcyBtYXhpbXVtYCk7XG4gIH1cblxuICBpZiAob3B0cy5zb2Z0RGVsZXRlKSB7XG4gICAgaWYgKCFvbkRlbGV0ZUtleXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfScgbXVzdCBoYXZlIG9uZSBmaWVsZCB3aXRoICdvbkRlbGV0ZScgdG8gZW5hYmxlICdzb2Z0RGVsZXRlJ2ApO1xuICAgIH1cbiAgICBtZXRhLnNvZnREZWxldGUgPSBvbkRlbGV0ZUtleXNbMF07XG4gIH1cblxuICBtZXRhLm5hbWUgPSBvcHRzLm5hbWUgPz8gZW50aXR5Lm5hbWU7XG4gIGxldCBwcm90bzogRnVuY3Rpb25Db25zdHJ1Y3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihlbnRpdHkucHJvdG90eXBlKTtcblxuICB3aGlsZSAocHJvdG8uY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgIGNvbnN0IHBhcmVudE1ldGEgPSBlbnN1cmVNZXRhKHByb3RvLmNvbnN0cnVjdG9yIGFzIFR5cGU8RT4pO1xuICAgIGV4dGVuZE1ldGEobWV0YSwgcGFyZW50TWV0YSk7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG5cbiAgY29uc3QgaWQgPSBnZXRJZEtleShtZXRhKTtcbiAgaWYgKCFpZCkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBtdXN0IGhhdmUgb25lIGZpZWxkIGRlY29yYXRlZCB3aXRoIEBJZGApO1xuICB9XG4gIG1ldGEuaWQgPSBpZDtcblxuICByZXR1cm4gbWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0aWVzKCk6IFR5cGU8YW55PltdIHtcbiAgcmV0dXJuIFsuLi5tZXRhcy5lbnRyaWVzKCldLnJlZHVjZSgoYWNjLCBba2V5LCB2YWxdKSA9PiB7XG4gICAgaWYgKHZhbC5pZCkge1xuICAgICAgYWNjLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVNZXRhPEU+KGVudGl0eTogVHlwZTxFPik6IEVudGl0eU1ldGE8RT4ge1xuICBsZXQgbWV0YSA9IG1ldGFzLmdldChlbnRpdHkpO1xuICBpZiAobWV0YSkge1xuICAgIHJldHVybiBtZXRhO1xuICB9XG4gIG1ldGEgPSB7IGVudGl0eSwgZmllbGRzOiB7fSwgcmVsYXRpb25zOiB7fSB9O1xuICBtZXRhcy5zZXQoZW50aXR5LCBtZXRhKTtcbiAgcmV0dXJuIG1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhPEU+KGVudGl0eTogVHlwZTxFPik6IEVudGl0eU1ldGE8RT4ge1xuICBjb25zdCBtZXRhID0gbWV0YXMuZ2V0KGVudGl0eSk7XG4gIGlmICghbWV0YSkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBpcyBub3QgYW4gZW50aXR5YCk7XG4gIH1cbiAgaWYgKG1ldGEucHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cbiAgbWV0YS5wcm9jZXNzZWQgPSB0cnVlO1xuICByZXR1cm4gZmlsbFJlbGF0aW9ucyhtZXRhKTtcbn1cblxuZnVuY3Rpb24gZmlsbFJlbGF0aW9uczxFPihtZXRhOiBFbnRpdHlNZXRhPEU+KTogRW50aXR5TWV0YTxFPiB7XG4gIGZvciAoY29uc3QgcmVsS2V5IGluIG1ldGEucmVsYXRpb25zKSB7XG4gICAgY29uc3QgcmVsT3B0cyA9IG1ldGEucmVsYXRpb25zW3JlbEtleSBhcyBSZWxhdGlvbktleTxFPl07XG5cbiAgICBpZiAocmVsT3B0cy5yZWZlcmVuY2VzKSB7XG4gICAgICAvLyByZWZlcmVuY2VzIHdlcmUgbWFudWFsbHkgc3BlY2lmaWVkXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocmVsT3B0cy5tYXBwZWRCeSkge1xuICAgICAgZmlsbEludmVyc2VTaWRlUmVsYXRpb25zKHJlbE9wdHMpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVsRW50aXR5ID0gcmVsT3B0cy5lbnRpdHkoKTtcbiAgICBjb25zdCByZWxNZXRhID0gZW5zdXJlTWV0YShyZWxFbnRpdHkpO1xuXG4gICAgaWYgKHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICdtbScpIHtcbiAgICAgIGNvbnN0IGlkTmFtZSA9IG1ldGEuZmllbGRzW21ldGEuaWRdLm5hbWU7XG4gICAgICBjb25zdCByZWxJZE5hbWUgPSByZWxNZXRhLmZpZWxkc1tyZWxNZXRhLmlkXS5uYW1lO1xuICAgICAgY29uc3Qgc291cmNlID0gbG93ZXJGaXJzdChtZXRhLm5hbWUpICsgdXBwZXJGaXJzdChpZE5hbWUpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbG93ZXJGaXJzdChyZWxNZXRhLm5hbWUpICsgdXBwZXJGaXJzdChyZWxJZE5hbWUpO1xuICAgICAgcmVsT3B0cy5yZWZlcmVuY2VzID0gW1xuICAgICAgICB7IGxvY2FsOiBzb3VyY2UsIGZvcmVpZ246IG1ldGEuaWQgfSxcbiAgICAgICAgeyBsb2NhbDogdGFyZ2V0LCBmb3JlaWduOiByZWxNZXRhLmlkIH0sXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWxPcHRzLnJlZmVyZW5jZXMgPSBbeyBsb2NhbDogYCR7cmVsS2V5fUlkYCwgZm9yZWlnbjogcmVsTWV0YS5pZCB9XTtcbiAgICB9XG5cbiAgICBpZiAocmVsT3B0cy50aHJvdWdoKSB7XG4gICAgICBmaWxsVGhyb3VnaFJlbGF0aW9ucyhyZWxPcHRzLnRocm91Z2goKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGE7XG59XG5cbmZ1bmN0aW9uIGZpbGxJbnZlcnNlU2lkZVJlbGF0aW9uczxFPihyZWxPcHRzOiBSZWxhdGlvbk9wdGlvbnM8RT4pOiB2b2lkIHtcbiAgY29uc3QgcmVsRW50aXR5ID0gcmVsT3B0cy5lbnRpdHkoKTtcbiAgY29uc3QgcmVsTWV0YSA9IGdldE1ldGEocmVsRW50aXR5KTtcbiAgcmVsT3B0cy5tYXBwZWRCeSA9IGdldE1hcHBlZEJ5UmVsYXRpb25LZXkocmVsT3B0cyk7XG5cbiAgLy8gcmV2ZXJzaW5nIHJlZmVyZW5jZXMgaGVyZSBtYWtlcyB0aGUgU1FMIGdlbmVyYXRpb24gc2ltcGxlciAobm8gbmVlZCB0byBjaGVjayBmb3IgYG1hcHBlZEJ5YClcbiAgY29uc3QgeyBjYXJkaW5hbGl0eSwgcmVmZXJlbmNlcywgdGhyb3VnaCB9ID0gcmVsTWV0YS5yZWxhdGlvbnNbcmVsT3B0cy5tYXBwZWRCeV07XG4gIGlmIChjYXJkaW5hbGl0eSA9PT0gJzExJyB8fCBjYXJkaW5hbGl0eSA9PT0gJ20xJykge1xuICAgIHJlbE9wdHMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMubWFwKCh7IGxvY2FsLCBmb3JlaWduIH0pID0+ICh7XG4gICAgICBsb2NhbDogZm9yZWlnbixcbiAgICAgIGZvcmVpZ246IGxvY2FsLFxuICAgIH0pKTtcbiAgfSBlbHNlIHtcbiAgICByZWxPcHRzLnJlZmVyZW5jZXMgPSByZWZlcmVuY2VzLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIHJlbE9wdHMudGhyb3VnaCA9IHRocm91Z2g7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmlsbFRocm91Z2hSZWxhdGlvbnM8RT4oZW50aXR5OiBUeXBlPEU+KTogdm9pZCB7XG4gIGNvbnN0IG1ldGEgPSBlbnN1cmVNZXRhKGVudGl0eSk7XG4gIG1ldGEucmVsYXRpb25zID0gZ2V0S2V5cyhtZXRhLmZpZWxkcykucmVkdWNlKChyZWxhdGlvbnMsIGtleSkgPT4ge1xuICAgIGNvbnN0IHsgcmVmZXJlbmNlIH0gPSBtZXRhLmZpZWxkc1trZXldO1xuICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgIGNvbnN0IHJlbEVudGl0eUdldHRlciA9IChyZWZlcmVuY2UgYXMgUmVmZXJlbmNlT3B0aW9ucykuZW50aXR5O1xuICAgICAgY29uc3QgcmVsRW50aXR5ID0gcmVsRW50aXR5R2V0dGVyKCk7XG4gICAgICBjb25zdCByZWxNZXRhID0gZW5zdXJlTWV0YShyZWxFbnRpdHkpO1xuICAgICAgY29uc3QgcmVsS2V5ID0ga2V5LnNsaWNlKDAsIC1yZWxNZXRhLmlkLmxlbmd0aCk7XG4gICAgICBjb25zdCByZWxPcHRzOiBSZWxhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIGNhcmRpbmFsaXR5OiAnbTEnLFxuICAgICAgICBlbnRpdHk6IHJlbEVudGl0eUdldHRlcixcbiAgICAgICAgcmVmZXJlbmNlczogW3sgbG9jYWw6IGtleSwgZm9yZWlnbjogcmVsTWV0YS5pZCB9XSxcbiAgICAgIH07XG4gICAgICByZWxhdGlvbnNbcmVsS2V5XSA9IHJlbE9wdHM7XG4gICAgfVxuICAgIHJldHVybiByZWxhdGlvbnM7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFwcGVkQnlSZWxhdGlvbktleTxFPihyZWxPcHRzOiBSZWxhdGlvbk9wdGlvbnM8RT4pOiBSZWxhdGlvbktleTxFPiB7XG4gIGlmICh0eXBlb2YgcmVsT3B0cy5tYXBwZWRCeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IHJlbEVudGl0eSA9IHJlbE9wdHMuZW50aXR5KCk7XG4gICAgY29uc3QgcmVsTWV0YSA9IGVuc3VyZU1ldGEocmVsRW50aXR5KTtcbiAgICBjb25zdCBrZXlNYXAgPSBnZXRSZWxhdGlvbktleU1hcChyZWxNZXRhKTtcbiAgICByZXR1cm4gcmVsT3B0cy5tYXBwZWRCeShrZXlNYXApO1xuICB9XG4gIHJldHVybiByZWxPcHRzLm1hcHBlZEJ5O1xufVxuXG5mdW5jdGlvbiBnZXRSZWxhdGlvbktleU1hcDxFPihtZXRhOiBFbnRpdHlNZXRhPEU+KTogUmVsYXRpb25LZXlNYXA8RT4ge1xuICByZXR1cm4gZ2V0S2V5cyhtZXRhLnJlbGF0aW9ucykucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGFjY1trZXldID0ga2V5O1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9IGFzIFJlbGF0aW9uS2V5TWFwPEU+KTtcbn1cblxuZnVuY3Rpb24gZ2V0SWRLZXk8RT4obWV0YTogRW50aXR5TWV0YTxFPik6IElkS2V5PEU+IHtcbiAgY29uc3QgaWQgPSBnZXRLZXlzKG1ldGEuZmllbGRzKS5maW5kKChrZXkpID0+IG1ldGEuZmllbGRzW2tleV0/LmlzSWQpO1xuICByZXR1cm4gaWQgYXMgSWRLZXk8RT47XG59XG5cbmZ1bmN0aW9uIGV4dGVuZE1ldGE8RT4odGFyZ2V0OiBFbnRpdHlNZXRhPEU+LCBzb3VyY2U6IEVudGl0eU1ldGE8RT4pOiB2b2lkIHtcbiAgY29uc3Qgc291cmNlRmllbGRzID0geyAuLi5zb3VyY2UuZmllbGRzIH07XG4gIGNvbnN0IHRhcmdldElkID0gZ2V0SWRLZXkodGFyZ2V0KTtcbiAgaWYgKHRhcmdldElkKSB7XG4gICAgY29uc3Qgc291cmNlSWQgPSBnZXRJZEtleShzb3VyY2UpO1xuICAgIGlmIChzb3VyY2VJZCkge1xuICAgICAgZGVsZXRlIHNvdXJjZUZpZWxkc1tzb3VyY2VJZF07XG4gICAgfVxuICB9XG4gIHRhcmdldC5maWVsZHMgPSB7IC4uLnNvdXJjZUZpZWxkcywgLi4udGFyZ2V0LmZpZWxkcyB9O1xuICB0YXJnZXQucmVsYXRpb25zID0geyAuLi5zb3VyY2UucmVsYXRpb25zLCAuLi50YXJnZXQucmVsYXRpb25zIH07XG59XG5cbmZ1bmN0aW9uIGluZmVyVHlwZTxFPihlbnRpdHk6IFR5cGU8RT4sIGtleTogc3RyaW5nKTogYW55IHtcbiAgcmV0dXJuIFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2Rlc2lnbjp0eXBlJywgZW50aXR5LnByb3RvdHlwZSwga2V5KTtcbn1cblxuZnVuY3Rpb24gaW5mZXJFbnRpdHlUeXBlPEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBzdHJpbmcpOiBUeXBlPGFueT4ge1xuICBjb25zdCBpbmZlcnJlZFR5cGUgPSBpbmZlclR5cGUoZW50aXR5LCBrZXkpO1xuICBjb25zdCBpc1ZhbGlkVHlwZSA9IGlzVmFsaWRFbnRpdHlUeXBlKGluZmVycmVkVHlwZSk7XG4gIGlmICghaXNWYWxpZFR5cGUpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfS4ke2tleX0nIHR5cGUgd2FzIGF1dG8taW5mZXJyZWQgd2l0aCBpbnZhbGlkIHR5cGUgJyR7aW5mZXJyZWRUeXBlPy5uYW1lfSdgKTtcbiAgfVxuICByZXR1cm4gaW5mZXJyZWRUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEVudGl0eVR5cGUodHlwZTogYW55KTogdHlwZSBpcyBUeXBlPGFueT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZSAhPT0gQm9vbGVhbiAmJlxuICAgIHR5cGUgIT09IFN0cmluZyAmJlxuICAgIHR5cGUgIT09IE51bWJlciAmJlxuICAgIHR5cGUgIT09IEJpZ0ludCAmJlxuICAgIHR5cGUgIT09IERhdGUgJiZcbiAgICB0eXBlICE9PSBTeW1ib2wgJiZcbiAgICB0eXBlICE9PSBPYmplY3RcbiAgKTtcbn1cbiJdfQ==
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnRpdHkvZGVjb3JhdG9yL2RlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNEJBQTBCO0FBQzFCLHlDQUEwRTtBQWUxRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFDMUIsTUFBTSxPQUFPLEdBQUcsNEJBQTRCLENBQUM7QUFDN0MsTUFBTSxLQUFLLEdBQW9DLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7QUFFeEIsU0FBZ0IsV0FBVyxDQUFJLE1BQWUsRUFBRSxHQUFXLEVBQUUsT0FBcUIsRUFBRTtJQUNsRixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDZCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0tBQzFCO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7SUFDdEUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBUkQsa0NBUUM7QUFFRCxTQUFnQixRQUFRLENBQUksTUFBZSxFQUFFLEdBQVcsRUFBRSxJQUFrQjtJQUMxRSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLElBQUksRUFBRSxFQUFFO1FBQ04sTUFBTSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSwrQ0FBK0MsQ0FBQyxDQUFDO0tBQ2pGO0lBQ0QsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFQRCw0QkFPQztBQUVELFNBQWdCLGNBQWMsQ0FBSSxNQUFlLEVBQUUsR0FBVyxFQUFFLElBQXdCO0lBQ3RGLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ2hCLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUM7S0FDbEM7SUFDRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQzFELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQVJELHdDQVFDO0FBRUQsU0FBZ0IsWUFBWSxDQUFJLE1BQWUsRUFBRSxPQUFzQixFQUFFO0lBQ3ZFLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVoQyxJQUFJLENBQUMsSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksb0JBQW9CLENBQUMsQ0FBQztLQUN0RDtJQUVELE1BQU0sWUFBWSxHQUFHLElBQUEsY0FBTyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFrQixDQUFDO0lBRXRHLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxrREFBa0QsQ0FBQyxDQUFDO0tBQ3BGO0lBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQ3hCLE1BQU0sU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksOERBQThELENBQUMsQ0FBQztTQUNoRztRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25DO0lBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDckMsSUFBSSxLQUFLLEdBQXdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXpFLE9BQU8sS0FBSyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUU7UUFDbkMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFzQixDQUFDLENBQUM7UUFDNUQsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM3QixLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN0QztJQUVELE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ1AsTUFBTSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSwwQ0FBMEMsQ0FBQyxDQUFDO0tBQzVFO0lBQ0QsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFYixPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFwQ0Qsb0NBb0NDO0FBRUQsU0FBZ0IsV0FBVztJQUN6QixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRTtRQUNyRCxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDVixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUM7QUFQRCxrQ0FPQztBQUVELFNBQVMsVUFBVSxDQUFJLE1BQWU7SUFDcEMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixJQUFJLElBQUksRUFBRTtRQUNSLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDN0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBZ0IsT0FBTyxDQUFJLE1BQWU7SUFDeEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsTUFBTSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDO0tBQ3REO0lBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN0QixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBVkQsMEJBVUM7QUFFRCxTQUFTLGFBQWEsQ0FBSSxJQUFtQjtJQUMzQyxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUF3QixDQUFDLENBQUM7UUFFekQsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQ3RCLHFDQUFxQztZQUNyQyxTQUFTO1NBQ1Y7UUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDcEIsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsU0FBUztTQUNWO1FBRUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0QyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN6QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBQSxpQkFBVSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFBLGlCQUFVLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUQsTUFBTSxNQUFNLEdBQUcsSUFBQSxpQkFBVSxFQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFBLGlCQUFVLEVBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEUsT0FBTyxDQUFDLFVBQVUsR0FBRztnQkFDbkIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNuQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7YUFDdkMsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDdEU7UUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDekM7S0FDRjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUksT0FBMkI7SUFDOUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ25DLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxPQUFPLENBQUMsUUFBUSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRW5ELElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBdUIsQ0FBQyxFQUFFO1FBQ25ELE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN4RSxPQUFPO0tBQ1I7SUFFRCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQTBCLENBQUMsQ0FBQztJQUUvRSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO1FBQ2hFLE9BQU8sQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25FLE9BQU8sQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQzNDLE9BQU87S0FDUjtJQUVELE9BQU8sQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLEtBQUssRUFBRSxPQUFPO1FBQ2QsT0FBTyxFQUFFLEtBQUs7S0FDZixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFJLE1BQWU7SUFDOUMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUM5RCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFrQixDQUFDLENBQUM7UUFDdEQsSUFBSSxTQUFTLEVBQUU7WUFDYixNQUFNLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQztZQUM5QixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hELE1BQU0sT0FBTyxHQUFvQjtnQkFDL0IsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixVQUFVLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUNsRCxDQUFDO1lBQ0YsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQztTQUM3QjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFJLE9BQTJCO0lBQzVELElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRTtRQUMxQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNqQztJQUNELE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUMxQixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBSSxJQUFtQjtJQUMvQyxPQUFPLElBQUEsY0FBTyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDeEIsTUFBTSxDQUFDLElBQUEsY0FBTyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMvQixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDbkIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNmLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUFFLEVBQXVCLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUksSUFBbUI7SUFDdEMsTUFBTSxFQUFFLEdBQUcsSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RSxPQUFPLEVBQWMsQ0FBQztBQUN4QixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUksTUFBcUIsRUFBRSxNQUFxQjtJQUNqRSxNQUFNLFlBQVksR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxJQUFJLFFBQVEsRUFBRTtRQUNaLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxJQUFJLFFBQVEsRUFBRTtZQUNaLE9BQU8sWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9CO0tBQ0Y7SUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdEQsTUFBTSxDQUFDLFNBQVMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNsRSxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUksTUFBZSxFQUFFLEdBQVc7SUFDaEQsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBSSxNQUFlLEVBQUUsR0FBVztJQUN0RCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDaEIsTUFBTSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsK0NBQStDLFlBQVksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQzdHO0lBQ0QsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQWdCLGlCQUFpQixDQUFDLElBQVM7SUFDekMsT0FBTyxDQUNMLE9BQU8sSUFBSSxLQUFLLFVBQVU7UUFDMUIsSUFBSSxLQUFLLE9BQU87UUFDaEIsSUFBSSxLQUFLLE1BQU07UUFDZixJQUFJLEtBQUssTUFBTTtRQUNmLElBQUksS0FBSyxNQUFNO1FBQ2YsSUFBSSxLQUFLLElBQUk7UUFDYixJQUFJLEtBQUssTUFBTTtRQUNmLElBQUksS0FBSyxNQUFNLENBQ2hCLENBQUM7QUFDSixDQUFDO0FBWEQsOENBV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuaW1wb3J0IHsgaGFzS2V5cywgbG93ZXJGaXJzdCwgZ2V0S2V5cywgdXBwZXJGaXJzdCB9IGZyb20gJ0B1cWwvY29yZS91dGlsJztcbmltcG9ydCB7XG4gIFJlbGF0aW9uT3B0aW9ucyxcbiAgRmllbGRPcHRpb25zLFxuICBFbnRpdHlPcHRpb25zLFxuICBFbnRpdHlNZXRhLFxuICBUeXBlLFxuICBSZWxhdGlvbktleU1hcCxcbiAgUmVsYXRpb25LZXksXG4gIFJlbGF0aW9uQ2FyZGluYWxpdHksXG4gIEtleSxcbiAgRmllbGRLZXksXG4gIElkS2V5LFxufSBmcm9tICdAdXFsL2NvcmUvdHlwZSc7XG5cbmNvbnN0IGhvbGRlciA9IGdsb2JhbFRoaXM7XG5jb25zdCBtZXRhS2V5ID0gJ0B1cWwvY29yZS9lbnRpdHkvZGVjb3JhdG9yJztcbmNvbnN0IG1ldGFzOiBNYXA8VHlwZTxhbnk+LCBFbnRpdHlNZXRhPGFueT4+ID0gaG9sZGVyW21ldGFLZXldID8/IG5ldyBNYXAoKTtcbmhvbGRlclttZXRhS2V5XSA9IG1ldGFzO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRmllbGQ8RT4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IHN0cmluZywgb3B0czogRmllbGRPcHRpb25zID0ge30pOiBFbnRpdHlNZXRhPEU+IHtcbiAgY29uc3QgbWV0YSA9IGVuc3VyZU1ldGEoZW50aXR5KTtcbiAgaWYgKCFvcHRzLnR5cGUpIHtcbiAgICBjb25zdCB0eXBlID0gaW5mZXJUeXBlKGVudGl0eSwga2V5KTtcbiAgICBvcHRzID0geyAuLi5vcHRzLCB0eXBlIH07XG4gIH1cbiAgbWV0YS5maWVsZHNba2V5XSA9IHsgLi4ubWV0YS5maWVsZHNba2V5XSwgLi4ueyBuYW1lOiBrZXksIC4uLm9wdHMgfSB9O1xuICByZXR1cm4gbWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUlkPEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBzdHJpbmcsIG9wdHM6IEZpZWxkT3B0aW9ucyk6IEVudGl0eU1ldGE8RT4ge1xuICBjb25zdCBtZXRhID0gZW5zdXJlTWV0YShlbnRpdHkpO1xuICBjb25zdCBpZCA9IGdldElkS2V5KG1ldGEpO1xuICBpZiAoaWQpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfScgbXVzdCBoYXZlIGEgc2luZ2xlIGZpZWxkIGRlY29yYXRlZCB3aXRoIEBJZGApO1xuICB9XG4gIHJldHVybiBkZWZpbmVGaWVsZChlbnRpdHksIGtleSwgeyAuLi5vcHRzLCBpc0lkOiB0cnVlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVsYXRpb248RT4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IHN0cmluZywgb3B0czogUmVsYXRpb25PcHRpb25zPEU+KTogRW50aXR5TWV0YTxFPiB7XG4gIGlmICghb3B0cy5lbnRpdHkpIHtcbiAgICBjb25zdCBpbmZlcnJlZFR5cGUgPSBpbmZlckVudGl0eVR5cGUoZW50aXR5LCBrZXkpO1xuICAgIG9wdHMuZW50aXR5ID0gKCkgPT4gaW5mZXJyZWRUeXBlO1xuICB9XG4gIGNvbnN0IG1ldGEgPSBlbnN1cmVNZXRhKGVudGl0eSk7XG4gIG1ldGEucmVsYXRpb25zW2tleV0gPSB7IC4uLm1ldGEucmVsYXRpb25zW2tleV0sIC4uLm9wdHMgfTtcbiAgcmV0dXJuIG1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVFbnRpdHk8RT4oZW50aXR5OiBUeXBlPEU+LCBvcHRzOiBFbnRpdHlPcHRpb25zID0ge30pOiBFbnRpdHlNZXRhPEU+IHtcbiAgY29uc3QgbWV0YSA9IGVuc3VyZU1ldGEoZW50aXR5KTtcblxuICBpZiAoIWhhc0tleXMobWV0YS5maWVsZHMpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKGAnJHtlbnRpdHkubmFtZX0nIG11c3QgaGF2ZSBmaWVsZHNgKTtcbiAgfVxuXG4gIGNvbnN0IG9uRGVsZXRlS2V5cyA9IGdldEtleXMobWV0YS5maWVsZHMpLmZpbHRlcigoa2V5KSA9PiBtZXRhLmZpZWxkc1trZXldLm9uRGVsZXRlKSBhcyBGaWVsZEtleTxFPltdO1xuXG4gIGlmIChvbkRlbGV0ZUtleXMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBtdXN0IGhhdmUgb25lIGZpZWxkIHdpdGggJ29uRGVsZXRlJyBhcyBtYXhpbXVtYCk7XG4gIH1cblxuICBpZiAob3B0cy5zb2Z0RGVsZXRlKSB7XG4gICAgaWYgKCFvbkRlbGV0ZUtleXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfScgbXVzdCBoYXZlIG9uZSBmaWVsZCB3aXRoICdvbkRlbGV0ZScgdG8gZW5hYmxlICdzb2Z0RGVsZXRlJ2ApO1xuICAgIH1cbiAgICBtZXRhLnNvZnREZWxldGUgPSBvbkRlbGV0ZUtleXNbMF07XG4gIH1cblxuICBtZXRhLm5hbWUgPSBvcHRzLm5hbWUgPz8gZW50aXR5Lm5hbWU7XG4gIGxldCBwcm90bzogRnVuY3Rpb25Db25zdHJ1Y3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihlbnRpdHkucHJvdG90eXBlKTtcblxuICB3aGlsZSAocHJvdG8uY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgIGNvbnN0IHBhcmVudE1ldGEgPSBlbnN1cmVNZXRhKHByb3RvLmNvbnN0cnVjdG9yIGFzIFR5cGU8RT4pO1xuICAgIGV4dGVuZE1ldGEobWV0YSwgcGFyZW50TWV0YSk7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG5cbiAgY29uc3QgaWQgPSBnZXRJZEtleShtZXRhKTtcbiAgaWYgKCFpZCkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBtdXN0IGhhdmUgb25lIGZpZWxkIGRlY29yYXRlZCB3aXRoIEBJZGApO1xuICB9XG4gIG1ldGEuaWQgPSBpZDtcblxuICByZXR1cm4gbWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0aWVzKCk6IFR5cGU8YW55PltdIHtcbiAgcmV0dXJuIFsuLi5tZXRhcy5lbnRyaWVzKCldLnJlZHVjZSgoYWNjLCBba2V5LCB2YWxdKSA9PiB7XG4gICAgaWYgKHZhbC5pZCkge1xuICAgICAgYWNjLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVNZXRhPEU+KGVudGl0eTogVHlwZTxFPik6IEVudGl0eU1ldGE8RT4ge1xuICBsZXQgbWV0YSA9IG1ldGFzLmdldChlbnRpdHkpO1xuICBpZiAobWV0YSkge1xuICAgIHJldHVybiBtZXRhO1xuICB9XG4gIG1ldGEgPSB7IGVudGl0eSwgZmllbGRzOiB7fSwgcmVsYXRpb25zOiB7fSB9O1xuICBtZXRhcy5zZXQoZW50aXR5LCBtZXRhKTtcbiAgcmV0dXJuIG1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhPEU+KGVudGl0eTogVHlwZTxFPik6IEVudGl0eU1ldGE8RT4ge1xuICBjb25zdCBtZXRhID0gbWV0YXMuZ2V0KGVudGl0eSk7XG4gIGlmICghbWV0YSkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBpcyBub3QgYW4gZW50aXR5YCk7XG4gIH1cbiAgaWYgKG1ldGEucHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cbiAgbWV0YS5wcm9jZXNzZWQgPSB0cnVlO1xuICByZXR1cm4gZmlsbFJlbGF0aW9ucyhtZXRhKTtcbn1cblxuZnVuY3Rpb24gZmlsbFJlbGF0aW9uczxFPihtZXRhOiBFbnRpdHlNZXRhPEU+KTogRW50aXR5TWV0YTxFPiB7XG4gIGZvciAoY29uc3QgcmVsS2V5IGluIG1ldGEucmVsYXRpb25zKSB7XG4gICAgY29uc3QgcmVsT3B0cyA9IG1ldGEucmVsYXRpb25zW3JlbEtleSBhcyBSZWxhdGlvbktleTxFPl07XG5cbiAgICBpZiAocmVsT3B0cy5yZWZlcmVuY2VzKSB7XG4gICAgICAvLyByZWZlcmVuY2VzIHdlcmUgbWFudWFsbHkgc3BlY2lmaWVkXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocmVsT3B0cy5tYXBwZWRCeSkge1xuICAgICAgZmlsbEludmVyc2VTaWRlUmVsYXRpb25zKHJlbE9wdHMpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVsRW50aXR5ID0gcmVsT3B0cy5lbnRpdHkoKTtcbiAgICBjb25zdCByZWxNZXRhID0gZW5zdXJlTWV0YShyZWxFbnRpdHkpO1xuXG4gICAgaWYgKHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICdtbScpIHtcbiAgICAgIGNvbnN0IGlkTmFtZSA9IG1ldGEuZmllbGRzW21ldGEuaWRdLm5hbWU7XG4gICAgICBjb25zdCByZWxJZE5hbWUgPSByZWxNZXRhLmZpZWxkc1tyZWxNZXRhLmlkXS5uYW1lO1xuICAgICAgY29uc3Qgc291cmNlID0gbG93ZXJGaXJzdChtZXRhLm5hbWUpICsgdXBwZXJGaXJzdChpZE5hbWUpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbG93ZXJGaXJzdChyZWxNZXRhLm5hbWUpICsgdXBwZXJGaXJzdChyZWxJZE5hbWUpO1xuICAgICAgcmVsT3B0cy5yZWZlcmVuY2VzID0gW1xuICAgICAgICB7IGxvY2FsOiBzb3VyY2UsIGZvcmVpZ246IG1ldGEuaWQgfSxcbiAgICAgICAgeyBsb2NhbDogdGFyZ2V0LCBmb3JlaWduOiByZWxNZXRhLmlkIH0sXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWxPcHRzLnJlZmVyZW5jZXMgPSBbeyBsb2NhbDogYCR7cmVsS2V5fUlkYCwgZm9yZWlnbjogcmVsTWV0YS5pZCB9XTtcbiAgICB9XG5cbiAgICBpZiAocmVsT3B0cy50aHJvdWdoKSB7XG4gICAgICBmaWxsVGhyb3VnaFJlbGF0aW9ucyhyZWxPcHRzLnRocm91Z2goKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGE7XG59XG5cbmZ1bmN0aW9uIGZpbGxJbnZlcnNlU2lkZVJlbGF0aW9uczxFPihyZWxPcHRzOiBSZWxhdGlvbk9wdGlvbnM8RT4pOiB2b2lkIHtcbiAgY29uc3QgcmVsRW50aXR5ID0gcmVsT3B0cy5lbnRpdHkoKTtcbiAgY29uc3QgcmVsTWV0YSA9IGdldE1ldGEocmVsRW50aXR5KTtcbiAgcmVsT3B0cy5tYXBwZWRCeSA9IGdldE1hcHBlZEJ5UmVsYXRpb25LZXkocmVsT3B0cyk7XG5cbiAgaWYgKHJlbE1ldGEuZmllbGRzW3JlbE9wdHMubWFwcGVkQnkgYXMgRmllbGRLZXk8RT5dKSB7XG4gICAgcmVsT3B0cy5yZWZlcmVuY2VzID0gW3sgbG9jYWw6IHJlbE1ldGEuaWQsIGZvcmVpZ246IHJlbE9wdHMubWFwcGVkQnkgfV07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbWFwcGVkQnlSZWxhdGlvbiA9IHJlbE1ldGEucmVsYXRpb25zW3JlbE9wdHMubWFwcGVkQnkgYXMgUmVsYXRpb25LZXk8RT5dO1xuXG4gIGlmIChyZWxPcHRzLmNhcmRpbmFsaXR5ID09PSAnbTEnIHx8IHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICdtbScpIHtcbiAgICByZWxPcHRzLnJlZmVyZW5jZXMgPSBtYXBwZWRCeVJlbGF0aW9uLnJlZmVyZW5jZXMuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgcmVsT3B0cy50aHJvdWdoID0gbWFwcGVkQnlSZWxhdGlvbi50aHJvdWdoO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJlbE9wdHMucmVmZXJlbmNlcyA9IG1hcHBlZEJ5UmVsYXRpb24ucmVmZXJlbmNlcy5tYXAoKHsgbG9jYWwsIGZvcmVpZ24gfSkgPT4gKHtcbiAgICBsb2NhbDogZm9yZWlnbixcbiAgICBmb3JlaWduOiBsb2NhbCxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBmaWxsVGhyb3VnaFJlbGF0aW9uczxFPihlbnRpdHk6IFR5cGU8RT4pOiB2b2lkIHtcbiAgY29uc3QgbWV0YSA9IGVuc3VyZU1ldGEoZW50aXR5KTtcbiAgbWV0YS5yZWxhdGlvbnMgPSBnZXRLZXlzKG1ldGEuZmllbGRzKS5yZWR1Y2UoKHJlbGF0aW9ucywga2V5KSA9PiB7XG4gICAgY29uc3QgeyByZWZlcmVuY2UgfSA9IG1ldGEuZmllbGRzW2tleSBhcyBGaWVsZEtleTxFPl07XG4gICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgY29uc3QgcmVsRW50aXR5ID0gcmVmZXJlbmNlKCk7XG4gICAgICBjb25zdCByZWxNZXRhID0gZW5zdXJlTWV0YShyZWxFbnRpdHkpO1xuICAgICAgY29uc3QgcmVsS2V5ID0ga2V5LnNsaWNlKDAsIC1yZWxNZXRhLmlkLmxlbmd0aCk7XG4gICAgICBjb25zdCByZWxPcHRzOiBSZWxhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIGVudGl0eTogcmVmZXJlbmNlLFxuICAgICAgICBjYXJkaW5hbGl0eTogJ20xJyxcbiAgICAgICAgcmVmZXJlbmNlczogW3sgbG9jYWw6IGtleSwgZm9yZWlnbjogcmVsTWV0YS5pZCB9XSxcbiAgICAgIH07XG4gICAgICByZWxhdGlvbnNbcmVsS2V5XSA9IHJlbE9wdHM7XG4gICAgfVxuICAgIHJldHVybiByZWxhdGlvbnM7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFwcGVkQnlSZWxhdGlvbktleTxFPihyZWxPcHRzOiBSZWxhdGlvbk9wdGlvbnM8RT4pOiBLZXk8RT4ge1xuICBpZiAodHlwZW9mIHJlbE9wdHMubWFwcGVkQnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCByZWxFbnRpdHkgPSByZWxPcHRzLmVudGl0eSgpO1xuICAgIGNvbnN0IHJlbE1ldGEgPSBlbnN1cmVNZXRhKHJlbEVudGl0eSk7XG4gICAgY29uc3Qga2V5TWFwID0gZ2V0UmVsYXRpb25LZXlNYXAocmVsTWV0YSk7XG4gICAgcmV0dXJuIHJlbE9wdHMubWFwcGVkQnkoa2V5TWFwKTtcbiAgfVxuICByZXR1cm4gcmVsT3B0cy5tYXBwZWRCeTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVsYXRpb25LZXlNYXA8RT4obWV0YTogRW50aXR5TWV0YTxFPik6IFJlbGF0aW9uS2V5TWFwPEU+IHtcbiAgcmV0dXJuIGdldEtleXMobWV0YS5maWVsZHMpXG4gICAgLmNvbmNhdChnZXRLZXlzKG1ldGEucmVsYXRpb25zKSlcbiAgICAucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBrZXk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlbGF0aW9uS2V5TWFwPEU+KTtcbn1cblxuZnVuY3Rpb24gZ2V0SWRLZXk8RT4obWV0YTogRW50aXR5TWV0YTxFPik6IElkS2V5PEU+IHtcbiAgY29uc3QgaWQgPSBnZXRLZXlzKG1ldGEuZmllbGRzKS5maW5kKChrZXkpID0+IG1ldGEuZmllbGRzW2tleV0/LmlzSWQpO1xuICByZXR1cm4gaWQgYXMgSWRLZXk8RT47XG59XG5cbmZ1bmN0aW9uIGV4dGVuZE1ldGE8RT4odGFyZ2V0OiBFbnRpdHlNZXRhPEU+LCBzb3VyY2U6IEVudGl0eU1ldGE8RT4pOiB2b2lkIHtcbiAgY29uc3Qgc291cmNlRmllbGRzID0geyAuLi5zb3VyY2UuZmllbGRzIH07XG4gIGNvbnN0IHRhcmdldElkID0gZ2V0SWRLZXkodGFyZ2V0KTtcbiAgaWYgKHRhcmdldElkKSB7XG4gICAgY29uc3Qgc291cmNlSWQgPSBnZXRJZEtleShzb3VyY2UpO1xuICAgIGlmIChzb3VyY2VJZCkge1xuICAgICAgZGVsZXRlIHNvdXJjZUZpZWxkc1tzb3VyY2VJZF07XG4gICAgfVxuICB9XG4gIHRhcmdldC5maWVsZHMgPSB7IC4uLnNvdXJjZUZpZWxkcywgLi4udGFyZ2V0LmZpZWxkcyB9O1xuICB0YXJnZXQucmVsYXRpb25zID0geyAuLi5zb3VyY2UucmVsYXRpb25zLCAuLi50YXJnZXQucmVsYXRpb25zIH07XG59XG5cbmZ1bmN0aW9uIGluZmVyVHlwZTxFPihlbnRpdHk6IFR5cGU8RT4sIGtleTogc3RyaW5nKTogYW55IHtcbiAgcmV0dXJuIFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2Rlc2lnbjp0eXBlJywgZW50aXR5LnByb3RvdHlwZSwga2V5KTtcbn1cblxuZnVuY3Rpb24gaW5mZXJFbnRpdHlUeXBlPEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBzdHJpbmcpOiBUeXBlPGFueT4ge1xuICBjb25zdCBpbmZlcnJlZFR5cGUgPSBpbmZlclR5cGUoZW50aXR5LCBrZXkpO1xuICBjb25zdCBpc1ZhbGlkVHlwZSA9IGlzVmFsaWRFbnRpdHlUeXBlKGluZmVycmVkVHlwZSk7XG4gIGlmICghaXNWYWxpZFR5cGUpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfS4ke2tleX0nIHR5cGUgd2FzIGF1dG8taW5mZXJyZWQgd2l0aCBpbnZhbGlkIHR5cGUgJyR7aW5mZXJyZWRUeXBlPy5uYW1lfSdgKTtcbiAgfVxuICByZXR1cm4gaW5mZXJyZWRUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEVudGl0eVR5cGUodHlwZTogYW55KTogdHlwZSBpcyBUeXBlPGFueT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZSAhPT0gQm9vbGVhbiAmJlxuICAgIHR5cGUgIT09IFN0cmluZyAmJlxuICAgIHR5cGUgIT09IE51bWJlciAmJlxuICAgIHR5cGUgIT09IEJpZ0ludCAmJlxuICAgIHR5cGUgIT09IERhdGUgJiZcbiAgICB0eXBlICE9PSBTeW1ib2wgJiZcbiAgICB0eXBlICE9PSBPYmplY3RcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|