@serenityjs/nbt 0.8.5 → 0.8.6-beta-20250618184233
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/CHANGELOG.md +6 -0
- package/dist/index.js +12 -12
- package/dist/index.mjs +12 -12
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @serenityjs/nbt
|
|
2
2
|
|
|
3
|
+
## 0.8.6-beta-20250618184233
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`97946e1`](https://github.com/SerenityJS/serenity/commit/97946e147082d9eb9d482eae2be3b1767f9f6450) Thanks [@PMK744](https://github.com/PMK744)! - init v0.8.6-beta
|
|
8
|
+
|
|
3
9
|
## 0.8.5
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -117,7 +117,7 @@ var ByteTag = class ByteTag2 extends Number {
|
|
|
117
117
|
if (options?.name) {
|
|
118
118
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(import_binarystream.Endianness.Little);
|
|
119
119
|
const buffer = stream.readBuffer(length);
|
|
120
|
-
name =
|
|
120
|
+
name = buffer.toString("utf8");
|
|
121
121
|
}
|
|
122
122
|
const value = stream.readInt8();
|
|
123
123
|
return new this(value, name);
|
|
@@ -173,7 +173,7 @@ var ShortTag = class ShortTag2 extends Number {
|
|
|
173
173
|
if (options?.name) {
|
|
174
174
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(import_binarystream2.Endianness.Little);
|
|
175
175
|
const buffer = stream.readBuffer(length);
|
|
176
|
-
name =
|
|
176
|
+
name = buffer.toString("utf8");
|
|
177
177
|
}
|
|
178
178
|
const value = stream.readInt16(import_binarystream2.Endianness.Little);
|
|
179
179
|
return new this(value, name);
|
|
@@ -229,7 +229,7 @@ var IntTag = class IntTag2 extends Number {
|
|
|
229
229
|
if (options?.name) {
|
|
230
230
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(import_binarystream3.Endianness.Little);
|
|
231
231
|
const buffer = stream.readBuffer(length);
|
|
232
|
-
name =
|
|
232
|
+
name = buffer.toString("utf8");
|
|
233
233
|
}
|
|
234
234
|
const value = options?.varint ? stream.readZigZag() : stream.readInt32(import_binarystream3.Endianness.Little);
|
|
235
235
|
return new this(value, name);
|
|
@@ -286,7 +286,7 @@ var LongTag = class LongTag2 extends String {
|
|
|
286
286
|
if (options?.name) {
|
|
287
287
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(import_binarystream4.Endianness.Little);
|
|
288
288
|
const buffer = stream.readBuffer(length);
|
|
289
|
-
name =
|
|
289
|
+
name = buffer.toString("utf8");
|
|
290
290
|
}
|
|
291
291
|
const value = options?.varint ? stream.readZigZong() : stream.readInt64(import_binarystream4.Endianness.Little);
|
|
292
292
|
return new this(value, name);
|
|
@@ -343,7 +343,7 @@ var FloatTag = class FloatTag2 extends Number {
|
|
|
343
343
|
if (options?.name) {
|
|
344
344
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(import_binarystream5.Endianness.Little);
|
|
345
345
|
const buffer = stream.readBuffer(length);
|
|
346
|
-
name =
|
|
346
|
+
name = buffer.toString("utf8");
|
|
347
347
|
}
|
|
348
348
|
const value = stream.readFloat32(import_binarystream5.Endianness.Little);
|
|
349
349
|
return new this(value, name);
|
|
@@ -399,7 +399,7 @@ var DoubleTag = class DoubleTag2 extends Number {
|
|
|
399
399
|
if (options?.name) {
|
|
400
400
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(import_binarystream6.Endianness.Little);
|
|
401
401
|
const buffer = stream.readBuffer(length);
|
|
402
|
-
name =
|
|
402
|
+
name = buffer.toString("utf8");
|
|
403
403
|
}
|
|
404
404
|
const value = stream.readFloat64(import_binarystream6.Endianness.Little);
|
|
405
405
|
return new this(value, name);
|
|
@@ -459,7 +459,7 @@ var ByteListTag = class ByteListTag2 extends Array {
|
|
|
459
459
|
if (options?.name) {
|
|
460
460
|
const length2 = options?.varint ? stream.readVarInt() : stream.readInt16(import_binarystream7.Endianness.Little);
|
|
461
461
|
const buffer = stream.readBuffer(length2);
|
|
462
|
-
name =
|
|
462
|
+
name = buffer.toString("utf8");
|
|
463
463
|
}
|
|
464
464
|
const length = options?.varint ? stream.readZigZag() : stream.readInt32(import_binarystream7.Endianness.Little);
|
|
465
465
|
const value = stream.read(length);
|
|
@@ -518,11 +518,11 @@ var StringTag = class StringTag2 extends String {
|
|
|
518
518
|
if (options?.name) {
|
|
519
519
|
const length2 = options?.varint ? stream.readVarInt() : stream.readInt16(import_binarystream8.Endianness.Little);
|
|
520
520
|
const buffer2 = stream.readBuffer(length2);
|
|
521
|
-
name =
|
|
521
|
+
name = buffer2.toString("utf8");
|
|
522
522
|
}
|
|
523
523
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(import_binarystream8.Endianness.Little);
|
|
524
524
|
const buffer = stream.readBuffer(length);
|
|
525
|
-
const value =
|
|
525
|
+
const value = buffer.toString("utf8");
|
|
526
526
|
return new this(value, name);
|
|
527
527
|
}
|
|
528
528
|
static write(stream, value, options = {
|
|
@@ -623,7 +623,7 @@ var CompoundTag = class CompoundTag2 extends Map {
|
|
|
623
623
|
if (options?.name) {
|
|
624
624
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(import_binarystream9.Endianness.Little);
|
|
625
625
|
const buffer = stream.readBuffer(length);
|
|
626
|
-
name =
|
|
626
|
+
name = buffer.toString("utf8");
|
|
627
627
|
}
|
|
628
628
|
const tag = new CompoundTag2(name);
|
|
629
629
|
do {
|
|
@@ -864,7 +864,7 @@ var ListTag = class ListTag2 extends Array {
|
|
|
864
864
|
if (options?.name) {
|
|
865
865
|
const length2 = options?.varint ? stream.readVarInt() : stream.readInt16(import_binarystream10.Endianness.Little);
|
|
866
866
|
const buffer = stream.readBuffer(length2);
|
|
867
|
-
name =
|
|
867
|
+
name = buffer.toString("utf8");
|
|
868
868
|
}
|
|
869
869
|
const type = stream.readInt8();
|
|
870
870
|
const length = options?.varint ? stream.readZigZag() : stream.readInt32(import_binarystream10.Endianness.Little);
|
|
@@ -1088,4 +1088,4 @@ var ListTag = class ListTag2 extends Array {
|
|
|
1088
1088
|
StringTag,
|
|
1089
1089
|
TagType
|
|
1090
1090
|
});
|
|
1091
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9lbnVtL3RhZy10eXBlLnRzIiwgIi4uL3NyYy90eXBlcy9iYXNlLXRhZy50cyIsICIuLi9zcmMvdHlwZXMvYnl0ZS50cyIsICIuLi9zcmMvdHlwZXMvc2hvcnQudHMiLCAiLi4vc3JjL3R5cGVzL2ludC50cyIsICIuLi9zcmMvdHlwZXMvbG9uZy50cyIsICIuLi9zcmMvdHlwZXMvZmxvYXQudHMiLCAiLi4vc3JjL3R5cGVzL2RvdWJsZS50cyIsICIuLi9zcmMvdHlwZXMvYnl0ZS1saXN0LnRzIiwgIi4uL3NyYy90eXBlcy9zdHJpbmcudHMiLCAiLi4vc3JjL3R5cGVzL2xpc3QudHMiLCAiLi4vc3JjL3R5cGVzL2NvbXBvdW5kLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgKiBmcm9tIFwiLi9lbnVtXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuIiwgImVudW0gVGFnVHlwZSB7XG4gIEVuZCA9IDB4MDAsXG4gIEJ5dGUgPSAweDAxLFxuICBTaG9ydCA9IDB4MDIsXG4gIEludCA9IDB4MDMsXG4gIExvbmcgPSAweDA0LFxuICBGbG9hdCA9IDB4MDUsXG4gIERvdWJsZSA9IDB4MDYsXG4gIEJ5dGVMaXN0ID0gMHgwNyxcbiAgU3RyaW5nID0gMHgwOCxcbiAgTGlzdCA9IDB4MDksXG4gIENvbXBvdW5kID0gMHgwYSxcbiAgSW50TGlzdCA9IDB4MGIsXG4gIExvbmdMaXN0ID0gMHgwY1xufVxuXG5leHBvcnQgeyBUYWdUeXBlIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuXG5hYnN0cmFjdCBjbGFzcyBCYXNlVGFnIHtcbiAgLyoqXG4gICAqIFRoZSBuYnQgdGFnIHR5cGUgb2YgdGhlIGRhdGEgdHlwZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0eXBlOiBUYWdUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbmJ0IHRhZy5cbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQ29udmVydCB0aGUgdGFnIHRvIGEgSlNPTiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgdG9KU09OKCk6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIG5idCB0YWcgZnJvbSB0aGUgc3RyZWFtLlxuICAgKiBAcGFyYW0gc3RyZWFtIFRoZSBiaW5hcnkgc3RyZWFtIHRvIHJlYWQgZnJvbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHJlYWRpbmcgdGhlIHRhZy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBfc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgX29wdGlvbnM/OiBSZWFkV3JpdGVPcHRpb25zXG4gICk6IEJhc2VUYWcge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCAncmVhZCcgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgbmJ0IHRhZyB0byB0aGUgc3RyZWFtLlxuICAgKiBAcGFyYW0gc3RyZWFtIFRoZSBiaW5hcnkgc3RyZWFtIHRvIHdyaXRlIHRvLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSB0YWcgdG8gd3JpdGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB3cml0aW5nIHRoZSB0YWcuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIF9zdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBfdmFsdWU6IEJhc2VUYWcsXG4gICAgX29wdGlvbnM/OiBSZWFkV3JpdGVPcHRpb25zXG4gICk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCAnd3JpdGUnIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gIH1cbn1cblxuZXhwb3J0IHsgQmFzZVRhZyB9O1xuIiwgImltcG9ydCB7IEJpbmFyeVN0cmVhbSwgRW5kaWFubmVzcyB9IGZyb20gXCJAc2VyZW5pdHlqcy9iaW5hcnlzdHJlYW1cIjtcblxuaW1wb3J0IHsgVGFnVHlwZSB9IGZyb20gXCIuLi9lbnVtXCI7XG5cbmltcG9ydCB7IEJhc2VUYWcgfSBmcm9tIFwiLi9iYXNlLXRhZ1wiO1xuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuXG5jbGFzcyBCeXRlVGFnIGV4dGVuZHMgTnVtYmVyIGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5CeXRlO1xuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQnl0ZVRhZyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBieXRlIHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIodmFsdWUpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogbnVtYmVyIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBieXRlIHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZWFkKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBCeXRlVGFnIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkJ5dGUpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuQnl0ZV19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSBieXRlIHZhbHVlIGZyb20gdGhlIHN0cmVhbS5cbiAgICBjb25zdCB2YWx1ZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgQnl0ZVRhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogQnl0ZVRhZyxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSBzdHJlYW0ud3JpdGVJbnQ4KHZhbHVlLnR5cGUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBDb252ZXJ0IHRoZSBuYW1lIHRvIGEgYnVmZmVyLlxuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUubmFtZSA/PyBcIlwiLCBcInV0ZjhcIik7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBpZiAob3B0aW9ucy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MTYoYnVmZmVyLmxlbmd0aCwgRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbmFtZSBidWZmZXIgdG8gdGhlIHN0cmVhbS5cbiAgICAgIHN0cmVhbS53cml0ZUJ1ZmZlcihidWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIHRoZSBieXRlIHZhbHVlIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS52YWx1ZU9mKCkpO1xuICB9XG59XG5cbmV4cG9ydCB7IEJ5dGVUYWcgfTtcbiIsICJpbXBvcnQgeyBCaW5hcnlTdHJlYW0sIEVuZGlhbm5lc3MgfSBmcm9tIFwiQHNlcmVuaXR5anMvYmluYXJ5c3RyZWFtXCI7XG5cbmltcG9ydCB7IFRhZ1R5cGUgfSBmcm9tIFwiLi4vZW51bVwiO1xuXG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcblxuY2xhc3MgU2hvcnRUYWcgZXh0ZW5kcyBOdW1iZXIgaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLlNob3J0O1xuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgU2hvcnRUYWcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc2hvcnQgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IG51bWJlciwgbmFtZT86IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBudW1iZXIge1xuICAgIC8vIENvbnZlcnQgdGhlIHNob3J0IHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZWFkKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBTaG9ydFRhZyB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSB7XG4gICAgICAvLyBSZWFkIHRoZSB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRhZyB0eXBlIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHR5cGUuXG4gICAgICBpZiAodHlwZSAhPT0gVGFnVHlwZS5TaG9ydCkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5TaG9ydF19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSBzaG9ydCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFNob3J0VGFnIGluc3RhbmNlLlxuICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBTaG9ydFRhZyxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSBzdHJlYW0ud3JpdGVJbnQ4KHZhbHVlLnR5cGUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBDb252ZXJ0IHRoZSBuYW1lIHRvIGEgYnVmZmVyLlxuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUubmFtZSA/PyBcIlwiLCBcInV0ZjhcIik7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBpZiAob3B0aW9ucy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MTYoYnVmZmVyLmxlbmd0aCwgRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbmFtZSBidWZmZXIgdG8gdGhlIHN0cmVhbS5cbiAgICAgIHN0cmVhbS53cml0ZUJ1ZmZlcihidWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIHRoZSBzaG9ydCB2YWx1ZSB0byB0aGUgc3RyZWFtLlxuICAgIHN0cmVhbS53cml0ZUludDE2KHZhbHVlLnZhbHVlT2YoKSwgRW5kaWFubmVzcy5MaXR0bGUpO1xuICB9XG59XG5cbmV4cG9ydCB7IFNob3J0VGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5cbmNsYXNzIEludFRhZyBleHRlbmRzIE51bWJlciBpbXBsZW1lbnRzIEJhc2VUYWcge1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZSA9IFRhZ1R5cGUuSW50O1xuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgSW50VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGludCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhZywgZGVmYXVsdHMgdG8gbnVsbC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZTogbnVtYmVyLCBuYW1lPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIHN1cGVyKHZhbHVlKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgdG9KU09OKCk6IG51bWJlciB7XG4gICAgLy8gQ29udmVydCB0aGUgc2hvcnQgdmFsdWUgdG8gYSBKU09OIG51bWJlci5cbiAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IEludFRhZyB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSB7XG4gICAgICAvLyBSZWFkIHRoZSB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRhZyB0eXBlIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHR5cGUuXG4gICAgICBpZiAodHlwZSAhPT0gVGFnVHlwZS5JbnQpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuSW50XX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGludCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zPy52YXJpbnRcbiAgICAgID8gc3RyZWFtLnJlYWRaaWdaYWcoKVxuICAgICAgOiBzdHJlYW0ucmVhZEludDMyKEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IEludFRhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogSW50VGFnLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHN0cmVhbS53cml0ZUludDgodmFsdWUudHlwZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIG5hbWUgdG8gYSBidWZmZXIuXG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZS5uYW1lID8/IFwiXCIsIFwidXRmOFwiKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGlmIChvcHRpb25zLnZhcmludCkgc3RyZWFtLndyaXRlVmFySW50KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQxNihidWZmZXIubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBuYW1lIGJ1ZmZlciB0byB0aGUgc3RyZWFtLlxuICAgICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgdGhlIGludCB2YWx1ZSB0byB0aGUgc3RyZWFtLlxuICAgIGlmIChvcHRpb25zPy52YXJpbnQpIHN0cmVhbS53cml0ZVppZ1phZyh2YWx1ZS52YWx1ZU9mKCkpO1xuICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MzIodmFsdWUudmFsdWVPZigpLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgSW50VGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5cbmNsYXNzIExvbmdUYWcgZXh0ZW5kcyBTdHJpbmcgaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLkxvbmc7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBMb25nVGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGxvbmcgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IGJpZ2ludCwgbmFtZT86IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIC8vIENvbnZlcnQgdGhlIHNob3J0IHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpICsgXCJuXCI7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IExvbmdUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuTG9uZykge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5Mb25nXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGxvbmcgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucz8udmFyaW50XG4gICAgICA/IHN0cmVhbS5yZWFkWmlnWm9uZygpXG4gICAgICA6IHN0cmVhbS5yZWFkSW50NjQoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgTG9uZ1RhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogTG9uZ1RhZyxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSBzdHJlYW0ud3JpdGVJbnQ4KHZhbHVlLnR5cGUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBDb252ZXJ0IHRoZSBuYW1lIHRvIGEgYnVmZmVyLlxuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUubmFtZSA/PyBcIlwiLCBcInV0ZjhcIik7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBpZiAob3B0aW9ucy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MTYoYnVmZmVyLmxlbmd0aCwgRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbmFtZSBidWZmZXIgdG8gdGhlIHN0cmVhbS5cbiAgICAgIHN0cmVhbS53cml0ZUJ1ZmZlcihidWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIHRoZSBsb25nIHZhbHVlIHRvIHRoZSBzdHJlYW0uXG4gICAgaWYgKG9wdGlvbnM/LnZhcmludCkgc3RyZWFtLndyaXRlWmlnWm9uZyhCaWdJbnQodmFsdWUudmFsdWVPZigpKSk7XG4gICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQ2NChCaWdJbnQodmFsdWUudmFsdWVPZigpKSwgRW5kaWFubmVzcy5MaXR0bGUpO1xuICB9XG59XG5cbmV4cG9ydCB7IExvbmdUYWcgfTtcbiIsICJpbXBvcnQgeyBCaW5hcnlTdHJlYW0sIEVuZGlhbm5lc3MgfSBmcm9tIFwiQHNlcmVuaXR5anMvYmluYXJ5c3RyZWFtXCI7XG5cbmltcG9ydCB7IFRhZ1R5cGUgfSBmcm9tIFwiLi4vZW51bVwiO1xuXG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcblxuY2xhc3MgRmxvYXRUYWcgZXh0ZW5kcyBOdW1iZXIgaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLkZsb2F0O1xuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRmxvYXRUYWcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgZmxvYXQgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IG51bWJlciwgbmFtZT86IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBudW1iZXIge1xuICAgIC8vIENvbnZlcnQgdGhlIHNob3J0IHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZWFkKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBGbG9hdFRhZyB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSB7XG4gICAgICAvLyBSZWFkIHRoZSB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRhZyB0eXBlIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHR5cGUuXG4gICAgICBpZiAodHlwZSAhPT0gVGFnVHlwZS5GbG9hdCkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5GbG9hdF19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSBmbG9hdCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBzdHJlYW0ucmVhZEZsb2F0MzIoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgRmxvYXRUYWcgaW5zdGFuY2UuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHZhbHVlLCBuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JpdGUoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgdmFsdWU6IEZsb2F0VGFnLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHN0cmVhbS53cml0ZUludDgodmFsdWUudHlwZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIG5hbWUgdG8gYSBidWZmZXIuXG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZS5uYW1lID8/IFwiXCIsIFwidXRmOFwiKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGlmIChvcHRpb25zLnZhcmludCkgc3RyZWFtLndyaXRlVmFySW50KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQxNihidWZmZXIubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBuYW1lIGJ1ZmZlciB0byB0aGUgc3RyZWFtLlxuICAgICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgdGhlIGZsb2F0IHZhbHVlIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlRmxvYXQzMih2YWx1ZS52YWx1ZU9mKCksIEVuZGlhbm5lc3MuTGl0dGxlKTtcbiAgfVxufVxuXG5leHBvcnQgeyBGbG9hdFRhZyB9O1xuIiwgImltcG9ydCB7IEJpbmFyeVN0cmVhbSwgRW5kaWFubmVzcyB9IGZyb20gXCJAc2VyZW5pdHlqcy9iaW5hcnlzdHJlYW1cIjtcblxuaW1wb3J0IHsgVGFnVHlwZSB9IGZyb20gXCIuLi9lbnVtXCI7XG5cbmltcG9ydCB7IEJhc2VUYWcgfSBmcm9tIFwiLi9iYXNlLXRhZ1wiO1xuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuXG5jbGFzcyBEb3VibGVUYWcgZXh0ZW5kcyBOdW1iZXIgaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLkRvdWJsZTtcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IERvdWJsZVRhZyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBkb3VibGUgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IG51bWJlciwgbmFtZT86IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBudW1iZXIge1xuICAgIC8vIENvbnZlcnQgdGhlIGJ5dGUgdmFsdWUgdG8gYSBKU09OIG51bWJlci5cbiAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IERvdWJsZVRhZyB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSB7XG4gICAgICAvLyBSZWFkIHRoZSB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRhZyB0eXBlIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHR5cGUuXG4gICAgICBpZiAodHlwZSAhPT0gVGFnVHlwZS5Eb3VibGUpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuRG91YmxlXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGRvdWJsZSB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBzdHJlYW0ucmVhZEZsb2F0NjQoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgRG91YmxlVGFnIGluc3RhbmNlLlxuICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBEb3VibGVUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgZG91YmxlIHZhbHVlIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlRmxvYXQ2NCh2YWx1ZS52YWx1ZU9mKCksIEVuZGlhbm5lc3MuTGl0dGxlKTtcbiAgfVxufVxuXG5leHBvcnQgeyBEb3VibGVUYWcgfTtcbiIsICJpbXBvcnQgeyBCaW5hcnlTdHJlYW0sIEVuZGlhbm5lc3MgfSBmcm9tIFwiQHNlcmVuaXR5anMvYmluYXJ5c3RyZWFtXCI7XG5cbmltcG9ydCB7IFRhZ1R5cGUgfSBmcm9tIFwiLi4vZW51bVwiO1xuXG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcblxuY2xhc3MgQnl0ZUxpc3RUYWcgZXh0ZW5kcyBBcnJheTxudW1iZXI+IGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5CeXRlTGlzdDtcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEJ5dGVMaXN0VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIG9mIHRoZSBieXRlIGxpc3QuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoZWxlbWVudHM6IEFycmF5PG51bWJlcj4sIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIoLi4uZWxlbWVudHMpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBtYXA8VT4oXG4gICAgY2FsbGJhY2tmbjogKHZhbHVlOiBudW1iZXIsIGluZGV4OiBudW1iZXIsIGFycmF5OiBBcnJheTxudW1iZXI+KSA9PiBVLFxuICAgIHRoaXNBcmc/OiB1bmtub3duXG4gICk6IEFycmF5PFU+IHtcbiAgICAvLyBDb252ZXJ0IHRoZSBieXRlIGxpc3QgdG8gYSByZWd1bGFyIGFycmF5LlxuICAgIGNvbnN0IGFycmF5ID0gQXJyYXkuZnJvbSh0aGlzKTtcblxuICAgIC8vIE1hcCB0aGUgZWxlbWVudHMgb2YgdGhlIGxpc3QgdXNpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgIHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2tmbiwgdGhpc0FyZyk7XG4gIH1cblxuICBwdWJsaWMgdG9KU09OKCk6IEFycmF5PG51bWJlcj4ge1xuICAgIC8vIENvbnZlcnQgdGhlIGJ5dGUgbGlzdCB0byBhIEpTT04gYXJyYXkuXG4gICAgcmV0dXJuIHRoaXMubWFwKCh2YWx1ZSkgPT4gdmFsdWUudmFsdWVPZigpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogQnl0ZUxpc3RUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuQnl0ZSkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5CeXRlXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBsaXN0IGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgPyBzdHJlYW0ucmVhZFppZ1phZygpXG4gICAgICA6IHN0cmVhbS5yZWFkSW50MzIoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gUmVhZCB0aGUgYnl0ZSB2YWx1ZXMgZnJvbSB0aGUgc3RyZWFtLlxuICAgIGNvbnN0IHZhbHVlID0gc3RyZWFtLnJlYWQobGVuZ3RoKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IEJ5dGVMaXN0VGFnIGluc3RhbmNlLlxuICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBCeXRlTGlzdFRhZyxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSBzdHJlYW0ud3JpdGVJbnQ4KHZhbHVlLnR5cGUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBDb252ZXJ0IHRoZSBuYW1lIHRvIGEgYnVmZmVyLlxuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUubmFtZSA/PyBcIlwiLCBcInV0ZjhcIik7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBpZiAob3B0aW9ucy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MTYoYnVmZmVyLmxlbmd0aCwgRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbmFtZSBidWZmZXIgdG8gdGhlIHN0cmVhbS5cbiAgICAgIHN0cmVhbS53cml0ZUJ1ZmZlcihidWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgbGlzdCBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICBpZiAob3B0aW9ucz8udmFyaW50KSBzdHJlYW0ud3JpdGVaaWdaYWcodmFsdWUubGVuZ3RoKTtcbiAgICBlbHNlIHN0cmVhbS53cml0ZUludDMyKHZhbHVlLmxlbmd0aCwgRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gV3JpdGUgdGhlIGJ5dGUgdmFsdWVzIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlKHZhbHVlLm1hcCgoYnl0ZSkgPT4gYnl0ZT8udmFsdWVPZigpID8/IDApKTtcbiAgfVxufVxuXG5leHBvcnQgeyBCeXRlTGlzdFRhZyB9O1xuIiwgImltcG9ydCB7IEJpbmFyeVN0cmVhbSwgRW5kaWFubmVzcyB9IGZyb20gXCJAc2VyZW5pdHlqcy9iaW5hcnlzdHJlYW1cIjtcblxuaW1wb3J0IHsgVGFnVHlwZSB9IGZyb20gXCIuLi9lbnVtXCI7XG5cbmltcG9ydCB7IEJhc2VUYWcgfSBmcm9tIFwiLi9iYXNlLXRhZ1wiO1xuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuXG5jbGFzcyBTdHJpbmdUYWcgZXh0ZW5kcyBTdHJpbmcgaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLlN0cmluZztcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFN0cmluZ1RhZyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZywgbmFtZT86IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIC8vIENvbnZlcnQgdGhlIGJ5dGUgdmFsdWUgdG8gYSBKU09OIG51bWJlci5cbiAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IFN0cmluZ1RhZyB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSB7XG4gICAgICAvLyBSZWFkIHRoZSB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRhZyB0eXBlIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHR5cGUuXG4gICAgICBpZiAodHlwZSAhPT0gVGFnVHlwZS5TdHJpbmcpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuU3RyaW5nXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHZhbHVlIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICA6IHN0cmVhbS5yZWFkSW50MTYoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gUmVhZCB0aGUgc3RyaW5nIHZhbHVlIGZyb20gdGhlIHN0cmVhbS5cbiAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgIGNvbnN0IHZhbHVlID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgU3RyaW5nVGFnIGluc3RhbmNlLlxuICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBTdHJpbmdUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgdmFsdWUgdG8gYSBidWZmZXIuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUudG9TdHJpbmcoKSwgXCJ1dGY4XCIpO1xuXG4gICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHZhbHVlIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgIGlmIChvcHRpb25zPy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIFdyaXRlIHRoZSBzdHJpbmcgdmFsdWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gIH1cbn1cblxuZXhwb3J0IHsgU3RyaW5nVGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5pbXBvcnQgeyBCeXRlVGFnIH0gZnJvbSBcIi4vYnl0ZVwiO1xuaW1wb3J0IHsgU2hvcnRUYWcgfSBmcm9tIFwiLi9zaG9ydFwiO1xuaW1wb3J0IHsgSW50VGFnIH0gZnJvbSBcIi4vaW50XCI7XG5pbXBvcnQgeyBMb25nVGFnIH0gZnJvbSBcIi4vbG9uZ1wiO1xuaW1wb3J0IHsgRmxvYXRUYWcgfSBmcm9tIFwiLi9mbG9hdFwiO1xuaW1wb3J0IHsgRG91YmxlVGFnIH0gZnJvbSBcIi4vZG91YmxlXCI7XG5pbXBvcnQgeyBTdHJpbmdUYWcgfSBmcm9tIFwiLi9zdHJpbmdcIjtcbmltcG9ydCB7IENvbXBvdW5kVGFnIH0gZnJvbSBcIi4vY29tcG91bmRcIjtcbmltcG9ydCB7IEJ5dGVMaXN0VGFnIH0gZnJvbSBcIi4vYnl0ZS1saXN0XCI7XG5cbmNsYXNzIExpc3RUYWc8VCBleHRlbmRzIEJhc2VUYWc+IGV4dGVuZHMgQXJyYXk8VD4gaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLkxpc3Q7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBMaXN0VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGVsZW1lbnRzOiBBcnJheTxUPiA9IFtdLCBuYW1lPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIC8vIENhbGwgdGhlIHBhcmVudCBjb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIHRoZSBhcnJheS5cbiAgICBzdXBlciguLi5lbGVtZW50cyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIG1hcDxVPihcbiAgICBjYWxsYmFja2ZuOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiBBcnJheTxUPikgPT4gVSxcbiAgICB0aGlzQXJnPzogdW5rbm93blxuICApOiBBcnJheTxVPiB7XG4gICAgY29uc3QgYXJyYXkgPSBBcnJheS5mcm9tKHRoaXMpO1xuXG4gICAgLy8gTWFwIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdCB1c2luZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAgcmV0dXJuIGFycmF5Lm1hcChjYWxsYmFja2ZuLCB0aGlzQXJnKTtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogQXJyYXk8dW5rbm93bj4ge1xuICAgIC8vIENvbnZlcnQgdGhlIGxpc3QgZWxlbWVudHMgdG8gYSBKU09OIGFycmF5LlxuICAgIHJldHVybiB0aGlzLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC50b0pTT04oKSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQ8VCBleHRlbmRzIEJhc2VUYWc+KFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBMaXN0VGFnPFQ+IHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkxpc3QpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuTGlzdF19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0LlxuICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdC5cbiAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgID8gc3RyZWFtLnJlYWRaaWdaYWcoKVxuICAgICAgOiBzdHJlYW0ucmVhZEludDMyKEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBMaXN0VGFnIGluc3RhbmNlLlxuICAgIGNvbnN0IHRhZyA9IG5ldyB0aGlzPFQ+KFtdLCBuYW1lKTtcblxuICAgIC8vIFJlYWQgdGhlIGxpc3QgZWxlbWVudHMgYmFzZWQgb24gdGhlIHR5cGUuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBsaXN0IHR5cGU6ICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfWApO1xuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5CeXRlOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQnl0ZVRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQnl0ZVRhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgbGlzdC5cbiAgICAgICAgICB0YWcucHVzaChlbGVtZW50IGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuU2hvcnQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBTaG9ydFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gU2hvcnRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkludDoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhbiBJbnRUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEludFRhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgbGlzdC5cbiAgICAgICAgICB0YWcucHVzaChlbGVtZW50IGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuTG9uZzoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIExvbmdUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IExvbmdUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkZsb2F0OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgRmxvYXRUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEZsb2F0VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0LlxuICAgICAgICAgIHRhZy5wdXNoKGVsZW1lbnQgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5Eb3VibGU6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBEb3VibGVUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IERvdWJsZVRhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgbGlzdC5cbiAgICAgICAgICB0YWcucHVzaChlbGVtZW50IGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZUxpc3Q6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBCeXRlTGlzdFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQnl0ZUxpc3RUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLlN0cmluZzoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIFN0cmluZ1RhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gU3RyaW5nVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0LlxuICAgICAgICAgIHRhZy5wdXNoKGVsZW1lbnQgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5MaXN0OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgTGlzdFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gTGlzdFRhZy5yZWFkPFQ+KHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgbGlzdC5cbiAgICAgICAgICB0YWcucHVzaChlbGVtZW50IGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQ29tcG91bmQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBDb21wb3VuZFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG91bmRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoZSB0YWcgd2l0aCB0aGUgdHlwZSBhbmQgbmFtZSBzZXQuXG4gICAgcmV0dXJuIHRhZztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JpdGU8VCBleHRlbmRzIEJhc2VUYWc+KFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBMaXN0VGFnPFQ+LFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHN0cmVhbS53cml0ZUludDgodmFsdWUudHlwZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIG5hbWUgdG8gYSBidWZmZXIuXG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZS5uYW1lID8/IFwiXCIsIFwidXRmOFwiKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGlmIChvcHRpb25zLnZhcmludCkgc3RyZWFtLndyaXRlVmFySW50KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQxNihidWZmZXIubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBuYW1lIGJ1ZmZlciB0byB0aGUgc3RyZWFtLlxuICAgICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYW4gZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBsaXN0LlxuICAgIGlmICghdmFsdWVbMF0pIHtcbiAgICAgIC8vIElmIG5vdCwgd3JpdGUgYW4gZW1wdHkgbGlzdCB0eXBlIGFuZCBsZW5ndGguXG4gICAgICBzdHJlYW0ud3JpdGVJbnQ4KFRhZ1R5cGUuQnl0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHNvLCBnZXQgdGhlIHR5cGUgb2YgdGhlIGZpcnN0IGVsZW1lbnQuXG4gICAgICBjb25zdCB0eXBlID0gdmFsdWVbMF0udHlwZTtcblxuICAgICAgLy8gV3JpdGUgdGhlIHR5cGUgb2YgdGhlIGxpc3QuXG4gICAgICBzdHJlYW0ud3JpdGVJbnQ4KHR5cGUpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QuXG4gICAgaWYgKG9wdGlvbnM/LnZhcmludCkgc3RyZWFtLndyaXRlWmlnWmFnKHZhbHVlLmxlbmd0aCk7XG4gICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQzMih2YWx1ZS5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIGVsZW1lbnQgaW4gdGhlIGxpc3QuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZhbHVlKSB7XG4gICAgICAvLyBIYW5kbGUgZWFjaCB0eXBlIG9mIGVsZW1lbnQgYmFzZWQgb24gaXRzIHRhZyB0eXBlLlxuICAgICAgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcbiAgICAgICAgY2FzZSBUYWdUeXBlLkJ5dGU6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgZWxlbWVudCBhcyBhIEJ5dGVUYWcuXG4gICAgICAgICAgQnl0ZVRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBCeXRlVGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLlNob3J0OiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBTaG9ydFRhZy5cbiAgICAgICAgICBTaG9ydFRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBTaG9ydFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5JbnQ6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgZWxlbWVudCBhcyBhbiBJbnRUYWcuXG4gICAgICAgICAgSW50VGFnLndyaXRlKHN0cmVhbSwgZWxlbWVudCBhcyB1bmtub3duIGFzIEludFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5Mb25nOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBMb25nVGFnLlxuICAgICAgICAgIExvbmdUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgTG9uZ1RhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5GbG9hdDoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBlbGVtZW50IGFzIGEgRmxvYXRUYWcuXG4gICAgICAgICAgRmxvYXRUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgRmxvYXRUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRG91YmxlOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBEb3VibGVUYWcuXG4gICAgICAgICAgRG91YmxlVGFnLndyaXRlKHN0cmVhbSwgZWxlbWVudCBhcyB1bmtub3duIGFzIERvdWJsZVRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5CeXRlTGlzdDoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBlbGVtZW50IGFzIGEgQnl0ZVRhZy5cbiAgICAgICAgICBCeXRlTGlzdFRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBCeXRlTGlzdFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5TdHJpbmc6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgZWxlbWVudCBhcyBhIFN0cmluZ1RhZy5cbiAgICAgICAgICBTdHJpbmdUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgU3RyaW5nVGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkxpc3Q6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgZWxlbWVudCBhcyBhIExpc3RUYWcuXG4gICAgICAgICAgTGlzdFRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBMaXN0VGFnPFQ+LCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkNvbXBvdW5kOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBDb21wb3VuZFRhZy5cbiAgICAgICAgICBDb21wb3VuZFRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBDb21wb3VuZFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBMaXN0VGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQnl0ZVRhZyB9IGZyb20gXCIuL2J5dGVcIjtcbmltcG9ydCB7IEJhc2VUYWcgfSBmcm9tIFwiLi9iYXNlLXRhZ1wiO1xuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuaW1wb3J0IHsgU2hvcnRUYWcgfSBmcm9tIFwiLi9zaG9ydFwiO1xuaW1wb3J0IHsgSW50VGFnIH0gZnJvbSBcIi4vaW50XCI7XG5pbXBvcnQgeyBMb25nVGFnIH0gZnJvbSBcIi4vbG9uZ1wiO1xuaW1wb3J0IHsgRmxvYXRUYWcgfSBmcm9tIFwiLi9mbG9hdFwiO1xuaW1wb3J0IHsgRG91YmxlVGFnIH0gZnJvbSBcIi4vZG91YmxlXCI7XG5pbXBvcnQgeyBTdHJpbmdUYWcgfSBmcm9tIFwiLi9zdHJpbmdcIjtcbmltcG9ydCB7IExpc3RUYWcgfSBmcm9tIFwiLi9saXN0XCI7XG5pbXBvcnQgeyBCeXRlTGlzdFRhZyB9IGZyb20gXCIuL2J5dGUtbGlzdFwiO1xuXG5jbGFzcyBDb21wb3VuZFRhZyBleHRlbmRzIE1hcDxzdHJpbmcsIEJhc2VUYWc+IGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5Db21wb3VuZDtcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgdG9KU09OKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICAvLyBDb252ZXJ0IHRoZSBtYXAgdG8gYSBKU09OIG9iamVjdC5cbiAgICBjb25zdCBqc29uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggdGFnIGluIHRoZSBjb21wb3VuZCB0YWcuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgLy8gQWRkIHRoZSB0YWcgdG8gdGhlIEpTT04gb2JqZWN0IHVzaW5nIGl0cyBrZXkuXG4gICAgICBqc29uW2tleV0gPSB2YWx1ZS50b0pTT04oKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhlIEpTT04gb2JqZWN0LlxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIG5idCB0YWcgYnkgaXRzIGtleS5cbiAgICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSB0YWcgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIFRoZSB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXksIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG4gICAqL1xuICBwdWJsaWMgZ2V0PFQgZXh0ZW5kcyBCYXNlVGFnPihrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgIC8vIENhbGwgdGhlIG9yaWdpbmFsIGdldCBtZXRob2QgZnJvbSBNYXAgYW5kIGNhc3QgdGhlIHJlc3VsdCB0byBULlxuICAgIHJldHVybiBzdXBlci5nZXQoa2V5KSBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIG5idCB0YWcgd2l0aCBhIHNwZWNpZmljIGtleS5cbiAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSB0YWcuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdGFnIHRvIHNldC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyBzZXQ8VCBleHRlbmRzIEJhc2VUYWc+KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IHRoaXMge1xuICAgIC8vIENhbGwgdGhlIG9yaWdpbmFsIHNldCBtZXRob2QgZnJvbSBNYXAuXG4gICAgc3VwZXIuc2V0KGtleSwgdmFsdWUpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG11bHRpcGxlIHRhZ3MgdG8gdGhlIGNvbXBvdW5kIHRhZy5cbiAgICogQHBhcmFtIHRhZ3MgQW4gYXJyYXkgb2YgdGFncyB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgcHVzaDxUIGV4dGVuZHMgQmFzZVRhZz4oLi4udGFnczogQXJyYXk8VD4pOiB0aGlzIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCB0YWcgaW4gdGhlIHByb3ZpZGVkIGFycmF5LlxuICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICAgIC8vIFNldCB0aGUgdGFnIGluIHRoZSBtYXAgdXNpbmcgaXRzIG5hbWUgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBuYW1lIGlzIG51bGwuXG4gICAgICBzdXBlci5zZXQodGFnLm5hbWUgPz8gXCJcIiwgdGFnKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5nbGUgdGFnIHRvIHRoZSBjb21wb3VuZCB0YWcuXG4gICAqIEBwYXJhbSB0YWcgVGhlIHRhZyB0byBhZGQgdG8gdGhlIGNvbXBvdW5kIHRhZy5cbiAgICogQHJldHVybnMgVGhlIHRhZyB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIHB1YmxpYyBhZGQ8VCBleHRlbmRzIEJhc2VUYWc+KHRhZzogVCk6IFQge1xuICAgIC8vIEFkZCB0aGUgdGFnIHRvIHRoZSBjb21wb3VuZCB0YWcgdXNpbmcgaXRzIG5hbWUgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBuYW1lIGlzIG51bGwuXG4gICAgdGhpcy5zZXQodGFnLm5hbWUgPz8gXCJcIiwgdGFnKTtcblxuICAgIC8vIFJldHVybiB0aGUgdGFnIHRoYXQgd2FzIGFkZGVkLlxuICAgIHJldHVybiB0YWc7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IENvbXBvdW5kVGFnIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkNvbXBvdW5kKSB7XG4gICAgICAgIC8vIFRocm93IGFuIGVycm9yIGlmIHRoZSB0eXBlIGRvZXMgbm90IG1hdGNoLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIHRhZyB0eXBlIHRvIGJlICR7VGFnVHlwZVtUYWdUeXBlLkNvbXBvdW5kXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIG5ldyBDb21wb3VuZFRhZyBpbnN0YW5jZS5cbiAgICBjb25zdCB0YWcgPSBuZXcgQ29tcG91bmRUYWcobmFtZSk7XG5cbiAgICAvLyBSZWFkIHRoZSB0YWdzIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSBvciBhIG51bGwgdGFnIGlzIGVuY291bnRlcmVkLlxuICAgIGRvIHtcbiAgICAgIC8vIFJlYWQgdGhlIG5leHQgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBFbmQsIHdoaWNoIGluZGljYXRlcyB0aGUgZW5kIG9mIHRoZSBjb21wb3VuZCB0YWcuXG4gICAgICBpZiAodHlwZSA9PT0gVGFnVHlwZS5FbmQpIGJyZWFrO1xuXG4gICAgICAvLyBIYW5kbGUgdGhlIHRhZyB0eXBlIGJhc2VkIG9uIGl0cyB2YWx1ZS5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdGFnIHR5cGU6ICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gKTtcblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZToge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIEJ5dGVUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEJ5dGVUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuU2hvcnQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBTaG9ydFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gU2hvcnRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuSW50OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGFuIEludFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gSW50VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkxvbmc6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBMb25nVGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBMb25nVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkZsb2F0OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgRmxvYXRUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEZsb2F0VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkRvdWJsZToge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIERvdWJsZVRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gRG91YmxlVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkJ5dGVMaXN0OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQnl0ZUxpc3RUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEJ5dGVMaXN0VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLlN0cmluZzoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIFN0cmluZ1RhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gU3RyaW5nVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkxpc3Q6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBMaXN0VGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBMaXN0VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkNvbXBvdW5kOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQ29tcG91bmRUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvdW5kVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoc3RyZWFtLmN1cnNvckF0RW5kKCkgPT09IGZhbHNlKTtcblxuICAgIC8vIFJldHVybiB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgcmV0dXJuIHRhZztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JpdGUoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgdmFsdWU6IENvbXBvdW5kVGFnLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHN0cmVhbS53cml0ZUludDgodmFsdWUudHlwZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIG5hbWUgdG8gYSBidWZmZXIuXG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZS5uYW1lID8/IFwiXCIsIFwidXRmOFwiKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGlmIChvcHRpb25zLnZhcmludCkgc3RyZWFtLndyaXRlVmFySW50KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQxNihidWZmZXIubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBuYW1lIGJ1ZmZlciB0byB0aGUgc3RyZWFtLlxuICAgICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggdGFnIGluIHRoZSBDb21wb3VuZFRhZyBpbnN0YW5jZS5cbiAgICBmb3IgKGNvbnN0IFssIHRhZ10gb2YgdmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodGFnLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUYWdUeXBlLkJ5dGU6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgQnl0ZVRhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIEJ5dGVUYWcud3JpdGUoc3RyZWFtLCB0YWcgYXMgQnl0ZVRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuU2hvcnQ6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgU2hvcnRUYWcgdG8gdGhlIHN0cmVhbS5cbiAgICAgICAgICBTaG9ydFRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBTaG9ydFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuSW50OiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIEludFRhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIEludFRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBJbnRUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkxvbmc6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgTG9uZ1RhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIExvbmdUYWcud3JpdGUoc3RyZWFtLCB0YWcgYXMgTG9uZ1RhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRmxvYXQ6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgRmxvYXRUYWcgdG8gdGhlIHN0cmVhbS5cbiAgICAgICAgICBGbG9hdFRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBGbG9hdFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRG91YmxlOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIERvdWJsZVRhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIERvdWJsZVRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBEb3VibGVUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkJ5dGVMaXN0OiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIEJ5dGVMaXN0VGFnIHRvIHRoZSBzdHJlYW0uXG4gICAgICAgICAgQnl0ZUxpc3RUYWcud3JpdGUoc3RyZWFtLCB0YWcgYXMgQnl0ZUxpc3RUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLlN0cmluZzoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBTdHJpbmdUYWcgdG8gdGhlIHN0cmVhbS5cbiAgICAgICAgICBTdHJpbmdUYWcud3JpdGUoc3RyZWFtLCB0YWcgYXMgU3RyaW5nVGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5MaXN0OiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIExpc3RUYWcgdG8gdGhlIHN0cmVhbS5cbiAgICAgICAgICBMaXN0VGFnLndyaXRlKHN0cmVhbSwgdGFnIGFzIExpc3RUYWc8QmFzZVRhZz4sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkNvbXBvdW5kOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIENvbXBvdW5kVGFnIHRvIHRoZSBzdHJlYW0uXG4gICAgICAgICAgQ29tcG91bmRUYWcud3JpdGUoc3RyZWFtLCB0YWcgYXMgQ29tcG91bmRUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgdGhlIEVuZCB0YWcgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgY29tcG91bmQgdGFnLlxuICAgIHN0cmVhbS53cml0ZUludDgoVGFnVHlwZS5FbmQpO1xuICB9XG59XG5cbmV4cG9ydCB7IENvbXBvdW5kVGFnIH07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUEsSUFBS0EsVUFBQUEseUJBQUFBLFVBQUFBOzs7Ozs7Ozs7Ozs7OztTQUFBQTtFQUFBQSxXQUFBQSxDQUFBQSxDQUFBQTs7O0FDTUwsSUFBZUMsVUFBZixNQUFlQSxTQUFBQTtFQUFmLE9BQWVBOzs7Ozs7RUFTTkMsT0FBc0I7Ozs7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QUFNO1lBQ05ILE1BQU07VUFDUixDQUFBO0FBR0E7UUFDRjtRQUVBLEtBQUtDLFFBQVF5QyxRQUFRO0FBRW5CQyxvQkFBVU0sTUFBTXBDLFFBQVFGLFNBQWlDO1lBQ3ZELEdBQUdHO1lBQ0hYLE1BQU07WUFDTkgsTUFBTTtVQUNSLENBQUE7QUFHQTtRQUNGO1FBRUEsS0FBS0MsUUFBUTJDLFVBQVU7QUFFckJDLHNCQUFZSSxNQUFNcEMsUUFBUUYsU0FBbUM7WUFDM0QsR0FBR0c7WUFDSFgsTUFBTTtZQUNOSCxNQUFNO1VBQ1IsQ0FBQTtBQUdBO1FBQ0Y7UUFFQSxLQUFLQyxRQUFRd0IsUUFBUTtBQUVuQnFCLG9CQUFVRyxNQUFNcEMsUUFBUUYsU0FBaUM7WUFDdkQsR0FBR0c7WUFDSFgsTUFBTTtZQUNOSCxNQUFNO1VBQ1IsQ0FBQTtBQUdBO1FBQ0Y7UUFFQSxLQUFLQyxRQUFRQyxNQUFNO0FBRWpCSixVQUFBQSxTQUFRbUQsTUFBTXBDLFFBQVFGLFNBQWtDO1lBQ3RELEdBQUdHO1lBQ0hYLE1BQU07WUFDTkgsTUFBTTtVQUNSLENBQUE7QUFHQTtRQUNGO1FBRUEsS0FBS0MsUUFBUThDLFVBQVU7QUFFckJDLHNCQUFZQyxNQUFNcEMsUUFBUUYsU0FBbUM7WUFDM0QsR0FBR0c7WUFDSFgsTUFBTTtZQUNOSCxNQUFNO1VBQ1IsQ0FBQTtBQUdBO1FBQ0Y7TUFDRjtJQUNGO0VBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFsiVGFnVHlwZSIsICJCYXNlVGFnIiwgIm5hbWUiLCAicmVhZCIsICJfc3RyZWFtIiwgIl9vcHRpb25zIiwgIkVycm9yIiwgIndyaXRlIiwgIl92YWx1ZSIsICJCeXRlVGFnIiwgIk51bWJlciIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiQnl0ZSIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJTdHJpbmciLCAiZnJvbUNoYXJDb2RlIiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgImltcG9ydF9iaW5hcnlzdHJlYW0iLCAiU2hvcnRUYWciLCAiTnVtYmVyIiwgInR5cGUiLCAiVGFnVHlwZSIsICJTaG9ydCIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJTdHJpbmciLCAiZnJvbUNoYXJDb2RlIiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgImltcG9ydF9iaW5hcnlzdHJlYW0iLCAiSW50VGFnIiwgIk51bWJlciIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiSW50IiwgIm5hbWUiLCAidmFsdWUiLCAidG9KU09OIiwgInZhbHVlT2YiLCAicmVhZCIsICJzdHJlYW0iLCAib3B0aW9ucyIsICJ2YXJpbnQiLCAicmVhZEludDgiLCAiRXJyb3IiLCAibGVuZ3RoIiwgInJlYWRWYXJJbnQiLCAicmVhZEludDE2IiwgIkVuZGlhbm5lc3MiLCAiTGl0dGxlIiwgImJ1ZmZlciIsICJyZWFkQnVmZmVyIiwgIlN0cmluZyIsICJmcm9tQ2hhckNvZGUiLCAicmVhZFppZ1phZyIsICJyZWFkSW50MzIiLCAid3JpdGUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJmcm9tIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAid3JpdGVaaWdaYWciLCAid3JpdGVJbnQzMiIsICJpbXBvcnRfYmluYXJ5c3RyZWFtIiwgIkxvbmdUYWciLCAiU3RyaW5nIiwgInR5cGUiLCAiVGFnVHlwZSIsICJMb25nIiwgIm5hbWUiLCAidmFsdWUiLCAidG9KU09OIiwgInZhbHVlT2YiLCAicmVhZCIsICJzdHJlYW0iLCAib3B0aW9ucyIsICJ2YXJpbnQiLCAicmVhZEludDgiLCAiRXJyb3IiLCAibGVuZ3RoIiwgInJlYWRWYXJJbnQiLCAicmVhZEludDE2IiwgIkVuZGlhbm5lc3MiLCAiTGl0dGxlIiwgImJ1ZmZlciIsICJyZWFkQnVmZmVyIiwgImZyb21DaGFyQ29kZSIsICJyZWFkWmlnWm9uZyIsICJyZWFkSW50NjQiLCAid3JpdGUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJmcm9tIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAid3JpdGVaaWdab25nIiwgIkJpZ0ludCIsICJ3cml0ZUludDY0IiwgImltcG9ydF9iaW5hcnlzdHJlYW0iLCAiRmxvYXRUYWciLCAiTnVtYmVyIiwgInR5cGUiLCAiVGFnVHlwZSIsICJGbG9hdCIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJTdHJpbmciLCAiZnJvbUNoYXJDb2RlIiwgInJlYWRGbG9hdDMyIiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIndyaXRlRmxvYXQzMiIsICJpbXBvcnRfYmluYXJ5c3RyZWFtIiwgIkRvdWJsZVRhZyIsICJOdW1iZXIiLCAidHlwZSIsICJUYWdUeXBlIiwgIkRvdWJsZSIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJTdHJpbmciLCAiZnJvbUNoYXJDb2RlIiwgInJlYWRGbG9hdDY0IiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIndyaXRlRmxvYXQ2NCIsICJpbXBvcnRfYmluYXJ5c3RyZWFtIiwgIkJ5dGVMaXN0VGFnIiwgIkFycmF5IiwgInR5cGUiLCAiVGFnVHlwZSIsICJCeXRlTGlzdCIsICJuYW1lIiwgImVsZW1lbnRzIiwgIm1hcCIsICJjYWxsYmFja2ZuIiwgInRoaXNBcmciLCAiYXJyYXkiLCAiZnJvbSIsICJ0b0pTT04iLCAidmFsdWUiLCAidmFsdWVPZiIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJCeXRlIiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJTdHJpbmciLCAiZnJvbUNoYXJDb2RlIiwgInJlYWRaaWdaYWciLCAicmVhZEludDMyIiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAid3JpdGVWYXJJbnQiLCAid3JpdGVJbnQxNiIsICJ3cml0ZUJ1ZmZlciIsICJ3cml0ZVppZ1phZyIsICJ3cml0ZUludDMyIiwgImJ5dGUiLCAiaW1wb3J0X2JpbmFyeXN0cmVhbSIsICJTdHJpbmdUYWciLCAiU3RyaW5nIiwgInR5cGUiLCAiVGFnVHlwZSIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJmcm9tQ2hhckNvZGUiLCAid3JpdGUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJmcm9tIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAidG9TdHJpbmciLCAiaW1wb3J0X2JpbmFyeXN0cmVhbSIsICJpbXBvcnRfYmluYXJ5c3RyZWFtIiwgIkNvbXBvdW5kVGFnIiwgIk1hcCIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiQ29tcG91bmQiLCAibmFtZSIsICJ0b0pTT04iLCAianNvbiIsICJrZXkiLCAidmFsdWUiLCAiZ2V0IiwgInNldCIsICJwdXNoIiwgInRhZ3MiLCAidGFnIiwgImFkZCIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJFcnJvciIsICJsZW5ndGgiLCAicmVhZFZhckludCIsICJyZWFkSW50MTYiLCAiRW5kaWFubmVzcyIsICJMaXR0bGUiLCAiYnVmZmVyIiwgInJlYWRCdWZmZXIiLCAiU3RyaW5nIiwgImZyb21DaGFyQ29kZSIsICJFbmQiLCAiQnl0ZSIsICJlbGVtZW50IiwgIkJ5dGVUYWciLCAiU2hvcnQiLCAiU2hvcnRUYWciLCAiSW50IiwgIkludFRhZyIsICJMb25nIiwgIkxvbmdUYWciLCAiRmxvYXQiLCAiRmxvYXRUYWciLCAiRG91YmxlIiwgIkRvdWJsZVRhZyIsICJCeXRlTGlzdCIsICJCeXRlTGlzdFRhZyIsICJTdHJpbmdUYWciLCAiTGlzdCIsICJMaXN0VGFnIiwgImN1cnNvckF0RW5kIiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIkxpc3RUYWciLCAiQXJyYXkiLCAidHlwZSIsICJUYWdUeXBlIiwgIkxpc3QiLCAibmFtZSIsICJlbGVtZW50cyIsICJtYXAiLCAiY2FsbGJhY2tmbiIsICJ0aGlzQXJnIiwgImFycmF5IiwgImZyb20iLCAidG9KU09OIiwgImVsZW1lbnQiLCAicmVhZCIsICJzdHJlYW0iLCAib3B0aW9ucyIsICJ2YXJpbnQiLCAicmVhZEludDgiLCAiRXJyb3IiLCAibGVuZ3RoIiwgInJlYWRWYXJJbnQiLCAicmVhZEludDE2IiwgIkVuZGlhbm5lc3MiLCAiTGl0dGxlIiwgImJ1ZmZlciIsICJyZWFkQnVmZmVyIiwgIlN0cmluZyIsICJmcm9tQ2hhckNvZGUiLCAicmVhZFppZ1phZyIsICJyZWFkSW50MzIiLCAidGFnIiwgImkiLCAiQnl0ZSIsICJCeXRlVGFnIiwgInB1c2giLCAiU2hvcnQiLCAiU2hvcnRUYWciLCAiSW50IiwgIkludFRhZyIsICJMb25nIiwgIkxvbmdUYWciLCAiRmxvYXQiLCAiRmxvYXRUYWciLCAiRG91YmxlIiwgIkRvdWJsZVRhZyIsICJCeXRlTGlzdCIsICJCeXRlTGlzdFRhZyIsICJTdHJpbmdUYWciLCAiQ29tcG91bmQiLCAiQ29tcG91bmRUYWciLCAid3JpdGUiLCAidmFsdWUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIndyaXRlWmlnWmFnIiwgIndyaXRlSW50MzIiXQp9Cg==
|
|
1091
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9lbnVtL3RhZy10eXBlLnRzIiwgIi4uL3NyYy90eXBlcy9iYXNlLXRhZy50cyIsICIuLi9zcmMvdHlwZXMvYnl0ZS50cyIsICIuLi9zcmMvdHlwZXMvc2hvcnQudHMiLCAiLi4vc3JjL3R5cGVzL2ludC50cyIsICIuLi9zcmMvdHlwZXMvbG9uZy50cyIsICIuLi9zcmMvdHlwZXMvZmxvYXQudHMiLCAiLi4vc3JjL3R5cGVzL2RvdWJsZS50cyIsICIuLi9zcmMvdHlwZXMvYnl0ZS1saXN0LnRzIiwgIi4uL3NyYy90eXBlcy9zdHJpbmcudHMiLCAiLi4vc3JjL3R5cGVzL2xpc3QudHMiLCAiLi4vc3JjL3R5cGVzL2NvbXBvdW5kLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgKiBmcm9tIFwiLi9lbnVtXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuIiwgImVudW0gVGFnVHlwZSB7XG4gIEVuZCA9IDB4MDAsXG4gIEJ5dGUgPSAweDAxLFxuICBTaG9ydCA9IDB4MDIsXG4gIEludCA9IDB4MDMsXG4gIExvbmcgPSAweDA0LFxuICBGbG9hdCA9IDB4MDUsXG4gIERvdWJsZSA9IDB4MDYsXG4gIEJ5dGVMaXN0ID0gMHgwNyxcbiAgU3RyaW5nID0gMHgwOCxcbiAgTGlzdCA9IDB4MDksXG4gIENvbXBvdW5kID0gMHgwYSxcbiAgSW50TGlzdCA9IDB4MGIsXG4gIExvbmdMaXN0ID0gMHgwY1xufVxuXG5leHBvcnQgeyBUYWdUeXBlIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuXG5hYnN0cmFjdCBjbGFzcyBCYXNlVGFnIHtcbiAgLyoqXG4gICAqIFRoZSBuYnQgdGFnIHR5cGUgb2YgdGhlIGRhdGEgdHlwZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0eXBlOiBUYWdUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbmJ0IHRhZy5cbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQ29udmVydCB0aGUgdGFnIHRvIGEgSlNPTiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgdG9KU09OKCk6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIG5idCB0YWcgZnJvbSB0aGUgc3RyZWFtLlxuICAgKiBAcGFyYW0gc3RyZWFtIFRoZSBiaW5hcnkgc3RyZWFtIHRvIHJlYWQgZnJvbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHJlYWRpbmcgdGhlIHRhZy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBfc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgX29wdGlvbnM/OiBSZWFkV3JpdGVPcHRpb25zXG4gICk6IEJhc2VUYWcge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCAncmVhZCcgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgbmJ0IHRhZyB0byB0aGUgc3RyZWFtLlxuICAgKiBAcGFyYW0gc3RyZWFtIFRoZSBiaW5hcnkgc3RyZWFtIHRvIHdyaXRlIHRvLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSB0YWcgdG8gd3JpdGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB3cml0aW5nIHRoZSB0YWcuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIF9zdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBfdmFsdWU6IEJhc2VUYWcsXG4gICAgX29wdGlvbnM/OiBSZWFkV3JpdGVPcHRpb25zXG4gICk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCAnd3JpdGUnIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gIH1cbn1cblxuZXhwb3J0IHsgQmFzZVRhZyB9O1xuIiwgImltcG9ydCB7IEJpbmFyeVN0cmVhbSwgRW5kaWFubmVzcyB9IGZyb20gXCJAc2VyZW5pdHlqcy9iaW5hcnlzdHJlYW1cIjtcblxuaW1wb3J0IHsgVGFnVHlwZSB9IGZyb20gXCIuLi9lbnVtXCI7XG5cbmltcG9ydCB7IEJhc2VUYWcgfSBmcm9tIFwiLi9iYXNlLXRhZ1wiO1xuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuXG5jbGFzcyBCeXRlVGFnIGV4dGVuZHMgTnVtYmVyIGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5CeXRlO1xuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQnl0ZVRhZyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBieXRlIHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIodmFsdWUpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogbnVtYmVyIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBieXRlIHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZWFkKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBCeXRlVGFnIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkJ5dGUpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuQnl0ZV19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgfVxuXG4gICAgLy8gUmVhZCB0aGUgYnl0ZSB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IEJ5dGVUYWcgaW5zdGFuY2UuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHZhbHVlLCBuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JpdGUoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgdmFsdWU6IEJ5dGVUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgYnl0ZSB2YWx1ZSB0byB0aGUgc3RyZWFtLlxuICAgIHN0cmVhbS53cml0ZUludDgodmFsdWUudmFsdWVPZigpKTtcbiAgfVxufVxuXG5leHBvcnQgeyBCeXRlVGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5cbmNsYXNzIFNob3J0VGFnIGV4dGVuZHMgTnVtYmVyIGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5TaG9ydDtcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNob3J0VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHNob3J0IHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIodmFsdWUpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogbnVtYmVyIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBzaG9ydCB2YWx1ZSB0byBhIEpTT04gbnVtYmVyLlxuICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogU2hvcnRUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuU2hvcnQpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuU2hvcnRdfSwgcmVjZWl2ZWQgJHtUYWdUeXBlW3R5cGVdID8/IHR5cGV9LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGEgdmFyaWFibGUgdG8gaG9sZCB0aGUgbmFtZSBvZiB0aGUgdGFnLlxuICAgIGxldCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gUmVhZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgY29uc3QgbGVuZ3RoID0gb3B0aW9ucz8udmFyaW50XG4gICAgICAgID8gc3RyZWFtLnJlYWRWYXJJbnQoKVxuICAgICAgICA6IHN0cmVhbS5yZWFkSW50MTYoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBSZWFkIHRoZSBuYW1lIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmVhbS5yZWFkQnVmZmVyKGxlbmd0aCk7XG5cbiAgICAgIC8vIENvbnZlcnQgdGhlIGJ1ZmZlciB0byBhIHN0cmluZy5cbiAgICAgIG5hbWUgPSBidWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIHNob3J0IHZhbHVlIGZyb20gdGhlIHN0cmVhbS5cbiAgICBjb25zdCB2YWx1ZSA9IHN0cmVhbS5yZWFkSW50MTYoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgU2hvcnRUYWcgaW5zdGFuY2UuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHZhbHVlLCBuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JpdGUoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgdmFsdWU6IFNob3J0VGFnLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHN0cmVhbS53cml0ZUludDgodmFsdWUudHlwZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIG5hbWUgdG8gYSBidWZmZXIuXG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZS5uYW1lID8/IFwiXCIsIFwidXRmOFwiKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGlmIChvcHRpb25zLnZhcmludCkgc3RyZWFtLndyaXRlVmFySW50KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQxNihidWZmZXIubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBuYW1lIGJ1ZmZlciB0byB0aGUgc3RyZWFtLlxuICAgICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgdGhlIHNob3J0IHZhbHVlIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlSW50MTYodmFsdWUudmFsdWVPZigpLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgU2hvcnRUYWcgfTtcbiIsICJpbXBvcnQgeyBCaW5hcnlTdHJlYW0sIEVuZGlhbm5lc3MgfSBmcm9tIFwiQHNlcmVuaXR5anMvYmluYXJ5c3RyZWFtXCI7XG5cbmltcG9ydCB7IFRhZ1R5cGUgfSBmcm9tIFwiLi4vZW51bVwiO1xuXG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcblxuY2xhc3MgSW50VGFnIGV4dGVuZHMgTnVtYmVyIGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5JbnQ7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBJbnRUYWcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgaW50IHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIodmFsdWUpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogbnVtYmVyIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBzaG9ydCB2YWx1ZSB0byBhIEpTT04gbnVtYmVyLlxuICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogSW50VGFnIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkludCkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5JbnRdfSwgcmVjZWl2ZWQgJHtUYWdUeXBlW3R5cGVdID8/IHR5cGV9LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGEgdmFyaWFibGUgdG8gaG9sZCB0aGUgbmFtZSBvZiB0aGUgdGFnLlxuICAgIGxldCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gUmVhZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgY29uc3QgbGVuZ3RoID0gb3B0aW9ucz8udmFyaW50XG4gICAgICAgID8gc3RyZWFtLnJlYWRWYXJJbnQoKVxuICAgICAgICA6IHN0cmVhbS5yZWFkSW50MTYoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBSZWFkIHRoZSBuYW1lIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmVhbS5yZWFkQnVmZmVyKGxlbmd0aCk7XG5cbiAgICAgIC8vIENvbnZlcnQgdGhlIGJ1ZmZlciB0byBhIHN0cmluZy5cbiAgICAgIG5hbWUgPSBidWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGludCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zPy52YXJpbnRcbiAgICAgID8gc3RyZWFtLnJlYWRaaWdaYWcoKVxuICAgICAgOiBzdHJlYW0ucmVhZEludDMyKEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IEludFRhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogSW50VGFnLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHN0cmVhbS53cml0ZUludDgodmFsdWUudHlwZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIG5hbWUgdG8gYSBidWZmZXIuXG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZS5uYW1lID8/IFwiXCIsIFwidXRmOFwiKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGlmIChvcHRpb25zLnZhcmludCkgc3RyZWFtLndyaXRlVmFySW50KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQxNihidWZmZXIubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBuYW1lIGJ1ZmZlciB0byB0aGUgc3RyZWFtLlxuICAgICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgdGhlIGludCB2YWx1ZSB0byB0aGUgc3RyZWFtLlxuICAgIGlmIChvcHRpb25zPy52YXJpbnQpIHN0cmVhbS53cml0ZVppZ1phZyh2YWx1ZS52YWx1ZU9mKCkpO1xuICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MzIodmFsdWUudmFsdWVPZigpLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgSW50VGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5cbmNsYXNzIExvbmdUYWcgZXh0ZW5kcyBTdHJpbmcgaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLkxvbmc7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBMb25nVGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGxvbmcgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IGJpZ2ludCwgbmFtZT86IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIC8vIENvbnZlcnQgdGhlIHNob3J0IHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpICsgXCJuXCI7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IExvbmdUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuTG9uZykge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5Mb25nXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gYnVmZmVyLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSBsb25nIHZhbHVlIGZyb20gdGhlIHN0cmVhbS5cbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgPyBzdHJlYW0ucmVhZFppZ1pvbmcoKVxuICAgICAgOiBzdHJlYW0ucmVhZEludDY0KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IExvbmdUYWcgaW5zdGFuY2UuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHZhbHVlLCBuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JpdGUoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgdmFsdWU6IExvbmdUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgbG9uZyB2YWx1ZSB0byB0aGUgc3RyZWFtLlxuICAgIGlmIChvcHRpb25zPy52YXJpbnQpIHN0cmVhbS53cml0ZVppZ1pvbmcoQmlnSW50KHZhbHVlLnZhbHVlT2YoKSkpO1xuICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50NjQoQmlnSW50KHZhbHVlLnZhbHVlT2YoKSksIEVuZGlhbm5lc3MuTGl0dGxlKTtcbiAgfVxufVxuXG5leHBvcnQgeyBMb25nVGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5cbmNsYXNzIEZsb2F0VGFnIGV4dGVuZHMgTnVtYmVyIGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5GbG9hdDtcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEZsb2F0VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGZsb2F0IHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIodmFsdWUpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogbnVtYmVyIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBzaG9ydCB2YWx1ZSB0byBhIEpTT04gbnVtYmVyLlxuICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogRmxvYXRUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuRmxvYXQpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuRmxvYXRdfSwgcmVjZWl2ZWQgJHtUYWdUeXBlW3R5cGVdID8/IHR5cGV9LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGEgdmFyaWFibGUgdG8gaG9sZCB0aGUgbmFtZSBvZiB0aGUgdGFnLlxuICAgIGxldCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gUmVhZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgY29uc3QgbGVuZ3RoID0gb3B0aW9ucz8udmFyaW50XG4gICAgICAgID8gc3RyZWFtLnJlYWRWYXJJbnQoKVxuICAgICAgICA6IHN0cmVhbS5yZWFkSW50MTYoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBSZWFkIHRoZSBuYW1lIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmVhbS5yZWFkQnVmZmVyKGxlbmd0aCk7XG5cbiAgICAgIC8vIENvbnZlcnQgdGhlIGJ1ZmZlciB0byBhIHN0cmluZy5cbiAgICAgIG5hbWUgPSBidWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGZsb2F0IHZhbHVlIGZyb20gdGhlIHN0cmVhbS5cbiAgICBjb25zdCB2YWx1ZSA9IHN0cmVhbS5yZWFkRmxvYXQzMihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAvLyBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBGbG9hdFRhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogRmxvYXRUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgZmxvYXQgdmFsdWUgdG8gdGhlIHN0cmVhbS5cbiAgICBzdHJlYW0ud3JpdGVGbG9hdDMyKHZhbHVlLnZhbHVlT2YoKSwgRW5kaWFubmVzcy5MaXR0bGUpO1xuICB9XG59XG5cbmV4cG9ydCB7IEZsb2F0VGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5cbmNsYXNzIERvdWJsZVRhZyBleHRlbmRzIE51bWJlciBpbXBsZW1lbnRzIEJhc2VUYWcge1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZSA9IFRhZ1R5cGUuRG91YmxlO1xuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRG91YmxlVGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGRvdWJsZSB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhZywgZGVmYXVsdHMgdG8gbnVsbC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZTogbnVtYmVyLCBuYW1lPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIHN1cGVyKHZhbHVlKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgdG9KU09OKCk6IG51bWJlciB7XG4gICAgLy8gQ29udmVydCB0aGUgYnl0ZSB2YWx1ZSB0byBhIEpTT04gbnVtYmVyLlxuICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogRG91YmxlVGFnIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkRvdWJsZSkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5Eb3VibGVdfSwgcmVjZWl2ZWQgJHtUYWdUeXBlW3R5cGVdID8/IHR5cGV9LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGEgdmFyaWFibGUgdG8gaG9sZCB0aGUgbmFtZSBvZiB0aGUgdGFnLlxuICAgIGxldCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gUmVhZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgY29uc3QgbGVuZ3RoID0gb3B0aW9ucz8udmFyaW50XG4gICAgICAgID8gc3RyZWFtLnJlYWRWYXJJbnQoKVxuICAgICAgICA6IHN0cmVhbS5yZWFkSW50MTYoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBSZWFkIHRoZSBuYW1lIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmVhbS5yZWFkQnVmZmVyKGxlbmd0aCk7XG5cbiAgICAgIC8vIENvbnZlcnQgdGhlIGJ1ZmZlciB0byBhIHN0cmluZy5cbiAgICAgIG5hbWUgPSBidWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGRvdWJsZSB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBzdHJlYW0ucmVhZEZsb2F0NjQoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgRG91YmxlVGFnIGluc3RhbmNlLlxuICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBEb3VibGVUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgZG91YmxlIHZhbHVlIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlRmxvYXQ2NCh2YWx1ZS52YWx1ZU9mKCksIEVuZGlhbm5lc3MuTGl0dGxlKTtcbiAgfVxufVxuXG5leHBvcnQgeyBEb3VibGVUYWcgfTtcbiIsICJpbXBvcnQgeyBCaW5hcnlTdHJlYW0sIEVuZGlhbm5lc3MgfSBmcm9tIFwiQHNlcmVuaXR5anMvYmluYXJ5c3RyZWFtXCI7XG5cbmltcG9ydCB7IFRhZ1R5cGUgfSBmcm9tIFwiLi4vZW51bVwiO1xuXG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcblxuY2xhc3MgQnl0ZUxpc3RUYWcgZXh0ZW5kcyBBcnJheTxudW1iZXI+IGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5CeXRlTGlzdDtcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEJ5dGVMaXN0VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIG9mIHRoZSBieXRlIGxpc3QuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoZWxlbWVudHM6IEFycmF5PG51bWJlcj4sIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIoLi4uZWxlbWVudHMpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBtYXA8VT4oXG4gICAgY2FsbGJhY2tmbjogKHZhbHVlOiBudW1iZXIsIGluZGV4OiBudW1iZXIsIGFycmF5OiBBcnJheTxudW1iZXI+KSA9PiBVLFxuICAgIHRoaXNBcmc/OiB1bmtub3duXG4gICk6IEFycmF5PFU+IHtcbiAgICAvLyBDb252ZXJ0IHRoZSBieXRlIGxpc3QgdG8gYSByZWd1bGFyIGFycmF5LlxuICAgIGNvbnN0IGFycmF5ID0gQXJyYXkuZnJvbSh0aGlzKTtcblxuICAgIC8vIE1hcCB0aGUgZWxlbWVudHMgb2YgdGhlIGxpc3QgdXNpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgIHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2tmbiwgdGhpc0FyZyk7XG4gIH1cblxuICBwdWJsaWMgdG9KU09OKCk6IEFycmF5PG51bWJlcj4ge1xuICAgIC8vIENvbnZlcnQgdGhlIGJ5dGUgbGlzdCB0byBhIEpTT04gYXJyYXkuXG4gICAgcmV0dXJuIHRoaXMubWFwKCh2YWx1ZSkgPT4gdmFsdWUudmFsdWVPZigpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogQnl0ZUxpc3RUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuQnl0ZSkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5CeXRlXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gYnVmZmVyLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgbGlzdCBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgID8gc3RyZWFtLnJlYWRaaWdaYWcoKVxuICAgICAgOiBzdHJlYW0ucmVhZEludDMyKEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIFJlYWQgdGhlIGJ5dGUgdmFsdWVzIGZyb20gdGhlIHN0cmVhbS5cbiAgICBjb25zdCB2YWx1ZSA9IHN0cmVhbS5yZWFkKGxlbmd0aCk7XG5cbiAgICAvLyBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBCeXRlTGlzdFRhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogQnl0ZUxpc3RUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBieXRlIGxpc3QgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgaWYgKG9wdGlvbnM/LnZhcmludCkgc3RyZWFtLndyaXRlWmlnWmFnKHZhbHVlLmxlbmd0aCk7XG4gICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQzMih2YWx1ZS5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIFdyaXRlIHRoZSBieXRlIHZhbHVlcyB0byB0aGUgc3RyZWFtLlxuICAgIHN0cmVhbS53cml0ZSh2YWx1ZS5tYXAoKGJ5dGUpID0+IGJ5dGU/LnZhbHVlT2YoKSA/PyAwKSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQnl0ZUxpc3RUYWcgfTtcbiIsICJpbXBvcnQgeyBCaW5hcnlTdHJlYW0sIEVuZGlhbm5lc3MgfSBmcm9tIFwiQHNlcmVuaXR5anMvYmluYXJ5c3RyZWFtXCI7XG5cbmltcG9ydCB7IFRhZ1R5cGUgfSBmcm9tIFwiLi4vZW51bVwiO1xuXG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcblxuY2xhc3MgU3RyaW5nVGFnIGV4dGVuZHMgU3RyaW5nIGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5TdHJpbmc7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBTdHJpbmdUYWcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RyaW5nIHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIodmFsdWUpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogc3RyaW5nIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBieXRlIHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZWFkKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBTdHJpbmdUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuU3RyaW5nKSB7XG4gICAgICAgIC8vIFRocm93IGFuIGVycm9yIGlmIHRoZSB0eXBlIGRvZXMgbm90IG1hdGNoLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIHRhZyB0eXBlIHRvIGJlICR7VGFnVHlwZVtUYWdUeXBlLlN0cmluZ119LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgfVxuXG4gICAgLy8gUmVhZCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdmFsdWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgY29uc3QgbGVuZ3RoID0gb3B0aW9ucz8udmFyaW50XG4gICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAvLyBSZWFkIHRoZSBzdHJpbmcgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmVhbS5yZWFkQnVmZmVyKGxlbmd0aCk7XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgY29uc3QgdmFsdWUgPSBidWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgU3RyaW5nVGFnIGluc3RhbmNlLlxuICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBTdHJpbmdUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgdmFsdWUgdG8gYSBidWZmZXIuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUudG9TdHJpbmcoKSwgXCJ1dGY4XCIpO1xuXG4gICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHZhbHVlIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgIGlmIChvcHRpb25zPy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIFdyaXRlIHRoZSBzdHJpbmcgdmFsdWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gIH1cbn1cblxuZXhwb3J0IHsgU3RyaW5nVGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5pbXBvcnQgeyBCeXRlVGFnIH0gZnJvbSBcIi4vYnl0ZVwiO1xuaW1wb3J0IHsgU2hvcnRUYWcgfSBmcm9tIFwiLi9zaG9ydFwiO1xuaW1wb3J0IHsgSW50VGFnIH0gZnJvbSBcIi4vaW50XCI7XG5pbXBvcnQgeyBMb25nVGFnIH0gZnJvbSBcIi4vbG9uZ1wiO1xuaW1wb3J0IHsgRmxvYXRUYWcgfSBmcm9tIFwiLi9mbG9hdFwiO1xuaW1wb3J0IHsgRG91YmxlVGFnIH0gZnJvbSBcIi4vZG91YmxlXCI7XG5pbXBvcnQgeyBTdHJpbmdUYWcgfSBmcm9tIFwiLi9zdHJpbmdcIjtcbmltcG9ydCB7IENvbXBvdW5kVGFnIH0gZnJvbSBcIi4vY29tcG91bmRcIjtcbmltcG9ydCB7IEJ5dGVMaXN0VGFnIH0gZnJvbSBcIi4vYnl0ZS1saXN0XCI7XG5cbmNsYXNzIExpc3RUYWc8VCBleHRlbmRzIEJhc2VUYWc+IGV4dGVuZHMgQXJyYXk8VD4gaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLkxpc3Q7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBMaXN0VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGVsZW1lbnRzOiBBcnJheTxUPiA9IFtdLCBuYW1lPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIC8vIENhbGwgdGhlIHBhcmVudCBjb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIHRoZSBhcnJheS5cbiAgICBzdXBlciguLi5lbGVtZW50cyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIG1hcDxVPihcbiAgICBjYWxsYmFja2ZuOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiBBcnJheTxUPikgPT4gVSxcbiAgICB0aGlzQXJnPzogdW5rbm93blxuICApOiBBcnJheTxVPiB7XG4gICAgY29uc3QgYXJyYXkgPSBBcnJheS5mcm9tKHRoaXMpO1xuXG4gICAgLy8gTWFwIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdCB1c2luZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAgcmV0dXJuIGFycmF5Lm1hcChjYWxsYmFja2ZuLCB0aGlzQXJnKTtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogQXJyYXk8dW5rbm93bj4ge1xuICAgIC8vIENvbnZlcnQgdGhlIGxpc3QgZWxlbWVudHMgdG8gYSBKU09OIGFycmF5LlxuICAgIHJldHVybiB0aGlzLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC50b0pTT04oKSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQ8VCBleHRlbmRzIEJhc2VUYWc+KFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBMaXN0VGFnPFQ+IHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkxpc3QpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuTGlzdF19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgfVxuXG4gICAgLy8gUmVhZCB0aGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdC5cbiAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QuXG4gICAgY29uc3QgbGVuZ3RoID0gb3B0aW9ucz8udmFyaW50XG4gICAgICA/IHN0cmVhbS5yZWFkWmlnWmFnKClcbiAgICAgIDogc3RyZWFtLnJlYWRJbnQzMihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgTGlzdFRhZyBpbnN0YW5jZS5cbiAgICBjb25zdCB0YWcgPSBuZXcgdGhpczxUPihbXSwgbmFtZSk7XG5cbiAgICAvLyBSZWFkIHRoZSBsaXN0IGVsZW1lbnRzIGJhc2VkIG9uIHRoZSB0eXBlLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbGlzdCB0eXBlOiAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX1gKTtcblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZToge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIEJ5dGVUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEJ5dGVUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLlNob3J0OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgU2hvcnRUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IFNob3J0VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0LlxuICAgICAgICAgIHRhZy5wdXNoKGVsZW1lbnQgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5JbnQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYW4gSW50VGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBJbnRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkxvbmc6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBMb25nVGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBMb25nVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0LlxuICAgICAgICAgIHRhZy5wdXNoKGVsZW1lbnQgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5GbG9hdDoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIEZsb2F0VGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBGbG9hdFRhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgbGlzdC5cbiAgICAgICAgICB0YWcucHVzaChlbGVtZW50IGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRG91YmxlOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgRG91YmxlVGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBEb3VibGVUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkJ5dGVMaXN0OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQnl0ZUxpc3RUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEJ5dGVMaXN0VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0LlxuICAgICAgICAgIHRhZy5wdXNoKGVsZW1lbnQgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5TdHJpbmc6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBTdHJpbmdUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IFN0cmluZ1RhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgbGlzdC5cbiAgICAgICAgICB0YWcucHVzaChlbGVtZW50IGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuTGlzdDoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIExpc3RUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IExpc3RUYWcucmVhZDxUPihzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkNvbXBvdW5kOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQ29tcG91bmRUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvdW5kVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0LlxuICAgICAgICAgIHRhZy5wdXNoKGVsZW1lbnQgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiB0aGUgdGFnIHdpdGggdGhlIHR5cGUgYW5kIG5hbWUgc2V0LlxuICAgIHJldHVybiB0YWc7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlPFQgZXh0ZW5kcyBCYXNlVGFnPihcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogTGlzdFRhZzxUPixcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSBzdHJlYW0ud3JpdGVJbnQ4KHZhbHVlLnR5cGUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBDb252ZXJ0IHRoZSBuYW1lIHRvIGEgYnVmZmVyLlxuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUubmFtZSA/PyBcIlwiLCBcInV0ZjhcIik7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBpZiAob3B0aW9ucy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MTYoYnVmZmVyLmxlbmd0aCwgRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbmFtZSBidWZmZXIgdG8gdGhlIHN0cmVhbS5cbiAgICAgIHN0cmVhbS53cml0ZUJ1ZmZlcihidWZmZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGFuIGVsZW1lbnQgaXMgcHJlc2VudCBpbiB0aGUgbGlzdC5cbiAgICBpZiAoIXZhbHVlWzBdKSB7XG4gICAgICAvLyBJZiBub3QsIHdyaXRlIGFuIGVtcHR5IGxpc3QgdHlwZSBhbmQgbGVuZ3RoLlxuICAgICAgc3RyZWFtLndyaXRlSW50OChUYWdUeXBlLkJ5dGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBzbywgZ2V0IHRoZSB0eXBlIG9mIHRoZSBmaXJzdCBlbGVtZW50LlxuICAgICAgY29uc3QgdHlwZSA9IHZhbHVlWzBdLnR5cGU7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSB0eXBlIG9mIHRoZSBsaXN0LlxuICAgICAgc3RyZWFtLndyaXRlSW50OCh0eXBlKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0LlxuICAgIGlmIChvcHRpb25zPy52YXJpbnQpIHN0cmVhbS53cml0ZVppZ1phZyh2YWx1ZS5sZW5ndGgpO1xuICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MzIodmFsdWUubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBlbGVtZW50IGluIHRoZSBsaXN0LlxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZSkge1xuICAgICAgLy8gSGFuZGxlIGVhY2ggdHlwZSBvZiBlbGVtZW50IGJhc2VkIG9uIGl0cyB0YWcgdHlwZS5cbiAgICAgIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgICAgIGNhc2UgVGFnVHlwZS5CeXRlOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBCeXRlVGFnLlxuICAgICAgICAgIEJ5dGVUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgQnl0ZVRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5TaG9ydDoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBlbGVtZW50IGFzIGEgU2hvcnRUYWcuXG4gICAgICAgICAgU2hvcnRUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgU2hvcnRUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuSW50OiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYW4gSW50VGFnLlxuICAgICAgICAgIEludFRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBJbnRUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuTG9uZzoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBlbGVtZW50IGFzIGEgTG9uZ1RhZy5cbiAgICAgICAgICBMb25nVGFnLndyaXRlKHN0cmVhbSwgZWxlbWVudCBhcyB1bmtub3duIGFzIExvbmdUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRmxvYXQ6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgZWxlbWVudCBhcyBhIEZsb2F0VGFnLlxuICAgICAgICAgIEZsb2F0VGFnLndyaXRlKHN0cmVhbSwgZWxlbWVudCBhcyB1bmtub3duIGFzIEZsb2F0VGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkRvdWJsZToge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBlbGVtZW50IGFzIGEgRG91YmxlVGFnLlxuICAgICAgICAgIERvdWJsZVRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBEb3VibGVUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZUxpc3Q6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgZWxlbWVudCBhcyBhIEJ5dGVUYWcuXG4gICAgICAgICAgQnl0ZUxpc3RUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgQnl0ZUxpc3RUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuU3RyaW5nOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBTdHJpbmdUYWcuXG4gICAgICAgICAgU3RyaW5nVGFnLndyaXRlKHN0cmVhbSwgZWxlbWVudCBhcyB1bmtub3duIGFzIFN0cmluZ1RhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5MaXN0OiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBMaXN0VGFnLlxuICAgICAgICAgIExpc3RUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgTGlzdFRhZzxUPiwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5Db21wb3VuZDoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBlbGVtZW50IGFzIGEgQ29tcG91bmRUYWcuXG4gICAgICAgICAgQ29tcG91bmRUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgQ29tcG91bmRUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgTGlzdFRhZyB9O1xuIiwgImltcG9ydCB7IEJpbmFyeVN0cmVhbSwgRW5kaWFubmVzcyB9IGZyb20gXCJAc2VyZW5pdHlqcy9iaW5hcnlzdHJlYW1cIjtcblxuaW1wb3J0IHsgVGFnVHlwZSB9IGZyb20gXCIuLi9lbnVtXCI7XG5cbmltcG9ydCB7IEJ5dGVUYWcgfSBmcm9tIFwiLi9ieXRlXCI7XG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcbmltcG9ydCB7IFNob3J0VGFnIH0gZnJvbSBcIi4vc2hvcnRcIjtcbmltcG9ydCB7IEludFRhZyB9IGZyb20gXCIuL2ludFwiO1xuaW1wb3J0IHsgTG9uZ1RhZyB9IGZyb20gXCIuL2xvbmdcIjtcbmltcG9ydCB7IEZsb2F0VGFnIH0gZnJvbSBcIi4vZmxvYXRcIjtcbmltcG9ydCB7IERvdWJsZVRhZyB9IGZyb20gXCIuL2RvdWJsZVwiO1xuaW1wb3J0IHsgU3RyaW5nVGFnIH0gZnJvbSBcIi4vc3RyaW5nXCI7XG5pbXBvcnQgeyBMaXN0VGFnIH0gZnJvbSBcIi4vbGlzdFwiO1xuaW1wb3J0IHsgQnl0ZUxpc3RUYWcgfSBmcm9tIFwiLi9ieXRlLWxpc3RcIjtcblxuY2xhc3MgQ29tcG91bmRUYWcgZXh0ZW5kcyBNYXA8c3RyaW5nLCBCYXNlVGFnPiBpbXBsZW1lbnRzIEJhc2VUYWcge1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZSA9IFRhZ1R5cGUuQ29tcG91bmQ7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBDb21wb3VuZFRhZyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhZywgZGVmYXVsdHMgdG8gbnVsbC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihuYW1lPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgLy8gQ29udmVydCB0aGUgbWFwIHRvIGEgSlNPTiBvYmplY3QuXG4gICAgY29uc3QganNvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHRhZyBpbiB0aGUgY29tcG91bmQgdGFnLlxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIC8vIEFkZCB0aGUgdGFnIHRvIHRoZSBKU09OIG9iamVjdCB1c2luZyBpdHMga2V5LlxuICAgICAganNvbltrZXldID0gdmFsdWUudG9KU09OKCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoZSBKU09OIG9iamVjdC5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBuYnQgdGFnIGJ5IGl0cyBrZXkuXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSBvZiB0aGUgdGFnIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyBUaGUgdGFnIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIGdldDxUIGV4dGVuZHMgQmFzZVRhZz4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBDYWxsIHRoZSBvcmlnaW5hbCBnZXQgbWV0aG9kIGZyb20gTWFwIGFuZCBjYXN0IHRoZSByZXN1bHQgdG8gVC5cbiAgICByZXR1cm4gc3VwZXIuZ2V0KGtleSkgYXMgVCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuYnQgdGFnIHdpdGggYSBzcGVjaWZpYyBrZXkuXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdGFnLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHRhZyB0byBzZXQuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgc2V0PFQgZXh0ZW5kcyBCYXNlVGFnPihrZXk6IHN0cmluZywgdmFsdWU6IFQpOiB0aGlzIHtcbiAgICAvLyBDYWxsIHRoZSBvcmlnaW5hbCBzZXQgbWV0aG9kIGZyb20gTWFwLlxuICAgIHN1cGVyLnNldChrZXksIHZhbHVlKTtcblxuICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBtdWx0aXBsZSB0YWdzIHRvIHRoZSBjb21wb3VuZCB0YWcuXG4gICAqIEBwYXJhbSB0YWdzIEFuIGFycmF5IG9mIHRhZ3MgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgcHVibGljIHB1c2g8VCBleHRlbmRzIEJhc2VUYWc+KC4uLnRhZ3M6IEFycmF5PFQ+KTogdGhpcyB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggdGFnIGluIHRoZSBwcm92aWRlZCBhcnJheS5cbiAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgICAvLyBTZXQgdGhlIHRhZyBpbiB0aGUgbWFwIHVzaW5nIGl0cyBuYW1lIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgbmFtZSBpcyBudWxsLlxuICAgICAgc3VwZXIuc2V0KHRhZy5uYW1lID8/IFwiXCIsIHRhZyk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2luZ2xlIHRhZyB0byB0aGUgY29tcG91bmQgdGFnLlxuICAgKiBAcGFyYW0gdGFnIFRoZSB0YWcgdG8gYWRkIHRvIHRoZSBjb21wb3VuZCB0YWcuXG4gICAqIEByZXR1cm5zIFRoZSB0YWcgdGhhdCB3YXMgYWRkZWQuXG4gICAqL1xuICBwdWJsaWMgYWRkPFQgZXh0ZW5kcyBCYXNlVGFnPih0YWc6IFQpOiBUIHtcbiAgICAvLyBBZGQgdGhlIHRhZyB0byB0aGUgY29tcG91bmQgdGFnIHVzaW5nIGl0cyBuYW1lIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgbmFtZSBpcyBudWxsLlxuICAgIHRoaXMuc2V0KHRhZy5uYW1lID8/IFwiXCIsIHRhZyk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIHRhZyB0aGF0IHdhcyBhZGRlZC5cbiAgICByZXR1cm4gdGFnO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZWFkKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBDb21wb3VuZFRhZyB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSB7XG4gICAgICAvLyBSZWFkIHRoZSB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRhZyB0eXBlIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHR5cGUuXG4gICAgICBpZiAodHlwZSAhPT0gVGFnVHlwZS5Db21wb3VuZCkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5Db21wb3VuZF19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgIGNvbnN0IHRhZyA9IG5ldyBDb21wb3VuZFRhZyhuYW1lKTtcblxuICAgIC8vIFJlYWQgdGhlIHRhZ3MgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgbnVsbCB0YWcgaXMgZW5jb3VudGVyZWQuXG4gICAgZG8ge1xuICAgICAgLy8gUmVhZCB0aGUgbmV4dCB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIEVuZCwgd2hpY2ggaW5kaWNhdGVzIHRoZSBlbmQgb2YgdGhlIGNvbXBvdW5kIHRhZy5cbiAgICAgIGlmICh0eXBlID09PSBUYWdUeXBlLkVuZCkgYnJlYWs7XG5cbiAgICAgIC8vIEhhbmRsZSB0aGUgdGFnIHR5cGUgYmFzZWQgb24gaXRzIHZhbHVlLlxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0YWcgdHlwZTogJHtUYWdUeXBlW3R5cGVdID8/IHR5cGV9LmApO1xuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5CeXRlOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQnl0ZVRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQnl0ZVRhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBDb21wb3VuZFRhZyBpbnN0YW5jZS5cbiAgICAgICAgICB0YWcuc2V0KGVsZW1lbnQubmFtZSA/PyBcIlwiLCBlbGVtZW50KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5TaG9ydDoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIFNob3J0VGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBTaG9ydFRhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBDb21wb3VuZFRhZyBpbnN0YW5jZS5cbiAgICAgICAgICB0YWcuc2V0KGVsZW1lbnQubmFtZSA/PyBcIlwiLCBlbGVtZW50KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5JbnQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYW4gSW50VGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBJbnRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuTG9uZzoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIExvbmdUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IExvbmdUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRmxvYXQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBGbG9hdFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gRmxvYXRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRG91YmxlOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgRG91YmxlVGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBEb3VibGVUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZUxpc3Q6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBCeXRlTGlzdFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQnl0ZUxpc3RUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuU3RyaW5nOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgU3RyaW5nVGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBTdHJpbmdUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuTGlzdDoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIExpc3RUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IExpc3RUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQ29tcG91bmQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBDb21wb3VuZFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG91bmRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChzdHJlYW0uY3Vyc29yQXRFbmQoKSA9PT0gZmFsc2UpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSBDb21wb3VuZFRhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gdGFnO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogQ29tcG91bmRUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCB0YWcgaW4gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgIGZvciAoY29uc3QgWywgdGFnXSBvZiB2YWx1ZSkge1xuICAgICAgc3dpdGNoICh0YWcudHlwZSkge1xuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZToge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBCeXRlVGFnIHRvIHRoZSBzdHJlYW0uXG4gICAgICAgICAgQnl0ZVRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBCeXRlVGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5TaG9ydDoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBTaG9ydFRhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIFNob3J0VGFnLndyaXRlKHN0cmVhbSwgdGFnIGFzIFNob3J0VGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5JbnQ6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgSW50VGFnIHRvIHRoZSBzdHJlYW0uXG4gICAgICAgICAgSW50VGFnLndyaXRlKHN0cmVhbSwgdGFnIGFzIEludFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuTG9uZzoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBMb25nVGFnIHRvIHRoZSBzdHJlYW0uXG4gICAgICAgICAgTG9uZ1RhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBMb25nVGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5GbG9hdDoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBGbG9hdFRhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIEZsb2F0VGFnLndyaXRlKHN0cmVhbSwgdGFnIGFzIEZsb2F0VGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5Eb3VibGU6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgRG91YmxlVGFnIHRvIHRoZSBzdHJlYW0uXG4gICAgICAgICAgRG91YmxlVGFnLndyaXRlKHN0cmVhbSwgdGFnIGFzIERvdWJsZVRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZUxpc3Q6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgQnl0ZUxpc3RUYWcgdG8gdGhlIHN0cmVhbS5cbiAgICAgICAgICBCeXRlTGlzdFRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBCeXRlTGlzdFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuU3RyaW5nOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIFN0cmluZ1RhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIFN0cmluZ1RhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBTdHJpbmdUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkxpc3Q6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgTGlzdFRhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIExpc3RUYWcud3JpdGUoc3RyZWFtLCB0YWcgYXMgTGlzdFRhZzxCYXNlVGFnPiwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQ29tcG91bmQ6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgQ29tcG91bmRUYWcgdG8gdGhlIHN0cmVhbS5cbiAgICAgICAgICBDb21wb3VuZFRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBDb21wb3VuZFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgRW5kIHRhZyB0byBpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSBjb21wb3VuZCB0YWcuXG4gICAgc3RyZWFtLndyaXRlSW50OChUYWdUeXBlLkVuZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ29tcG91bmRUYWcgfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQSxJQUFLQSxVQUFBQSx5QkFBQUEsVUFBQUE7Ozs7Ozs7Ozs7Ozs7O1NBQUFBO0VBQUFBLFdBQUFBLENBQUFBLENBQUFBOzs7QUNNTCxJQUFlQyxVQUFmLE1BQWVBLFNBQUFBO0VBQWYsT0FBZUE7Ozs7OztFQVNOQyxPQUFzQjs7Ozs7O0VBWTdCLE9BQWNDLEtBQ1pDLFNBQ0FDLFVBQ1M7QUFDVCxVQUFNLElBQUlDLE1BQU0sZ0NB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QTtRQUNGO1FBRUEsS0FBS0MsUUFBUTBDLFVBQVU7QUFFckJDLHNCQUFZSyxNQUFNcEMsUUFBUUYsU0FBbUM7WUFDM0QsR0FBR0c7WUFDSFgsTUFBTTtZQUNOSCxNQUFNO1VBQ1IsQ0FBQTtBQUdBO1FBQ0Y7UUFFQSxLQUFLQyxRQUFRNEMsUUFBUTtBQUVuQkMsb0JBQVVHLE1BQU1wQyxRQUFRRixTQUFpQztZQUN2RCxHQUFHRztZQUNIWCxNQUFNO1lBQ05ILE1BQU07VUFDUixDQUFBO0FBR0E7UUFDRjtRQUVBLEtBQUtDLFFBQVFDLE1BQU07QUFFakJKLFVBQUFBLFNBQVFtRCxNQUFNcEMsUUFBUUYsU0FBa0M7WUFDdEQsR0FBR0c7WUFDSFgsTUFBTTtZQUNOSCxNQUFNO1VBQ1IsQ0FBQTtBQUdBO1FBQ0Y7UUFFQSxLQUFLQyxRQUFROEMsVUFBVTtBQUVyQkMsc0JBQVlDLE1BQU1wQyxRQUFRRixTQUFtQztZQUMzRCxHQUFHRztZQUNIWCxNQUFNO1lBQ05ILE1BQU07VUFDUixDQUFBO0FBR0E7UUFDRjtNQUNGO0lBQ0Y7RUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogWyJUYWdUeXBlIiwgIkJhc2VUYWciLCAibmFtZSIsICJyZWFkIiwgIl9zdHJlYW0iLCAiX29wdGlvbnMiLCAiRXJyb3IiLCAid3JpdGUiLCAiX3ZhbHVlIiwgIkJ5dGVUYWciLCAiTnVtYmVyIiwgInR5cGUiLCAiVGFnVHlwZSIsICJCeXRlIiwgIm5hbWUiLCAidmFsdWUiLCAidG9KU09OIiwgInZhbHVlT2YiLCAicmVhZCIsICJzdHJlYW0iLCAib3B0aW9ucyIsICJ2YXJpbnQiLCAicmVhZEludDgiLCAiRXJyb3IiLCAibGVuZ3RoIiwgInJlYWRWYXJJbnQiLCAicmVhZEludDE2IiwgIkVuZGlhbm5lc3MiLCAiTGl0dGxlIiwgImJ1ZmZlciIsICJyZWFkQnVmZmVyIiwgInRvU3RyaW5nIiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgImltcG9ydF9iaW5hcnlzdHJlYW0iLCAiU2hvcnRUYWciLCAiTnVtYmVyIiwgInR5cGUiLCAiVGFnVHlwZSIsICJTaG9ydCIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJ0b1N0cmluZyIsICJ3cml0ZSIsICJ3cml0ZUludDgiLCAiQnVmZmVyIiwgImZyb20iLCAid3JpdGVWYXJJbnQiLCAid3JpdGVJbnQxNiIsICJ3cml0ZUJ1ZmZlciIsICJpbXBvcnRfYmluYXJ5c3RyZWFtIiwgIkludFRhZyIsICJOdW1iZXIiLCAidHlwZSIsICJUYWdUeXBlIiwgIkludCIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJ0b1N0cmluZyIsICJyZWFkWmlnWmFnIiwgInJlYWRJbnQzMiIsICJ3cml0ZSIsICJ3cml0ZUludDgiLCAiQnVmZmVyIiwgImZyb20iLCAid3JpdGVWYXJJbnQiLCAid3JpdGVJbnQxNiIsICJ3cml0ZUJ1ZmZlciIsICJ3cml0ZVppZ1phZyIsICJ3cml0ZUludDMyIiwgImltcG9ydF9iaW5hcnlzdHJlYW0iLCAiTG9uZ1RhZyIsICJTdHJpbmciLCAidHlwZSIsICJUYWdUeXBlIiwgIkxvbmciLCAibmFtZSIsICJ2YWx1ZSIsICJ0b0pTT04iLCAidmFsdWVPZiIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJFcnJvciIsICJsZW5ndGgiLCAicmVhZFZhckludCIsICJyZWFkSW50MTYiLCAiRW5kaWFubmVzcyIsICJMaXR0bGUiLCAiYnVmZmVyIiwgInJlYWRCdWZmZXIiLCAidG9TdHJpbmciLCAicmVhZFppZ1pvbmciLCAicmVhZEludDY0IiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIndyaXRlWmlnWm9uZyIsICJCaWdJbnQiLCAid3JpdGVJbnQ2NCIsICJpbXBvcnRfYmluYXJ5c3RyZWFtIiwgIkZsb2F0VGFnIiwgIk51bWJlciIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiRmxvYXQiLCAibmFtZSIsICJ2YWx1ZSIsICJ0b0pTT04iLCAidmFsdWVPZiIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJFcnJvciIsICJsZW5ndGgiLCAicmVhZFZhckludCIsICJyZWFkSW50MTYiLCAiRW5kaWFubmVzcyIsICJMaXR0bGUiLCAiYnVmZmVyIiwgInJlYWRCdWZmZXIiLCAidG9TdHJpbmciLCAicmVhZEZsb2F0MzIiLCAid3JpdGUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJmcm9tIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAid3JpdGVGbG9hdDMyIiwgImltcG9ydF9iaW5hcnlzdHJlYW0iLCAiRG91YmxlVGFnIiwgIk51bWJlciIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiRG91YmxlIiwgIm5hbWUiLCAidmFsdWUiLCAidG9KU09OIiwgInZhbHVlT2YiLCAicmVhZCIsICJzdHJlYW0iLCAib3B0aW9ucyIsICJ2YXJpbnQiLCAicmVhZEludDgiLCAiRXJyb3IiLCAibGVuZ3RoIiwgInJlYWRWYXJJbnQiLCAicmVhZEludDE2IiwgIkVuZGlhbm5lc3MiLCAiTGl0dGxlIiwgImJ1ZmZlciIsICJyZWFkQnVmZmVyIiwgInRvU3RyaW5nIiwgInJlYWRGbG9hdDY0IiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIndyaXRlRmxvYXQ2NCIsICJpbXBvcnRfYmluYXJ5c3RyZWFtIiwgIkJ5dGVMaXN0VGFnIiwgIkFycmF5IiwgInR5cGUiLCAiVGFnVHlwZSIsICJCeXRlTGlzdCIsICJuYW1lIiwgImVsZW1lbnRzIiwgIm1hcCIsICJjYWxsYmFja2ZuIiwgInRoaXNBcmciLCAiYXJyYXkiLCAiZnJvbSIsICJ0b0pTT04iLCAidmFsdWUiLCAidmFsdWVPZiIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJCeXRlIiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJ0b1N0cmluZyIsICJyZWFkWmlnWmFnIiwgInJlYWRJbnQzMiIsICJ3cml0ZSIsICJ3cml0ZUludDgiLCAiQnVmZmVyIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAid3JpdGVaaWdaYWciLCAid3JpdGVJbnQzMiIsICJieXRlIiwgImltcG9ydF9iaW5hcnlzdHJlYW0iLCAiU3RyaW5nVGFnIiwgIlN0cmluZyIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAibmFtZSIsICJ2YWx1ZSIsICJ0b0pTT04iLCAidmFsdWVPZiIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJFcnJvciIsICJsZW5ndGgiLCAicmVhZFZhckludCIsICJyZWFkSW50MTYiLCAiRW5kaWFubmVzcyIsICJMaXR0bGUiLCAiYnVmZmVyIiwgInJlYWRCdWZmZXIiLCAidG9TdHJpbmciLCAid3JpdGUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJmcm9tIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAiaW1wb3J0X2JpbmFyeXN0cmVhbSIsICJpbXBvcnRfYmluYXJ5c3RyZWFtIiwgIkNvbXBvdW5kVGFnIiwgIk1hcCIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiQ29tcG91bmQiLCAibmFtZSIsICJ0b0pTT04iLCAianNvbiIsICJrZXkiLCAidmFsdWUiLCAiZ2V0IiwgInNldCIsICJwdXNoIiwgInRhZ3MiLCAidGFnIiwgImFkZCIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJFcnJvciIsICJsZW5ndGgiLCAicmVhZFZhckludCIsICJyZWFkSW50MTYiLCAiRW5kaWFubmVzcyIsICJMaXR0bGUiLCAiYnVmZmVyIiwgInJlYWRCdWZmZXIiLCAidG9TdHJpbmciLCAiRW5kIiwgIkJ5dGUiLCAiZWxlbWVudCIsICJCeXRlVGFnIiwgIlNob3J0IiwgIlNob3J0VGFnIiwgIkludCIsICJJbnRUYWciLCAiTG9uZyIsICJMb25nVGFnIiwgIkZsb2F0IiwgIkZsb2F0VGFnIiwgIkRvdWJsZSIsICJEb3VibGVUYWciLCAiQnl0ZUxpc3QiLCAiQnl0ZUxpc3RUYWciLCAiU3RyaW5nIiwgIlN0cmluZ1RhZyIsICJMaXN0IiwgIkxpc3RUYWciLCAiY3Vyc29yQXRFbmQiLCAid3JpdGUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJmcm9tIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAiTGlzdFRhZyIsICJBcnJheSIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiTGlzdCIsICJuYW1lIiwgImVsZW1lbnRzIiwgIm1hcCIsICJjYWxsYmFja2ZuIiwgInRoaXNBcmciLCAiYXJyYXkiLCAiZnJvbSIsICJ0b0pTT04iLCAiZWxlbWVudCIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJFcnJvciIsICJsZW5ndGgiLCAicmVhZFZhckludCIsICJyZWFkSW50MTYiLCAiRW5kaWFubmVzcyIsICJMaXR0bGUiLCAiYnVmZmVyIiwgInJlYWRCdWZmZXIiLCAidG9TdHJpbmciLCAicmVhZFppZ1phZyIsICJyZWFkSW50MzIiLCAidGFnIiwgImkiLCAiQnl0ZSIsICJCeXRlVGFnIiwgInB1c2giLCAiU2hvcnQiLCAiU2hvcnRUYWciLCAiSW50IiwgIkludFRhZyIsICJMb25nIiwgIkxvbmdUYWciLCAiRmxvYXQiLCAiRmxvYXRUYWciLCAiRG91YmxlIiwgIkRvdWJsZVRhZyIsICJCeXRlTGlzdCIsICJCeXRlTGlzdFRhZyIsICJTdHJpbmciLCAiU3RyaW5nVGFnIiwgIkNvbXBvdW5kIiwgIkNvbXBvdW5kVGFnIiwgIndyaXRlIiwgInZhbHVlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAid3JpdGVWYXJJbnQiLCAid3JpdGVJbnQxNiIsICJ3cml0ZUJ1ZmZlciIsICJ3cml0ZVppZ1phZyIsICJ3cml0ZUludDMyIl0KfQo=
|
package/dist/index.mjs
CHANGED
|
@@ -82,7 +82,7 @@ var ByteTag = class ByteTag2 extends Number {
|
|
|
82
82
|
if (options?.name) {
|
|
83
83
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(Endianness.Little);
|
|
84
84
|
const buffer = stream.readBuffer(length);
|
|
85
|
-
name =
|
|
85
|
+
name = buffer.toString("utf8");
|
|
86
86
|
}
|
|
87
87
|
const value = stream.readInt8();
|
|
88
88
|
return new this(value, name);
|
|
@@ -138,7 +138,7 @@ var ShortTag = class ShortTag2 extends Number {
|
|
|
138
138
|
if (options?.name) {
|
|
139
139
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(Endianness2.Little);
|
|
140
140
|
const buffer = stream.readBuffer(length);
|
|
141
|
-
name =
|
|
141
|
+
name = buffer.toString("utf8");
|
|
142
142
|
}
|
|
143
143
|
const value = stream.readInt16(Endianness2.Little);
|
|
144
144
|
return new this(value, name);
|
|
@@ -194,7 +194,7 @@ var IntTag = class IntTag2 extends Number {
|
|
|
194
194
|
if (options?.name) {
|
|
195
195
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(Endianness3.Little);
|
|
196
196
|
const buffer = stream.readBuffer(length);
|
|
197
|
-
name =
|
|
197
|
+
name = buffer.toString("utf8");
|
|
198
198
|
}
|
|
199
199
|
const value = options?.varint ? stream.readZigZag() : stream.readInt32(Endianness3.Little);
|
|
200
200
|
return new this(value, name);
|
|
@@ -251,7 +251,7 @@ var LongTag = class LongTag2 extends String {
|
|
|
251
251
|
if (options?.name) {
|
|
252
252
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(Endianness4.Little);
|
|
253
253
|
const buffer = stream.readBuffer(length);
|
|
254
|
-
name =
|
|
254
|
+
name = buffer.toString("utf8");
|
|
255
255
|
}
|
|
256
256
|
const value = options?.varint ? stream.readZigZong() : stream.readInt64(Endianness4.Little);
|
|
257
257
|
return new this(value, name);
|
|
@@ -308,7 +308,7 @@ var FloatTag = class FloatTag2 extends Number {
|
|
|
308
308
|
if (options?.name) {
|
|
309
309
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(Endianness5.Little);
|
|
310
310
|
const buffer = stream.readBuffer(length);
|
|
311
|
-
name =
|
|
311
|
+
name = buffer.toString("utf8");
|
|
312
312
|
}
|
|
313
313
|
const value = stream.readFloat32(Endianness5.Little);
|
|
314
314
|
return new this(value, name);
|
|
@@ -364,7 +364,7 @@ var DoubleTag = class DoubleTag2 extends Number {
|
|
|
364
364
|
if (options?.name) {
|
|
365
365
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(Endianness6.Little);
|
|
366
366
|
const buffer = stream.readBuffer(length);
|
|
367
|
-
name =
|
|
367
|
+
name = buffer.toString("utf8");
|
|
368
368
|
}
|
|
369
369
|
const value = stream.readFloat64(Endianness6.Little);
|
|
370
370
|
return new this(value, name);
|
|
@@ -424,7 +424,7 @@ var ByteListTag = class ByteListTag2 extends Array {
|
|
|
424
424
|
if (options?.name) {
|
|
425
425
|
const length2 = options?.varint ? stream.readVarInt() : stream.readInt16(Endianness7.Little);
|
|
426
426
|
const buffer = stream.readBuffer(length2);
|
|
427
|
-
name =
|
|
427
|
+
name = buffer.toString("utf8");
|
|
428
428
|
}
|
|
429
429
|
const length = options?.varint ? stream.readZigZag() : stream.readInt32(Endianness7.Little);
|
|
430
430
|
const value = stream.read(length);
|
|
@@ -483,11 +483,11 @@ var StringTag = class StringTag2 extends String {
|
|
|
483
483
|
if (options?.name) {
|
|
484
484
|
const length2 = options?.varint ? stream.readVarInt() : stream.readInt16(Endianness8.Little);
|
|
485
485
|
const buffer2 = stream.readBuffer(length2);
|
|
486
|
-
name =
|
|
486
|
+
name = buffer2.toString("utf8");
|
|
487
487
|
}
|
|
488
488
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(Endianness8.Little);
|
|
489
489
|
const buffer = stream.readBuffer(length);
|
|
490
|
-
const value =
|
|
490
|
+
const value = buffer.toString("utf8");
|
|
491
491
|
return new this(value, name);
|
|
492
492
|
}
|
|
493
493
|
static write(stream, value, options = {
|
|
@@ -588,7 +588,7 @@ var CompoundTag = class CompoundTag2 extends Map {
|
|
|
588
588
|
if (options?.name) {
|
|
589
589
|
const length = options?.varint ? stream.readVarInt() : stream.readInt16(Endianness9.Little);
|
|
590
590
|
const buffer = stream.readBuffer(length);
|
|
591
|
-
name =
|
|
591
|
+
name = buffer.toString("utf8");
|
|
592
592
|
}
|
|
593
593
|
const tag = new CompoundTag2(name);
|
|
594
594
|
do {
|
|
@@ -829,7 +829,7 @@ var ListTag = class ListTag2 extends Array {
|
|
|
829
829
|
if (options?.name) {
|
|
830
830
|
const length2 = options?.varint ? stream.readVarInt() : stream.readInt16(Endianness10.Little);
|
|
831
831
|
const buffer = stream.readBuffer(length2);
|
|
832
|
-
name =
|
|
832
|
+
name = buffer.toString("utf8");
|
|
833
833
|
}
|
|
834
834
|
const type = stream.readInt8();
|
|
835
835
|
const length = options?.varint ? stream.readZigZag() : stream.readInt32(Endianness10.Little);
|
|
@@ -1052,4 +1052,4 @@ export {
|
|
|
1052
1052
|
StringTag,
|
|
1053
1053
|
TagType
|
|
1054
1054
|
};
|
|
1055
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2VudW0vdGFnLXR5cGUudHMiLCAiLi4vc3JjL3R5cGVzL2Jhc2UtdGFnLnRzIiwgIi4uL3NyYy90eXBlcy9ieXRlLnRzIiwgIi4uL3NyYy90eXBlcy9zaG9ydC50cyIsICIuLi9zcmMvdHlwZXMvaW50LnRzIiwgIi4uL3NyYy90eXBlcy9sb25nLnRzIiwgIi4uL3NyYy90eXBlcy9mbG9hdC50cyIsICIuLi9zcmMvdHlwZXMvZG91YmxlLnRzIiwgIi4uL3NyYy90eXBlcy9ieXRlLWxpc3QudHMiLCAiLi4vc3JjL3R5cGVzL3N0cmluZy50cyIsICIuLi9zcmMvdHlwZXMvbGlzdC50cyIsICIuLi9zcmMvdHlwZXMvY29tcG91bmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImVudW0gVGFnVHlwZSB7XG4gIEVuZCA9IDB4MDAsXG4gIEJ5dGUgPSAweDAxLFxuICBTaG9ydCA9IDB4MDIsXG4gIEludCA9IDB4MDMsXG4gIExvbmcgPSAweDA0LFxuICBGbG9hdCA9IDB4MDUsXG4gIERvdWJsZSA9IDB4MDYsXG4gIEJ5dGVMaXN0ID0gMHgwNyxcbiAgU3RyaW5nID0gMHgwOCxcbiAgTGlzdCA9IDB4MDksXG4gIENvbXBvdW5kID0gMHgwYSxcbiAgSW50TGlzdCA9IDB4MGIsXG4gIExvbmdMaXN0ID0gMHgwY1xufVxuXG5leHBvcnQgeyBUYWdUeXBlIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuXG5hYnN0cmFjdCBjbGFzcyBCYXNlVGFnIHtcbiAgLyoqXG4gICAqIFRoZSBuYnQgdGFnIHR5cGUgb2YgdGhlIGRhdGEgdHlwZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0eXBlOiBUYWdUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbmJ0IHRhZy5cbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQ29udmVydCB0aGUgdGFnIHRvIGEgSlNPTiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgdG9KU09OKCk6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIG5idCB0YWcgZnJvbSB0aGUgc3RyZWFtLlxuICAgKiBAcGFyYW0gc3RyZWFtIFRoZSBiaW5hcnkgc3RyZWFtIHRvIHJlYWQgZnJvbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHJlYWRpbmcgdGhlIHRhZy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBfc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgX29wdGlvbnM/OiBSZWFkV3JpdGVPcHRpb25zXG4gICk6IEJhc2VUYWcge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCAncmVhZCcgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgbmJ0IHRhZyB0byB0aGUgc3RyZWFtLlxuICAgKiBAcGFyYW0gc3RyZWFtIFRoZSBiaW5hcnkgc3RyZWFtIHRvIHdyaXRlIHRvLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSB0YWcgdG8gd3JpdGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB3cml0aW5nIHRoZSB0YWcuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIF9zdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBfdmFsdWU6IEJhc2VUYWcsXG4gICAgX29wdGlvbnM/OiBSZWFkV3JpdGVPcHRpb25zXG4gICk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCAnd3JpdGUnIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gIH1cbn1cblxuZXhwb3J0IHsgQmFzZVRhZyB9O1xuIiwgImltcG9ydCB7IEJpbmFyeVN0cmVhbSwgRW5kaWFubmVzcyB9IGZyb20gXCJAc2VyZW5pdHlqcy9iaW5hcnlzdHJlYW1cIjtcblxuaW1wb3J0IHsgVGFnVHlwZSB9IGZyb20gXCIuLi9lbnVtXCI7XG5cbmltcG9ydCB7IEJhc2VUYWcgfSBmcm9tIFwiLi9iYXNlLXRhZ1wiO1xuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuXG5jbGFzcyBCeXRlVGFnIGV4dGVuZHMgTnVtYmVyIGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5CeXRlO1xuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQnl0ZVRhZyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBieXRlIHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIodmFsdWUpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogbnVtYmVyIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBieXRlIHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZWFkKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBCeXRlVGFnIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkJ5dGUpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuQnl0ZV19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSBieXRlIHZhbHVlIGZyb20gdGhlIHN0cmVhbS5cbiAgICBjb25zdCB2YWx1ZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgQnl0ZVRhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogQnl0ZVRhZyxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSBzdHJlYW0ud3JpdGVJbnQ4KHZhbHVlLnR5cGUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBDb252ZXJ0IHRoZSBuYW1lIHRvIGEgYnVmZmVyLlxuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUubmFtZSA/PyBcIlwiLCBcInV0ZjhcIik7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBpZiAob3B0aW9ucy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MTYoYnVmZmVyLmxlbmd0aCwgRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbmFtZSBidWZmZXIgdG8gdGhlIHN0cmVhbS5cbiAgICAgIHN0cmVhbS53cml0ZUJ1ZmZlcihidWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIHRoZSBieXRlIHZhbHVlIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS52YWx1ZU9mKCkpO1xuICB9XG59XG5cbmV4cG9ydCB7IEJ5dGVUYWcgfTtcbiIsICJpbXBvcnQgeyBCaW5hcnlTdHJlYW0sIEVuZGlhbm5lc3MgfSBmcm9tIFwiQHNlcmVuaXR5anMvYmluYXJ5c3RyZWFtXCI7XG5cbmltcG9ydCB7IFRhZ1R5cGUgfSBmcm9tIFwiLi4vZW51bVwiO1xuXG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcblxuY2xhc3MgU2hvcnRUYWcgZXh0ZW5kcyBOdW1iZXIgaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLlNob3J0O1xuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgU2hvcnRUYWcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc2hvcnQgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IG51bWJlciwgbmFtZT86IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBudW1iZXIge1xuICAgIC8vIENvbnZlcnQgdGhlIHNob3J0IHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZWFkKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBTaG9ydFRhZyB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSB7XG4gICAgICAvLyBSZWFkIHRoZSB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRhZyB0eXBlIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHR5cGUuXG4gICAgICBpZiAodHlwZSAhPT0gVGFnVHlwZS5TaG9ydCkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5TaG9ydF19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSBzaG9ydCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFNob3J0VGFnIGluc3RhbmNlLlxuICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBTaG9ydFRhZyxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSBzdHJlYW0ud3JpdGVJbnQ4KHZhbHVlLnR5cGUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBDb252ZXJ0IHRoZSBuYW1lIHRvIGEgYnVmZmVyLlxuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUubmFtZSA/PyBcIlwiLCBcInV0ZjhcIik7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBpZiAob3B0aW9ucy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MTYoYnVmZmVyLmxlbmd0aCwgRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbmFtZSBidWZmZXIgdG8gdGhlIHN0cmVhbS5cbiAgICAgIHN0cmVhbS53cml0ZUJ1ZmZlcihidWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIHRoZSBzaG9ydCB2YWx1ZSB0byB0aGUgc3RyZWFtLlxuICAgIHN0cmVhbS53cml0ZUludDE2KHZhbHVlLnZhbHVlT2YoKSwgRW5kaWFubmVzcy5MaXR0bGUpO1xuICB9XG59XG5cbmV4cG9ydCB7IFNob3J0VGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5cbmNsYXNzIEludFRhZyBleHRlbmRzIE51bWJlciBpbXBsZW1lbnRzIEJhc2VUYWcge1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZSA9IFRhZ1R5cGUuSW50O1xuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgSW50VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGludCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhZywgZGVmYXVsdHMgdG8gbnVsbC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZTogbnVtYmVyLCBuYW1lPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIHN1cGVyKHZhbHVlKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgdG9KU09OKCk6IG51bWJlciB7XG4gICAgLy8gQ29udmVydCB0aGUgc2hvcnQgdmFsdWUgdG8gYSBKU09OIG51bWJlci5cbiAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IEludFRhZyB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSB7XG4gICAgICAvLyBSZWFkIHRoZSB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRhZyB0eXBlIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHR5cGUuXG4gICAgICBpZiAodHlwZSAhPT0gVGFnVHlwZS5JbnQpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuSW50XX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGludCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zPy52YXJpbnRcbiAgICAgID8gc3RyZWFtLnJlYWRaaWdaYWcoKVxuICAgICAgOiBzdHJlYW0ucmVhZEludDMyKEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IEludFRhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogSW50VGFnLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHN0cmVhbS53cml0ZUludDgodmFsdWUudHlwZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIG5hbWUgdG8gYSBidWZmZXIuXG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZS5uYW1lID8/IFwiXCIsIFwidXRmOFwiKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGlmIChvcHRpb25zLnZhcmludCkgc3RyZWFtLndyaXRlVmFySW50KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQxNihidWZmZXIubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBuYW1lIGJ1ZmZlciB0byB0aGUgc3RyZWFtLlxuICAgICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgdGhlIGludCB2YWx1ZSB0byB0aGUgc3RyZWFtLlxuICAgIGlmIChvcHRpb25zPy52YXJpbnQpIHN0cmVhbS53cml0ZVppZ1phZyh2YWx1ZS52YWx1ZU9mKCkpO1xuICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MzIodmFsdWUudmFsdWVPZigpLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgSW50VGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5cbmNsYXNzIExvbmdUYWcgZXh0ZW5kcyBTdHJpbmcgaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLkxvbmc7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBMb25nVGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGxvbmcgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IGJpZ2ludCwgbmFtZT86IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIC8vIENvbnZlcnQgdGhlIHNob3J0IHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpICsgXCJuXCI7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IExvbmdUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuTG9uZykge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5Mb25nXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGxvbmcgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucz8udmFyaW50XG4gICAgICA/IHN0cmVhbS5yZWFkWmlnWm9uZygpXG4gICAgICA6IHN0cmVhbS5yZWFkSW50NjQoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgTG9uZ1RhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogTG9uZ1RhZyxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSBzdHJlYW0ud3JpdGVJbnQ4KHZhbHVlLnR5cGUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBDb252ZXJ0IHRoZSBuYW1lIHRvIGEgYnVmZmVyLlxuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUubmFtZSA/PyBcIlwiLCBcInV0ZjhcIik7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBpZiAob3B0aW9ucy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MTYoYnVmZmVyLmxlbmd0aCwgRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbmFtZSBidWZmZXIgdG8gdGhlIHN0cmVhbS5cbiAgICAgIHN0cmVhbS53cml0ZUJ1ZmZlcihidWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIHRoZSBsb25nIHZhbHVlIHRvIHRoZSBzdHJlYW0uXG4gICAgaWYgKG9wdGlvbnM/LnZhcmludCkgc3RyZWFtLndyaXRlWmlnWm9uZyhCaWdJbnQodmFsdWUudmFsdWVPZigpKSk7XG4gICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQ2NChCaWdJbnQodmFsdWUudmFsdWVPZigpKSwgRW5kaWFubmVzcy5MaXR0bGUpO1xuICB9XG59XG5cbmV4cG9ydCB7IExvbmdUYWcgfTtcbiIsICJpbXBvcnQgeyBCaW5hcnlTdHJlYW0sIEVuZGlhbm5lc3MgfSBmcm9tIFwiQHNlcmVuaXR5anMvYmluYXJ5c3RyZWFtXCI7XG5cbmltcG9ydCB7IFRhZ1R5cGUgfSBmcm9tIFwiLi4vZW51bVwiO1xuXG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcblxuY2xhc3MgRmxvYXRUYWcgZXh0ZW5kcyBOdW1iZXIgaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLkZsb2F0O1xuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRmxvYXRUYWcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgZmxvYXQgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IG51bWJlciwgbmFtZT86IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBudW1iZXIge1xuICAgIC8vIENvbnZlcnQgdGhlIHNob3J0IHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZWFkKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBGbG9hdFRhZyB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSB7XG4gICAgICAvLyBSZWFkIHRoZSB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRhZyB0eXBlIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHR5cGUuXG4gICAgICBpZiAodHlwZSAhPT0gVGFnVHlwZS5GbG9hdCkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5GbG9hdF19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSBmbG9hdCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBzdHJlYW0ucmVhZEZsb2F0MzIoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgRmxvYXRUYWcgaW5zdGFuY2UuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHZhbHVlLCBuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JpdGUoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgdmFsdWU6IEZsb2F0VGFnLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHN0cmVhbS53cml0ZUludDgodmFsdWUudHlwZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIG5hbWUgdG8gYSBidWZmZXIuXG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZS5uYW1lID8/IFwiXCIsIFwidXRmOFwiKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGlmIChvcHRpb25zLnZhcmludCkgc3RyZWFtLndyaXRlVmFySW50KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQxNihidWZmZXIubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBuYW1lIGJ1ZmZlciB0byB0aGUgc3RyZWFtLlxuICAgICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgdGhlIGZsb2F0IHZhbHVlIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlRmxvYXQzMih2YWx1ZS52YWx1ZU9mKCksIEVuZGlhbm5lc3MuTGl0dGxlKTtcbiAgfVxufVxuXG5leHBvcnQgeyBGbG9hdFRhZyB9O1xuIiwgImltcG9ydCB7IEJpbmFyeVN0cmVhbSwgRW5kaWFubmVzcyB9IGZyb20gXCJAc2VyZW5pdHlqcy9iaW5hcnlzdHJlYW1cIjtcblxuaW1wb3J0IHsgVGFnVHlwZSB9IGZyb20gXCIuLi9lbnVtXCI7XG5cbmltcG9ydCB7IEJhc2VUYWcgfSBmcm9tIFwiLi9iYXNlLXRhZ1wiO1xuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuXG5jbGFzcyBEb3VibGVUYWcgZXh0ZW5kcyBOdW1iZXIgaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLkRvdWJsZTtcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IERvdWJsZVRhZyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBkb3VibGUgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IG51bWJlciwgbmFtZT86IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBudW1iZXIge1xuICAgIC8vIENvbnZlcnQgdGhlIGJ5dGUgdmFsdWUgdG8gYSBKU09OIG51bWJlci5cbiAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IERvdWJsZVRhZyB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSB7XG4gICAgICAvLyBSZWFkIHRoZSB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRhZyB0eXBlIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHR5cGUuXG4gICAgICBpZiAodHlwZSAhPT0gVGFnVHlwZS5Eb3VibGUpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuRG91YmxlXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGRvdWJsZSB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBzdHJlYW0ucmVhZEZsb2F0NjQoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgRG91YmxlVGFnIGluc3RhbmNlLlxuICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBEb3VibGVUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgZG91YmxlIHZhbHVlIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlRmxvYXQ2NCh2YWx1ZS52YWx1ZU9mKCksIEVuZGlhbm5lc3MuTGl0dGxlKTtcbiAgfVxufVxuXG5leHBvcnQgeyBEb3VibGVUYWcgfTtcbiIsICJpbXBvcnQgeyBCaW5hcnlTdHJlYW0sIEVuZGlhbm5lc3MgfSBmcm9tIFwiQHNlcmVuaXR5anMvYmluYXJ5c3RyZWFtXCI7XG5cbmltcG9ydCB7IFRhZ1R5cGUgfSBmcm9tIFwiLi4vZW51bVwiO1xuXG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcblxuY2xhc3MgQnl0ZUxpc3RUYWcgZXh0ZW5kcyBBcnJheTxudW1iZXI+IGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5CeXRlTGlzdDtcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEJ5dGVMaXN0VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIG9mIHRoZSBieXRlIGxpc3QuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoZWxlbWVudHM6IEFycmF5PG51bWJlcj4sIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIoLi4uZWxlbWVudHMpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBtYXA8VT4oXG4gICAgY2FsbGJhY2tmbjogKHZhbHVlOiBudW1iZXIsIGluZGV4OiBudW1iZXIsIGFycmF5OiBBcnJheTxudW1iZXI+KSA9PiBVLFxuICAgIHRoaXNBcmc/OiB1bmtub3duXG4gICk6IEFycmF5PFU+IHtcbiAgICAvLyBDb252ZXJ0IHRoZSBieXRlIGxpc3QgdG8gYSByZWd1bGFyIGFycmF5LlxuICAgIGNvbnN0IGFycmF5ID0gQXJyYXkuZnJvbSh0aGlzKTtcblxuICAgIC8vIE1hcCB0aGUgZWxlbWVudHMgb2YgdGhlIGxpc3QgdXNpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgIHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2tmbiwgdGhpc0FyZyk7XG4gIH1cblxuICBwdWJsaWMgdG9KU09OKCk6IEFycmF5PG51bWJlcj4ge1xuICAgIC8vIENvbnZlcnQgdGhlIGJ5dGUgbGlzdCB0byBhIEpTT04gYXJyYXkuXG4gICAgcmV0dXJuIHRoaXMubWFwKCh2YWx1ZSkgPT4gdmFsdWUudmFsdWVPZigpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogQnl0ZUxpc3RUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuQnl0ZSkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5CeXRlXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBsaXN0IGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgPyBzdHJlYW0ucmVhZFppZ1phZygpXG4gICAgICA6IHN0cmVhbS5yZWFkSW50MzIoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gUmVhZCB0aGUgYnl0ZSB2YWx1ZXMgZnJvbSB0aGUgc3RyZWFtLlxuICAgIGNvbnN0IHZhbHVlID0gc3RyZWFtLnJlYWQobGVuZ3RoKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IEJ5dGVMaXN0VGFnIGluc3RhbmNlLlxuICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBCeXRlTGlzdFRhZyxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSBzdHJlYW0ud3JpdGVJbnQ4KHZhbHVlLnR5cGUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBDb252ZXJ0IHRoZSBuYW1lIHRvIGEgYnVmZmVyLlxuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUubmFtZSA/PyBcIlwiLCBcInV0ZjhcIik7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBpZiAob3B0aW9ucy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MTYoYnVmZmVyLmxlbmd0aCwgRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbmFtZSBidWZmZXIgdG8gdGhlIHN0cmVhbS5cbiAgICAgIHN0cmVhbS53cml0ZUJ1ZmZlcihidWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgbGlzdCBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICBpZiAob3B0aW9ucz8udmFyaW50KSBzdHJlYW0ud3JpdGVaaWdaYWcodmFsdWUubGVuZ3RoKTtcbiAgICBlbHNlIHN0cmVhbS53cml0ZUludDMyKHZhbHVlLmxlbmd0aCwgRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gV3JpdGUgdGhlIGJ5dGUgdmFsdWVzIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlKHZhbHVlLm1hcCgoYnl0ZSkgPT4gYnl0ZT8udmFsdWVPZigpID8/IDApKTtcbiAgfVxufVxuXG5leHBvcnQgeyBCeXRlTGlzdFRhZyB9O1xuIiwgImltcG9ydCB7IEJpbmFyeVN0cmVhbSwgRW5kaWFubmVzcyB9IGZyb20gXCJAc2VyZW5pdHlqcy9iaW5hcnlzdHJlYW1cIjtcblxuaW1wb3J0IHsgVGFnVHlwZSB9IGZyb20gXCIuLi9lbnVtXCI7XG5cbmltcG9ydCB7IEJhc2VUYWcgfSBmcm9tIFwiLi9iYXNlLXRhZ1wiO1xuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuXG5jbGFzcyBTdHJpbmdUYWcgZXh0ZW5kcyBTdHJpbmcgaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLlN0cmluZztcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFN0cmluZ1RhZyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZywgbmFtZT86IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIC8vIENvbnZlcnQgdGhlIGJ5dGUgdmFsdWUgdG8gYSBKU09OIG51bWJlci5cbiAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IFN0cmluZ1RhZyB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSB7XG4gICAgICAvLyBSZWFkIHRoZSB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRhZyB0eXBlIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHR5cGUuXG4gICAgICBpZiAodHlwZSAhPT0gVGFnVHlwZS5TdHJpbmcpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuU3RyaW5nXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHZhbHVlIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICA6IHN0cmVhbS5yZWFkSW50MTYoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gUmVhZCB0aGUgc3RyaW5nIHZhbHVlIGZyb20gdGhlIHN0cmVhbS5cbiAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgIGNvbnN0IHZhbHVlID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgU3RyaW5nVGFnIGluc3RhbmNlLlxuICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBTdHJpbmdUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgdmFsdWUgdG8gYSBidWZmZXIuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUudG9TdHJpbmcoKSwgXCJ1dGY4XCIpO1xuXG4gICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHZhbHVlIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgIGlmIChvcHRpb25zPy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIFdyaXRlIHRoZSBzdHJpbmcgdmFsdWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gIH1cbn1cblxuZXhwb3J0IHsgU3RyaW5nVGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5pbXBvcnQgeyBCeXRlVGFnIH0gZnJvbSBcIi4vYnl0ZVwiO1xuaW1wb3J0IHsgU2hvcnRUYWcgfSBmcm9tIFwiLi9zaG9ydFwiO1xuaW1wb3J0IHsgSW50VGFnIH0gZnJvbSBcIi4vaW50XCI7XG5pbXBvcnQgeyBMb25nVGFnIH0gZnJvbSBcIi4vbG9uZ1wiO1xuaW1wb3J0IHsgRmxvYXRUYWcgfSBmcm9tIFwiLi9mbG9hdFwiO1xuaW1wb3J0IHsgRG91YmxlVGFnIH0gZnJvbSBcIi4vZG91YmxlXCI7XG5pbXBvcnQgeyBTdHJpbmdUYWcgfSBmcm9tIFwiLi9zdHJpbmdcIjtcbmltcG9ydCB7IENvbXBvdW5kVGFnIH0gZnJvbSBcIi4vY29tcG91bmRcIjtcbmltcG9ydCB7IEJ5dGVMaXN0VGFnIH0gZnJvbSBcIi4vYnl0ZS1saXN0XCI7XG5cbmNsYXNzIExpc3RUYWc8VCBleHRlbmRzIEJhc2VUYWc+IGV4dGVuZHMgQXJyYXk8VD4gaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLkxpc3Q7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBMaXN0VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGVsZW1lbnRzOiBBcnJheTxUPiA9IFtdLCBuYW1lPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIC8vIENhbGwgdGhlIHBhcmVudCBjb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIHRoZSBhcnJheS5cbiAgICBzdXBlciguLi5lbGVtZW50cyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIG1hcDxVPihcbiAgICBjYWxsYmFja2ZuOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiBBcnJheTxUPikgPT4gVSxcbiAgICB0aGlzQXJnPzogdW5rbm93blxuICApOiBBcnJheTxVPiB7XG4gICAgY29uc3QgYXJyYXkgPSBBcnJheS5mcm9tKHRoaXMpO1xuXG4gICAgLy8gTWFwIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdCB1c2luZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAgcmV0dXJuIGFycmF5Lm1hcChjYWxsYmFja2ZuLCB0aGlzQXJnKTtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogQXJyYXk8dW5rbm93bj4ge1xuICAgIC8vIENvbnZlcnQgdGhlIGxpc3QgZWxlbWVudHMgdG8gYSBKU09OIGFycmF5LlxuICAgIHJldHVybiB0aGlzLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC50b0pTT04oKSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQ8VCBleHRlbmRzIEJhc2VUYWc+KFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBMaXN0VGFnPFQ+IHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkxpc3QpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuTGlzdF19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0LlxuICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdC5cbiAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgID8gc3RyZWFtLnJlYWRaaWdaYWcoKVxuICAgICAgOiBzdHJlYW0ucmVhZEludDMyKEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBMaXN0VGFnIGluc3RhbmNlLlxuICAgIGNvbnN0IHRhZyA9IG5ldyB0aGlzPFQ+KFtdLCBuYW1lKTtcblxuICAgIC8vIFJlYWQgdGhlIGxpc3QgZWxlbWVudHMgYmFzZWQgb24gdGhlIHR5cGUuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBsaXN0IHR5cGU6ICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfWApO1xuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5CeXRlOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQnl0ZVRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQnl0ZVRhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgbGlzdC5cbiAgICAgICAgICB0YWcucHVzaChlbGVtZW50IGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuU2hvcnQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBTaG9ydFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gU2hvcnRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkludDoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhbiBJbnRUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEludFRhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgbGlzdC5cbiAgICAgICAgICB0YWcucHVzaChlbGVtZW50IGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuTG9uZzoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIExvbmdUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IExvbmdUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkZsb2F0OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgRmxvYXRUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEZsb2F0VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0LlxuICAgICAgICAgIHRhZy5wdXNoKGVsZW1lbnQgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5Eb3VibGU6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBEb3VibGVUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IERvdWJsZVRhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgbGlzdC5cbiAgICAgICAgICB0YWcucHVzaChlbGVtZW50IGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZUxpc3Q6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBCeXRlTGlzdFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQnl0ZUxpc3RUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLlN0cmluZzoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIFN0cmluZ1RhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gU3RyaW5nVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0LlxuICAgICAgICAgIHRhZy5wdXNoKGVsZW1lbnQgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5MaXN0OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgTGlzdFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gTGlzdFRhZy5yZWFkPFQ+KHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgbGlzdC5cbiAgICAgICAgICB0YWcucHVzaChlbGVtZW50IGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQ29tcG91bmQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBDb21wb3VuZFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG91bmRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoZSB0YWcgd2l0aCB0aGUgdHlwZSBhbmQgbmFtZSBzZXQuXG4gICAgcmV0dXJuIHRhZztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JpdGU8VCBleHRlbmRzIEJhc2VUYWc+KFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBMaXN0VGFnPFQ+LFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHN0cmVhbS53cml0ZUludDgodmFsdWUudHlwZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIG5hbWUgdG8gYSBidWZmZXIuXG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZS5uYW1lID8/IFwiXCIsIFwidXRmOFwiKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGlmIChvcHRpb25zLnZhcmludCkgc3RyZWFtLndyaXRlVmFySW50KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQxNihidWZmZXIubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBuYW1lIGJ1ZmZlciB0byB0aGUgc3RyZWFtLlxuICAgICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYW4gZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBsaXN0LlxuICAgIGlmICghdmFsdWVbMF0pIHtcbiAgICAgIC8vIElmIG5vdCwgd3JpdGUgYW4gZW1wdHkgbGlzdCB0eXBlIGFuZCBsZW5ndGguXG4gICAgICBzdHJlYW0ud3JpdGVJbnQ4KFRhZ1R5cGUuQnl0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHNvLCBnZXQgdGhlIHR5cGUgb2YgdGhlIGZpcnN0IGVsZW1lbnQuXG4gICAgICBjb25zdCB0eXBlID0gdmFsdWVbMF0udHlwZTtcblxuICAgICAgLy8gV3JpdGUgdGhlIHR5cGUgb2YgdGhlIGxpc3QuXG4gICAgICBzdHJlYW0ud3JpdGVJbnQ4KHR5cGUpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QuXG4gICAgaWYgKG9wdGlvbnM/LnZhcmludCkgc3RyZWFtLndyaXRlWmlnWmFnKHZhbHVlLmxlbmd0aCk7XG4gICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQzMih2YWx1ZS5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIGVsZW1lbnQgaW4gdGhlIGxpc3QuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZhbHVlKSB7XG4gICAgICAvLyBIYW5kbGUgZWFjaCB0eXBlIG9mIGVsZW1lbnQgYmFzZWQgb24gaXRzIHRhZyB0eXBlLlxuICAgICAgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcbiAgICAgICAgY2FzZSBUYWdUeXBlLkJ5dGU6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgZWxlbWVudCBhcyBhIEJ5dGVUYWcuXG4gICAgICAgICAgQnl0ZVRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBCeXRlVGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLlNob3J0OiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBTaG9ydFRhZy5cbiAgICAgICAgICBTaG9ydFRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBTaG9ydFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5JbnQ6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgZWxlbWVudCBhcyBhbiBJbnRUYWcuXG4gICAgICAgICAgSW50VGFnLndyaXRlKHN0cmVhbSwgZWxlbWVudCBhcyB1bmtub3duIGFzIEludFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5Mb25nOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBMb25nVGFnLlxuICAgICAgICAgIExvbmdUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgTG9uZ1RhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5GbG9hdDoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBlbGVtZW50IGFzIGEgRmxvYXRUYWcuXG4gICAgICAgICAgRmxvYXRUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgRmxvYXRUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRG91YmxlOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBEb3VibGVUYWcuXG4gICAgICAgICAgRG91YmxlVGFnLndyaXRlKHN0cmVhbSwgZWxlbWVudCBhcyB1bmtub3duIGFzIERvdWJsZVRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5CeXRlTGlzdDoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBlbGVtZW50IGFzIGEgQnl0ZVRhZy5cbiAgICAgICAgICBCeXRlTGlzdFRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBCeXRlTGlzdFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5TdHJpbmc6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgZWxlbWVudCBhcyBhIFN0cmluZ1RhZy5cbiAgICAgICAgICBTdHJpbmdUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgU3RyaW5nVGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkxpc3Q6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgZWxlbWVudCBhcyBhIExpc3RUYWcuXG4gICAgICAgICAgTGlzdFRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBMaXN0VGFnPFQ+LCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkNvbXBvdW5kOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBDb21wb3VuZFRhZy5cbiAgICAgICAgICBDb21wb3VuZFRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBDb21wb3VuZFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBMaXN0VGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQnl0ZVRhZyB9IGZyb20gXCIuL2J5dGVcIjtcbmltcG9ydCB7IEJhc2VUYWcgfSBmcm9tIFwiLi9iYXNlLXRhZ1wiO1xuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuaW1wb3J0IHsgU2hvcnRUYWcgfSBmcm9tIFwiLi9zaG9ydFwiO1xuaW1wb3J0IHsgSW50VGFnIH0gZnJvbSBcIi4vaW50XCI7XG5pbXBvcnQgeyBMb25nVGFnIH0gZnJvbSBcIi4vbG9uZ1wiO1xuaW1wb3J0IHsgRmxvYXRUYWcgfSBmcm9tIFwiLi9mbG9hdFwiO1xuaW1wb3J0IHsgRG91YmxlVGFnIH0gZnJvbSBcIi4vZG91YmxlXCI7XG5pbXBvcnQgeyBTdHJpbmdUYWcgfSBmcm9tIFwiLi9zdHJpbmdcIjtcbmltcG9ydCB7IExpc3RUYWcgfSBmcm9tIFwiLi9saXN0XCI7XG5pbXBvcnQgeyBCeXRlTGlzdFRhZyB9IGZyb20gXCIuL2J5dGUtbGlzdFwiO1xuXG5jbGFzcyBDb21wb3VuZFRhZyBleHRlbmRzIE1hcDxzdHJpbmcsIEJhc2VUYWc+IGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5Db21wb3VuZDtcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgdG9KU09OKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICAvLyBDb252ZXJ0IHRoZSBtYXAgdG8gYSBKU09OIG9iamVjdC5cbiAgICBjb25zdCBqc29uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggdGFnIGluIHRoZSBjb21wb3VuZCB0YWcuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgLy8gQWRkIHRoZSB0YWcgdG8gdGhlIEpTT04gb2JqZWN0IHVzaW5nIGl0cyBrZXkuXG4gICAgICBqc29uW2tleV0gPSB2YWx1ZS50b0pTT04oKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhlIEpTT04gb2JqZWN0LlxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIG5idCB0YWcgYnkgaXRzIGtleS5cbiAgICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSB0YWcgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIFRoZSB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXksIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG4gICAqL1xuICBwdWJsaWMgZ2V0PFQgZXh0ZW5kcyBCYXNlVGFnPihrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgIC8vIENhbGwgdGhlIG9yaWdpbmFsIGdldCBtZXRob2QgZnJvbSBNYXAgYW5kIGNhc3QgdGhlIHJlc3VsdCB0byBULlxuICAgIHJldHVybiBzdXBlci5nZXQoa2V5KSBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIG5idCB0YWcgd2l0aCBhIHNwZWNpZmljIGtleS5cbiAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSB0YWcuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdGFnIHRvIHNldC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyBzZXQ8VCBleHRlbmRzIEJhc2VUYWc+KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IHRoaXMge1xuICAgIC8vIENhbGwgdGhlIG9yaWdpbmFsIHNldCBtZXRob2QgZnJvbSBNYXAuXG4gICAgc3VwZXIuc2V0KGtleSwgdmFsdWUpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG11bHRpcGxlIHRhZ3MgdG8gdGhlIGNvbXBvdW5kIHRhZy5cbiAgICogQHBhcmFtIHRhZ3MgQW4gYXJyYXkgb2YgdGFncyB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgcHVzaDxUIGV4dGVuZHMgQmFzZVRhZz4oLi4udGFnczogQXJyYXk8VD4pOiB0aGlzIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCB0YWcgaW4gdGhlIHByb3ZpZGVkIGFycmF5LlxuICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICAgIC8vIFNldCB0aGUgdGFnIGluIHRoZSBtYXAgdXNpbmcgaXRzIG5hbWUgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBuYW1lIGlzIG51bGwuXG4gICAgICBzdXBlci5zZXQodGFnLm5hbWUgPz8gXCJcIiwgdGFnKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5nbGUgdGFnIHRvIHRoZSBjb21wb3VuZCB0YWcuXG4gICAqIEBwYXJhbSB0YWcgVGhlIHRhZyB0byBhZGQgdG8gdGhlIGNvbXBvdW5kIHRhZy5cbiAgICogQHJldHVybnMgVGhlIHRhZyB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIHB1YmxpYyBhZGQ8VCBleHRlbmRzIEJhc2VUYWc+KHRhZzogVCk6IFQge1xuICAgIC8vIEFkZCB0aGUgdGFnIHRvIHRoZSBjb21wb3VuZCB0YWcgdXNpbmcgaXRzIG5hbWUgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBuYW1lIGlzIG51bGwuXG4gICAgdGhpcy5zZXQodGFnLm5hbWUgPz8gXCJcIiwgdGFnKTtcblxuICAgIC8vIFJldHVybiB0aGUgdGFnIHRoYXQgd2FzIGFkZGVkLlxuICAgIHJldHVybiB0YWc7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IENvbXBvdW5kVGFnIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkNvbXBvdW5kKSB7XG4gICAgICAgIC8vIFRocm93IGFuIGVycm9yIGlmIHRoZSB0eXBlIGRvZXMgbm90IG1hdGNoLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIHRhZyB0eXBlIHRvIGJlICR7VGFnVHlwZVtUYWdUeXBlLkNvbXBvdW5kXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWZmZXIpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIG5ldyBDb21wb3VuZFRhZyBpbnN0YW5jZS5cbiAgICBjb25zdCB0YWcgPSBuZXcgQ29tcG91bmRUYWcobmFtZSk7XG5cbiAgICAvLyBSZWFkIHRoZSB0YWdzIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSBvciBhIG51bGwgdGFnIGlzIGVuY291bnRlcmVkLlxuICAgIGRvIHtcbiAgICAgIC8vIFJlYWQgdGhlIG5leHQgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBFbmQsIHdoaWNoIGluZGljYXRlcyB0aGUgZW5kIG9mIHRoZSBjb21wb3VuZCB0YWcuXG4gICAgICBpZiAodHlwZSA9PT0gVGFnVHlwZS5FbmQpIGJyZWFrO1xuXG4gICAgICAvLyBIYW5kbGUgdGhlIHRhZyB0eXBlIGJhc2VkIG9uIGl0cyB2YWx1ZS5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdGFnIHR5cGU6ICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gKTtcblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZToge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIEJ5dGVUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEJ5dGVUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuU2hvcnQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBTaG9ydFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gU2hvcnRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuSW50OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGFuIEludFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gSW50VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkxvbmc6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBMb25nVGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBMb25nVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkZsb2F0OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgRmxvYXRUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEZsb2F0VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkRvdWJsZToge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIERvdWJsZVRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gRG91YmxlVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkJ5dGVMaXN0OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQnl0ZUxpc3RUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEJ5dGVMaXN0VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLlN0cmluZzoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIFN0cmluZ1RhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gU3RyaW5nVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkxpc3Q6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBMaXN0VGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBMaXN0VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkNvbXBvdW5kOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQ29tcG91bmRUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvdW5kVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgICAgICAgIHRhZy5zZXQoZWxlbWVudC5uYW1lID8/IFwiXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoc3RyZWFtLmN1cnNvckF0RW5kKCkgPT09IGZhbHNlKTtcblxuICAgIC8vIFJldHVybiB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgcmV0dXJuIHRhZztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JpdGUoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgdmFsdWU6IENvbXBvdW5kVGFnLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHN0cmVhbS53cml0ZUludDgodmFsdWUudHlwZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIG5hbWUgdG8gYSBidWZmZXIuXG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZS5uYW1lID8/IFwiXCIsIFwidXRmOFwiKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGlmIChvcHRpb25zLnZhcmludCkgc3RyZWFtLndyaXRlVmFySW50KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQxNihidWZmZXIubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBuYW1lIGJ1ZmZlciB0byB0aGUgc3RyZWFtLlxuICAgICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggdGFnIGluIHRoZSBDb21wb3VuZFRhZyBpbnN0YW5jZS5cbiAgICBmb3IgKGNvbnN0IFssIHRhZ10gb2YgdmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodGFnLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUYWdUeXBlLkJ5dGU6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgQnl0ZVRhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIEJ5dGVUYWcud3JpdGUoc3RyZWFtLCB0YWcgYXMgQnl0ZVRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuU2hvcnQ6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgU2hvcnRUYWcgdG8gdGhlIHN0cmVhbS5cbiAgICAgICAgICBTaG9ydFRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBTaG9ydFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuSW50OiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIEludFRhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIEludFRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBJbnRUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkxvbmc6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgTG9uZ1RhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIExvbmdUYWcud3JpdGUoc3RyZWFtLCB0YWcgYXMgTG9uZ1RhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRmxvYXQ6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgRmxvYXRUYWcgdG8gdGhlIHN0cmVhbS5cbiAgICAgICAgICBGbG9hdFRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBGbG9hdFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRG91YmxlOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIERvdWJsZVRhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIERvdWJsZVRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBEb3VibGVUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkJ5dGVMaXN0OiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIEJ5dGVMaXN0VGFnIHRvIHRoZSBzdHJlYW0uXG4gICAgICAgICAgQnl0ZUxpc3RUYWcud3JpdGUoc3RyZWFtLCB0YWcgYXMgQnl0ZUxpc3RUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLlN0cmluZzoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBTdHJpbmdUYWcgdG8gdGhlIHN0cmVhbS5cbiAgICAgICAgICBTdHJpbmdUYWcud3JpdGUoc3RyZWFtLCB0YWcgYXMgU3RyaW5nVGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5MaXN0OiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIExpc3RUYWcgdG8gdGhlIHN0cmVhbS5cbiAgICAgICAgICBMaXN0VGFnLndyaXRlKHN0cmVhbSwgdGFnIGFzIExpc3RUYWc8QmFzZVRhZz4sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkNvbXBvdW5kOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIENvbXBvdW5kVGFnIHRvIHRoZSBzdHJlYW0uXG4gICAgICAgICAgQ29tcG91bmRUYWcud3JpdGUoc3RyZWFtLCB0YWcgYXMgQ29tcG91bmRUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgdGhlIEVuZCB0YWcgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgY29tcG91bmQgdGFnLlxuICAgIHN0cmVhbS53cml0ZUludDgoVGFnVHlwZS5FbmQpO1xuICB9XG59XG5cbmV4cG9ydCB7IENvbXBvdW5kVGFnIH07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7O0FBQUEsSUFBS0EsVUFBQUEseUJBQUFBLFVBQUFBOzs7Ozs7Ozs7Ozs7OztTQUFBQTtFQUFBQSxXQUFBQSxDQUFBQSxDQUFBQTs7O0FDTUwsSUFBZUMsVUFBZixNQUFlQSxTQUFBQTtFQUFmLE9BQWVBOzs7Ozs7RUFTTkMsT0FBc0I7Ozs7OztFQVk3QixPQUFjQyxLQUNaQyxTQUNBQyxVQUNTO0FBQ1QsVUFBTSxJQUFJQyxNQUFNLGdDQUFBO0VBQ2xCOzs7Ozs7O0VBUUEsT0FBY0MsTUFDWkgsU0FDQUksUUFDQUgsVUFDTTtBQUNOLFVBQU0sSUFB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RixTQUFpQztZQUN2RCxHQUFHRztZQUNIWCxNQUFNO1lBQ05ILE1BQU07VUFDUixDQUFBO0FBR0E7UUFDRjtRQUVBLEtBQUtDLFFBQVEyQyxVQUFVO0FBRXJCQyxzQkFBWUksTUFBTXBDLFFBQVFGLFNBQW1DO1lBQzNELEdBQUdHO1lBQ0hYLE1BQU07WUFDTkgsTUFBTTtVQUNSLENBQUE7QUFHQTtRQUNGO1FBRUEsS0FBS0MsUUFBUXdCLFFBQVE7QUFFbkJxQixvQkFBVUcsTUFBTXBDLFFBQVFGLFNBQWlDO1lBQ3ZELEdBQUdHO1lBQ0hYLE1BQU07WUFDTkgsTUFBTTtVQUNSLENBQUE7QUFHQTtRQUNGO1FBRUEsS0FBS0MsUUFBUUMsTUFBTTtBQUVqQkosVUFBQUEsU0FBUW1ELE1BQU1wQyxRQUFRRixTQUFrQztZQUN0RCxHQUFHRztZQUNIWCxNQUFNO1lBQ05ILE1BQU07VUFDUixDQUFBO0FBR0E7UUFDRjtRQUVBLEtBQUtDLFFBQVE4QyxVQUFVO0FBRXJCQyxzQkFBWUMsTUFBTXBDLFFBQVFGLFNBQW1DO1lBQzNELEdBQUdHO1lBQ0hYLE1BQU07WUFDTkgsTUFBTTtVQUNSLENBQUE7QUFHQTtRQUNGO01BQ0Y7SUFDRjtFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbIlRhZ1R5cGUiLCAiQmFzZVRhZyIsICJuYW1lIiwgInJlYWQiLCAiX3N0cmVhbSIsICJfb3B0aW9ucyIsICJFcnJvciIsICJ3cml0ZSIsICJfdmFsdWUiLCAiRW5kaWFubmVzcyIsICJCeXRlVGFnIiwgIk51bWJlciIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiQnl0ZSIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJTdHJpbmciLCAiZnJvbUNoYXJDb2RlIiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIkVuZGlhbm5lc3MiLCAiU2hvcnRUYWciLCAiTnVtYmVyIiwgInR5cGUiLCAiVGFnVHlwZSIsICJTaG9ydCIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJTdHJpbmciLCAiZnJvbUNoYXJDb2RlIiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIkVuZGlhbm5lc3MiLCAiSW50VGFnIiwgIk51bWJlciIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiSW50IiwgIm5hbWUiLCAidmFsdWUiLCAidG9KU09OIiwgInZhbHVlT2YiLCAicmVhZCIsICJzdHJlYW0iLCAib3B0aW9ucyIsICJ2YXJpbnQiLCAicmVhZEludDgiLCAiRXJyb3IiLCAibGVuZ3RoIiwgInJlYWRWYXJJbnQiLCAicmVhZEludDE2IiwgIkVuZGlhbm5lc3MiLCAiTGl0dGxlIiwgImJ1ZmZlciIsICJyZWFkQnVmZmVyIiwgIlN0cmluZyIsICJmcm9tQ2hhckNvZGUiLCAicmVhZFppZ1phZyIsICJyZWFkSW50MzIiLCAid3JpdGUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJmcm9tIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAid3JpdGVaaWdaYWciLCAid3JpdGVJbnQzMiIsICJFbmRpYW5uZXNzIiwgIkxvbmdUYWciLCAiU3RyaW5nIiwgInR5cGUiLCAiVGFnVHlwZSIsICJMb25nIiwgIm5hbWUiLCAidmFsdWUiLCAidG9KU09OIiwgInZhbHVlT2YiLCAicmVhZCIsICJzdHJlYW0iLCAib3B0aW9ucyIsICJ2YXJpbnQiLCAicmVhZEludDgiLCAiRXJyb3IiLCAibGVuZ3RoIiwgInJlYWRWYXJJbnQiLCAicmVhZEludDE2IiwgIkVuZGlhbm5lc3MiLCAiTGl0dGxlIiwgImJ1ZmZlciIsICJyZWFkQnVmZmVyIiwgImZyb21DaGFyQ29kZSIsICJyZWFkWmlnWm9uZyIsICJyZWFkSW50NjQiLCAid3JpdGUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJmcm9tIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAid3JpdGVaaWdab25nIiwgIkJpZ0ludCIsICJ3cml0ZUludDY0IiwgIkVuZGlhbm5lc3MiLCAiRmxvYXRUYWciLCAiTnVtYmVyIiwgInR5cGUiLCAiVGFnVHlwZSIsICJGbG9hdCIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJTdHJpbmciLCAiZnJvbUNoYXJDb2RlIiwgInJlYWRGbG9hdDMyIiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIndyaXRlRmxvYXQzMiIsICJFbmRpYW5uZXNzIiwgIkRvdWJsZVRhZyIsICJOdW1iZXIiLCAidHlwZSIsICJUYWdUeXBlIiwgIkRvdWJsZSIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJTdHJpbmciLCAiZnJvbUNoYXJDb2RlIiwgInJlYWRGbG9hdDY0IiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIndyaXRlRmxvYXQ2NCIsICJFbmRpYW5uZXNzIiwgIkJ5dGVMaXN0VGFnIiwgIkFycmF5IiwgInR5cGUiLCAiVGFnVHlwZSIsICJCeXRlTGlzdCIsICJuYW1lIiwgImVsZW1lbnRzIiwgIm1hcCIsICJjYWxsYmFja2ZuIiwgInRoaXNBcmciLCAiYXJyYXkiLCAiZnJvbSIsICJ0b0pTT04iLCAidmFsdWUiLCAidmFsdWVPZiIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJCeXRlIiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJTdHJpbmciLCAiZnJvbUNoYXJDb2RlIiwgInJlYWRaaWdaYWciLCAicmVhZEludDMyIiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAid3JpdGVWYXJJbnQiLCAid3JpdGVJbnQxNiIsICJ3cml0ZUJ1ZmZlciIsICJ3cml0ZVppZ1phZyIsICJ3cml0ZUludDMyIiwgImJ5dGUiLCAiRW5kaWFubmVzcyIsICJTdHJpbmdUYWciLCAiU3RyaW5nIiwgInR5cGUiLCAiVGFnVHlwZSIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJmcm9tQ2hhckNvZGUiLCAid3JpdGUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJmcm9tIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAidG9TdHJpbmciLCAiRW5kaWFubmVzcyIsICJFbmRpYW5uZXNzIiwgIkNvbXBvdW5kVGFnIiwgIk1hcCIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiQ29tcG91bmQiLCAibmFtZSIsICJ0b0pTT04iLCAianNvbiIsICJrZXkiLCAidmFsdWUiLCAiZ2V0IiwgInNldCIsICJwdXNoIiwgInRhZ3MiLCAidGFnIiwgImFkZCIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJFcnJvciIsICJsZW5ndGgiLCAicmVhZFZhckludCIsICJyZWFkSW50MTYiLCAiRW5kaWFubmVzcyIsICJMaXR0bGUiLCAiYnVmZmVyIiwgInJlYWRCdWZmZXIiLCAiU3RyaW5nIiwgImZyb21DaGFyQ29kZSIsICJFbmQiLCAiQnl0ZSIsICJlbGVtZW50IiwgIkJ5dGVUYWciLCAiU2hvcnQiLCAiU2hvcnRUYWciLCAiSW50IiwgIkludFRhZyIsICJMb25nIiwgIkxvbmdUYWciLCAiRmxvYXQiLCAiRmxvYXRUYWciLCAiRG91YmxlIiwgIkRvdWJsZVRhZyIsICJCeXRlTGlzdCIsICJCeXRlTGlzdFRhZyIsICJTdHJpbmdUYWciLCAiTGlzdCIsICJMaXN0VGFnIiwgImN1cnNvckF0RW5kIiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIkxpc3RUYWciLCAiQXJyYXkiLCAidHlwZSIsICJUYWdUeXBlIiwgIkxpc3QiLCAibmFtZSIsICJlbGVtZW50cyIsICJtYXAiLCAiY2FsbGJhY2tmbiIsICJ0aGlzQXJnIiwgImFycmF5IiwgImZyb20iLCAidG9KU09OIiwgImVsZW1lbnQiLCAicmVhZCIsICJzdHJlYW0iLCAib3B0aW9ucyIsICJ2YXJpbnQiLCAicmVhZEludDgiLCAiRXJyb3IiLCAibGVuZ3RoIiwgInJlYWRWYXJJbnQiLCAicmVhZEludDE2IiwgIkVuZGlhbm5lc3MiLCAiTGl0dGxlIiwgImJ1ZmZlciIsICJyZWFkQnVmZmVyIiwgIlN0cmluZyIsICJmcm9tQ2hhckNvZGUiLCAicmVhZFppZ1phZyIsICJyZWFkSW50MzIiLCAidGFnIiwgImkiLCAiQnl0ZSIsICJCeXRlVGFnIiwgInB1c2giLCAiU2hvcnQiLCAiU2hvcnRUYWciLCAiSW50IiwgIkludFRhZyIsICJMb25nIiwgIkxvbmdUYWciLCAiRmxvYXQiLCAiRmxvYXRUYWciLCAiRG91YmxlIiwgIkRvdWJsZVRhZyIsICJCeXRlTGlzdCIsICJCeXRlTGlzdFRhZyIsICJTdHJpbmdUYWciLCAiQ29tcG91bmQiLCAiQ29tcG91bmRUYWciLCAid3JpdGUiLCAidmFsdWUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIndyaXRlWmlnWmFnIiwgIndyaXRlSW50MzIiXQp9Cg==
|
|
1055
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2VudW0vdGFnLXR5cGUudHMiLCAiLi4vc3JjL3R5cGVzL2Jhc2UtdGFnLnRzIiwgIi4uL3NyYy90eXBlcy9ieXRlLnRzIiwgIi4uL3NyYy90eXBlcy9zaG9ydC50cyIsICIuLi9zcmMvdHlwZXMvaW50LnRzIiwgIi4uL3NyYy90eXBlcy9sb25nLnRzIiwgIi4uL3NyYy90eXBlcy9mbG9hdC50cyIsICIuLi9zcmMvdHlwZXMvZG91YmxlLnRzIiwgIi4uL3NyYy90eXBlcy9ieXRlLWxpc3QudHMiLCAiLi4vc3JjL3R5cGVzL3N0cmluZy50cyIsICIuLi9zcmMvdHlwZXMvbGlzdC50cyIsICIuLi9zcmMvdHlwZXMvY29tcG91bmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImVudW0gVGFnVHlwZSB7XG4gIEVuZCA9IDB4MDAsXG4gIEJ5dGUgPSAweDAxLFxuICBTaG9ydCA9IDB4MDIsXG4gIEludCA9IDB4MDMsXG4gIExvbmcgPSAweDA0LFxuICBGbG9hdCA9IDB4MDUsXG4gIERvdWJsZSA9IDB4MDYsXG4gIEJ5dGVMaXN0ID0gMHgwNyxcbiAgU3RyaW5nID0gMHgwOCxcbiAgTGlzdCA9IDB4MDksXG4gIENvbXBvdW5kID0gMHgwYSxcbiAgSW50TGlzdCA9IDB4MGIsXG4gIExvbmdMaXN0ID0gMHgwY1xufVxuXG5leHBvcnQgeyBUYWdUeXBlIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuXG5hYnN0cmFjdCBjbGFzcyBCYXNlVGFnIHtcbiAgLyoqXG4gICAqIFRoZSBuYnQgdGFnIHR5cGUgb2YgdGhlIGRhdGEgdHlwZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0eXBlOiBUYWdUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbmJ0IHRhZy5cbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQ29udmVydCB0aGUgdGFnIHRvIGEgSlNPTiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgdG9KU09OKCk6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIG5idCB0YWcgZnJvbSB0aGUgc3RyZWFtLlxuICAgKiBAcGFyYW0gc3RyZWFtIFRoZSBiaW5hcnkgc3RyZWFtIHRvIHJlYWQgZnJvbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHJlYWRpbmcgdGhlIHRhZy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBfc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgX29wdGlvbnM/OiBSZWFkV3JpdGVPcHRpb25zXG4gICk6IEJhc2VUYWcge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCAncmVhZCcgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgbmJ0IHRhZyB0byB0aGUgc3RyZWFtLlxuICAgKiBAcGFyYW0gc3RyZWFtIFRoZSBiaW5hcnkgc3RyZWFtIHRvIHdyaXRlIHRvLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSB0YWcgdG8gd3JpdGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB3cml0aW5nIHRoZSB0YWcuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIF9zdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBfdmFsdWU6IEJhc2VUYWcsXG4gICAgX29wdGlvbnM/OiBSZWFkV3JpdGVPcHRpb25zXG4gICk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCAnd3JpdGUnIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gIH1cbn1cblxuZXhwb3J0IHsgQmFzZVRhZyB9O1xuIiwgImltcG9ydCB7IEJpbmFyeVN0cmVhbSwgRW5kaWFubmVzcyB9IGZyb20gXCJAc2VyZW5pdHlqcy9iaW5hcnlzdHJlYW1cIjtcblxuaW1wb3J0IHsgVGFnVHlwZSB9IGZyb20gXCIuLi9lbnVtXCI7XG5cbmltcG9ydCB7IEJhc2VUYWcgfSBmcm9tIFwiLi9iYXNlLXRhZ1wiO1xuaW1wb3J0IHsgUmVhZFdyaXRlT3B0aW9ucyB9IGZyb20gXCIuL3JlYWQtd3JpdGUtb3B0aW9uc1wiO1xuXG5jbGFzcyBCeXRlVGFnIGV4dGVuZHMgTnVtYmVyIGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5CeXRlO1xuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQnl0ZVRhZyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBieXRlIHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIodmFsdWUpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogbnVtYmVyIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBieXRlIHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZWFkKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBCeXRlVGFnIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkJ5dGUpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuQnl0ZV19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgfVxuXG4gICAgLy8gUmVhZCB0aGUgYnl0ZSB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IEJ5dGVUYWcgaW5zdGFuY2UuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHZhbHVlLCBuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JpdGUoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgdmFsdWU6IEJ5dGVUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgYnl0ZSB2YWx1ZSB0byB0aGUgc3RyZWFtLlxuICAgIHN0cmVhbS53cml0ZUludDgodmFsdWUudmFsdWVPZigpKTtcbiAgfVxufVxuXG5leHBvcnQgeyBCeXRlVGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5cbmNsYXNzIFNob3J0VGFnIGV4dGVuZHMgTnVtYmVyIGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5TaG9ydDtcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNob3J0VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHNob3J0IHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIodmFsdWUpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogbnVtYmVyIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBzaG9ydCB2YWx1ZSB0byBhIEpTT04gbnVtYmVyLlxuICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogU2hvcnRUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuU2hvcnQpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuU2hvcnRdfSwgcmVjZWl2ZWQgJHtUYWdUeXBlW3R5cGVdID8/IHR5cGV9LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGEgdmFyaWFibGUgdG8gaG9sZCB0aGUgbmFtZSBvZiB0aGUgdGFnLlxuICAgIGxldCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gUmVhZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgY29uc3QgbGVuZ3RoID0gb3B0aW9ucz8udmFyaW50XG4gICAgICAgID8gc3RyZWFtLnJlYWRWYXJJbnQoKVxuICAgICAgICA6IHN0cmVhbS5yZWFkSW50MTYoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBSZWFkIHRoZSBuYW1lIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmVhbS5yZWFkQnVmZmVyKGxlbmd0aCk7XG5cbiAgICAgIC8vIENvbnZlcnQgdGhlIGJ1ZmZlciB0byBhIHN0cmluZy5cbiAgICAgIG5hbWUgPSBidWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIHNob3J0IHZhbHVlIGZyb20gdGhlIHN0cmVhbS5cbiAgICBjb25zdCB2YWx1ZSA9IHN0cmVhbS5yZWFkSW50MTYoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgU2hvcnRUYWcgaW5zdGFuY2UuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHZhbHVlLCBuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JpdGUoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgdmFsdWU6IFNob3J0VGFnLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHN0cmVhbS53cml0ZUludDgodmFsdWUudHlwZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIG5hbWUgdG8gYSBidWZmZXIuXG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZS5uYW1lID8/IFwiXCIsIFwidXRmOFwiKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGlmIChvcHRpb25zLnZhcmludCkgc3RyZWFtLndyaXRlVmFySW50KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQxNihidWZmZXIubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBuYW1lIGJ1ZmZlciB0byB0aGUgc3RyZWFtLlxuICAgICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgdGhlIHNob3J0IHZhbHVlIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlSW50MTYodmFsdWUudmFsdWVPZigpLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgU2hvcnRUYWcgfTtcbiIsICJpbXBvcnQgeyBCaW5hcnlTdHJlYW0sIEVuZGlhbm5lc3MgfSBmcm9tIFwiQHNlcmVuaXR5anMvYmluYXJ5c3RyZWFtXCI7XG5cbmltcG9ydCB7IFRhZ1R5cGUgfSBmcm9tIFwiLi4vZW51bVwiO1xuXG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcblxuY2xhc3MgSW50VGFnIGV4dGVuZHMgTnVtYmVyIGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5JbnQ7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBJbnRUYWcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgaW50IHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIodmFsdWUpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogbnVtYmVyIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBzaG9ydCB2YWx1ZSB0byBhIEpTT04gbnVtYmVyLlxuICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogSW50VGFnIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkludCkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5JbnRdfSwgcmVjZWl2ZWQgJHtUYWdUeXBlW3R5cGVdID8/IHR5cGV9LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGEgdmFyaWFibGUgdG8gaG9sZCB0aGUgbmFtZSBvZiB0aGUgdGFnLlxuICAgIGxldCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gUmVhZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgY29uc3QgbGVuZ3RoID0gb3B0aW9ucz8udmFyaW50XG4gICAgICAgID8gc3RyZWFtLnJlYWRWYXJJbnQoKVxuICAgICAgICA6IHN0cmVhbS5yZWFkSW50MTYoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBSZWFkIHRoZSBuYW1lIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmVhbS5yZWFkQnVmZmVyKGxlbmd0aCk7XG5cbiAgICAgIC8vIENvbnZlcnQgdGhlIGJ1ZmZlciB0byBhIHN0cmluZy5cbiAgICAgIG5hbWUgPSBidWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGludCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zPy52YXJpbnRcbiAgICAgID8gc3RyZWFtLnJlYWRaaWdaYWcoKVxuICAgICAgOiBzdHJlYW0ucmVhZEludDMyKEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IEludFRhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogSW50VGFnLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHN0cmVhbS53cml0ZUludDgodmFsdWUudHlwZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIG5hbWUgdG8gYSBidWZmZXIuXG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZS5uYW1lID8/IFwiXCIsIFwidXRmOFwiKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGlmIChvcHRpb25zLnZhcmludCkgc3RyZWFtLndyaXRlVmFySW50KGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQxNihidWZmZXIubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBuYW1lIGJ1ZmZlciB0byB0aGUgc3RyZWFtLlxuICAgICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgdGhlIGludCB2YWx1ZSB0byB0aGUgc3RyZWFtLlxuICAgIGlmIChvcHRpb25zPy52YXJpbnQpIHN0cmVhbS53cml0ZVppZ1phZyh2YWx1ZS52YWx1ZU9mKCkpO1xuICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MzIodmFsdWUudmFsdWVPZigpLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgSW50VGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5cbmNsYXNzIExvbmdUYWcgZXh0ZW5kcyBTdHJpbmcgaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLkxvbmc7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBMb25nVGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGxvbmcgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IGJpZ2ludCwgbmFtZT86IHN0cmluZyB8IG51bGwpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIC8vIENvbnZlcnQgdGhlIHNob3J0IHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpICsgXCJuXCI7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IExvbmdUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuTG9uZykge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5Mb25nXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gYnVmZmVyLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSBsb25nIHZhbHVlIGZyb20gdGhlIHN0cmVhbS5cbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgPyBzdHJlYW0ucmVhZFppZ1pvbmcoKVxuICAgICAgOiBzdHJlYW0ucmVhZEludDY0KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IExvbmdUYWcgaW5zdGFuY2UuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHZhbHVlLCBuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JpdGUoXG4gICAgc3RyZWFtOiBCaW5hcnlTdHJlYW0sXG4gICAgdmFsdWU6IExvbmdUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgbG9uZyB2YWx1ZSB0byB0aGUgc3RyZWFtLlxuICAgIGlmIChvcHRpb25zPy52YXJpbnQpIHN0cmVhbS53cml0ZVppZ1pvbmcoQmlnSW50KHZhbHVlLnZhbHVlT2YoKSkpO1xuICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50NjQoQmlnSW50KHZhbHVlLnZhbHVlT2YoKSksIEVuZGlhbm5lc3MuTGl0dGxlKTtcbiAgfVxufVxuXG5leHBvcnQgeyBMb25nVGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5cbmNsYXNzIEZsb2F0VGFnIGV4dGVuZHMgTnVtYmVyIGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5GbG9hdDtcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEZsb2F0VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGZsb2F0IHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIodmFsdWUpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogbnVtYmVyIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBzaG9ydCB2YWx1ZSB0byBhIEpTT04gbnVtYmVyLlxuICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogRmxvYXRUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuRmxvYXQpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuRmxvYXRdfSwgcmVjZWl2ZWQgJHtUYWdUeXBlW3R5cGVdID8/IHR5cGV9LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGEgdmFyaWFibGUgdG8gaG9sZCB0aGUgbmFtZSBvZiB0aGUgdGFnLlxuICAgIGxldCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gUmVhZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgY29uc3QgbGVuZ3RoID0gb3B0aW9ucz8udmFyaW50XG4gICAgICAgID8gc3RyZWFtLnJlYWRWYXJJbnQoKVxuICAgICAgICA6IHN0cmVhbS5yZWFkSW50MTYoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBSZWFkIHRoZSBuYW1lIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmVhbS5yZWFkQnVmZmVyKGxlbmd0aCk7XG5cbiAgICAgIC8vIENvbnZlcnQgdGhlIGJ1ZmZlciB0byBhIHN0cmluZy5cbiAgICAgIG5hbWUgPSBidWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGZsb2F0IHZhbHVlIGZyb20gdGhlIHN0cmVhbS5cbiAgICBjb25zdCB2YWx1ZSA9IHN0cmVhbS5yZWFkRmxvYXQzMihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAvLyBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBGbG9hdFRhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogRmxvYXRUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgZmxvYXQgdmFsdWUgdG8gdGhlIHN0cmVhbS5cbiAgICBzdHJlYW0ud3JpdGVGbG9hdDMyKHZhbHVlLnZhbHVlT2YoKSwgRW5kaWFubmVzcy5MaXR0bGUpO1xuICB9XG59XG5cbmV4cG9ydCB7IEZsb2F0VGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5cbmNsYXNzIERvdWJsZVRhZyBleHRlbmRzIE51bWJlciBpbXBsZW1lbnRzIEJhc2VUYWcge1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZSA9IFRhZ1R5cGUuRG91YmxlO1xuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRG91YmxlVGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGRvdWJsZSB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhZywgZGVmYXVsdHMgdG8gbnVsbC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZTogbnVtYmVyLCBuYW1lPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIHN1cGVyKHZhbHVlKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgdG9KU09OKCk6IG51bWJlciB7XG4gICAgLy8gQ29udmVydCB0aGUgYnl0ZSB2YWx1ZSB0byBhIEpTT04gbnVtYmVyLlxuICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogRG91YmxlVGFnIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkRvdWJsZSkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5Eb3VibGVdfSwgcmVjZWl2ZWQgJHtUYWdUeXBlW3R5cGVdID8/IHR5cGV9LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGEgdmFyaWFibGUgdG8gaG9sZCB0aGUgbmFtZSBvZiB0aGUgdGFnLlxuICAgIGxldCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gUmVhZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgY29uc3QgbGVuZ3RoID0gb3B0aW9ucz8udmFyaW50XG4gICAgICAgID8gc3RyZWFtLnJlYWRWYXJJbnQoKVxuICAgICAgICA6IHN0cmVhbS5yZWFkSW50MTYoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBSZWFkIHRoZSBuYW1lIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmVhbS5yZWFkQnVmZmVyKGxlbmd0aCk7XG5cbiAgICAgIC8vIENvbnZlcnQgdGhlIGJ1ZmZlciB0byBhIHN0cmluZy5cbiAgICAgIG5hbWUgPSBidWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIGRvdWJsZSB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgY29uc3QgdmFsdWUgPSBzdHJlYW0ucmVhZEZsb2F0NjQoRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgRG91YmxlVGFnIGluc3RhbmNlLlxuICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBEb3VibGVUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgZG91YmxlIHZhbHVlIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlRmxvYXQ2NCh2YWx1ZS52YWx1ZU9mKCksIEVuZGlhbm5lc3MuTGl0dGxlKTtcbiAgfVxufVxuXG5leHBvcnQgeyBEb3VibGVUYWcgfTtcbiIsICJpbXBvcnQgeyBCaW5hcnlTdHJlYW0sIEVuZGlhbm5lc3MgfSBmcm9tIFwiQHNlcmVuaXR5anMvYmluYXJ5c3RyZWFtXCI7XG5cbmltcG9ydCB7IFRhZ1R5cGUgfSBmcm9tIFwiLi4vZW51bVwiO1xuXG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcblxuY2xhc3MgQnl0ZUxpc3RUYWcgZXh0ZW5kcyBBcnJheTxudW1iZXI+IGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5CeXRlTGlzdDtcblxuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEJ5dGVMaXN0VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIG9mIHRoZSBieXRlIGxpc3QuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcsIGRlZmF1bHRzIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoZWxlbWVudHM6IEFycmF5PG51bWJlcj4sIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIoLi4uZWxlbWVudHMpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBtYXA8VT4oXG4gICAgY2FsbGJhY2tmbjogKHZhbHVlOiBudW1iZXIsIGluZGV4OiBudW1iZXIsIGFycmF5OiBBcnJheTxudW1iZXI+KSA9PiBVLFxuICAgIHRoaXNBcmc/OiB1bmtub3duXG4gICk6IEFycmF5PFU+IHtcbiAgICAvLyBDb252ZXJ0IHRoZSBieXRlIGxpc3QgdG8gYSByZWd1bGFyIGFycmF5LlxuICAgIGNvbnN0IGFycmF5ID0gQXJyYXkuZnJvbSh0aGlzKTtcblxuICAgIC8vIE1hcCB0aGUgZWxlbWVudHMgb2YgdGhlIGxpc3QgdXNpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgIHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2tmbiwgdGhpc0FyZyk7XG4gIH1cblxuICBwdWJsaWMgdG9KU09OKCk6IEFycmF5PG51bWJlcj4ge1xuICAgIC8vIENvbnZlcnQgdGhlIGJ5dGUgbGlzdCB0byBhIEpTT04gYXJyYXkuXG4gICAgcmV0dXJuIHRoaXMubWFwKCh2YWx1ZSkgPT4gdmFsdWUudmFsdWVPZigpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZChcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogQnl0ZUxpc3RUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuQnl0ZSkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5CeXRlXX0sIHJlY2VpdmVkICR7VGFnVHlwZVt0eXBlXSA/PyB0eXBlfS5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhIHZhcmlhYmxlIHRvIGhvbGQgdGhlIG5hbWUgb2YgdGhlIHRhZy5cbiAgICBsZXQgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IG9wdGlvbnM/LnZhcmludFxuICAgICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgICAgOiBzdHJlYW0ucmVhZEludDE2KEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gUmVhZCB0aGUgbmFtZSBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJlYW0ucmVhZEJ1ZmZlcihsZW5ndGgpO1xuXG4gICAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgICBuYW1lID0gYnVmZmVyLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgbGlzdCBiYXNlZCBvbiB0aGUgdmFyaW50IG9wdGlvbi5cbiAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgID8gc3RyZWFtLnJlYWRaaWdaYWcoKVxuICAgICAgOiBzdHJlYW0ucmVhZEludDMyKEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIFJlYWQgdGhlIGJ5dGUgdmFsdWVzIGZyb20gdGhlIHN0cmVhbS5cbiAgICBjb25zdCB2YWx1ZSA9IHN0cmVhbS5yZWFkKGxlbmd0aCk7XG5cbiAgICAvLyBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBCeXRlTGlzdFRhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gbmV3IHRoaXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogQnl0ZUxpc3RUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBieXRlIGxpc3QgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgaWYgKG9wdGlvbnM/LnZhcmludCkgc3RyZWFtLndyaXRlWmlnWmFnKHZhbHVlLmxlbmd0aCk7XG4gICAgZWxzZSBzdHJlYW0ud3JpdGVJbnQzMih2YWx1ZS5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIFdyaXRlIHRoZSBieXRlIHZhbHVlcyB0byB0aGUgc3RyZWFtLlxuICAgIHN0cmVhbS53cml0ZSh2YWx1ZS5tYXAoKGJ5dGUpID0+IGJ5dGU/LnZhbHVlT2YoKSA/PyAwKSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQnl0ZUxpc3RUYWcgfTtcbiIsICJpbXBvcnQgeyBCaW5hcnlTdHJlYW0sIEVuZGlhbm5lc3MgfSBmcm9tIFwiQHNlcmVuaXR5anMvYmluYXJ5c3RyZWFtXCI7XG5cbmltcG9ydCB7IFRhZ1R5cGUgfSBmcm9tIFwiLi4vZW51bVwiO1xuXG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcblxuY2xhc3MgU3RyaW5nVGFnIGV4dGVuZHMgU3RyaW5nIGltcGxlbWVudHMgQmFzZVRhZyB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gVGFnVHlwZS5TdHJpbmc7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBTdHJpbmdUYWcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RyaW5nIHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3VwZXIodmFsdWUpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogc3RyaW5nIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBieXRlIHZhbHVlIHRvIGEgSlNPTiBudW1iZXIuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZWFkKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBTdHJpbmdUYWcge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBpcyBleHBlY3RlZC5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkge1xuICAgICAgLy8gUmVhZCB0aGUgdGFnIHR5cGUuXG4gICAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWcgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlLlxuICAgICAgaWYgKHR5cGUgIT09IFRhZ1R5cGUuU3RyaW5nKSB7XG4gICAgICAgIC8vIFRocm93IGFuIGVycm9yIGlmIHRoZSB0eXBlIGRvZXMgbm90IG1hdGNoLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIHRhZyB0eXBlIHRvIGJlICR7VGFnVHlwZVtUYWdUeXBlLlN0cmluZ119LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgfVxuXG4gICAgLy8gUmVhZCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdmFsdWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgY29uc3QgbGVuZ3RoID0gb3B0aW9ucz8udmFyaW50XG4gICAgICA/IHN0cmVhbS5yZWFkVmFySW50KClcbiAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAvLyBSZWFkIHRoZSBzdHJpbmcgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmVhbS5yZWFkQnVmZmVyKGxlbmd0aCk7XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBidWZmZXIgdG8gYSBzdHJpbmcuXG4gICAgY29uc3QgdmFsdWUgPSBidWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIpO1xuXG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgU3RyaW5nVGFnIGluc3RhbmNlLlxuICAgIHJldHVybiBuZXcgdGhpcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIHZhbHVlOiBTdHJpbmdUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgdmFsdWUgdG8gYSBidWZmZXIuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUudG9TdHJpbmcoKSwgXCJ1dGY4XCIpO1xuXG4gICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHZhbHVlIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgIGlmIChvcHRpb25zPy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgIC8vIFdyaXRlIHRoZSBzdHJpbmcgdmFsdWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgc3RyZWFtLndyaXRlQnVmZmVyKGJ1ZmZlcik7XG4gIH1cbn1cblxuZXhwb3J0IHsgU3RyaW5nVGFnIH07XG4iLCAiaW1wb3J0IHsgQmluYXJ5U3RyZWFtLCBFbmRpYW5uZXNzIH0gZnJvbSBcIkBzZXJlbml0eWpzL2JpbmFyeXN0cmVhbVwiO1xuXG5pbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4uL2VudW1cIjtcblxuaW1wb3J0IHsgQmFzZVRhZyB9IGZyb20gXCIuL2Jhc2UtdGFnXCI7XG5pbXBvcnQgeyBSZWFkV3JpdGVPcHRpb25zIH0gZnJvbSBcIi4vcmVhZC13cml0ZS1vcHRpb25zXCI7XG5pbXBvcnQgeyBCeXRlVGFnIH0gZnJvbSBcIi4vYnl0ZVwiO1xuaW1wb3J0IHsgU2hvcnRUYWcgfSBmcm9tIFwiLi9zaG9ydFwiO1xuaW1wb3J0IHsgSW50VGFnIH0gZnJvbSBcIi4vaW50XCI7XG5pbXBvcnQgeyBMb25nVGFnIH0gZnJvbSBcIi4vbG9uZ1wiO1xuaW1wb3J0IHsgRmxvYXRUYWcgfSBmcm9tIFwiLi9mbG9hdFwiO1xuaW1wb3J0IHsgRG91YmxlVGFnIH0gZnJvbSBcIi4vZG91YmxlXCI7XG5pbXBvcnQgeyBTdHJpbmdUYWcgfSBmcm9tIFwiLi9zdHJpbmdcIjtcbmltcG9ydCB7IENvbXBvdW5kVGFnIH0gZnJvbSBcIi4vY29tcG91bmRcIjtcbmltcG9ydCB7IEJ5dGVMaXN0VGFnIH0gZnJvbSBcIi4vYnl0ZS1saXN0XCI7XG5cbmNsYXNzIExpc3RUYWc8VCBleHRlbmRzIEJhc2VUYWc+IGV4dGVuZHMgQXJyYXk8VD4gaW1wbGVtZW50cyBCYXNlVGFnIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGUgPSBUYWdUeXBlLkxpc3Q7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBMaXN0VGFnIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnLCBkZWZhdWx0cyB0byBudWxsLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGVsZW1lbnRzOiBBcnJheTxUPiA9IFtdLCBuYW1lPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIC8vIENhbGwgdGhlIHBhcmVudCBjb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIHRoZSBhcnJheS5cbiAgICBzdXBlciguLi5lbGVtZW50cyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIG1hcDxVPihcbiAgICBjYWxsYmFja2ZuOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiBBcnJheTxUPikgPT4gVSxcbiAgICB0aGlzQXJnPzogdW5rbm93blxuICApOiBBcnJheTxVPiB7XG4gICAgY29uc3QgYXJyYXkgPSBBcnJheS5mcm9tKHRoaXMpO1xuXG4gICAgLy8gTWFwIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdCB1c2luZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAgcmV0dXJuIGFycmF5Lm1hcChjYWxsYmFja2ZuLCB0aGlzQXJnKTtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogQXJyYXk8dW5rbm93bj4ge1xuICAgIC8vIENvbnZlcnQgdGhlIGxpc3QgZWxlbWVudHMgdG8gYSBKU09OIGFycmF5LlxuICAgIHJldHVybiB0aGlzLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC50b0pTT04oKSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlYWQ8VCBleHRlbmRzIEJhc2VUYWc+KFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBMaXN0VGFnPFQ+IHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGFnIHR5cGUgaXMgZXhwZWN0ZWQuXG4gICAgaWYgKG9wdGlvbnM/LnR5cGUpIHtcbiAgICAgIC8vIFJlYWQgdGhlIHRhZyB0eXBlLlxuICAgICAgY29uc3QgdHlwZTogVGFnVHlwZSA9IHN0cmVhbS5yZWFkSW50OCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFnIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAgICAgIGlmICh0eXBlICE9PSBUYWdUeXBlLkxpc3QpIHtcbiAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHR5cGUgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgdGFnIHR5cGUgdG8gYmUgJHtUYWdUeXBlW1RhZ1R5cGUuTGlzdF19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgfVxuXG4gICAgLy8gUmVhZCB0aGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdC5cbiAgICBjb25zdCB0eXBlOiBUYWdUeXBlID0gc3RyZWFtLnJlYWRJbnQ4KCk7XG5cbiAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QuXG4gICAgY29uc3QgbGVuZ3RoID0gb3B0aW9ucz8udmFyaW50XG4gICAgICA/IHN0cmVhbS5yZWFkWmlnWmFnKClcbiAgICAgIDogc3RyZWFtLnJlYWRJbnQzMihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgTGlzdFRhZyBpbnN0YW5jZS5cbiAgICBjb25zdCB0YWcgPSBuZXcgdGhpczxUPihbXSwgbmFtZSk7XG5cbiAgICAvLyBSZWFkIHRoZSBsaXN0IGVsZW1lbnRzIGJhc2VkIG9uIHRoZSB0eXBlLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbGlzdCB0eXBlOiAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX1gKTtcblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZToge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIEJ5dGVUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEJ5dGVUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLlNob3J0OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgU2hvcnRUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IFNob3J0VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0LlxuICAgICAgICAgIHRhZy5wdXNoKGVsZW1lbnQgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5JbnQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYW4gSW50VGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBJbnRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkxvbmc6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBMb25nVGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBMb25nVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0LlxuICAgICAgICAgIHRhZy5wdXNoKGVsZW1lbnQgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5GbG9hdDoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIEZsb2F0VGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBGbG9hdFRhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgbGlzdC5cbiAgICAgICAgICB0YWcucHVzaChlbGVtZW50IGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRG91YmxlOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgRG91YmxlVGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBEb3VibGVUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkJ5dGVMaXN0OiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQnl0ZUxpc3RUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IEJ5dGVMaXN0VGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0LlxuICAgICAgICAgIHRhZy5wdXNoKGVsZW1lbnQgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5TdHJpbmc6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBTdHJpbmdUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IFN0cmluZ1RhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgbGlzdC5cbiAgICAgICAgICB0YWcucHVzaChlbGVtZW50IGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuTGlzdDoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIExpc3RUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IExpc3RUYWcucmVhZDxUPihzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGxpc3QuXG4gICAgICAgICAgdGFnLnB1c2goZWxlbWVudCBhcyB1bmtub3duIGFzIFQpO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkNvbXBvdW5kOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQ29tcG91bmRUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvdW5kVGFnLnJlYWQoc3RyZWFtLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBsaXN0LlxuICAgICAgICAgIHRhZy5wdXNoKGVsZW1lbnQgYXMgdW5rbm93biBhcyBUKTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiB0aGUgdGFnIHdpdGggdGhlIHR5cGUgYW5kIG5hbWUgc2V0LlxuICAgIHJldHVybiB0YWc7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHdyaXRlPFQgZXh0ZW5kcyBCYXNlVGFnPihcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogTGlzdFRhZzxUPixcbiAgICBvcHRpb25zOiBSZWFkV3JpdGVPcHRpb25zID0geyBuYW1lOiB0cnVlLCB0eXBlOiB0cnVlLCB2YXJpbnQ6IGZhbHNlIH1cbiAgKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSBzdHJlYW0ud3JpdGVJbnQ4KHZhbHVlLnR5cGUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIHNob3VsZCBiZSB3cml0dGVuLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBDb252ZXJ0IHRoZSBuYW1lIHRvIGEgYnVmZmVyLlxuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odmFsdWUubmFtZSA/PyBcIlwiLCBcInV0ZjhcIik7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBpZiAob3B0aW9ucy52YXJpbnQpIHN0cmVhbS53cml0ZVZhckludChidWZmZXIubGVuZ3RoKTtcbiAgICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MTYoYnVmZmVyLmxlbmd0aCwgRW5kaWFubmVzcy5MaXR0bGUpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbmFtZSBidWZmZXIgdG8gdGhlIHN0cmVhbS5cbiAgICAgIHN0cmVhbS53cml0ZUJ1ZmZlcihidWZmZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGFuIGVsZW1lbnQgaXMgcHJlc2VudCBpbiB0aGUgbGlzdC5cbiAgICBpZiAoIXZhbHVlWzBdKSB7XG4gICAgICAvLyBJZiBub3QsIHdyaXRlIGFuIGVtcHR5IGxpc3QgdHlwZSBhbmQgbGVuZ3RoLlxuICAgICAgc3RyZWFtLndyaXRlSW50OChUYWdUeXBlLkJ5dGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBzbywgZ2V0IHRoZSB0eXBlIG9mIHRoZSBmaXJzdCBlbGVtZW50LlxuICAgICAgY29uc3QgdHlwZSA9IHZhbHVlWzBdLnR5cGU7XG5cbiAgICAgIC8vIFdyaXRlIHRoZSB0eXBlIG9mIHRoZSBsaXN0LlxuICAgICAgc3RyZWFtLndyaXRlSW50OCh0eXBlKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0LlxuICAgIGlmIChvcHRpb25zPy52YXJpbnQpIHN0cmVhbS53cml0ZVppZ1phZyh2YWx1ZS5sZW5ndGgpO1xuICAgIGVsc2Ugc3RyZWFtLndyaXRlSW50MzIodmFsdWUubGVuZ3RoLCBFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBlbGVtZW50IGluIHRoZSBsaXN0LlxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZSkge1xuICAgICAgLy8gSGFuZGxlIGVhY2ggdHlwZSBvZiBlbGVtZW50IGJhc2VkIG9uIGl0cyB0YWcgdHlwZS5cbiAgICAgIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgICAgIGNhc2UgVGFnVHlwZS5CeXRlOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBCeXRlVGFnLlxuICAgICAgICAgIEJ5dGVUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgQnl0ZVRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5TaG9ydDoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBlbGVtZW50IGFzIGEgU2hvcnRUYWcuXG4gICAgICAgICAgU2hvcnRUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgU2hvcnRUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuSW50OiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYW4gSW50VGFnLlxuICAgICAgICAgIEludFRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBJbnRUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuTG9uZzoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBlbGVtZW50IGFzIGEgTG9uZ1RhZy5cbiAgICAgICAgICBMb25nVGFnLndyaXRlKHN0cmVhbSwgZWxlbWVudCBhcyB1bmtub3duIGFzIExvbmdUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRmxvYXQ6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgZWxlbWVudCBhcyBhIEZsb2F0VGFnLlxuICAgICAgICAgIEZsb2F0VGFnLndyaXRlKHN0cmVhbSwgZWxlbWVudCBhcyB1bmtub3duIGFzIEZsb2F0VGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkRvdWJsZToge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBlbGVtZW50IGFzIGEgRG91YmxlVGFnLlxuICAgICAgICAgIERvdWJsZVRhZy53cml0ZShzdHJlYW0sIGVsZW1lbnQgYXMgdW5rbm93biBhcyBEb3VibGVUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZUxpc3Q6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgZWxlbWVudCBhcyBhIEJ5dGVUYWcuXG4gICAgICAgICAgQnl0ZUxpc3RUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgQnl0ZUxpc3RUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuU3RyaW5nOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBTdHJpbmdUYWcuXG4gICAgICAgICAgU3RyaW5nVGFnLndyaXRlKHN0cmVhbSwgZWxlbWVudCBhcyB1bmtub3duIGFzIFN0cmluZ1RhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5MaXN0OiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIGVsZW1lbnQgYXMgYSBMaXN0VGFnLlxuICAgICAgICAgIExpc3RUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgTGlzdFRhZzxUPiwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5Db21wb3VuZDoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBlbGVtZW50IGFzIGEgQ29tcG91bmRUYWcuXG4gICAgICAgICAgQ29tcG91bmRUYWcud3JpdGUoc3RyZWFtLCBlbGVtZW50IGFzIHVua25vd24gYXMgQ29tcG91bmRUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgTGlzdFRhZyB9O1xuIiwgImltcG9ydCB7IEJpbmFyeVN0cmVhbSwgRW5kaWFubmVzcyB9IGZyb20gXCJAc2VyZW5pdHlqcy9iaW5hcnlzdHJlYW1cIjtcblxuaW1wb3J0IHsgVGFnVHlwZSB9IGZyb20gXCIuLi9lbnVtXCI7XG5cbmltcG9ydCB7IEJ5dGVUYWcgfSBmcm9tIFwiLi9ieXRlXCI7XG5pbXBvcnQgeyBCYXNlVGFnIH0gZnJvbSBcIi4vYmFzZS10YWdcIjtcbmltcG9ydCB7IFJlYWRXcml0ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZWFkLXdyaXRlLW9wdGlvbnNcIjtcbmltcG9ydCB7IFNob3J0VGFnIH0gZnJvbSBcIi4vc2hvcnRcIjtcbmltcG9ydCB7IEludFRhZyB9IGZyb20gXCIuL2ludFwiO1xuaW1wb3J0IHsgTG9uZ1RhZyB9IGZyb20gXCIuL2xvbmdcIjtcbmltcG9ydCB7IEZsb2F0VGFnIH0gZnJvbSBcIi4vZmxvYXRcIjtcbmltcG9ydCB7IERvdWJsZVRhZyB9IGZyb20gXCIuL2RvdWJsZVwiO1xuaW1wb3J0IHsgU3RyaW5nVGFnIH0gZnJvbSBcIi4vc3RyaW5nXCI7XG5pbXBvcnQgeyBMaXN0VGFnIH0gZnJvbSBcIi4vbGlzdFwiO1xuaW1wb3J0IHsgQnl0ZUxpc3RUYWcgfSBmcm9tIFwiLi9ieXRlLWxpc3RcIjtcblxuY2xhc3MgQ29tcG91bmRUYWcgZXh0ZW5kcyBNYXA8c3RyaW5nLCBCYXNlVGFnPiBpbXBsZW1lbnRzIEJhc2VUYWcge1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZSA9IFRhZ1R5cGUuQ29tcG91bmQ7XG5cbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBDb21wb3VuZFRhZyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhZywgZGVmYXVsdHMgdG8gbnVsbC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihuYW1lPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIHRvSlNPTigpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgLy8gQ29udmVydCB0aGUgbWFwIHRvIGEgSlNPTiBvYmplY3QuXG4gICAgY29uc3QganNvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHRhZyBpbiB0aGUgY29tcG91bmQgdGFnLlxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIC8vIEFkZCB0aGUgdGFnIHRvIHRoZSBKU09OIG9iamVjdCB1c2luZyBpdHMga2V5LlxuICAgICAganNvbltrZXldID0gdmFsdWUudG9KU09OKCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoZSBKU09OIG9iamVjdC5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBuYnQgdGFnIGJ5IGl0cyBrZXkuXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSBvZiB0aGUgdGFnIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyBUaGUgdGFnIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIGdldDxUIGV4dGVuZHMgQmFzZVRhZz4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBDYWxsIHRoZSBvcmlnaW5hbCBnZXQgbWV0aG9kIGZyb20gTWFwIGFuZCBjYXN0IHRoZSByZXN1bHQgdG8gVC5cbiAgICByZXR1cm4gc3VwZXIuZ2V0KGtleSkgYXMgVCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuYnQgdGFnIHdpdGggYSBzcGVjaWZpYyBrZXkuXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdGFnLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHRhZyB0byBzZXQuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgc2V0PFQgZXh0ZW5kcyBCYXNlVGFnPihrZXk6IHN0cmluZywgdmFsdWU6IFQpOiB0aGlzIHtcbiAgICAvLyBDYWxsIHRoZSBvcmlnaW5hbCBzZXQgbWV0aG9kIGZyb20gTWFwLlxuICAgIHN1cGVyLnNldChrZXksIHZhbHVlKTtcblxuICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBtdWx0aXBsZSB0YWdzIHRvIHRoZSBjb21wb3VuZCB0YWcuXG4gICAqIEBwYXJhbSB0YWdzIEFuIGFycmF5IG9mIHRhZ3MgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgcHVibGljIHB1c2g8VCBleHRlbmRzIEJhc2VUYWc+KC4uLnRhZ3M6IEFycmF5PFQ+KTogdGhpcyB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggdGFnIGluIHRoZSBwcm92aWRlZCBhcnJheS5cbiAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgICAvLyBTZXQgdGhlIHRhZyBpbiB0aGUgbWFwIHVzaW5nIGl0cyBuYW1lIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgbmFtZSBpcyBudWxsLlxuICAgICAgc3VwZXIuc2V0KHRhZy5uYW1lID8/IFwiXCIsIHRhZyk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2luZ2xlIHRhZyB0byB0aGUgY29tcG91bmQgdGFnLlxuICAgKiBAcGFyYW0gdGFnIFRoZSB0YWcgdG8gYWRkIHRvIHRoZSBjb21wb3VuZCB0YWcuXG4gICAqIEByZXR1cm5zIFRoZSB0YWcgdGhhdCB3YXMgYWRkZWQuXG4gICAqL1xuICBwdWJsaWMgYWRkPFQgZXh0ZW5kcyBCYXNlVGFnPih0YWc6IFQpOiBUIHtcbiAgICAvLyBBZGQgdGhlIHRhZyB0byB0aGUgY29tcG91bmQgdGFnIHVzaW5nIGl0cyBuYW1lIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgbmFtZSBpcyBudWxsLlxuICAgIHRoaXMuc2V0KHRhZy5uYW1lID8/IFwiXCIsIHRhZyk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIHRhZyB0aGF0IHdhcyBhZGRlZC5cbiAgICByZXR1cm4gdGFnO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZWFkKFxuICAgIHN0cmVhbTogQmluYXJ5U3RyZWFtLFxuICAgIG9wdGlvbnM6IFJlYWRXcml0ZU9wdGlvbnMgPSB7IG5hbWU6IHRydWUsIHR5cGU6IHRydWUsIHZhcmludDogZmFsc2UgfVxuICApOiBDb21wb3VuZFRhZyB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy50eXBlKSB7XG4gICAgICAvLyBSZWFkIHRoZSB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRhZyB0eXBlIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHR5cGUuXG4gICAgICBpZiAodHlwZSAhPT0gVGFnVHlwZS5Db21wb3VuZCkge1xuICAgICAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0YWcgdHlwZSB0byBiZSAke1RhZ1R5cGVbVGFnVHlwZS5Db21wb3VuZF19LCByZWNlaXZlZCAke1RhZ1R5cGVbdHlwZV0gPz8gdHlwZX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBuYW1lIG9mIHRoZSB0YWcuXG4gICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyBuYW1lIGlzIGV4cGVjdGVkLlxuICAgIGlmIChvcHRpb25zPy5uYW1lKSB7XG4gICAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgYmFzZWQgb24gdGhlIHZhcmludCBvcHRpb24uXG4gICAgICBjb25zdCBsZW5ndGggPSBvcHRpb25zPy52YXJpbnRcbiAgICAgICAgPyBzdHJlYW0ucmVhZFZhckludCgpXG4gICAgICAgIDogc3RyZWFtLnJlYWRJbnQxNihFbmRpYW5uZXNzLkxpdHRsZSk7XG5cbiAgICAgIC8vIFJlYWQgdGhlIG5hbWUgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLnJlYWRCdWZmZXIobGVuZ3RoKTtcblxuICAgICAgLy8gQ29udmVydCB0aGUgYnVmZmVyIHRvIGEgc3RyaW5nLlxuICAgICAgbmFtZSA9IGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgIGNvbnN0IHRhZyA9IG5ldyBDb21wb3VuZFRhZyhuYW1lKTtcblxuICAgIC8vIFJlYWQgdGhlIHRhZ3MgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgbnVsbCB0YWcgaXMgZW5jb3VudGVyZWQuXG4gICAgZG8ge1xuICAgICAgLy8gUmVhZCB0aGUgbmV4dCB0YWcgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGU6IFRhZ1R5cGUgPSBzdHJlYW0ucmVhZEludDgoKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIHRhZyB0eXBlIGlzIEVuZCwgd2hpY2ggaW5kaWNhdGVzIHRoZSBlbmQgb2YgdGhlIGNvbXBvdW5kIHRhZy5cbiAgICAgIGlmICh0eXBlID09PSBUYWdUeXBlLkVuZCkgYnJlYWs7XG5cbiAgICAgIC8vIEhhbmRsZSB0aGUgdGFnIHR5cGUgYmFzZWQgb24gaXRzIHZhbHVlLlxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0YWcgdHlwZTogJHtUYWdUeXBlW3R5cGVdID8/IHR5cGV9LmApO1xuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5CeXRlOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQnl0ZVRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQnl0ZVRhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBDb21wb3VuZFRhZyBpbnN0YW5jZS5cbiAgICAgICAgICB0YWcuc2V0KGVsZW1lbnQubmFtZSA/PyBcIlwiLCBlbGVtZW50KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5TaG9ydDoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIFNob3J0VGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBTaG9ydFRhZy5yZWFkKHN0cmVhbSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBlbGVtZW50IHRvIHRoZSBDb21wb3VuZFRhZyBpbnN0YW5jZS5cbiAgICAgICAgICB0YWcuc2V0KGVsZW1lbnQubmFtZSA/PyBcIlwiLCBlbGVtZW50KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5JbnQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYW4gSW50VGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBJbnRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuTG9uZzoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIExvbmdUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IExvbmdUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRmxvYXQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBGbG9hdFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gRmxvYXRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuRG91YmxlOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgRG91YmxlVGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBEb3VibGVUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZUxpc3Q6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBCeXRlTGlzdFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQnl0ZUxpc3RUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuU3RyaW5nOiB7XG4gICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgU3RyaW5nVGFnLlxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBTdHJpbmdUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuTGlzdDoge1xuICAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIExpc3RUYWcuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IExpc3RUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQ29tcG91bmQ6IHtcbiAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBDb21wb3VuZFRhZy5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG91bmRUYWcucmVhZChzdHJlYW0sIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZmFsc2VcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0aGUgZWxlbWVudCB0byB0aGUgQ29tcG91bmRUYWcgaW5zdGFuY2UuXG4gICAgICAgICAgdGFnLnNldChlbGVtZW50Lm5hbWUgPz8gXCJcIiwgZWxlbWVudCk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChzdHJlYW0uY3Vyc29yQXRFbmQoKSA9PT0gZmFsc2UpO1xuXG4gICAgLy8gUmV0dXJuIHRoZSBDb21wb3VuZFRhZyBpbnN0YW5jZS5cbiAgICByZXR1cm4gdGFnO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3cml0ZShcbiAgICBzdHJlYW06IEJpbmFyeVN0cmVhbSxcbiAgICB2YWx1ZTogQ29tcG91bmRUYWcsXG4gICAgb3B0aW9uczogUmVhZFdyaXRlT3B0aW9ucyA9IHsgbmFtZTogdHJ1ZSwgdHlwZTogdHJ1ZSwgdmFyaW50OiBmYWxzZSB9XG4gICk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgdHlwZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8udHlwZSkgc3RyZWFtLndyaXRlSW50OCh2YWx1ZS50eXBlKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YWcgbmFtZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAgICBpZiAob3B0aW9ucz8ubmFtZSkge1xuICAgICAgLy8gQ29udmVydCB0aGUgbmFtZSB0byBhIGJ1ZmZlci5cbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlLm5hbWUgPz8gXCJcIiwgXCJ1dGY4XCIpO1xuXG4gICAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGJhc2VkIG9uIHRoZSB2YXJpbnQgb3B0aW9uLlxuICAgICAgaWYgKG9wdGlvbnMudmFyaW50KSBzdHJlYW0ud3JpdGVWYXJJbnQoYnVmZmVyLmxlbmd0aCk7XG4gICAgICBlbHNlIHN0cmVhbS53cml0ZUludDE2KGJ1ZmZlci5sZW5ndGgsIEVuZGlhbm5lc3MuTGl0dGxlKTtcblxuICAgICAgLy8gV3JpdGUgdGhlIG5hbWUgYnVmZmVyIHRvIHRoZSBzdHJlYW0uXG4gICAgICBzdHJlYW0ud3JpdGVCdWZmZXIoYnVmZmVyKTtcbiAgICB9XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCB0YWcgaW4gdGhlIENvbXBvdW5kVGFnIGluc3RhbmNlLlxuICAgIGZvciAoY29uc3QgWywgdGFnXSBvZiB2YWx1ZSkge1xuICAgICAgc3dpdGNoICh0YWcudHlwZSkge1xuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZToge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBCeXRlVGFnIHRvIHRoZSBzdHJlYW0uXG4gICAgICAgICAgQnl0ZVRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBCeXRlVGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5TaG9ydDoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBTaG9ydFRhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIFNob3J0VGFnLndyaXRlKHN0cmVhbSwgdGFnIGFzIFNob3J0VGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5JbnQ6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgSW50VGFnIHRvIHRoZSBzdHJlYW0uXG4gICAgICAgICAgSW50VGFnLndyaXRlKHN0cmVhbSwgdGFnIGFzIEludFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuTG9uZzoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBMb25nVGFnIHRvIHRoZSBzdHJlYW0uXG4gICAgICAgICAgTG9uZ1RhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBMb25nVGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5GbG9hdDoge1xuICAgICAgICAgIC8vIFdyaXRlIHRoZSBGbG9hdFRhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIEZsb2F0VGFnLndyaXRlKHN0cmVhbSwgdGFnIGFzIEZsb2F0VGFnLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgVGFnVHlwZS5Eb3VibGU6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgRG91YmxlVGFnIHRvIHRoZSBzdHJlYW0uXG4gICAgICAgICAgRG91YmxlVGFnLndyaXRlKHN0cmVhbSwgdGFnIGFzIERvdWJsZVRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQnl0ZUxpc3Q6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgQnl0ZUxpc3RUYWcgdG8gdGhlIHN0cmVhbS5cbiAgICAgICAgICBCeXRlTGlzdFRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBCeXRlTGlzdFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuU3RyaW5nOiB7XG4gICAgICAgICAgLy8gV3JpdGUgdGhlIFN0cmluZ1RhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIFN0cmluZ1RhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBTdHJpbmdUYWcsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBUYWdUeXBlLkxpc3Q6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgTGlzdFRhZyB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgIExpc3RUYWcud3JpdGUoc3RyZWFtLCB0YWcgYXMgTGlzdFRhZzxCYXNlVGFnPiwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFRhZ1R5cGUuQ29tcG91bmQ6IHtcbiAgICAgICAgICAvLyBXcml0ZSB0aGUgQ29tcG91bmRUYWcgdG8gdGhlIHN0cmVhbS5cbiAgICAgICAgICBDb21wb3VuZFRhZy53cml0ZShzdHJlYW0sIHRhZyBhcyBDb21wb3VuZFRhZywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDb250aW51ZSB0byB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXcml0ZSB0aGUgRW5kIHRhZyB0byBpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSBjb21wb3VuZCB0YWcuXG4gICAgc3RyZWFtLndyaXRlSW50OChUYWdUeXBlLkVuZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ29tcG91bmRUYWcgfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7QUFBQSxJQUFLQSxVQUFBQSx5QkFBQUEsVUFBQUE7Ozs7Ozs7Ozs7Ozs7O1NBQUFBO0VBQUFBLFdBQUFBLENBQUFBLENBQUFBOzs7QUNNTCxJQUFlQyxVQUFmLE1BQWVBLFNBQUFBO0VBQWYsT0FBZUE7Ozs7OztFQVNOQyxPQUFzQjs7Ozs7O0VBWTdCLE9BQWNDLEtBQ1pDLFNBQ0FDLFVBQ1M7QUFDVCxVQUFNLElBQUlDLE1BQU0sZ0NBQUE7RUFDbEI7Ozs7Ozs7RUFRQSxPQUFjQyxNQUNaSCxTQUNBSSxRQUNBSCxVQUNNO0FBQ04sVUFBTSxJQUFJQyxNQUFNLGlDQUFBO0VBQ2xCO0FBQ0Y7OztBQy9DQSxTQUF1Qkcsa0JBQWtCO0FBT3pDLElB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QU07WUFDTkgsTUFBTTtVQUNSLENBQUE7QUFHQTtRQUNGO1FBRUEsS0FBS0MsUUFBUTRDLFFBQVE7QUFFbkJDLG9CQUFVRyxNQUFNcEMsUUFBUUYsU0FBaUM7WUFDdkQsR0FBR0c7WUFDSFgsTUFBTTtZQUNOSCxNQUFNO1VBQ1IsQ0FBQTtBQUdBO1FBQ0Y7UUFFQSxLQUFLQyxRQUFRQyxNQUFNO0FBRWpCSixVQUFBQSxTQUFRbUQsTUFBTXBDLFFBQVFGLFNBQWtDO1lBQ3RELEdBQUdHO1lBQ0hYLE1BQU07WUFDTkgsTUFBTTtVQUNSLENBQUE7QUFHQTtRQUNGO1FBRUEsS0FBS0MsUUFBUThDLFVBQVU7QUFFckJDLHNCQUFZQyxNQUFNcEMsUUFBUUYsU0FBbUM7WUFDM0QsR0FBR0c7WUFDSFgsTUFBTTtZQUNOSCxNQUFNO1VBQ1IsQ0FBQTtBQUdBO1FBQ0Y7TUFDRjtJQUNGO0VBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFsiVGFnVHlwZSIsICJCYXNlVGFnIiwgIm5hbWUiLCAicmVhZCIsICJfc3RyZWFtIiwgIl9vcHRpb25zIiwgIkVycm9yIiwgIndyaXRlIiwgIl92YWx1ZSIsICJFbmRpYW5uZXNzIiwgIkJ5dGVUYWciLCAiTnVtYmVyIiwgInR5cGUiLCAiVGFnVHlwZSIsICJCeXRlIiwgIm5hbWUiLCAidmFsdWUiLCAidG9KU09OIiwgInZhbHVlT2YiLCAicmVhZCIsICJzdHJlYW0iLCAib3B0aW9ucyIsICJ2YXJpbnQiLCAicmVhZEludDgiLCAiRXJyb3IiLCAibGVuZ3RoIiwgInJlYWRWYXJJbnQiLCAicmVhZEludDE2IiwgIkVuZGlhbm5lc3MiLCAiTGl0dGxlIiwgImJ1ZmZlciIsICJyZWFkQnVmZmVyIiwgInRvU3RyaW5nIiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIkVuZGlhbm5lc3MiLCAiU2hvcnRUYWciLCAiTnVtYmVyIiwgInR5cGUiLCAiVGFnVHlwZSIsICJTaG9ydCIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJ0b1N0cmluZyIsICJ3cml0ZSIsICJ3cml0ZUludDgiLCAiQnVmZmVyIiwgImZyb20iLCAid3JpdGVWYXJJbnQiLCAid3JpdGVJbnQxNiIsICJ3cml0ZUJ1ZmZlciIsICJFbmRpYW5uZXNzIiwgIkludFRhZyIsICJOdW1iZXIiLCAidHlwZSIsICJUYWdUeXBlIiwgIkludCIsICJuYW1lIiwgInZhbHVlIiwgInRvSlNPTiIsICJ2YWx1ZU9mIiwgInJlYWQiLCAic3RyZWFtIiwgIm9wdGlvbnMiLCAidmFyaW50IiwgInJlYWRJbnQ4IiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJ0b1N0cmluZyIsICJyZWFkWmlnWmFnIiwgInJlYWRJbnQzMiIsICJ3cml0ZSIsICJ3cml0ZUludDgiLCAiQnVmZmVyIiwgImZyb20iLCAid3JpdGVWYXJJbnQiLCAid3JpdGVJbnQxNiIsICJ3cml0ZUJ1ZmZlciIsICJ3cml0ZVppZ1phZyIsICJ3cml0ZUludDMyIiwgIkVuZGlhbm5lc3MiLCAiTG9uZ1RhZyIsICJTdHJpbmciLCAidHlwZSIsICJUYWdUeXBlIiwgIkxvbmciLCAibmFtZSIsICJ2YWx1ZSIsICJ0b0pTT04iLCAidmFsdWVPZiIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJFcnJvciIsICJsZW5ndGgiLCAicmVhZFZhckludCIsICJyZWFkSW50MTYiLCAiRW5kaWFubmVzcyIsICJMaXR0bGUiLCAiYnVmZmVyIiwgInJlYWRCdWZmZXIiLCAidG9TdHJpbmciLCAicmVhZFppZ1pvbmciLCAicmVhZEludDY0IiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIndyaXRlWmlnWm9uZyIsICJCaWdJbnQiLCAid3JpdGVJbnQ2NCIsICJFbmRpYW5uZXNzIiwgIkZsb2F0VGFnIiwgIk51bWJlciIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiRmxvYXQiLCAibmFtZSIsICJ2YWx1ZSIsICJ0b0pTT04iLCAidmFsdWVPZiIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJFcnJvciIsICJsZW5ndGgiLCAicmVhZFZhckludCIsICJyZWFkSW50MTYiLCAiRW5kaWFubmVzcyIsICJMaXR0bGUiLCAiYnVmZmVyIiwgInJlYWRCdWZmZXIiLCAidG9TdHJpbmciLCAicmVhZEZsb2F0MzIiLCAid3JpdGUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJmcm9tIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAid3JpdGVGbG9hdDMyIiwgIkVuZGlhbm5lc3MiLCAiRG91YmxlVGFnIiwgIk51bWJlciIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiRG91YmxlIiwgIm5hbWUiLCAidmFsdWUiLCAidG9KU09OIiwgInZhbHVlT2YiLCAicmVhZCIsICJzdHJlYW0iLCAib3B0aW9ucyIsICJ2YXJpbnQiLCAicmVhZEludDgiLCAiRXJyb3IiLCAibGVuZ3RoIiwgInJlYWRWYXJJbnQiLCAicmVhZEludDE2IiwgIkVuZGlhbm5lc3MiLCAiTGl0dGxlIiwgImJ1ZmZlciIsICJyZWFkQnVmZmVyIiwgInRvU3RyaW5nIiwgInJlYWRGbG9hdDY0IiwgIndyaXRlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAiZnJvbSIsICJ3cml0ZVZhckludCIsICJ3cml0ZUludDE2IiwgIndyaXRlQnVmZmVyIiwgIndyaXRlRmxvYXQ2NCIsICJFbmRpYW5uZXNzIiwgIkJ5dGVMaXN0VGFnIiwgIkFycmF5IiwgInR5cGUiLCAiVGFnVHlwZSIsICJCeXRlTGlzdCIsICJuYW1lIiwgImVsZW1lbnRzIiwgIm1hcCIsICJjYWxsYmFja2ZuIiwgInRoaXNBcmciLCAiYXJyYXkiLCAiZnJvbSIsICJ0b0pTT04iLCAidmFsdWUiLCAidmFsdWVPZiIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJCeXRlIiwgIkVycm9yIiwgImxlbmd0aCIsICJyZWFkVmFySW50IiwgInJlYWRJbnQxNiIsICJFbmRpYW5uZXNzIiwgIkxpdHRsZSIsICJidWZmZXIiLCAicmVhZEJ1ZmZlciIsICJ0b1N0cmluZyIsICJyZWFkWmlnWmFnIiwgInJlYWRJbnQzMiIsICJ3cml0ZSIsICJ3cml0ZUludDgiLCAiQnVmZmVyIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAid3JpdGVaaWdaYWciLCAid3JpdGVJbnQzMiIsICJieXRlIiwgIkVuZGlhbm5lc3MiLCAiU3RyaW5nVGFnIiwgIlN0cmluZyIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAibmFtZSIsICJ2YWx1ZSIsICJ0b0pTT04iLCAidmFsdWVPZiIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJFcnJvciIsICJsZW5ndGgiLCAicmVhZFZhckludCIsICJyZWFkSW50MTYiLCAiRW5kaWFubmVzcyIsICJMaXR0bGUiLCAiYnVmZmVyIiwgInJlYWRCdWZmZXIiLCAidG9TdHJpbmciLCAid3JpdGUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJmcm9tIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAiRW5kaWFubmVzcyIsICJFbmRpYW5uZXNzIiwgIkNvbXBvdW5kVGFnIiwgIk1hcCIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiQ29tcG91bmQiLCAibmFtZSIsICJ0b0pTT04iLCAianNvbiIsICJrZXkiLCAidmFsdWUiLCAiZ2V0IiwgInNldCIsICJwdXNoIiwgInRhZ3MiLCAidGFnIiwgImFkZCIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJFcnJvciIsICJsZW5ndGgiLCAicmVhZFZhckludCIsICJyZWFkSW50MTYiLCAiRW5kaWFubmVzcyIsICJMaXR0bGUiLCAiYnVmZmVyIiwgInJlYWRCdWZmZXIiLCAidG9TdHJpbmciLCAiRW5kIiwgIkJ5dGUiLCAiZWxlbWVudCIsICJCeXRlVGFnIiwgIlNob3J0IiwgIlNob3J0VGFnIiwgIkludCIsICJJbnRUYWciLCAiTG9uZyIsICJMb25nVGFnIiwgIkZsb2F0IiwgIkZsb2F0VGFnIiwgIkRvdWJsZSIsICJEb3VibGVUYWciLCAiQnl0ZUxpc3QiLCAiQnl0ZUxpc3RUYWciLCAiU3RyaW5nIiwgIlN0cmluZ1RhZyIsICJMaXN0IiwgIkxpc3RUYWciLCAiY3Vyc29yQXRFbmQiLCAid3JpdGUiLCAid3JpdGVJbnQ4IiwgIkJ1ZmZlciIsICJmcm9tIiwgIndyaXRlVmFySW50IiwgIndyaXRlSW50MTYiLCAid3JpdGVCdWZmZXIiLCAiTGlzdFRhZyIsICJBcnJheSIsICJ0eXBlIiwgIlRhZ1R5cGUiLCAiTGlzdCIsICJuYW1lIiwgImVsZW1lbnRzIiwgIm1hcCIsICJjYWxsYmFja2ZuIiwgInRoaXNBcmciLCAiYXJyYXkiLCAiZnJvbSIsICJ0b0pTT04iLCAiZWxlbWVudCIsICJyZWFkIiwgInN0cmVhbSIsICJvcHRpb25zIiwgInZhcmludCIsICJyZWFkSW50OCIsICJFcnJvciIsICJsZW5ndGgiLCAicmVhZFZhckludCIsICJyZWFkSW50MTYiLCAiRW5kaWFubmVzcyIsICJMaXR0bGUiLCAiYnVmZmVyIiwgInJlYWRCdWZmZXIiLCAidG9TdHJpbmciLCAicmVhZFppZ1phZyIsICJyZWFkSW50MzIiLCAidGFnIiwgImkiLCAiQnl0ZSIsICJCeXRlVGFnIiwgInB1c2giLCAiU2hvcnQiLCAiU2hvcnRUYWciLCAiSW50IiwgIkludFRhZyIsICJMb25nIiwgIkxvbmdUYWciLCAiRmxvYXQiLCAiRmxvYXRUYWciLCAiRG91YmxlIiwgIkRvdWJsZVRhZyIsICJCeXRlTGlzdCIsICJCeXRlTGlzdFRhZyIsICJTdHJpbmciLCAiU3RyaW5nVGFnIiwgIkNvbXBvdW5kIiwgIkNvbXBvdW5kVGFnIiwgIndyaXRlIiwgInZhbHVlIiwgIndyaXRlSW50OCIsICJCdWZmZXIiLCAid3JpdGVWYXJJbnQiLCAid3JpdGVJbnQxNiIsICJ3cml0ZUJ1ZmZlciIsICJ3cml0ZVppZ1phZyIsICJ3cml0ZUludDMyIl0KfQo=
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@serenityjs/nbt",
|
|
3
3
|
"author": "Serenity",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "0.8.
|
|
5
|
+
"version": "0.8.6-beta-20250618184233",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.mjs",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"typecheck": "tsc --noEmit"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@serenityjs/internal-config": "
|
|
22
|
+
"@serenityjs/internal-config": "0.8.6-beta-20250618184233",
|
|
23
23
|
"@swc/core": "1.7.42",
|
|
24
24
|
"@types/node": "22.8.6",
|
|
25
25
|
"eslint": "9.13.0",
|
|
@@ -27,6 +27,6 @@
|
|
|
27
27
|
"typescript": "5.6.3"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@serenityjs/binarystream": "^2.7.
|
|
30
|
+
"@serenityjs/binarystream": "^2.7.1"
|
|
31
31
|
}
|
|
32
32
|
}
|