@coralogix/rum-cli 1.1.2 → 1.1.4
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 +24 -7
- package/api/rum-api.ts +3 -3
- package/dist/api/rum-api.d.ts +1 -1
- package/dist/api/rum-api.js +2 -2
- package/dist/proto-models/com/coralogix/rum/v2/audit_log.js +62 -0
- package/dist/proto-models/com/coralogix/rum/v2/chunk.js +330 -0
- package/dist/proto-models/com/coralogix/rum/v2/file.js +140 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +233 -0
- package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +181 -0
- package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +277 -0
- package/dist/proto-models/google/protobuf/descriptor.js +3612 -0
- package/dist/services/source-maps/source-maps.service.js +2 -2
- package/dist/services/source-maps/utils/traverse-folder.util.d.ts +1 -1
- package/dist/services/source-maps/utils/traverse-folder.util.js +1 -1
- package/generate-protos.sh +3 -3
- package/package.json +2 -2
- package/protoset.bin +0 -0
- package/services/source-maps/source-maps.service.ts +1 -1
- package/services/source-maps/utils/traverse-folder.util.ts +2 -2
- package/dist/src/app/proto-models/com/coralogix/rum/v2/audit_log.js +0 -62
- package/dist/src/app/proto-models/com/coralogix/rum/v2/chunk.js +0 -330
- package/dist/src/app/proto-models/com/coralogix/rum/v2/file.js +0 -140
- package/dist/src/app/proto-models/com/coralogix/rum/v2/rum_service.js +0 -233
- package/dist/src/app/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +0 -181
- package/dist/src/app/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +0 -277
- package/dist/src/app/proto-models/google/protobuf/descriptor.js +0 -3612
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/audit_log.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/chunk.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/file.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_service.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_source_map_service.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/source_code_file_mapping.d.ts +0 -0
- /package/dist/{src/app/proto-models → proto-models}/google/protobuf/descriptor.d.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/audit_log.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/chunk.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/file.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_service.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_source_map_service.ts +0 -0
- /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/source_code_file_mapping.ts +0 -0
- /package/{src/app/proto-models → proto-models}/google/protobuf/descriptor.ts +0 -0
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.SourceCodeLineMapping = exports.FileSourceCodeMap_FileNameToCodeEntry = exports.FileSourceCodeMap = exports.protobufPackage = void 0;
|
|
7
|
-
/* eslint-disable */
|
|
8
|
-
const minimal_1 = __importDefault(require("protobufjs/minimal"));
|
|
9
|
-
exports.protobufPackage = "com.coralogix.rum.v2";
|
|
10
|
-
function createBaseFileSourceCodeMap() {
|
|
11
|
-
return { fileNameToCode: {} };
|
|
12
|
-
}
|
|
13
|
-
exports.FileSourceCodeMap = {
|
|
14
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
15
|
-
Object.entries(message.fileNameToCode).forEach(([key, value]) => {
|
|
16
|
-
exports.FileSourceCodeMap_FileNameToCodeEntry.encode({ key: key, value }, writer.uint32(10).fork()).ldelim();
|
|
17
|
-
});
|
|
18
|
-
return writer;
|
|
19
|
-
},
|
|
20
|
-
decode(input, length) {
|
|
21
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
22
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
23
|
-
const message = createBaseFileSourceCodeMap();
|
|
24
|
-
while (reader.pos < end) {
|
|
25
|
-
const tag = reader.uint32();
|
|
26
|
-
switch (tag >>> 3) {
|
|
27
|
-
case 1:
|
|
28
|
-
if (tag !== 10) {
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
const entry1 = exports.FileSourceCodeMap_FileNameToCodeEntry.decode(reader, reader.uint32());
|
|
32
|
-
if (entry1.value !== undefined) {
|
|
33
|
-
message.fileNameToCode[entry1.key] = entry1.value;
|
|
34
|
-
}
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
38
|
-
break;
|
|
39
|
-
}
|
|
40
|
-
reader.skipType(tag & 7);
|
|
41
|
-
}
|
|
42
|
-
return message;
|
|
43
|
-
},
|
|
44
|
-
fromJSON(object) {
|
|
45
|
-
return {
|
|
46
|
-
fileNameToCode: isObject(object.fileNameToCode)
|
|
47
|
-
? Object.entries(object.fileNameToCode).reduce((acc, [key, value]) => {
|
|
48
|
-
acc[key] = String(value);
|
|
49
|
-
return acc;
|
|
50
|
-
}, {})
|
|
51
|
-
: {},
|
|
52
|
-
};
|
|
53
|
-
},
|
|
54
|
-
toJSON(message) {
|
|
55
|
-
const obj = {};
|
|
56
|
-
obj.fileNameToCode = {};
|
|
57
|
-
if (message.fileNameToCode) {
|
|
58
|
-
Object.entries(message.fileNameToCode).forEach(([k, v]) => {
|
|
59
|
-
obj.fileNameToCode[k] = v;
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
return obj;
|
|
63
|
-
},
|
|
64
|
-
create(base) {
|
|
65
|
-
return exports.FileSourceCodeMap.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
66
|
-
},
|
|
67
|
-
fromPartial(object) {
|
|
68
|
-
var _a;
|
|
69
|
-
const message = createBaseFileSourceCodeMap();
|
|
70
|
-
message.fileNameToCode = Object.entries((_a = object.fileNameToCode) !== null && _a !== void 0 ? _a : {}).reduce((acc, [key, value]) => {
|
|
71
|
-
if (value !== undefined) {
|
|
72
|
-
acc[key] = String(value);
|
|
73
|
-
}
|
|
74
|
-
return acc;
|
|
75
|
-
}, {});
|
|
76
|
-
return message;
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
function createBaseFileSourceCodeMap_FileNameToCodeEntry() {
|
|
80
|
-
return { key: "", value: "" };
|
|
81
|
-
}
|
|
82
|
-
exports.FileSourceCodeMap_FileNameToCodeEntry = {
|
|
83
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
84
|
-
if (message.key !== "") {
|
|
85
|
-
writer.uint32(10).string(message.key);
|
|
86
|
-
}
|
|
87
|
-
if (message.value !== "") {
|
|
88
|
-
writer.uint32(18).string(message.value);
|
|
89
|
-
}
|
|
90
|
-
return writer;
|
|
91
|
-
},
|
|
92
|
-
decode(input, length) {
|
|
93
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
94
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
95
|
-
const message = createBaseFileSourceCodeMap_FileNameToCodeEntry();
|
|
96
|
-
while (reader.pos < end) {
|
|
97
|
-
const tag = reader.uint32();
|
|
98
|
-
switch (tag >>> 3) {
|
|
99
|
-
case 1:
|
|
100
|
-
if (tag !== 10) {
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
message.key = reader.string();
|
|
104
|
-
continue;
|
|
105
|
-
case 2:
|
|
106
|
-
if (tag !== 18) {
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
|
-
message.value = reader.string();
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
113
|
-
break;
|
|
114
|
-
}
|
|
115
|
-
reader.skipType(tag & 7);
|
|
116
|
-
}
|
|
117
|
-
return message;
|
|
118
|
-
},
|
|
119
|
-
fromJSON(object) {
|
|
120
|
-
return { key: isSet(object.key) ? String(object.key) : "", value: isSet(object.value) ? String(object.value) : "" };
|
|
121
|
-
},
|
|
122
|
-
toJSON(message) {
|
|
123
|
-
const obj = {};
|
|
124
|
-
message.key !== undefined && (obj.key = message.key);
|
|
125
|
-
message.value !== undefined && (obj.value = message.value);
|
|
126
|
-
return obj;
|
|
127
|
-
},
|
|
128
|
-
create(base) {
|
|
129
|
-
return exports.FileSourceCodeMap_FileNameToCodeEntry.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
130
|
-
},
|
|
131
|
-
fromPartial(object) {
|
|
132
|
-
var _a, _b;
|
|
133
|
-
const message = createBaseFileSourceCodeMap_FileNameToCodeEntry();
|
|
134
|
-
message.key = (_a = object.key) !== null && _a !== void 0 ? _a : "";
|
|
135
|
-
message.value = (_b = object.value) !== null && _b !== void 0 ? _b : "";
|
|
136
|
-
return message;
|
|
137
|
-
},
|
|
138
|
-
};
|
|
139
|
-
function createBaseSourceCodeLineMapping() {
|
|
140
|
-
return {
|
|
141
|
-
chunkName: "",
|
|
142
|
-
sourceFileName: "",
|
|
143
|
-
originalLineNumber: 0,
|
|
144
|
-
generatedLineNumber: 0,
|
|
145
|
-
originalColumnNumber: 0,
|
|
146
|
-
generatedColumnNumber: 0,
|
|
147
|
-
sourceFunctionName: "",
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
exports.SourceCodeLineMapping = {
|
|
151
|
-
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
152
|
-
if (message.chunkName !== "") {
|
|
153
|
-
writer.uint32(10).string(message.chunkName);
|
|
154
|
-
}
|
|
155
|
-
if (message.sourceFileName !== "") {
|
|
156
|
-
writer.uint32(18).string(message.sourceFileName);
|
|
157
|
-
}
|
|
158
|
-
if (message.originalLineNumber !== 0) {
|
|
159
|
-
writer.uint32(24).int32(message.originalLineNumber);
|
|
160
|
-
}
|
|
161
|
-
if (message.generatedLineNumber !== 0) {
|
|
162
|
-
writer.uint32(32).int32(message.generatedLineNumber);
|
|
163
|
-
}
|
|
164
|
-
if (message.originalColumnNumber !== 0) {
|
|
165
|
-
writer.uint32(40).int32(message.originalColumnNumber);
|
|
166
|
-
}
|
|
167
|
-
if (message.generatedColumnNumber !== 0) {
|
|
168
|
-
writer.uint32(48).int32(message.generatedColumnNumber);
|
|
169
|
-
}
|
|
170
|
-
if (message.sourceFunctionName !== "") {
|
|
171
|
-
writer.uint32(58).string(message.sourceFunctionName);
|
|
172
|
-
}
|
|
173
|
-
return writer;
|
|
174
|
-
},
|
|
175
|
-
decode(input, length) {
|
|
176
|
-
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
177
|
-
let end = length === undefined ? reader.len : reader.pos + length;
|
|
178
|
-
const message = createBaseSourceCodeLineMapping();
|
|
179
|
-
while (reader.pos < end) {
|
|
180
|
-
const tag = reader.uint32();
|
|
181
|
-
switch (tag >>> 3) {
|
|
182
|
-
case 1:
|
|
183
|
-
if (tag !== 10) {
|
|
184
|
-
break;
|
|
185
|
-
}
|
|
186
|
-
message.chunkName = reader.string();
|
|
187
|
-
continue;
|
|
188
|
-
case 2:
|
|
189
|
-
if (tag !== 18) {
|
|
190
|
-
break;
|
|
191
|
-
}
|
|
192
|
-
message.sourceFileName = reader.string();
|
|
193
|
-
continue;
|
|
194
|
-
case 3:
|
|
195
|
-
if (tag !== 24) {
|
|
196
|
-
break;
|
|
197
|
-
}
|
|
198
|
-
message.originalLineNumber = reader.int32();
|
|
199
|
-
continue;
|
|
200
|
-
case 4:
|
|
201
|
-
if (tag !== 32) {
|
|
202
|
-
break;
|
|
203
|
-
}
|
|
204
|
-
message.generatedLineNumber = reader.int32();
|
|
205
|
-
continue;
|
|
206
|
-
case 5:
|
|
207
|
-
if (tag !== 40) {
|
|
208
|
-
break;
|
|
209
|
-
}
|
|
210
|
-
message.originalColumnNumber = reader.int32();
|
|
211
|
-
continue;
|
|
212
|
-
case 6:
|
|
213
|
-
if (tag !== 48) {
|
|
214
|
-
break;
|
|
215
|
-
}
|
|
216
|
-
message.generatedColumnNumber = reader.int32();
|
|
217
|
-
continue;
|
|
218
|
-
case 7:
|
|
219
|
-
if (tag !== 58) {
|
|
220
|
-
break;
|
|
221
|
-
}
|
|
222
|
-
message.sourceFunctionName = reader.string();
|
|
223
|
-
continue;
|
|
224
|
-
}
|
|
225
|
-
if ((tag & 7) === 4 || tag === 0) {
|
|
226
|
-
break;
|
|
227
|
-
}
|
|
228
|
-
reader.skipType(tag & 7);
|
|
229
|
-
}
|
|
230
|
-
return message;
|
|
231
|
-
},
|
|
232
|
-
fromJSON(object) {
|
|
233
|
-
return {
|
|
234
|
-
chunkName: isSet(object.chunkName) ? String(object.chunkName) : "",
|
|
235
|
-
sourceFileName: isSet(object.sourceFileName) ? String(object.sourceFileName) : "",
|
|
236
|
-
originalLineNumber: isSet(object.originalLineNumber) ? Number(object.originalLineNumber) : 0,
|
|
237
|
-
generatedLineNumber: isSet(object.generatedLineNumber) ? Number(object.generatedLineNumber) : 0,
|
|
238
|
-
originalColumnNumber: isSet(object.originalColumnNumber) ? Number(object.originalColumnNumber) : 0,
|
|
239
|
-
generatedColumnNumber: isSet(object.generatedColumnNumber) ? Number(object.generatedColumnNumber) : 0,
|
|
240
|
-
sourceFunctionName: isSet(object.sourceFunctionName) ? String(object.sourceFunctionName) : "",
|
|
241
|
-
};
|
|
242
|
-
},
|
|
243
|
-
toJSON(message) {
|
|
244
|
-
const obj = {};
|
|
245
|
-
message.chunkName !== undefined && (obj.chunkName = message.chunkName);
|
|
246
|
-
message.sourceFileName !== undefined && (obj.sourceFileName = message.sourceFileName);
|
|
247
|
-
message.originalLineNumber !== undefined && (obj.originalLineNumber = Math.round(message.originalLineNumber));
|
|
248
|
-
message.generatedLineNumber !== undefined && (obj.generatedLineNumber = Math.round(message.generatedLineNumber));
|
|
249
|
-
message.originalColumnNumber !== undefined && (obj.originalColumnNumber = Math.round(message.originalColumnNumber));
|
|
250
|
-
message.generatedColumnNumber !== undefined &&
|
|
251
|
-
(obj.generatedColumnNumber = Math.round(message.generatedColumnNumber));
|
|
252
|
-
message.sourceFunctionName !== undefined && (obj.sourceFunctionName = message.sourceFunctionName);
|
|
253
|
-
return obj;
|
|
254
|
-
},
|
|
255
|
-
create(base) {
|
|
256
|
-
return exports.SourceCodeLineMapping.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
257
|
-
},
|
|
258
|
-
fromPartial(object) {
|
|
259
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
260
|
-
const message = createBaseSourceCodeLineMapping();
|
|
261
|
-
message.chunkName = (_a = object.chunkName) !== null && _a !== void 0 ? _a : "";
|
|
262
|
-
message.sourceFileName = (_b = object.sourceFileName) !== null && _b !== void 0 ? _b : "";
|
|
263
|
-
message.originalLineNumber = (_c = object.originalLineNumber) !== null && _c !== void 0 ? _c : 0;
|
|
264
|
-
message.generatedLineNumber = (_d = object.generatedLineNumber) !== null && _d !== void 0 ? _d : 0;
|
|
265
|
-
message.originalColumnNumber = (_e = object.originalColumnNumber) !== null && _e !== void 0 ? _e : 0;
|
|
266
|
-
message.generatedColumnNumber = (_f = object.generatedColumnNumber) !== null && _f !== void 0 ? _f : 0;
|
|
267
|
-
message.sourceFunctionName = (_g = object.sourceFunctionName) !== null && _g !== void 0 ? _g : "";
|
|
268
|
-
return message;
|
|
269
|
-
},
|
|
270
|
-
};
|
|
271
|
-
function isObject(value) {
|
|
272
|
-
return typeof value === "object" && value !== null;
|
|
273
|
-
}
|
|
274
|
-
function isSet(value) {
|
|
275
|
-
return value !== null && value !== undefined;
|
|
276
|
-
}
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlX2NvZGVfZmlsZV9tYXBwaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvc291cmNlX2NvZGVfZmlsZV9tYXBwaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9CQUFvQjtBQUNwQixpRUFBcUM7QUFFeEIsUUFBQSxlQUFlLEdBQUcsc0JBQXNCLENBQUM7QUFxQnRELFNBQVMsMkJBQTJCO0lBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDaEMsQ0FBQztBQUVZLFFBQUEsaUJBQWlCLEdBQUc7SUFDL0IsTUFBTSxDQUFDLE9BQTBCLEVBQUUsU0FBcUIsaUJBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ3pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDOUQsNkNBQXFDLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUcsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQThCLEVBQUUsTUFBZTtRQUNwRCxNQUFNLE1BQU0sR0FBRyxLQUFLLFlBQVksaUJBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsaUJBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlFLElBQUksR0FBRyxHQUFHLE1BQU0sS0FBSyxT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R0FBRyxNQUFBLE1BQU0sQ0FBQyxrQkFBa0IsbUNBQUksRUFBRSxDQUFDO1FBQzdELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRixDQUFDO0FBVUYsU0FBUyxRQUFRLENBQUMsS0FBVTtJQUMxQixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxLQUFVO0lBQ3ZCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tIFwicHJvdG9idWZqcy9taW5pbWFsXCI7XG5cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSBcImNvbS5jb3JhbG9naXgucnVtLnYyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVNvdXJjZUNvZGVNYXAge1xuICBmaWxlTmFtZVRvQ29kZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWxlU291cmNlQ29kZU1hcF9GaWxlTmFtZVRvQ29kZUVudHJ5IHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlQ29kZUxpbmVNYXBwaW5nIHtcbiAgY2h1bmtOYW1lOiBzdHJpbmc7XG4gIHNvdXJjZUZpbGVOYW1lOiBzdHJpbmc7XG4gIG9yaWdpbmFsTGluZU51bWJlcjogbnVtYmVyO1xuICBnZW5lcmF0ZWRMaW5lTnVtYmVyOiBudW1iZXI7XG4gIG9yaWdpbmFsQ29sdW1uTnVtYmVyOiBudW1iZXI7XG4gIGdlbmVyYXRlZENvbHVtbk51bWJlcjogbnVtYmVyO1xuICBzb3VyY2VGdW5jdGlvbk5hbWU6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZUZpbGVTb3VyY2VDb2RlTWFwKCk6IEZpbGVTb3VyY2VDb2RlTWFwIHtcbiAgcmV0dXJuIHsgZmlsZU5hbWVUb0NvZGU6IHt9IH07XG59XG5cbmV4cG9ydCBjb25zdCBGaWxlU291cmNlQ29kZU1hcCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEZpbGVTb3VyY2VDb2RlTWFwLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgT2JqZWN0LmVudHJpZXMobWVzc2FnZS5maWxlTmFtZVRvQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBGaWxlU291cmNlQ29kZU1hcF9GaWxlTmFtZVRvQ29kZUVudHJ5LmVuY29kZSh7IGtleToga2V5IGFzIGFueSwgdmFsdWUgfSwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9KTtcbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEZpbGVTb3VyY2VDb2RlTWFwIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUZpbGVTb3VyY2VDb2RlTWFwKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZW50cnkxID0gRmlsZVNvdXJjZUNvZGVNYXBfRmlsZU5hbWVUb0NvZGVFbnRyeS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGlmIChlbnRyeTEudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbWVzc2FnZS5maWxlTmFtZVRvQ29kZVtlbnRyeTEua2V5XSA9IGVudHJ5MS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWxlU291cmNlQ29kZU1hcCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGVOYW1lVG9Db2RlOiBpc09iamVjdChvYmplY3QuZmlsZU5hbWVUb0NvZGUpXG4gICAgICAgID8gT2JqZWN0LmVudHJpZXMob2JqZWN0LmZpbGVOYW1lVG9Db2RlKS5yZWR1Y2U8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4oKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgYWNjW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KVxuICAgICAgICA6IHt9LFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEZpbGVTb3VyY2VDb2RlTWFwKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBvYmouZmlsZU5hbWVUb0NvZGUgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5maWxlTmFtZVRvQ29kZSkge1xuICAgICAgT2JqZWN0LmVudHJpZXMobWVzc2FnZS5maWxlTmFtZVRvQ29kZSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIG9iai5maWxlTmFtZVRvQ29kZVtrXSA9IHY7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEZpbGVTb3VyY2VDb2RlTWFwPik6IEZpbGVTb3VyY2VDb2RlTWFwIHtcbiAgICByZXR1cm4gRmlsZVNvdXJjZUNvZGVNYXAuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxGaWxlU291cmNlQ29kZU1hcD4pOiBGaWxlU291cmNlQ29kZU1hcCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWxlU291cmNlQ29kZU1hcCgpO1xuICAgIG1lc3NhZ2UuZmlsZU5hbWVUb0NvZGUgPSBPYmplY3QuZW50cmllcyhvYmplY3QuZmlsZU5hbWVUb0NvZGUgPz8ge30pLnJlZHVjZTx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9PihcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjY1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9LFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRmlsZVNvdXJjZUNvZGVNYXBfRmlsZU5hbWVUb0NvZGVFbnRyeSgpOiBGaWxlU291cmNlQ29kZU1hcF9GaWxlTmFtZVRvQ29kZUVudHJ5IHtcbiAgcmV0dXJuIHsga2V5OiBcIlwiLCB2YWx1ZTogXCJcIiB9O1xufVxuXG5leHBvcnQgY29uc3QgRmlsZVNvdXJjZUNvZGVNYXBfRmlsZU5hbWVUb0NvZGVFbnRyeSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEZpbGVTb3VyY2VDb2RlTWFwX0ZpbGVOYW1lVG9Db2RlRW50cnksIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5rZXkgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmtleSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRmlsZVNvdXJjZUNvZGVNYXBfRmlsZU5hbWVUb0NvZGVFbnRyeSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWxlU291cmNlQ29kZU1hcF9GaWxlTmFtZVRvQ29kZUVudHJ5KCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5rZXkgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS52YWx1ZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEZpbGVTb3VyY2VDb2RlTWFwX0ZpbGVOYW1lVG9Db2RlRW50cnkge1xuICAgIHJldHVybiB7IGtleTogaXNTZXQob2JqZWN0LmtleSkgPyBTdHJpbmcob2JqZWN0LmtleSkgOiBcIlwiLCB2YWx1ZTogaXNTZXQob2JqZWN0LnZhbHVlKSA/IFN0cmluZyhvYmplY3QudmFsdWUpIDogXCJcIiB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBGaWxlU291cmNlQ29kZU1hcF9GaWxlTmFtZVRvQ29kZUVudHJ5KTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLmtleSAhPT0gdW5kZWZpbmVkICYmIChvYmoua2V5ID0gbWVzc2FnZS5rZXkpO1xuICAgIG1lc3NhZ2UudmFsdWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLnZhbHVlID0gbWVzc2FnZS52YWx1ZSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEZpbGVTb3VyY2VDb2RlTWFwX0ZpbGVOYW1lVG9Db2RlRW50cnk+KTogRmlsZVNvdXJjZUNvZGVNYXBfRmlsZU5hbWVUb0NvZGVFbnRyeSB7XG4gICAgcmV0dXJuIEZpbGVTb3VyY2VDb2RlTWFwX0ZpbGVOYW1lVG9Db2RlRW50cnkuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxGaWxlU291cmNlQ29kZU1hcF9GaWxlTmFtZVRvQ29kZUVudHJ5Pik6IEZpbGVTb3VyY2VDb2RlTWFwX0ZpbGVOYW1lVG9Db2RlRW50cnkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRmlsZVNvdXJjZUNvZGVNYXBfRmlsZU5hbWVUb0NvZGVFbnRyeSgpO1xuICAgIG1lc3NhZ2Uua2V5ID0gb2JqZWN0LmtleSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UudmFsdWUgPSBvYmplY3QudmFsdWUgPz8gXCJcIjtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VTb3VyY2VDb2RlTGluZU1hcHBpbmcoKTogU291cmNlQ29kZUxpbmVNYXBwaW5nIHtcbiAgcmV0dXJuIHtcbiAgICBjaHVua05hbWU6IFwiXCIsXG4gICAgc291cmNlRmlsZU5hbWU6IFwiXCIsXG4gICAgb3JpZ2luYWxMaW5lTnVtYmVyOiAwLFxuICAgIGdlbmVyYXRlZExpbmVOdW1iZXI6IDAsXG4gICAgb3JpZ2luYWxDb2x1bW5OdW1iZXI6IDAsXG4gICAgZ2VuZXJhdGVkQ29sdW1uTnVtYmVyOiAwLFxuICAgIHNvdXJjZUZ1bmN0aW9uTmFtZTogXCJcIixcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFNvdXJjZUNvZGVMaW5lTWFwcGluZyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFNvdXJjZUNvZGVMaW5lTWFwcGluZywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmNodW5rTmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuY2h1bmtOYW1lKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc291cmNlRmlsZU5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLnNvdXJjZUZpbGVOYW1lKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3JpZ2luYWxMaW5lTnVtYmVyICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5pbnQzMihtZXNzYWdlLm9yaWdpbmFsTGluZU51bWJlcik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdlbmVyYXRlZExpbmVOdW1iZXIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmludDMyKG1lc3NhZ2UuZ2VuZXJhdGVkTGluZU51bWJlcik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9yaWdpbmFsQ29sdW1uTnVtYmVyICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLm9yaWdpbmFsQ29sdW1uTnVtYmVyKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZ2VuZXJhdGVkQ29sdW1uTnVtYmVyICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5pbnQzMihtZXNzYWdlLmdlbmVyYXRlZENvbHVtbk51bWJlcik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNvdXJjZUZ1bmN0aW9uTmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuc3RyaW5nKG1lc3NhZ2Uuc291cmNlRnVuY3Rpb25OYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBTb3VyY2VDb2RlTGluZU1hcHBpbmcge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU291cmNlQ29kZUxpbmVNYXBwaW5nKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5jaHVua05hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zb3VyY2VGaWxlTmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbmFsTGluZU51bWJlciA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZ2VuZXJhdGVkTGluZU51bWJlciA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub3JpZ2luYWxDb2x1bW5OdW1iZXIgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQ4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmdlbmVyYXRlZENvbHVtbk51bWJlciA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc291cmNlRnVuY3Rpb25OYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogU291cmNlQ29kZUxpbmVNYXBwaW5nIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2h1bmtOYW1lOiBpc1NldChvYmplY3QuY2h1bmtOYW1lKSA/IFN0cmluZyhvYmplY3QuY2h1bmtOYW1lKSA6IFwiXCIsXG4gICAgICBzb3VyY2VGaWxlTmFtZTogaXNTZXQob2JqZWN0LnNvdXJjZUZpbGVOYW1lKSA/IFN0cmluZyhvYmplY3Quc291cmNlRmlsZU5hbWUpIDogXCJcIixcbiAgICAgIG9yaWdpbmFsTGluZU51bWJlcjogaXNTZXQob2JqZWN0Lm9yaWdpbmFsTGluZU51bWJlcikgPyBOdW1iZXIob2JqZWN0Lm9yaWdpbmFsTGluZU51bWJlcikgOiAwLFxuICAgICAgZ2VuZXJhdGVkTGluZU51bWJlcjogaXNTZXQob2JqZWN0LmdlbmVyYXRlZExpbmVOdW1iZXIpID8gTnVtYmVyKG9iamVjdC5nZW5lcmF0ZWRMaW5lTnVtYmVyKSA6IDAsXG4gICAgICBvcmlnaW5hbENvbHVtbk51bWJlcjogaXNTZXQob2JqZWN0Lm9yaWdpbmFsQ29sdW1uTnVtYmVyKSA/IE51bWJlcihvYmplY3Qub3JpZ2luYWxDb2x1bW5OdW1iZXIpIDogMCxcbiAgICAgIGdlbmVyYXRlZENvbHVtbk51bWJlcjogaXNTZXQob2JqZWN0LmdlbmVyYXRlZENvbHVtbk51bWJlcikgPyBOdW1iZXIob2JqZWN0LmdlbmVyYXRlZENvbHVtbk51bWJlcikgOiAwLFxuICAgICAgc291cmNlRnVuY3Rpb25OYW1lOiBpc1NldChvYmplY3Quc291cmNlRnVuY3Rpb25OYW1lKSA/IFN0cmluZyhvYmplY3Quc291cmNlRnVuY3Rpb25OYW1lKSA6IFwiXCIsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogU291cmNlQ29kZUxpbmVNYXBwaW5nKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLmNodW5rTmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmouY2h1bmtOYW1lID0gbWVzc2FnZS5jaHVua05hbWUpO1xuICAgIG1lc3NhZ2Uuc291cmNlRmlsZU5hbWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLnNvdXJjZUZpbGVOYW1lID0gbWVzc2FnZS5zb3VyY2VGaWxlTmFtZSk7XG4gICAgbWVzc2FnZS5vcmlnaW5hbExpbmVOdW1iZXIgIT09IHVuZGVmaW5lZCAmJiAob2JqLm9yaWdpbmFsTGluZU51bWJlciA9IE1hdGgucm91bmQobWVzc2FnZS5vcmlnaW5hbExpbmVOdW1iZXIpKTtcbiAgICBtZXNzYWdlLmdlbmVyYXRlZExpbmVOdW1iZXIgIT09IHVuZGVmaW5lZCAmJiAob2JqLmdlbmVyYXRlZExpbmVOdW1iZXIgPSBNYXRoLnJvdW5kKG1lc3NhZ2UuZ2VuZXJhdGVkTGluZU51bWJlcikpO1xuICAgIG1lc3NhZ2Uub3JpZ2luYWxDb2x1bW5OdW1iZXIgIT09IHVuZGVmaW5lZCAmJiAob2JqLm9yaWdpbmFsQ29sdW1uTnVtYmVyID0gTWF0aC5yb3VuZChtZXNzYWdlLm9yaWdpbmFsQ29sdW1uTnVtYmVyKSk7XG4gICAgbWVzc2FnZS5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKG9iai5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIgPSBNYXRoLnJvdW5kKG1lc3NhZ2UuZ2VuZXJhdGVkQ29sdW1uTnVtYmVyKSk7XG4gICAgbWVzc2FnZS5zb3VyY2VGdW5jdGlvbk5hbWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLnNvdXJjZUZ1bmN0aW9uTmFtZSA9IG1lc3NhZ2Uuc291cmNlRnVuY3Rpb25OYW1lKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8U291cmNlQ29kZUxpbmVNYXBwaW5nPik6IFNvdXJjZUNvZGVMaW5lTWFwcGluZyB7XG4gICAgcmV0dXJuIFNvdXJjZUNvZGVMaW5lTWFwcGluZy5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFNvdXJjZUNvZGVMaW5lTWFwcGluZz4pOiBTb3VyY2VDb2RlTGluZU1hcHBpbmcge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU291cmNlQ29kZUxpbmVNYXBwaW5nKCk7XG4gICAgbWVzc2FnZS5jaHVua05hbWUgPSBvYmplY3QuY2h1bmtOYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS5zb3VyY2VGaWxlTmFtZSA9IG9iamVjdC5zb3VyY2VGaWxlTmFtZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2Uub3JpZ2luYWxMaW5lTnVtYmVyID0gb2JqZWN0Lm9yaWdpbmFsTGluZU51bWJlciA/PyAwO1xuICAgIG1lc3NhZ2UuZ2VuZXJhdGVkTGluZU51bWJlciA9IG9iamVjdC5nZW5lcmF0ZWRMaW5lTnVtYmVyID8/IDA7XG4gICAgbWVzc2FnZS5vcmlnaW5hbENvbHVtbk51bWJlciA9IG9iamVjdC5vcmlnaW5hbENvbHVtbk51bWJlciA/PyAwO1xuICAgIG1lc3NhZ2UuZ2VuZXJhdGVkQ29sdW1uTnVtYmVyID0gb2JqZWN0LmdlbmVyYXRlZENvbHVtbk51bWJlciA/PyAwO1xuICAgIG1lc3NhZ2Uuc291cmNlRnVuY3Rpb25OYW1lID0gb2JqZWN0LnNvdXJjZUZ1bmN0aW9uTmFtZSA/PyBcIlwiO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxudHlwZSBCdWlsdGluID0gRGF0ZSB8IEZ1bmN0aW9uIHwgVWludDhBcnJheSB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIEJ1aWx0aW4gPyBUXG4gIDogVCBleHRlbmRzIEFycmF5PGluZmVyIFU+ID8gQXJyYXk8RGVlcFBhcnRpYWw8VT4+IDogVCBleHRlbmRzIFJlYWRvbmx5QXJyYXk8aW5mZXIgVT4gPyBSZWFkb25seUFycmF5PERlZXBQYXJ0aWFsPFU+PlxuICA6IFQgZXh0ZW5kcyB7ICRjYXNlOiBzdHJpbmcgfSA/IHsgW0sgaW4ga2V5b2YgT21pdDxULCBcIiRjYXNlXCI+XT86IERlZXBQYXJ0aWFsPFRbS10+IH0gJiB7ICRjYXNlOiBUW1wiJGNhc2VcIl0gfVxuICA6IFQgZXh0ZW5kcyB7fSA/IHsgW0sgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW0tdPiB9XG4gIDogUGFydGlhbDxUPjtcblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1NldCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xufVxuIl19
|