mevento 2.0.6 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/mevento.mjs +132 -33
- package/fesm2015/mevento.mjs +133 -33
- package/fesm2015/mevento.mjs.map +1 -1
- package/fesm2020/mevento.mjs +131 -32
- package/fesm2020/mevento.mjs.map +1 -1
- package/package.json +1 -1
package/esm2020/lib/mevento.mjs
CHANGED
|
@@ -178,6 +178,15 @@ class Lexer {
|
|
|
178
178
|
this._currentChar = this._source[this._position].charCodeAt(0);
|
|
179
179
|
this._col++;
|
|
180
180
|
}
|
|
181
|
+
_jump(n) {
|
|
182
|
+
this._position += n;
|
|
183
|
+
if (this._position >= this._source.length) {
|
|
184
|
+
this._currentChar = -1;
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
this._currentChar = this._source[this._position].charCodeAt(0);
|
|
188
|
+
this._col += n;
|
|
189
|
+
}
|
|
181
190
|
_pick() {
|
|
182
191
|
if (this._position + 1 >= this._source.length) {
|
|
183
192
|
return -1;
|
|
@@ -311,28 +320,62 @@ class Lexer {
|
|
|
311
320
|
const lastL = this._line;
|
|
312
321
|
while (this._currentChar !== -1) {
|
|
313
322
|
const next = String.fromCharCode(this._pick());
|
|
314
|
-
if (this._currentChar
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
'0'
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
'
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
'
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
'
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
323
|
+
if (this._currentChar == Chars.backslash) {
|
|
324
|
+
switch (next) {
|
|
325
|
+
case '\\':
|
|
326
|
+
ret += "\\";
|
|
327
|
+
break;
|
|
328
|
+
case '0':
|
|
329
|
+
ret += "\0";
|
|
330
|
+
break;
|
|
331
|
+
case 'a':
|
|
332
|
+
ret += "\a";
|
|
333
|
+
break;
|
|
334
|
+
case 'b':
|
|
335
|
+
ret += "\b";
|
|
336
|
+
break;
|
|
337
|
+
case 'f':
|
|
338
|
+
ret += "\f";
|
|
339
|
+
break;
|
|
340
|
+
case 'n':
|
|
341
|
+
ret += "\n";
|
|
342
|
+
break;
|
|
343
|
+
case 'r':
|
|
344
|
+
ret += "\r";
|
|
345
|
+
break;
|
|
346
|
+
case 't':
|
|
347
|
+
ret += "\t";
|
|
348
|
+
break;
|
|
349
|
+
case 'u':
|
|
350
|
+
ret += String.fromCharCode(Number.parseInt(this._source.substring(this._position + 2, this._position + 6), 16));
|
|
351
|
+
this._jump(4);
|
|
352
|
+
// consume 4 unicode chars
|
|
353
|
+
break;
|
|
354
|
+
case 'v':
|
|
355
|
+
ret += "\v";
|
|
356
|
+
break;
|
|
357
|
+
case 'x':
|
|
358
|
+
ret += String.fromCharCode(Number.parseInt(this._source.substring(this._position + 2, this._position + 4), 16));
|
|
359
|
+
this._jump(2);
|
|
360
|
+
break;
|
|
361
|
+
default:
|
|
362
|
+
{
|
|
363
|
+
if (String.fromCharCode(startChar) == next) {
|
|
364
|
+
ret += String.fromCharCode(startChar);
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
this._advance();
|
|
368
|
+
lastChar = this._currentChar;
|
|
369
|
+
ret += String.fromCharCode(this._currentChar);
|
|
370
|
+
this._advance();
|
|
371
|
+
continue;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
335
374
|
}
|
|
375
|
+
// scape char
|
|
376
|
+
this._jump(2);
|
|
377
|
+
lastChar = this._currentChar;
|
|
378
|
+
continue;
|
|
336
379
|
}
|
|
337
380
|
if (this._currentChar === startChar && lastChar !== Chars.backslash) {
|
|
338
381
|
// end
|
|
@@ -798,8 +841,33 @@ export class ContinueAST extends AST {
|
|
|
798
841
|
super(line, col);
|
|
799
842
|
}
|
|
800
843
|
}
|
|
844
|
+
class ListQueue {
|
|
845
|
+
constructor(capacity = Infinity) {
|
|
846
|
+
this.capacity = capacity;
|
|
847
|
+
this.storage = [];
|
|
848
|
+
}
|
|
849
|
+
push(item) {
|
|
850
|
+
if (this.size() === this.capacity) {
|
|
851
|
+
throw Error("Stack has reached max capacity, you cannot add more items");
|
|
852
|
+
}
|
|
853
|
+
this.storage.push(item);
|
|
854
|
+
}
|
|
855
|
+
pop() {
|
|
856
|
+
return this.storage.pop();
|
|
857
|
+
}
|
|
858
|
+
peek() {
|
|
859
|
+
return this.storage[this.size() - 1];
|
|
860
|
+
}
|
|
861
|
+
size() {
|
|
862
|
+
return this.storage.length;
|
|
863
|
+
}
|
|
864
|
+
get isEmpty() {
|
|
865
|
+
return this.storage.length === 0;
|
|
866
|
+
}
|
|
867
|
+
}
|
|
801
868
|
class Parser {
|
|
802
869
|
constructor(lexer) {
|
|
870
|
+
this._loopTrack = new ListQueue();
|
|
803
871
|
this.currentToken = lexer.nextToken();
|
|
804
872
|
this.lexer = lexer;
|
|
805
873
|
}
|
|
@@ -873,10 +941,32 @@ class Parser {
|
|
|
873
941
|
return this._objectExpression();
|
|
874
942
|
case TokenType.IF:
|
|
875
943
|
return this._ifStatement();
|
|
944
|
+
case TokenType.WHILE_TILL:
|
|
945
|
+
return this._whileLoop(true);
|
|
946
|
+
case TokenType.FOR_LOOP:
|
|
947
|
+
return this._forLoop(true);
|
|
948
|
+
case TokenType.BREAK:
|
|
949
|
+
return this._breakExpression();
|
|
950
|
+
case TokenType.CONTINUE:
|
|
951
|
+
return this._continueExpression();
|
|
876
952
|
default:
|
|
877
953
|
return this._variable();
|
|
878
954
|
}
|
|
879
955
|
}
|
|
956
|
+
_breakExpression() {
|
|
957
|
+
if (this._loopTrack.isEmpty) {
|
|
958
|
+
error(this.currentToken);
|
|
959
|
+
}
|
|
960
|
+
this._eat(TokenType.BREAK);
|
|
961
|
+
return new BreakAST(this.currentToken?.line, this.currentToken?.col);
|
|
962
|
+
}
|
|
963
|
+
_continueExpression() {
|
|
964
|
+
if (this._loopTrack.isEmpty) {
|
|
965
|
+
error(this.currentToken);
|
|
966
|
+
}
|
|
967
|
+
this._eat(TokenType.CONTINUE);
|
|
968
|
+
return new ContinueAST(this.currentToken?.line, this.currentToken?.col);
|
|
969
|
+
}
|
|
880
970
|
_term() {
|
|
881
971
|
let node = this._factor();
|
|
882
972
|
node = this._tryParsingFunctionCall(node);
|
|
@@ -1111,12 +1201,20 @@ class Parser {
|
|
|
1111
1201
|
}
|
|
1112
1202
|
return new IfStatementAST(test, consequent, alternate);
|
|
1113
1203
|
}
|
|
1114
|
-
|
|
1204
|
+
_pushLoop() {
|
|
1205
|
+
this._loopTrack.push(true);
|
|
1206
|
+
}
|
|
1207
|
+
_popLoop() {
|
|
1208
|
+
this._loopTrack.pop();
|
|
1209
|
+
}
|
|
1210
|
+
_whileLoop(retain = false) {
|
|
1115
1211
|
const token = this.currentToken;
|
|
1116
1212
|
this._eat(TokenType.WHILE_TILL);
|
|
1213
|
+
this._pushLoop();
|
|
1117
1214
|
const test = this._expression();
|
|
1118
1215
|
const body = this.currentToken.type === TokenType.lbrace ? this._blockStatement() : this._expression();
|
|
1119
|
-
|
|
1216
|
+
this._popLoop();
|
|
1217
|
+
return new WhileLoopStatement(test, body, token, this.currentToken, retain);
|
|
1120
1218
|
}
|
|
1121
1219
|
_forOfIdentifier() {
|
|
1122
1220
|
switch (this.currentToken.type) {
|
|
@@ -1142,9 +1240,10 @@ class Parser {
|
|
|
1142
1240
|
* }
|
|
1143
1241
|
* (seginka|for) mali kono a
|
|
1144
1242
|
*/
|
|
1145
|
-
_forLoop() {
|
|
1243
|
+
_forLoop(retain = false) {
|
|
1146
1244
|
const startToken = this.currentToken;
|
|
1147
1245
|
this._eat(TokenType.FOR_LOOP);
|
|
1246
|
+
this._pushLoop();
|
|
1148
1247
|
let forOf = [TokenType.lparen].includes(this.currentToken.type);
|
|
1149
1248
|
let node;
|
|
1150
1249
|
if (forOf) {
|
|
@@ -1180,13 +1279,15 @@ class Parser {
|
|
|
1180
1279
|
update = new LiteralAST(new Token(TokenType.numberConst, 1, this.currentToken.line, this.currentToken.col), "1");
|
|
1181
1280
|
}
|
|
1182
1281
|
const body = (this.currentToken.type === TokenType.lbrace) ? this._blockStatement() : this._expression();
|
|
1183
|
-
node = new ForLoopStatement(node, test, update, direction, body, startToken, this.currentToken);
|
|
1282
|
+
node = new ForLoopStatement(node, test, update, direction, body, startToken, this.currentToken, retain);
|
|
1283
|
+
this._popLoop();
|
|
1184
1284
|
}
|
|
1185
1285
|
else if (forOf) {
|
|
1186
1286
|
this._eat(TokenType.in);
|
|
1187
1287
|
const collection = this._expression();
|
|
1188
1288
|
const body = (this.currentToken.type === TokenType.lbrace) ? this._blockStatement() : this._expression();
|
|
1189
|
-
node = new ForOfStatement(node, collection, body, startToken, this.currentToken);
|
|
1289
|
+
node = new ForOfStatement(node, collection, body, startToken, this.currentToken, retain);
|
|
1290
|
+
this._popLoop();
|
|
1190
1291
|
}
|
|
1191
1292
|
else {
|
|
1192
1293
|
error(this.currentToken);
|
|
@@ -1196,11 +1297,9 @@ class Parser {
|
|
|
1196
1297
|
_statement() {
|
|
1197
1298
|
switch (this.currentToken.type) {
|
|
1198
1299
|
case TokenType.BREAK:
|
|
1199
|
-
this.
|
|
1200
|
-
return new BreakAST(this.currentToken?.line, this.currentToken?.col);
|
|
1300
|
+
return this._breakExpression();
|
|
1201
1301
|
case TokenType.CONTINUE:
|
|
1202
|
-
this.
|
|
1203
|
-
return new ContinueAST(this.currentToken?.line, this.currentToken?.col);
|
|
1302
|
+
return this._continueExpression();
|
|
1204
1303
|
case TokenType.RETURN:
|
|
1205
1304
|
this._eat(TokenType.RETURN);
|
|
1206
1305
|
return this._return();
|
|
@@ -1648,7 +1747,7 @@ export class MEvento extends NodeVisitor {
|
|
|
1648
1747
|
this.pushScope("ForLoopStatement");
|
|
1649
1748
|
const initialValue = this.visit(node.init.init);
|
|
1650
1749
|
this.changeVariable(loopIdentifier.value, initialValue);
|
|
1651
|
-
retainer?.push(initialValue)
|
|
1750
|
+
// retainer?.push(initialValue)
|
|
1652
1751
|
const test = () => {
|
|
1653
1752
|
const ret = this.visit(node.test);
|
|
1654
1753
|
if (isNum(ret)) {
|
|
@@ -2056,7 +2155,7 @@ export class MEventoAsync extends MEvento {
|
|
|
2056
2155
|
this.pushScope("ForLoopStatement");
|
|
2057
2156
|
const initialValue = await this.visit(node.init.init);
|
|
2058
2157
|
this.changeVariable(loopIdentifier.value, initialValue);
|
|
2059
|
-
retainer?.push(initialValue)
|
|
2158
|
+
// retainer?.push(initialValue)
|
|
2060
2159
|
const test = async () => {
|
|
2061
2160
|
const ret = await this.visit(node.test);
|
|
2062
2161
|
if (isNum(ret)) {
|
|
@@ -2162,4 +2261,4 @@ export class MEventoAsync extends MEvento {
|
|
|
2162
2261
|
return ret;
|
|
2163
2262
|
}
|
|
2164
2263
|
}
|
|
2165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV2ZW50by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldmVudG8vc3JjL2xpYi9tZXZlbnRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLFNBQVMsS0FBSyxDQUFDLEtBQVksRUFBRSxRQUFvQjtJQUM3QyxNQUFNLElBQUksR0FDTixpQkFBaUIsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxRQUFRLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ3RJLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFDRCxTQUFTLEtBQUssQ0FBQyxLQUFVO0lBQ3JCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxTQUFTLFNBQVMsQ0FBQyxLQUFVO0lBQ3pCLE9BQU8sT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQ3RDLENBQUM7QUFDRCxTQUFTLFFBQVEsQ0FBQyxLQUFVO0lBQ3hCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxTQUFTLFVBQVUsQ0FBQyxJQUFTO0lBQ3pCLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSTtRQUNqQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbkQsQ0FBQztBQUFB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LElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN4RDtnQkFDRCxPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN4RDtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFO2dCQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFO29CQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUMzRDtnQkFDRCxPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN4RDtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFO29CQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUMxRDtnQkFDRCxPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN2RDtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsU0FBUyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsUUFBUSxFQUFF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SyxHQUFHLEtBQUssRUFBRSxLQUE0QjtRQUNqRixNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksS0FBSyxFQUFFO1lBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sQ0FBVSxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBR1EsS0FBSztRQUNWLElBQUksR0FBRyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0IsR0FBRyxDQUFDLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN4RCxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxuZnVuY3Rpb24gZXJyb3IodG9rZW46IFRva2VuLCBleHBlY3RlZD86IFRva2VuVHlwZSkge1xuICAgIGNvbnN0IHRleHQgPVxuICAgICAgICBgSW52YWxpZCB0b2tlbiAke3Rva2VuLnR5cGV9WyR7dG9rZW4udmFsdWV9XSBhdCAke3Rva2VuLmxpbmV9LCAke3Rva2VuLmNvbH0gJHtleHBlY3RlZCA/IGA6IGV4cGVjdGluZyAke2V4cGVjdGVkfSB0b2tlbmAgOiAnJ31cXG5gO1xuICAgIHRocm93IEVycm9yKHRleHQpO1xufVxuZnVuY3Rpb24gaXNOdW0odmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xufVxuZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG59XG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5mdW5jdGlvbiBfYm9vbFZhbHVlKHRlc3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGVzdCA9PT0gbnVsbCB8fFxuICAgICAgICAoaXNOdW0odGVzdCkgJiYgdGVzdCA9PT0gMCkgfHxcbiAgICAgICAgKGlzU3RyaW5nKHRlc3QpICYmIHRlc3QubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAoaXNCb29sZWFuKHRlc3QpICYmICF0ZXN0KSkgPyBmYWxzZSA6IHRydWU7XG59O1xuXG5mdW5jdGlvbiBoYXNoQ29kZShzdHI6IHN0cmluZykge1xuICAgIGxldCBoYXNoID0gMDtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGNocjtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGhhc2g7XG4gICAgZm9yIChpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjaHIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hyO1xuICAgICAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICAgIH1cbiAgICByZXR1cm4gaGFzaDtcbn07XG5leHBvcnQgY2xhc3MgVG9rZW5UeXBlIHtcbiAgICBzdGF0aWMgaWQgPSAwO1xuICAgIHN0YXRpYyBjb21tYSA9IDE7XG4gICAgc3RhdGljIHNlbWkgPSAyO1xuICAgIHN0YXRpYyBudW1iZXJDb25zdCA9IDM7XG4gICAgc3RhdGljIHN0cmluZ0NvbnN0ID0gNDtcbiAgICBzdGF0aWMgZXF1YWwgPSA1O1xuICAgIHN0YXRpYyBscGFyZW4gPSA2XG4gICAgc3RhdGljIHJwYXJlbiA9IDc7XG4gICAgc3RhdGljIGVvbCA9IDg7XG4gICAgc3RhdGljIGVvZiA9IDk7XG4gICAgc3RhdGljIGxicmFjZSA9IDEwO1xuICAgIHN0YXRpYyByYnJhY2UgPSAxMTtcbiAgICBzdGF0aWMgbGJyYWNrZXQgPSAxMjtcbiAgICBzdGF0aWMgcmJyYWNrZXQgPSAxMztcbiAgICBzdGF0aWMgZ3JlYXQgPSAxNDtcbiAgICBzdGF0aWMgZ3JlYXRFcSA9IDE1O1xuICAgIHN0YXRpYyBsZXNzID0gMTY7XG4gICAgc3RhdGljIGxlc3NFcSA9IDE3O1xuICAgIHN0YXRpYyBlcWVxID0gMTg7XG4gICAgc3RhdGljIElGID0gMTk7XG4gICAgc3RhdGljIEVMU0UgPSAyMDtcbiAgICBzdGF0aWMgVFJVRSA9IDIxO1xuICAgIHN0YXRpYyBGQUxTRSA9IDIyO1xuICAgIHN0YXRpYyBOVUxMID0gMjM7XG4gICAgc3RhdGljIG5vdCA9IDI0O1xuICAgIHN0YXRpYyBub3RFcSA9IDI1O1xuICAgIHN0YXRpYyBhbmQgPSAyNjtcbiAgICBzdGF0aWMgb3IgPSAyNztcbiAgICBzdGF0aWMgcGx1cyA9IDI4O1xuICAgIHN0YXRpYyBtaW51cyA9IDI5O1xuICAgIHN0YXRpYyBkaXYgPSAzMDtcbiAgICBzdGF0aWMgbXVsdCA9IDMxO1xuICAgIHN0YXRpYyBtb2QgPSAzMjtcbiAgICBzdGF0aWMgaW52YWxpZCA9IDMzO1xuICAgIHN0YXRpYyBjb2xvbiA9IDM0O1xuICAgIHN0YXRpYyBXSElMRV9USUxMID0gMzU7XG4gICAgc3RhdGljIEZPUl9MT09QID0gMzY7XG4gICAgc3RhdGljIHVwID0gMzc7XG4gICAgc3RhdGljIGRvd24gPSAzODtcbiAgICBzdGF0aWMgd2l0aCA9IDM5O1xuICAgIHN0YXRpYyBpbiA9IDQwO1xuICAgIHN0YXRpYyBUSUxMID0gNDE7XG4gICAgc3RhdGljIEJSRUFLID0gNDI7XG4gICAgc3RhdGljIENPTlRJTlVFID0gNDM7XG4gICAgc3RhdGljIG51bGxpdHkgPSA0NDtcbiAgICBzdGF0aWMgUkVUVVJOID0gNDU7XG59XG5cbmV4cG9ydCBjbGFzcyBUb2tlbiB7XG4gICAgdHlwZTogbnVtYmVyO1xuICAgIHZhbHVlOiBhbnk7XG4gICAgbGluZT86IG51bWJlcjtcbiAgICBjb2w/OiBudW1iZXI7XG4gICAgY29uc3RydWN0b3IodHlwZTogbnVtYmVyLCB2YWx1ZTogYW55LCBsaW5lOiBudW1iZXIgPSAxLCBjb2w6IG51bWJlciA9IDEpIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgICAgICB0aGlzLmNvbCA9IGNvbDtcbiAgICB9XG4gICAgc3RhdGljIGZyb20odHlwZTogbnVtYmVyLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4odHlwZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgWyR7dGhpcy50eXBlLnRvU3RyaW5nKCl9LCAke3RoaXMudmFsdWV9XWA7XG4gICAgfVxufVxuXG5cbmNsYXNzIENoYXJzIHtcbiAgICBzdGF0aWMgZXF1YWwgPSAnPScuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgY29tbWEgPSAnLCcuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgc2VtaUNvbG9uID0gJzsnLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIGxwYXJlbiA9ICcoJy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBycGFyZW4gPSAnKScuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgYmFja3NsYXNoID0gJ1xcXFwnLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHF1b3RlID0gJ1wiJy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBzcXVvdGUgPSBcIidcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBwbHVzID0gXCIrXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbWludXMgPSBcIi1cIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBzdGFyID0gXCIqXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgc2xhc2ggPSBcIi9cIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBwZXJjZW50ID0gXCIlXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbGJyYWNlID0gXCJ7XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgcmJyYWNlID0gXCJ9XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbGJyYWNrZXQgPSBcIltcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyByYnJhY2tldCA9IFwiXVwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIG5vdCA9IFwiIVwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIGdyZWF0ID0gXCI+XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbGVzcyA9IFwiPFwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIGFuZCA9IFwiJlwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHBpcGUgPSBcInxcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBjb2xvbiA9IFwiOlwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHF1ZXN0aW9uTWFyayA9IFwiP1wiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHNoZWJhbmcgPSBcIiNcIi5jaGFyQ29kZUF0KDApO1xufVxuXG5leHBvcnQgY2xhc3MgTGV4ZXJEaWN0aW9uYXJ5IHtcbiAgICBsYW5nOiBzdHJpbmc7XG4gICAga2V5d29yZHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBjb25zdHJ1Y3RvcihsYW5nOiBzdHJpbmcsIGtleXdvcmRzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgICAgIHRoaXMua2V5d29yZHMgPSB7IC4uLmtleXdvcmRzIH07XG4gICAgICAgIHRoaXMubGFuZyA9IGxhbmc7XG4gICAgfVxufVxuXG4vKipcbiAqIExleGluZyA9PiBQYXJzaW5nID09PT4gQVNUID09PT4gV2Fsa2luZ1xuICovXG4vKipcbiAqIExleGVyXG4gKi9cbmNsYXNzIExleGVyIHtcbiAgICBzdGF0aWMgX2RlZmF1bHRMYW5ndWFnZSA9IG5ldyBMZXhlckRpY3Rpb25hcnkoXCJlblwiLCB7XG4gICAgICAgIFwiaWZcIjogXCJpZlwiLFxuICAgICAgICBcImVsc2VcIjogXCJlbHNlXCIsXG4gICAgICAgIFwidHJ1ZVwiOiBcInRydWVcIixcbiAgICAgICAgXCJmYWxzZVwiOiBcImZhbHNlXCIsXG4gICAgICAgIFwibnVsbFwiOiBcIm51bGxcIixcbiAgICAgICAgXCJ3aGlsZVwiOiBcIndoaWxlXCIsXG4gICAgICAgIFwiZm9yXCI6IFwiZm9yXCIsXG4gICAgICAgIFwid2l0aFwiOiBcIndpdGhcIixcbiAgICAgICAgXCJ1cFwiOiBcInVwXCIsXG4gICAgICAgIFwiZG93blwiOiBcImRvd25cIixcbiAgICAgICAgXCJ0aWxsXCI6IFwidGlsbFwiLFxuICAgICAgICBcImluXCI6IFwiaW5cIixcbiAgICAgICAgXCJicmVha1wiOiBcImJyZWFrXCIsXG4gICAgICAgIFwiY29udGludWVcIjogXCJjb250aW51ZVwiLFxuICAgICAgICBcInJldHVyblwiOiBcInJldHVyblwiLFxuICAgIH0pO1xuICAgIHN0YXRpYyBsYW5ndWFnZXM6IExleGVyRGljdGlvbmFyeVtdID0gW1xuICAgICAgICBMZXhlci5fZGVmYXVsdExhbmd1YWdlLFxuICAgICAgICBuZXcgTGV4ZXJEaWN0aW9uYXJ5KFwiZnJcIiwge1xuICAgICAgICAgICAgXCJzaVwiOiBcImlmXCIsXG4gICAgICAgICAgICBcInNpbm9uXCI6IFwiZWxzZVwiLFxuICAgICAgICAgICAgXCJ2cmFpXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgXCJmYXV4XCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgIFwibnVsXCI6IFwibnVsbFwiLFxuICAgICAgICAgICAgXCJ0YW5xdWVcIjogXCJ3aGlsZVwiLFxuICAgICAgICAgICAgXCJwb3VyXCI6IFwiZm9yXCIsXG4gICAgICAgICAgICBcImF2ZWNcIjogXCJ3aXRoXCIsXG4gICAgICAgICAgICBcIm1vbnRcIjogXCJ1cFwiLFxuICAgICAgICAgICAgXCJkZXNjXCI6IFwiZG93blwiLFxuICAgICAgICAgICAgXCJqdXNxdWFcIjogXCJ0aWxsXCIsXG4gICAgICAgICAgICBcImRhbnNcIjogXCJpblwiLFxuICAgICAgICAgICAgXCJjb3VwZXJcIjogXCJicmVha1wiLFxuICAgICAgICAgICAgXCJjb250aW51ZXJcIjogXCJjb250aW51ZVwiLFxuICAgICAgICAgICAgXCJyZXR1cm5lclwiOiBcInJldHVyblwiLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IExleGVyRGljdGlvbmFyeShcImJtXCIsIHtcbiAgICAgICAgICAgIFwibmlpXCI6IFwiaWZcIixcbiAgICAgICAgICAgIFwibm90ZVwiOiBcImVsc2VcIixcbiAgICAgICAgICAgIFwidGllblwiOiBcInRydWVcIixcbiAgICAgICAgICAgIFwiZ2Fsb25cIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgXCJnYW5zYW5cIjogXCJudWxsXCIsXG4gICAgICAgICAgICBcImZvb1wiOiBcIndoaWxlXCIsXG4gICAgICAgICAgICBcInNlZ2lua2FcIjogXCJmb3JcIixcbiAgICAgICAgICAgIFwibmlpblwiOiBcIndpdGhcIixcbiAgICAgICAgICAgIFwia2F5XCI6IFwidXBcIixcbiAgICAgICAgICAgIFwia2FqXCI6IFwiZG93blwiLFxuICAgICAgICAgICAgXCJrYXRhXCI6IFwidGlsbFwiLFxuICAgICAgICAgICAgXCJrb25vXCI6IFwiaW5cIixcbiAgICAgICAgICAgIFwidGlrZVwiOiBcImJyZWFrXCIsXG4gICAgICAgICAgICBcImlwYW5cIjogXCJjb250aW51ZVwiLFxuICAgICAgICAgICAgXCJzZWdpblwiOiBcInJldHVyblwiLFxuICAgICAgICB9KSxcbiAgICBdO1xuICAgIHN0YXRpYyBSRVNFUlZFRDogeyBba2V5OiBzdHJpbmddOiBUb2tlbiB9ID0ge1xuICAgICAgICBcImlmXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLklGLCBcImlmXCIpLFxuICAgICAgICBcImVsc2VcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuRUxTRSwgXCJlbHNlXCIpLFxuICAgICAgICBcInRydWVcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuVFJVRSwgdHJ1ZSksXG4gICAgICAgIFwiZmFsc2VcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuRkFMU0UsIGZhbHNlKSxcbiAgICAgICAgXCJudWxsXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLk5VTEwsIG51bGwpLFxuICAgICAgICBcImZvclwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5GT1JfTE9PUCwgXCJmb3JcIiksXG4gICAgICAgIFwid2hpbGVcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuV0hJTEVfVElMTCwgXCJ3aGlsZVwiKSxcbiAgICAgICAgXCJ3aXRoXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLndpdGgsIFwid2l0aFwiKSxcbiAgICAgICAgXCJ1cFwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS51cCwgXCJ1cFwiKSxcbiAgICAgICAgXCJkb3duXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLmRvd24sIFwiZG93blwiKSxcbiAgICAgICAgXCJ0aWxsXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLlRJTEwsIFwidGlsbFwiKSxcbiAgICAgICAgXCJpblwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5pbiwgXCJpblwiKSxcbiAgICAgICAgXCJicmVha1wiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5CUkVBSywgXCJicmVha1wiKSxcbiAgICAgICAgXCJjb250aW51ZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5DT05USU5VRSwgXCJjb250aW51ZVwiKSxcbiAgICAgICAgXCJyZXR1cm5cIjogVG9rZW4uZnJvbShUb2tlblR5cGUuUkVUVVJOLCBcInJldHVyblwiKSxcbiAgICB9O1xuICAgIF9sYW5ndWFnZT86IExleGVyRGljdGlvbmFyeTtcbiAgICBfc291cmNlITogc3RyaW5nO1xuICAgIF9wb3NpdGlvbiA9IDA7XG4gICAgX2xpbmUgPSAxO1xuICAgIF9jb2wgPSAxO1xuICAgIF9jdXJyZW50Q2hhciA9IC0xO1xuICAgIGdldCBzb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgdGhpcy5fY3VycmVudENoYXIgPSB0aGlzLl9zb3VyY2VbdGhpcy5fcG9zaXRpb25dLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVMYW5ndWFnZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9yZXNvbHZlTGFuZ3VhZ2UoKSB7XG4gICAgICAgIGxldCB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUubGVzcykge1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2Ugc2V0dGluZ1xuICAgICAgICAgICAgY29uc3QgaWRUb2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgICBpZiAoaWRUb2tlbi50eXBlICE9PSBUb2tlblR5cGUuaWQpIHtcbiAgICAgICAgICAgICAgICBlcnJvcih0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYW5nID0gaWRUb2tlbi52YWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgdGhpcy5fbGFuZ3VhZ2UgPSBMZXhlci5sYW5ndWFnZXMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5sYW5nID09PSBsYW5nKSA/PyBMZXhlci5fZGVmYXVsdExhbmd1YWdlO1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuVHlwZS5ncmVhdCkge1xuICAgICAgICAgICAgICAgIGVycm9yKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xhbmd1YWdlID0gTGV4ZXIuX2RlZmF1bHRMYW5ndWFnZTtcbiAgICAgICAgICAgIC8vIHJlc2V0IHJlYWRpbmdcbiAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gMDtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDaGFyID0gdGhpcy5fc291cmNlW3RoaXMuX3Bvc2l0aW9uXS5jaGFyQ29kZUF0KDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYWR2YW5jZSgpIHtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24rKztcbiAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9uID49IHRoaXMuX3NvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDaGFyID0gLTE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3VycmVudENoYXIgPSB0aGlzLl9zb3VyY2VbdGhpcy5fcG9zaXRpb25dLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIHRoaXMuX2NvbCsrO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BpY2soKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9uICsgMSA+PSB0aGlzLl9zb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZVt0aGlzLl9wb3NpdGlvbiArIDFdLmNoYXJDb2RlQXQoMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNJZChjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGNvZGUgPCA0OCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvZGUgPT09IDM2O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgNTgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgNjUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDkxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDk3KSB7XG4gICAgICAgICAgICByZXR1cm4gY29kZSA9PT0gOTU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUgPCAxMjMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0lkU3RhcnQoY29kZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChjb2RlIDwgNjUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlID09PSAzNjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDkxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDk3KSB7XG4gICAgICAgICAgICByZXR1cm4gY29kZSA9PT0gOTU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUgPCAxMjMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pZCgpOiBUb2tlbiB7XG4gICAgICAgIGxldCByZXQgPSBcIlwiO1xuICAgICAgICBjb25zdCBsYXN0QyA9IHRoaXMuX2NvbDtcbiAgICAgICAgY29uc3QgbGFzdFAgPSB0aGlzLl9wb3NpdGlvbjtcbiAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuX2xpbmU7XG4gICAgICAgIHdoaWxlICh0aGlzLl9pc0lkKHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRJZCA9IHRoaXMuX2xhbmd1YWdlXG4gICAgICAgICAgICA/ICh0aGlzLl9sYW5ndWFnZS5rZXl3b3Jkc1tyZXRdKSA/PyByZXRcbiAgICAgICAgICAgIDogcmV0O1xuICAgICAgICByZXR1cm4gTGV4ZXIuUkVTRVJWRURbdHJhbnNsYXRlZElkXSA/PyBuZXcgVG9rZW4oVG9rZW5UeXBlLmlkLCByZXQsIGxpbmUsIGxhc3RDKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0xpbmVFbmQoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjID09PSAxMCB8fFxuICAgICAgICAgICAgYyA9PT0gMTMgfHxcbiAgICAgICAgICAgIFsnXFxuJywgJ1xccicsICdcXHUyMDI4JywgJ1xcdTIwMjknXS5pbmNsdWRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc1doaXRlU3BhY2UoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBbJyAnLCAnXFx0J10uaW5jbHVkZXMoU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNEaWdpdChjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgcmV0dXJuIGMgPiAwICYmIChjIF4gMHgzMCkgPD0gOTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc2tpcFdoaXRlU3BhY2UoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLl9pc1doaXRlU3BhY2UodGhpcy5fY3VycmVudENoYXIpID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9udW1iZXIoKTogVG9rZW4ge1xuICAgICAgICBsZXQgcmV0ID0gXCJcIjtcbiAgICAgICAgY29uc3QgbGFzdEMgPSB0aGlzLl9jb2w7XG4gICAgICAgIGNvbnN0IGxhc3RQID0gdGhpcy5fcG9zaXRpb247XG4gICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLl9saW5lO1xuICAgICAgICBjb25zdCBmaXJzdCA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgIGNvbnN0IGJjID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgIGxldCBiYXNlID0gMTA7XG4gICAgICAgIGlmIChmaXJzdCA9PT0gJzAnICYmIFsnYicsICdCJywgJ3gnLCAnWCcsICdvJywgJ08nXS5pbmNsdWRlcyhiYykpIHtcbiAgICAgICAgICAgIC8vIGxvb2sgYWhlYWQgdG8gc2VlIHRoYXQgdGhlIG51bWJlciBpcyB0YWdnZWRcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoYmMudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2InOlxuICAgICAgICAgICAgICAgICAgICBiYXNlID0gMjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxNjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0ICs9IGZpcnN0O1xuICAgICAgICAgICAgYmFzZSA9IDEwO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLl9pc0RpZ2l0KHRoaXMuX2N1cnJlbnRDaGFyKSB8fFxuICAgICAgICAgICAgKGJhc2UgPT09IDE2ICYmXG4gICAgICAgICAgICAgICAgWydBJywgJ2EnLCAnQicsICdiJywgJ0MnLCAnYycsICdEJywgJ2QnLCAnRScsICdlJywgJ0YnLCAnZiddXG4gICAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKSkpKSB7XG4gICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpID09PSAnLicgJiYgdGhpcy5faXNEaWdpdCh0aGlzLl9waWNrKCkpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoYmFzZSAhPT0gMTApIHtcbiAgICAgICAgICAgICAgICBlcnJvcihuZXcgVG9rZW4oVG9rZW5UeXBlLmlkLCBiYywgbGluZSwgbGFzdFApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZsb2F0aW5nIG51bWJlclxuICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMuX2lzRGlnaXQodGhpcy5fY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLm51bWJlckNvbnN0LCBwYXJzZUZsb2F0KHJldCksIGxpbmUsIGxhc3RDKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFRva2VuKFxuICAgICAgICAgICAgVG9rZW5UeXBlLm51bWJlckNvbnN0LCBwYXJzZUludChyZXQsIGJhc2UpLCBsaW5lLCBsYXN0Qyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbGl0ZXJhbFN0cmluZyhzdGFydENoYXI6IG51bWJlcik6IFRva2VuIHtcbiAgICAgICAgbGV0IHJldCA9IFwiXCI7XG4gICAgICAgIGxldCBsYXN0Q2hhciA9IC0xO1xuICAgICAgICBjb25zdCBsYXN0UCA9IHRoaXMuX3Bvc2l0aW9uO1xuICAgICAgICBjb25zdCBsYXN0QyA9IHRoaXMuX2NvbDtcbiAgICAgICAgY29uc3QgbGFzdEwgPSB0aGlzLl9saW5lO1xuICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudENoYXIgIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9waWNrKCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5iYWNrc2xhc2gpIHtcbiAgICAgICAgICAgICAgICAvLyBzY2FwZSBjaGFyXG4gICAgICAgICAgICAgICAgaWYgKFtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDaGFyLFxuICAgICAgICAgICAgICAgICAgICAnXFxcXCcsXG4gICAgICAgICAgICAgICAgICAgICcwJyxcbiAgICAgICAgICAgICAgICAgICAgJ2EnLFxuICAgICAgICAgICAgICAgICAgICAnYicsXG4gICAgICAgICAgICAgICAgICAgICdlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2YnLFxuICAgICAgICAgICAgICAgICAgICAnbicsXG4gICAgICAgICAgICAgICAgICAgICdyJyxcbiAgICAgICAgICAgICAgICAgICAgJ3QnLFxuICAgICAgICAgICAgICAgICAgICAndScsXG4gICAgICAgICAgICAgICAgICAgICdVJyxcbiAgICAgICAgICAgICAgICAgICAgJ3YnLFxuICAgICAgICAgICAgICAgICAgICAneCdcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKG5leHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID0gdGhpcy5fY3VycmVudENoYXI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBzdGFydENoYXIgJiYgbGFzdENoYXIgIT09IENoYXJzLmJhY2tzbGFzaCkge1xuICAgICAgICAgICAgICAgIC8vIGVuZFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgICAgICBsYXN0Q2hhciA9IHRoaXMuX2N1cnJlbnRDaGFyO1xuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLnN0cmluZ0NvbnN0LCByZXQsIGxhc3RMLCBsYXN0Qyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2tpcExpbmVDb21tZW50KCkge1xuICAgICAgICB3aGlsZSAoIXRoaXMuX2lzTGluZUVuZCh0aGlzLl9jdXJyZW50Q2hhcikgPT09IHRydWUgJiYgdGhpcy5fY3VycmVudENoYXIgIT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF9za2lwQ29tbWVudCgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRDaGFyICE9PSAtMSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5zdGFyICYmIHRoaXMuX3BpY2soKSA9PT0gQ2hhcnMuc2hlYmFuZykge1xuICAgICAgICAgICAgICAgIC8vIGVuZCBvZiBibG9jayBjb21tZW50XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBmPVNVQk1JVF9GT1JNKHh4eCk7XG4gICAgLy8gciA9IENBTExfQVBJKEFQSV9JRCwgZik7XG4gICAgLy8gRElTUExBWShcIk1TRyAjclwiKVxuICAgIG5leHRUb2tlbigpOiBUb2tlbiB7XG4gICAgICAgIGNvbnN0IGxhc3RMID0gdGhpcy5fbGluZTtcbiAgICAgICAgY29uc3QgbGFzdEMgPSB0aGlzLl9jb2w7XG4gICAgICAgIGNvbnN0IGxhc3RQID0gdGhpcy5fcG9zaXRpb247XG5cbiAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRDaGFyICE9PSAtMSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTGluZUVuZCh0aGlzLl9jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9saW5lKys7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sID0gMTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZW9sLCBcIlxcblwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5faXNXaGl0ZVNwYWNlKHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NraXBXaGl0ZVNwYWNlKCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT0gQ2hhcnMuc2hlYmFuZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnN0YXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbXV0bGkgYmxvY2sgY29tbWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NraXBDb21tZW50KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2tpcExpbmVDb21tZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzRGlnaXQodGhpcy5fY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzSWRTdGFydCh0aGlzLl9jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuZXF1YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5lcXVhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmVxZXEsIFwiPT1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZXF1YWwsIFwiPVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5ncmVhdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmVxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZ3JlYXRFcSwgXCI+PVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5ncmVhdCwgXCI+XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmxlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5lcXVhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmxlc3NFcSwgXCI8PVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5sZXNzLCBcIjxcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuc2VtaUNvbG9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLnNlbWksIFwiO1wiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5scGFyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubHBhcmVuLCBcIihcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucnBhcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLnJwYXJlbiwgXCIpXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmNvbW1hKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmNvbW1hLCBcIixcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMubGJyYWNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmxicmFjZSwgXCJ7XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnJicmFjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5yYnJhY2UsIFwifVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5sYnJhY2tldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5sYnJhY2tldCwgXCJbXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnJicmFja2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLnJicmFja2V0LCBcIl1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucGx1cykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5wbHVzLCBcIitcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMubWludXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubWludXMsIFwiLVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5zbGFzaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5kaXYsIFwiL1wiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5zdGFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLm11bHQsIFwiKlwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5wZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLm1vZCwgXCIlXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmNvbG9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmNvbG9uLCBcIjpcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMubm90KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuZXF1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5ub3RFcSwgXCIhPVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5ub3QsIFwiIVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5hbmQgJiYgdGhpcy5fcGljaygpID09PSBDaGFycy5hbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmFuZCwgXCImJlwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5waXBlICYmIHRoaXMuX3BpY2soKSA9PT0gQ2hhcnMucGlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUub3IsICd8fCcsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnF1ZXN0aW9uTWFyayAmJiB0aGlzLl9waWNrKCkgPT09IENoYXJzLnF1ZXN0aW9uTWFyaykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubnVsbGl0eSwgJz8/JywgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucXVvdGUgfHwgdGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnNxdW90ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2hhciA9IHRoaXMuX2N1cnJlbnRDaGFyO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5fbGl0ZXJhbFN0cmluZyhzdGFydENoYXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXG4gICAgICAgICAgICAgICAgVG9rZW5UeXBlLmludmFsaWQsIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmVvZiwgXCJcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICB9XG59XG5cblxuLyoqXG4gKiBQYXJzZXJcbiAqL1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQVNUIHtcbiAgICBsaW5lPzogbnVtYmVyO1xuICAgIGNvbD86IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcihsaW5lPzogbnVtYmVyLCBjb2w/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5saW5lID0gbGluZTtcbiAgICAgICAgdGhpcy5jb2wgPSBjb2w7XG4gICAgfVxuICAgIGR1bXAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSb290QVNUIGV4dGVuZHMgQVNUIHtcbiAgICBib2R5OiBBU1RbXTtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoYm9keTogQVNUW10sIG5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoMSwgMSk7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGR1bXAoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGJ1aWxkZXIgPSBgTW9kdWxlICR7dGhpcy5uYW1lfSBTdGFydCB7YDtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiB0aGlzLmJvZHkpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIgKz0gYCR7aXQuZHVtcCgpfVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRlciArPSBcIn1cIjtcbiAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTdGF0ZW1lbnRBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGJvZHk6IEFTVFtdO1xuICAgIGNvbnN0cnVjdG9yKGJvZHk6IEFTVFtdLCB0b2tlbjogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIodG9rZW4ubGluZSwgdG9rZW4uY29sKTtcbiAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB7XFxuJHt0aGlzLmJvZHkubWFwKChlKSA9PiBlLnRvU3RyaW5nKCkpLmpvaW4oXCJcXG5cIil9fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWRlbnRpZmllckFTVCBleHRlbmRzIEFTVCB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBjb25zdHJ1Y3Rvcih0b2tlbjogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIodG9rZW4ubGluZSwgdG9rZW4uY29sKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRva2VuLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpdGVyYWxBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIHZhbHVlOiBhbnk7XG4gICAgcmF3OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IodG9rZW46IFRva2VuLCByYXc6IHN0cmluZykge1xuICAgICAgICBzdXBlcih0b2tlbi5saW5lLCB0b2tlbi5jb2wpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgIHRoaXMucmF3ID0gcmF3O1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBpZGVudGlmaWVyOiBBU1Q7XG4gICAgaW5pdDogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGlkZW50aWZpZXI6IEFTVCwgaW5pdDogQVNUKSB7XG4gICAgICAgIHN1cGVyKGlkZW50aWZpZXIubGluZSwgaWRlbnRpZmllci5jb2wpO1xuICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgICAgICB0aGlzLmluaXQgPSBpbml0O1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5pZGVudGlmaWVyfSA9ICR7dGhpcy5pbml0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblN0YXRlbWVudEFTVCBleHRlbmRzIEFTVCB7XG4gICAgZXhwcmVzc2lvbjogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IEFTVCkge1xuICAgICAgICBzdXBlcihleHByZXNzaW9uLmxpbmUsIGV4cHJlc3Npb24uY29sKTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi50b1N0cmluZygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbGxFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBjYWxsZWU6IElkZW50aWZpZXJBU1Q7XG4gICAgYXJndW1lbnRzOiBBU1RbXTtcbiAgICBjb25zdHJ1Y3RvcihjYWxsZWU6IElkZW50aWZpZXJBU1QsIGFnczogQVNUW10pIHtcbiAgICAgICAgc3VwZXIoY2FsbGVlLmxpbmUsIGNhbGxlZS5jb2wpO1xuICAgICAgICB0aGlzLmNhbGxlZSA9IGNhbGxlZTtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMgPSBhZ3M7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNhbGxlZS50b1N0cmluZygpfSguLi4ke3RoaXMuYXJndW1lbnRzLmxlbmd0aH0pYDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5hcnlFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBsZWZ0OiBBU1Q7XG4gICAgb3BlcmF0aW9uOiBUb2tlbjtcbiAgICByaWdodDogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGxlZnQ6IEFTVCwgb3BlcmF0aW9uOiBUb2tlbiwgcmlnaHQ6IEFTVCkge1xuICAgICAgICBzdXBlcihsZWZ0LmxpbmUsIGxlZnQuY29sKTtcbiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGVmdH0gJHt0aGlzLm9wZXJhdGlvbn0gJHt0aGlzLnJpZ2h0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hcnlFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBvcGVyYXRpb246IFRva2VuO1xuICAgIGFyZ3VtZW50OiBBU1Q7XG4gICAgY29uc3RydWN0b3Iob3BlcmF0aW9uOiBUb2tlbiwgYXJndW1lbnQ6IEFTVCkge1xuICAgICAgICBzdXBlcihvcGVyYXRpb24ubGluZSwgb3BlcmF0aW9uLmNvbCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uLCB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm9wZXJhdGlvbn0gJHt0aGlzLmFyZ3VtZW50fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWZTdGF0ZW1lbnRBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIHRlc3Q6IEFTVDtcbiAgICBjb25zZXF1ZW50OiBBU1Q7XG4gICAgYWx0ZXJuYXRlPzogQVNUO1xuICAgIGNvbnN0cnVjdG9yKHRlc3Q6IEFTVCwgY29uc2VxdWVudDogQVNULCBhbHRlcm5hdGU/OiBBU1QpIHtcbiAgICAgICAgc3VwZXIodGVzdC5saW5lLCB0ZXN0LmNvbCk7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7XG4gICAgICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgaWYgJHt0aGlzLnRlc3R9ICR7dGhpcy5jb25zZXF1ZW50fSAke3RoaXMuYWx0ZXJuYXRlID8gYGVsc2UgJHt0aGlzLmFsdGVybmF0ZX0gYCA6ICcnfWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9naWNhbEV4cHJlc3Npb25BU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGxlZnQ6IEFTVDtcbiAgICBvcGVyYXRvcjogVG9rZW47XG4gICAgcmlnaHQ6IEFTVDtcbiAgICBjb25zdHJ1Y3RvcihsZWZ0OiBBU1QsIG9wZXJhdG9yOiBUb2tlbiwgcmlnaHQ6IEFTVCkge1xuICAgICAgICBzdXBlcihsZWZ0LmxpbmUsIGxlZnQuY29sKTtcbiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxlZnR9ICR7dGhpcy5vcGVyYXRvci52YWx1ZX0gJHt0aGlzLnJpZ2h0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5kZXhBY2Nlc3NvckFTVCBleHRlbmRzIEFTVCB7XG4gICAgb3duZXI6IEFTVDtcbiAgICBrZXk6IEFTVDtcbiAgICBjb21wdXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKG93bmVyOiBBU1QsIGtleTogQVNULCBjb21wdXRlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKG93bmVyLmxpbmUsIG93bmVyLmNvbCk7XG4gICAgICAgIHRoaXMub3duZXIgPSBvd25lcjtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuY29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMub3duZXJ9WyR7dGhpcy5rZXl9XWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT2JqZWN0RXhwcmVzc2lvbiBleHRlbmRzIEFTVCB7XG4gICAgcHJvcGVydGllczogQVNUW107XG4gICAgY29uc3RydWN0b3IocHJvcHM6IEFTVFtdLCBzdGFydFRva2VuPzogVG9rZW4sIGVuZFRva2VuPzogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIoc3RhcnRUb2tlbj8ubGluZSwgc3RhcnRUb2tlbj8uY29sKTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHM7XG4gICAgfVxuICAgIG92ZXJyaWRlICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJ7Li4ufVwiO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5RXhwcmVzc2lvbiBleHRlbmRzIEFTVCB7XG4gICAgZWxlbWVudHM6IEFTVFtdO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBBU1RbXSwgc3RhcnQ/OiBBU1QsIGVuZD86IEFTVCkge1xuICAgICAgICBzdXBlcihzdGFydD8ubGluZSwgc3RhcnQ/LmNvbCk7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBwcm9wcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlsuLi5dXCI7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9iamVjdFByb3BlcnR5IGV4dGVuZHMgQVNUIHtcbiAgICBrZXk6IEFTVDtcbiAgICB2YWx1ZTogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGtleTogQVNULCB2YWx1ZTogQVNUKSB7XG4gICAgICAgIHN1cGVyKGtleS5saW5lLCBrZXkuY29sKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgV2hpbGVMb29wU3RhdGVtZW50IGV4dGVuZHMgQVNUIHtcbiAgICB0ZXN0OiBBU1Q7XG4gICAgYm9keTogQVNUO1xuICAgIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKHRlc3Q6IEFTVCwgYm9keTogQVNULCBzdGFydFRva2VuPzogVG9rZW4sIGVuZFRva2VuPzogVG9rZW4sIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKHN0YXJ0VG9rZW4/LmxpbmUsIHN0YXJ0VG9rZW4/LmNvbCk7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHRoaXMucmV0YWluID0gcmV0YWluO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBGb3JMb29wU3RhdGVtZW50IGV4dGVuZHMgQVNUIHtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpbml0OiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCxcbiAgICAgICAgcHVibGljIHRlc3Q6IEFTVCxcbiAgICAgICAgcHVibGljIHVwZGF0ZTogQVNULFxuICAgICAgICBwdWJsaWMgZGlyZWN0aW9uOiBUb2tlbixcbiAgICAgICAgcHVibGljIGJvZHk6IEFTVCxcbiAgICAgICAgc3RhcnRUb2tlbj86IFRva2VuLFxuICAgICAgICBlbmRUb2tlbj86IFRva2VuLFxuICAgICAgICBwdWJsaWMgcmV0YWluOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoc3RhcnRUb2tlbj8ubGluZSwgc3RhcnRUb2tlbj8uY29sKVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBGb3JPZlN0YXRlbWVudCBleHRlbmRzIEFTVCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBpZGVudGlmaWVyOiBBU1QsXG4gICAgICAgIHB1YmxpYyBjb2xsZWN0aW9uOiBBU1QsXG4gICAgICAgIHB1YmxpYyBib2R5OiBBU1QsXG4gICAgICAgIHN0YXJ0VG9rZW4/OiBUb2tlbixcbiAgICAgICAgZW5kVG9rZW4/OiBUb2tlbixcbiAgICAgICAgcHVibGljIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKHN0YXJ0VG9rZW4/LmxpbmUsIHN0YXJ0VG9rZW4/LmNvbClcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgVHVwbGVFeHByZXNzaW9uIGV4dGVuZHMgQVNUIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZmlyc3Q6IEFTVCwgcHVibGljIHNlY29uZDogQVNUKSB7XG4gICAgICAgIHN1cGVyKGZpcnN0LmxpbmUsIGZpcnN0LmNvbClcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQnJlYWtBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGNvbnN0cnVjdG9yKGxpbmU/OiBudW1iZXIsIGNvbD86IG51bWJlcikge1xuICAgICAgICBzdXBlcihsaW5lLCBjb2wpXG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFJldHVybkFTVCBleHRlbmRzIEFTVCB7XG4gICAgdmFsdWU/OiBBU1Q7XG4gICAgY29uc3RydWN0b3IodmFsdWU/OiBBU1QsIGxpbmU/OiBudW1iZXIsIGNvbD86IG51bWJlcikge1xuICAgICAgICBzdXBlcihsaW5lLCBjb2wpXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ29udGludWVBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGNvbnN0cnVjdG9yKGxpbmU/OiBudW1iZXIsIGNvbD86IG51bWJlcikge1xuICAgICAgICBzdXBlcihsaW5lLCBjb2wpO1xuICAgIH1cbn1cbmNsYXNzIFBhcnNlciB7XG4gICAgc3RhdGljIF9iaW5vcFByZWNkZW5jZXM6IHsgW2s6IG51bWJlcl06IG51bWJlciB9ID0ge1xuICAgICAgICBbVG9rZW5UeXBlLmVxZXFdOiAxMCxcbiAgICAgICAgW1Rva2VuVHlwZS5ub3RFcV06IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLmdyZWF0XTogMTAsXG4gICAgICAgIFtUb2tlblR5cGUuZ3JlYXRFcV06IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLmxlc3NdOiAxMCxcbiAgICAgICAgW1Rva2VuVHlwZS5sZXNzRXFdOiAxMCxcbiAgICAgICAgW1Rva2VuVHlwZS5wbHVzXTogMjAsXG4gICAgICAgIFtUb2tlblR5cGUubWludXNdOiAyMCxcbiAgICAgICAgW1Rva2VuVHlwZS5tdWx0XTogNDAsXG4gICAgICAgIFtUb2tlblR5cGUuZGl2XTogNDAsXG4gICAgICAgIFtUb2tlblR5cGUubW9kXTogNDAsXG4gICAgfTtcblxuICAgIGxleGVyITogTGV4ZXI7XG4gICAgY3VycmVudFRva2VuPzogVG9rZW47XG4gICAgY29uc3RydWN0b3IobGV4ZXI6IExleGVyKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gbGV4ZXIubmV4dFRva2VuKCk7XG4gICAgICAgIHRoaXMubGV4ZXIgPSBsZXhlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lYXQodHlwZTogVG9rZW5UeXBlKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gdHlwZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0aGlzLmxleGVyLm5leHRUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hLCB0eXBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VhdEVPTCgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSBUb2tlblR5cGUuZW9sKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmVvbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9lYXRTZW1pT3JFT0woKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLmVvbCB8fFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5zZW1pKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZWF0U2VtaSgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSBUb2tlblR5cGUuc2VtaSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5zZW1pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3ZhcmlhYmxlKCk6IElkZW50aWZpZXJBU1Qge1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IElkZW50aWZpZXJBU1QodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5pZCk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBwcml2YXRlIF9yZXR1cm4oKTogQVNUIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgbGV0IHZhbHVlOiBBU1QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghdGhpcy5fZXhwZWN0KFRva2VuVHlwZS5lb2wpICYmICF0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnNlbWkpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2V4cHJlc3Npb24oKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUmV0dXJuQVNUKHZhbHVlLCB0b2tlbj8ubGluZSwgdG9rZW4/LmNvbCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2ZhY3RvcigpOiBBU1Qge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuITtcbiAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5wbHVzOlxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubWludXM6XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ub3Q6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KHRoaXMuY3VycmVudFRva2VuIS50eXBlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVuYXJ5RXhwcmVzc2lvbkFTVCh0b2tlbiEsIHRoaXMuX3Rlcm0oKSk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5udW1iZXJDb25zdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLm51bWJlckNvbnN0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpdGVyYWxBU1QodG9rZW4sIHRva2VuLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuc3RyaW5nQ29uc3Q6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5zdHJpbmdDb25zdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsQVNUKHRva2VuLCB0b2tlbi52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxwYXJlbjpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxwYXJlbik7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJwYXJlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5UUlVFOlxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuRkFMU0U6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KHRoaXMuY3VycmVudFRva2VuIS50eXBlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpdGVyYWxBU1QodG9rZW4sIHRva2VuLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuTlVMTDpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLk5VTEwpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbEFTVCh0b2tlbiwgXCJudWxsXCIpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGJyYWNrZXQ6XG4gICAgICAgICAgICAgICAgLy8gbGl0ZXJhbCBhcnJheSBleHByZXNzaW9uXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FycmF5RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGJyYWNlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vYmplY3RFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5JRjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faWZTdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF90ZXJtKCk6IEFTVCB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy5fZmFjdG9yKCk7XG4gICAgICAgIG5vZGUgPSB0aGlzLl90cnlQYXJzaW5nRnVuY3Rpb25DYWxsKG5vZGUpO1xuICAgICAgICBub2RlID0gdGhpcy5fdHJ5UGFyc2luZ01lbWJlckV4cHJlc3Npb24obm9kZSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2V4cHJlc3Npb24oKTogQVNUIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLl90ZXJtKCk7XG4gICAgICAgIG5vZGUgPSB0aGlzLl90cnlCaW5hcnlFeHByZXNzaW9uKDAsIG5vZGUpO1xuICAgICAgICB3aGlsZSAoW1Rva2VuVHlwZS5hbmQsIFRva2VuVHlwZS5vciwgVG9rZW5UeXBlLm51bGxpdHldLmluY2x1ZGVzKHRoaXMuY3VycmVudFRva2VuIS50eXBlKSkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbiE7XG4gICAgICAgICAgICB0aGlzLl9lYXQodG9rZW4udHlwZSk7XG4gICAgICAgICAgICBub2RlID0gbmV3IExvZ2ljYWxFeHByZXNzaW9uQVNUKG5vZGUsIHRva2VuLCB0aGlzLl9leHByZXNzaW9uKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLmVxdWFsKSkge1xuICAgICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUIHx8IG5vZGUgaW5zdGFuY2VvZiBJbmRleEFjY2Vzc29yQVNUKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbiE7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5lcXVhbCk7XG4gICAgICAgICAgICAgICAgbm9kZSA9IG5ldyBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVChub2RlLCB0aGlzLl9leHByZXNzaW9uKCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHRva2VuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBwcml2YXRlIF9vYmplY3RQcm9wZXJ0eSgpOiBPYmplY3RQcm9wZXJ0eSB7XG4gICAgICAgIGxldCBrZXk6IEFTVDtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuc3RyaW5nQ29uc3Q6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBuZXcgTGl0ZXJhbEFTVCh0aGlzLmN1cnJlbnRUb2tlbiwgdGhpcy5jdXJyZW50VG9rZW4udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnN0cmluZ0NvbnN0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGJyYWNrZXQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxicmFja2V0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNrZXQpO1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBleHByO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5pZDpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5fdmFyaWFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV3IExpdGVyYWxBU1QobmV3IFRva2VuKFRva2VuVHlwZS5pZCwgaWQudmFsdWUsIGlkLmxpbmUsIGlkLmNvbCksIGlkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBgVW5leHBlY3RlZCB0b2tlbiAke3RoaXMuY3VycmVudFRva2VufWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5jb2xvbik7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RQcm9wZXJ0eShrZXkhLCB2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3Byb3BlcnR5KCk6IEFTVCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3RQcm9wZXJ0eSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX29iamVjdFByb3BlcnRpZXMoKTogQVNUW10ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBBU1RbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgIT0gVG9rZW5UeXBlLnJicmFjZSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2godGhpcy5fcHJvcGVydHkoKSk7XG4gICAgICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5jb21tYSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5jb21tYSk7XG4gICAgICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJicmFjZSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh0aGlzLl9wcm9wZXJ0eSgpKTtcbiAgICAgICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX29iamVjdEV4cHJlc3Npb24oYnJhY2VUb2tlbj86IFRva2VuKTogQVNUIHtcbiAgICAgICAgdmFyIHRva2VuID0gYnJhY2VUb2tlbiA/PyB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgaWYgKCFicmFjZVRva2VuKSB0aGlzLl9lYXQoVG9rZW5UeXBlLmxicmFjZSk7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5fb2JqZWN0UHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFjZSk7XG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzLCB0b2tlbiwgdGhpcy5jdXJyZW50VG9rZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FycmF5RXhwcmVzc2lvbigpOiBBU1Qge1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxicmFja2V0KTtcbiAgICAgICAgY29uc3QgZWxlbWVudHM6IEFTVFtdID0gdGhpcy5fZXhwZWN0KFRva2VuVHlwZS5yYnJhY2tldCkgPyBbXSA6IHRoaXMuX2V4cHJlc3Npb25zTGlzdCgpO1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFja2V0KTtcbiAgICAgICAgdmFyIHN0YXJ0Tm9kZSA9IGVsZW1lbnRzLmxlbmd0aCAhPT0gMCA/IGVsZW1lbnRzWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICB2YXIgbGFzdE5vZGUgPSBlbGVtZW50cy5sZW5ndGggIT09IDAgPyBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheUV4cHJlc3Npb24oZWxlbWVudHMsIHN0YXJ0Tm9kZSwgbGFzdE5vZGUpO1xuICAgIH1cbiAgICBwcml2YXRlIF90cnlQYXJzaW5nTWVtYmVyRXhwcmVzc2lvbihuOiBBU1QpOiBBU1Qge1xuICAgICAgICBsZXQgbm9kZSA9IG47XG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFja2V0KSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxicmFja2V0KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIG5vZGUgPSBuZXcgSW5kZXhBY2Nlc3NvckFTVChub2RlLCBrZXkpO1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5yYnJhY2tldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdHJ5QmluYXJ5RXhwcmVzc2lvbihwcmVjOiBudW1iZXIsIGxlZnQ6IEFTVCk6IEFTVCB7XG4gICAgICAgIGxldCBub2RlID0gbGVmdDtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQcmVjID0gUGFyc2VyLl9iaW5vcFByZWNkZW5jZXNbdGhpcy5jdXJyZW50VG9rZW4hLnR5cGVdIHx8IC0xO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRQcmVjIDwgcHJlYykgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuY3VycmVudFRva2VuITtcbiAgICAgICAgICAgIHRoaXMuX2VhdChvcGVyYXRvci50eXBlKTtcbiAgICAgICAgICAgIGxldCByaWdodCA9IHRoaXMuX3Rlcm0oKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRQcmVjID0gUGFyc2VyLl9iaW5vcFByZWNkZW5jZXNbdGhpcy5jdXJyZW50VG9rZW4hLnR5cGVdIHx8IC0xO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRQcmVjIDwgbmV4dFByZWMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLl90cnlCaW5hcnlFeHByZXNzaW9uKGN1cnJlbnRQcmVjICsgMSwgcmlnaHQpO1xuICAgICAgICAgICAgICAgIGlmICh0bXAgPT09IG5vZGUpIHJldHVybiB0bXA7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSB0bXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlID0gbmV3IEJpbmFyeUV4cHJlc3Npb25BU1Qobm9kZSwgb3BlcmF0b3IsIHJpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2V4cHJlc3Npb25zTGlzdCgpOiBBU1RbXSB7XG4gICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICAvLyBpZiAoZXhwZWN0KExleGVyLlRva2VuVHlwZS5SUEFSRU4pKSByZXR1cm4gZW1wdHlMaXN0KClcbiAgICAgICAgbGV0IGV4cHIgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbZXhwcl07XG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLmNvbW1hKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmNvbW1hKTtcbiAgICAgICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2V4cGVjdChUb2tlblR5cGUucmJyYWNrZXQpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZXhwcik7XG4gICAgICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NhbGxFeHByZXNzaW9uKG5vZGU6IEFTVCk6IENhbGxFeHByZXNzaW9uQVNUIHtcbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5scGFyZW4pO1xuICAgICAgICBsZXQgYXJnczogQVNUW10gPSBbXTtcbiAgICAgICAgaWYgKCF0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJwYXJlbikpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzLl9leHByZXNzaW9uc0xpc3QoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJwYXJlbik7XG4gICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSkge1xuICAgICAgICAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENhbGxFeHByZXNzaW9uQVNUKG5vZGUgYXMgSWRlbnRpZmllckFTVCwgYXJncyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdHJ5UGFyc2luZ0Z1bmN0aW9uQ2FsbChuOiBBU1QpOiBBU1Qge1xuICAgICAgICBsZXQgbm9kZSA9IG47XG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxwYXJlbikge1xuICAgICAgICAgICAgLy8gcHJvYmFibGUgZnVuY3Rpb24gY2FsbFxuICAgICAgICAgICAgbm9kZSA9IHRoaXMuX2NhbGxFeHByZXNzaW9uKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3N0YXRlbWVudEV4cHJlc3Npb24oKTogQVNUIHtcblxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuXG4gICAgICAgIGlmICghW1Rva2VuVHlwZS5zZW1pLCBUb2tlblR5cGUuZW9sLCBUb2tlblR5cGUuZW9mXVxuICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMuY3VycmVudFRva2VuIS50eXBlKSkge1xuICAgICAgICAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9ibG9ja1N0YXRlbWVudChpZ25vcmVGaXJzdEJyYWNlID0gZmFsc2UpOiBCbG9ja1N0YXRlbWVudEFTVCB7XG4gICAgICAgIGlmICghaWdub3JlRmlyc3RCcmFjZSkgdGhpcy5fZWF0KFRva2VuVHlwZS5sYnJhY2UpO1xuICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgaWYgKHRoaXMuX2V4cGVjdChUb2tlblR5cGUucmJyYWNlKSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5yYnJhY2UpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9ja1N0YXRlbWVudEFTVChbXSwgdGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zdCBib2R5ID0gX3N0YXRlbWVudHMoKTtcbiAgICAgICAgY29uc3QgYm9keSA9IFt0aGlzLl9zdGF0ZW1lbnQoKV07XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXRTZW1pT3JFT0woKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLnJicmFjZSB8fCB0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmVvZikge1xuICAgICAgICAgICAgICAgIC8vIF9lYXQodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm9keS5wdXNoKHRoaXMuX3N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJicmFjZSkpIGJyZWFrO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuZW9sICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgIT09IFRva2VuVHlwZS5zZW1pICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgIT09IFRva2VuVHlwZS5lb2YpIHtcbiAgICAgICAgICAgICAgICBlcnJvcih0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNlKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSBUb2tlblR5cGUucmJyYWNlKSB7XG4gICAgICAgICAgICAvLyBlbmRCbG9ja1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5yYnJhY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBCbG9ja1N0YXRlbWVudEFTVChib2R5LCB0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lmU3RhdGVtZW50KCk6IElmU3RhdGVtZW50QVNUIHtcbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5JRik7XG4gICAgICAgIGNvbnN0IHdpdGhQYXIgPSB0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxwYXJlbjtcbiAgICAgICAgaWYgKHdpdGhQYXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubHBhcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXN0ID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAod2l0aFBhcikge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5ycGFyZW4pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb25zZXF1ZW50OiBBU1Q7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFjZSkge1xuICAgICAgICAgICAgY29uc2VxdWVudCA9IHRoaXMuX2Jsb2NrU3RhdGVtZW50KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zZXF1ZW50ID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy5fZWF0U2VtaU9yRU9MKCk7XG4gICAgICAgIGxldCBhbHRlcm5hdGU6IEFTVCB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUuRUxTRSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5FTFNFKTtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5JRjpcbiAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gdGhpcy5faWZTdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGJyYWNlOlxuICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGUgPSB0aGlzLl9ibG9ja1N0YXRlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGUgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IElmU3RhdGVtZW50QVNUKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3doaWxlTG9vcCgpOiBXaGlsZUxvb3BTdGF0ZW1lbnQge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuITtcbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5XSElMRV9USUxMKVxuICAgICAgICBjb25zdCB0ZXN0ID0gdGhpcy5fZXhwcmVzc2lvbigpXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFjZSA/IHRoaXMuX2Jsb2NrU3RhdGVtZW50KCkgOiB0aGlzLl9leHByZXNzaW9uKClcbiAgICAgICAgcmV0dXJuIG5ldyBXaGlsZUxvb3BTdGF0ZW1lbnQodGVzdCwgYm9keSwgdG9rZW4sIHRoaXMuY3VycmVudFRva2VuISlcbiAgICB9XG5cbiAgICBwcml2YXRlIF9mb3JPZklkZW50aWZpZXIoKTogQVNUIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubHBhcmVuOiB7XG4gICAgICAgICAgICAgICAgLy8gcHJvYmFibGUgdHVwbGVcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxwYXJlbilcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdCA9IHRoaXMuX3ZhcmlhYmxlKClcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmNvbW1hKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHRoaXMuX3ZhcmlhYmxlKClcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJwYXJlbilcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR1cGxlRXhwcmVzc2lvbihcbiAgICAgICAgICAgICAgICAgICAgZmlyc3QsXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUb2tlblR5cGUuTEJSQUNFIC0+IG9iamVjdFBhdHRlcm4oKVxuICAgICAgICAgICAgLy8gVG9rZW5UeXBlLkxCUkFDS0VUIC0+IGFycmF5UGF0dGVybigpXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YXJpYWJsZSgpXG4gICAgICAgIH1cblxuICAgIH1cbiAgICAvKipcbiAgICAgKiAjIEZvckxvb3BTdGF0ZW1lbnQgd2l0aCBzdGVwXG4gICAgICogKHNlZ2lua2F8Zm9yKSBhPTAgKGZvb3x0bykgMTAgKGtheXxrYWopIG5paW4gMiB7ICMgZm9yIGEgPSAwOyBhPDEwOyBhKz0yXG4gICAgICpcbiAgICAgKiB9XG4gICAgICogKHNlZ2lua2F8Zm9yKSBtYWxpIGtvbm8gYVxuICAgICAqL1xuICAgIHByaXZhdGUgX2Zvckxvb3AoKTogQVNUIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUb2tlbiA9IHRoaXMuY3VycmVudFRva2VuITtcbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5GT1JfTE9PUClcbiAgICAgICAgbGV0IGZvck9mID1cbiAgICAgICAgICAgIFtUb2tlblR5cGUubHBhcmVuXS5pbmNsdWRlcyh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSk7XG4gICAgICAgIGxldCBub2RlOiBBU1Q7XG4gICAgICAgIGlmIChmb3JPZikge1xuICAgICAgICAgICAgbm9kZSA9IHRoaXMuX2Zvck9mSWRlbnRpZmllcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGlmICghKGV4cHIgaW5zdGFuY2VvZiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCkpIHtcbiAgICAgICAgICAgICAgICBmb3JPZiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlID0gZXhwcjtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKCFmb3JPZiAmJiBub2RlIGluc3RhbmNlb2YgQXNzaWdubWVudEV4cHJlc3Npb25BU1QpIHtcbiAgICAgICAgICAgIC8vIG5vcm1hbCBmb3JcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuVElMTCk7XG4gICAgICAgICAgICBjb25zdCB0ZXN0ID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgbGV0IGRpcmVjdGlvbjogVG9rZW47XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLnVwIHx8IHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUuZG93bikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLmN1cnJlbnRUb2tlbiE7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KHQudHlwZSlcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSB0XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IG5ldyBUb2tlbihUb2tlblR5cGUudXAsIFwidXBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdXBkYXRlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2V4cGVjdChUb2tlblR5cGUud2l0aCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLndpdGgpXG4gICAgICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICB1cGRhdGUgPSBleHByXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSA9IG5ldyBMaXRlcmFsQVNUKG5ldyBUb2tlbihUb2tlblR5cGUubnVtYmVyQ29uc3QsIDEsIHRoaXMuY3VycmVudFRva2VuIS5saW5lLCB0aGlzLmN1cnJlbnRUb2tlbiEuY29sKSwgXCIxXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUubGJyYWNlKSA/IHRoaXMuX2Jsb2NrU3RhdGVtZW50KCkgOiB0aGlzLl9leHByZXNzaW9uKClcblxuICAgICAgICAgICAgbm9kZSA9IG5ldyBGb3JMb29wU3RhdGVtZW50KG5vZGUsIHRlc3QsIHVwZGF0ZSwgZGlyZWN0aW9uLCBib2R5LCBzdGFydFRva2VuLCB0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvck9mKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmluKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gKHRoaXMuY3VycmVudFRva2VuISEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFjZSkgPyB0aGlzLl9ibG9ja1N0YXRlbWVudCgpIDogdGhpcy5fZXhwcmVzc2lvbigpXG4gICAgICAgICAgICBub2RlID0gbmV3IEZvck9mU3RhdGVtZW50KFxuICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4sXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4hXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcih0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RhdGVtZW50KCk6IEFTVCB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkJSRUFLOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuQlJFQUspO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnJlYWtBU1QodGhpcy5jdXJyZW50VG9rZW4/LmxpbmUsIHRoaXMuY3VycmVudFRva2VuPy5jb2wpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuQ09OVElOVUU6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5DT05USU5VRSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb250aW51ZUFTVCh0aGlzLmN1cnJlbnRUb2tlbj8ubGluZSwgdGhpcy5jdXJyZW50VG9rZW4/LmNvbCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5SRVRVUk46XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5SRVRVUk4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVybigpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuc2VtaTpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXRTZW1pKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlbWVudCgpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZW9sOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIC8vIGNhc2UgVG9rZW5UeXBlLklGOlxuICAgICAgICAgICAgLy8gICAgIHJldHVybiB0aGlzLl9pZlN0YXRlbWVudCgpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuV0hJTEVfVElMTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2hpbGVMb29wKCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5GT1JfTE9PUDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9yTG9vcCgpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVtZW50RXhwcmVzc2lvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZXhwZWN0KHR5cGU6IFRva2VuVHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IHR5cGU7XG4gICAgfVxuICAgIHByaXZhdGUgX2RlZmluaXRpb24oKTogQVNUW10ge1xuICAgICAgICB0aGlzLl9lYXRTZW1pT3JFT0woKTtcblxuICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS5lb2YpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFt0aGlzLl9zdGF0ZW1lbnQoKV07XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXRTZW1pT3JFT0woKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmVvZikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuZW9mKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFjZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9ibG9ja1N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMuX3N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSAhPT0gVG9rZW5UeXBlLmVvbCAmJlxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuc2VtaSAmJlxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuZW9mKSB7XG4gICAgICAgICAgICAvLyAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yb290KCk6IFJvb3RBU1Qge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmxleGVyLnNvdXJjZTtcbiAgICAgICAgY29uc3QgbmFtZSA9IFwiPG1vZHVsZT5cIjtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuX2RlZmluaXRpb24oKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSb290QVNUKGxpc3QsIG5hbWUsIHNvdXJjZSk7XG4gICAgfVxuXG4gICAgcGFyc2UoKTogQVNUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIExvb3BDb250cm9sIHtcbn1cbmV4cG9ydCBjbGFzcyBCcmVha0JyYW5jaCBleHRlbmRzIExvb3BDb250cm9sIHsgfVxuZXhwb3J0IGNsYXNzIENvbnRpbnVlQnJhbmNoIGV4dGVuZHMgTG9vcENvbnRyb2wgeyB9XG5leHBvcnQgY2xhc3MgUmV0dXJuQnJhbmNoIHtcbiAgICB2YWx1ZTogYW55O1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbn07XG5cbnR5cGUgRnVuYyA9IChub2RlOiBhbnkpID0+IGFueTtcbi8vIEFTVCBXYWxsa2VyXG5hYnN0cmFjdCBjbGFzcyBBTm9kZVZpc2l0b3Ige1xuICAgIHByb3RlY3RlZCBfbm9kZXNWaXNpdG9yczogeyBbazogc3RyaW5nXTogRnVuYyB9ID0ge307XG4gICAgcHJvdGVjdGVkIHJlZ2lzdGVyVmlzaXRvcih0eXBlOiBhbnksIHZpc2l0b3I6IEZ1bmMpIHtcbiAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGB2aXNpdCR7KHR5cGUgYXMgYW55KS5uYW1lfWA7XG4gICAgICAgIHRoaXMuX25vZGVzVmlzaXRvcnNbbWV0aG9kTmFtZV0gPSB2aXNpdG9yO1xuICAgIH1cblxuICAgIGFic3RyYWN0IHZpc2l0KG5vZGU6IEFTVCk6IGFueTtcbn1cblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTm9kZVZpc2l0b3IgZXh0ZW5kcyBBTm9kZVZpc2l0b3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihSb290QVNULCB0aGlzLnZpc2l0Um9vdEFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEJsb2NrU3RhdGVtZW50QVNULCB0aGlzLnZpc2l0QmxvY2tTdGF0ZW1lbnRBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihJZGVudGlmaWVyQVNULCB0aGlzLnZpc2l0SWRlbnRpZmllckFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKExpdGVyYWxBU1QsIHRoaXMudmlzaXRMaXRlcmFsQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQXNzaWdubWVudEV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEV4cHJlc3Npb25TdGF0ZW1lbnRBU1QsIHRoaXMudmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQ2FsbEV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRDYWxsRXhwcmVzc2lvbkFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEJpbmFyeUV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRCaW5hcnlFeHByZXNzaW9uQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoVW5hcnlFeHByZXNzaW9uQVNULCB0aGlzLnZpc2l0VW5hcnlFeHByZXNzaW9uQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoSWZTdGF0ZW1lbnRBU1QsIHRoaXMudmlzaXRJZlN0YXRlbWVudEFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKExvZ2ljYWxFeHByZXNzaW9uQVNULCB0aGlzLnZpc2l0TG9naWNhbEV4cHJlc3Npb25BU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihJbmRleEFjY2Vzc29yQVNULCB0aGlzLnZpc2l0SW5kZXhBY2Nlc3NvckFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKE9iamVjdFByb3BlcnR5LCB0aGlzLnZpc2l0T2JqZWN0UHJvcGVydHkpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihPYmplY3RFeHByZXNzaW9uLCB0aGlzLnZpc2l0T2JqZWN0RXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEFycmF5RXhwcmVzc2lvbiwgdGhpcy52aXNpdEFycmF5RXhwcmVzc2lvbik7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoV2hpbGVMb29wU3RhdGVtZW50LCB0aGlzLnZpc2l0V2hpbGVMb29wU3RhdGVtZW50KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoRm9yTG9vcFN0YXRlbWVudCwgdGhpcy52aXNpdEZvckxvb3BTdGF0ZW1lbnQpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihGb3JPZlN0YXRlbWVudCwgdGhpcy52aXNpdEZvck9mU3RhdGVtZW50KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQnJlYWtBU1QsIHRoaXMudmlzaXRCcmVha0FTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKENvbnRpbnVlQVNULCB0aGlzLnZpc2l0Q29udGludWVBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihSZXR1cm5BU1QsIHRoaXMudmlzaXRSZXR1cm5BU1QpO1xuICAgIH1cbiAgICBvdmVycmlkZSB2aXNpdChub2RlOiBBU1QpOiBhbnkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGB2aXNpdCR7bm9kZS5jb25zdHJ1Y3Rvci5uYW1lfWA7XG4gICAgICAgICAgICAvLyBjb25zdCBmbiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKVttZXRob2ROYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZuID0gdGhpcy5fbm9kZXNWaXNpdG9yc1ttZXRob2ROYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBmbj8uY2FsbCh0aGlzLCBub2RlKSA/PyBudWxsO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIGFzc2lnblByb3BlcnR5KG93bmVyOiBhbnksIHByb3BlcnR5OiBhbnksIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvd25lcikpIHtcbiAgICAgICAgICAgIG93bmVyW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvd25lciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIG93bmVyW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2UgeyB9XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRSb290QVNUKG5vZGU6IFJvb3RBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0QmxvY2tTdGF0ZW1lbnRBU1Qobm9kZTogQmxvY2tTdGF0ZW1lbnRBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0SWRlbnRpZmllckFTVChub2RlOiBJZGVudGlmaWVyQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdExpdGVyYWxBU1Qobm9kZTogQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKG5vZGU6IEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKTogYW55O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudEFTVChub2RlOiBFeHByZXNzaW9uU3RhdGVtZW50QVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdENhbGxFeHByZXNzaW9uQVNUKG5vZGU6IENhbGxFeHByZXNzaW9uQVNUKTogYW55O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0QmluYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBCaW5hcnlFeHByZXNzaW9uQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdFVuYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBVbmFyeUV4cHJlc3Npb25BU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0SWZTdGF0ZW1lbnRBU1Qobm9kZTogSWZTdGF0ZW1lbnRBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0TG9naWNhbEV4cHJlc3Npb25BU1Qobm9kZTogTG9naWNhbEV4cHJlc3Npb25BU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0SW5kZXhBY2Nlc3NvckFTVChub2RlOiBJbmRleEFjY2Vzc29yQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdE9iamVjdFByb3BlcnR5KG5vZGU6IEFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRPYmplY3RFeHByZXNzaW9uKGFzdDogQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdEFycmF5RXhwcmVzc2lvbihhc3Q6IEFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRCcmVha0FTVChub2RlOiBCcmVha0FTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRXaGlsZUxvb3BTdGF0ZW1lbnQobm9kZTogV2hpbGVMb29wU3RhdGVtZW50KTogYW55O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0Rm9yTG9vcFN0YXRlbWVudChub2RlOiBGb3JMb29wU3RhdGVtZW50KTogYW55O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0Rm9yT2ZTdGF0ZW1lbnQobm9kZTogRm9yT2ZTdGF0ZW1lbnQpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0Q29udGludWVBU1Qobm9kZTogQ29udGludWVBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0UmV0dXJuQVNUKG5vZGU6IFJldHVybkFTVCk6IGFueTtcbn1cbmV4cG9ydCBjbGFzcyBNRXZlbnRTY29wZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhcmVudD86IE1FdmVudFNjb3BlO1xuICAgIG1lbW9yeTogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIG1lbW9yeTogeyBbazogc3RyaW5nXTogYW55IH0sIHBhcmVudD86IE1FdmVudFNjb3BlKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMubWVtb3J5ID0gbWVtb3J5O1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgcmVzb2x2ZShrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm1lbW9yeSkuaW5jbHVkZXMoa2V5KSA/IHRoaXMubWVtb3J5W2tleV0gOiAodGhpcy5wYXJlbnQ/LnJlc29sdmUoa2V5KSA/PyBudWxsKTtcbiAgICB9XG4gICAgY2hhbmdlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBkZWNsYXJlID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5tZW1vcnkpLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIC8vIGNoYW5nZSBoZXJlXG4gICAgICAgICAgICB0aGlzLm1lbW9yeVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuY2hhbmdlKGtleSwgdmFsdWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZWNsYXJlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZW1vcnlba2V5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnQgdHlwZSBNRXZlbnRvRkJpbmRpbmcgPSAoYXJnczogYW55W10sIHZtOiBNRXZlbnRvKSA9PiBhbnk7XG5leHBvcnQgY2xhc3MgTUV2ZW50byBleHRlbmRzIE5vZGVWaXNpdG9yIHtcblxuICAgIHJvb3RTY29wZTogTUV2ZW50U2NvcGUgPSBuZXcgTUV2ZW50U2NvcGUoXCJQcm9ncmFtXCIsIHt9KTtcbiAgICBwcm90ZWN0ZWQgY3VycmVudFNjb3BlPzogTUV2ZW50U2NvcGUgPSB0aGlzLnJvb3RTY29wZTtcblxuICAgIGRlYnVnID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2dsb2JhbEZ1bmN0aW9uc1JlZ2lzdHJ5OiB7IFtrOiBzdHJpbmddOiBNRXZlbnRvRkJpbmRpbmcgfSA9IHt9O1xuICAgIHByaXZhdGUgc3RhdGljIF9jYWNoZTogTWFwPG51bWJlciwgQVNUPiA9IG5ldyBNYXAoKTtcbiAgICBwcm90ZWN0ZWQgX2Z1bmN0aW9uc1JlZ2lzdHJ5OiB7IFtrOiBzdHJpbmddOiBNRXZlbnRvRkJpbmRpbmcgfSA9IHt9O1xuICAgIHByb3RlY3RlZCBfZnVuY3Rpb25SZXNvbHZlcj86IChuYW1lOiBzdHJpbmcpID0+IE1FdmVudG9GQmluZGluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnkgPSB7IC4uLk1FdmVudG8uX2dsb2JhbEZ1bmN0aW9uc1JlZ2lzdHJ5IH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNjb3BlPy5yZXNvbHZlKG5hbWUpID8/IG51bGw7XG4gICAgfVxuICAgIHByb3RlY3RlZCBjaGFuZ2VWYXJpYWJsZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2NvcGU/LmNoYW5nZShuYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcHVzaFNjb3BlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzY29wZSA9IG5ldyBNRXZlbnRTY29wZShuYW1lLCB7fSwgdGhpcy5jdXJyZW50U2NvcGUpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY29wZSA9IHNjb3BlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcG9wU2NvcGUoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNjb3BlID0gdGhpcy5jdXJyZW50U2NvcGU/LnBhcmVudDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGxvZyhtZXNzYWdlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0Um9vdEFTVChub2RlOiBSb290QVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG5vZGUuYm9keTtcbiAgICAgICAgbGV0IGxhc3Q7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBsYXN0ID0gdGhpcy52aXNpdChuKTtcbiAgICAgICAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgUmV0dXJuQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3QudmFsdWUgPz8gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFzdCA/PyBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEJsb2NrU3RhdGVtZW50QVNUKG5vZGU6IEJsb2NrU3RhdGVtZW50QVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG5vZGUuYm9keTtcbiAgICAgICAgbGV0IGxhc3Q7XG4gICAgICAgIHRoaXMucHVzaFNjb3BlKFwiQmxvY2tcIik7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBsYXN0ID0gdGhpcy52aXNpdChuKTtcbiAgICAgICAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgTG9vcENvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgUmV0dXJuQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gbGFzdCA/PyBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdElkZW50aWZpZXJBU1Qobm9kZTogSWRlbnRpZmllckFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGlkID0gbm9kZS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM/LnJlc29sdmUoaWQpID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0TGl0ZXJhbEFTVChub2RlOiBBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChub2RlIGFzIExpdGVyYWxBU1QpLnZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0QXNzaWdubWVudEV4cHJlc3Npb25BU1Qobm9kZTogQXNzaWdubWVudEV4cHJlc3Npb25BU1QpOiBhbnkge1xuXG4gICAgICAgIGNvbnN0IGlkOiBBU1QgPSBub2RlLmlkZW50aWZpZXI7XG5cbiAgICAgICAgY29uc3QgaW5pdDogQVNUID0gbm9kZS5pbml0O1xuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IG51bGw7XG4gICAgICAgIGlmIChpZCBpbnN0YW5jZW9mIEluZGV4QWNjZXNzb3JBU1QpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnZpc2l0KGlkLm93bmVyKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy52aXNpdChub2RlLmluaXQpO1xuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy52aXNpdChpZC5rZXkpO1xuICAgICAgICAgICAgdGhpcy5hc3NpZ25Qcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaWQgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMudmlzaXQoaW5pdCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGlkLnZhbHVlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRBU1Qobm9kZTogRXhwcmVzc2lvblN0YXRlbWVudEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGV4cHIgPSBub2RlLmV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2l0KGV4cHIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdENhbGxFeHByZXNzaW9uQVNUKG5vZGU6IENhbGxFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICAgICAgICBjb25zdCBhcmdzID0gbm9kZS5hcmd1bWVudHM7XG4gICAgICAgIGNvbnN0IGNhbGxlZU5hbWUgPSBjYWxsZWUudmFsdWU7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpcy5yZXNvbHZlRnVuY3Rpb24oY2FsbGVlTmFtZSk7XG4gICAgICAgIGNvbnN0IGFyZ1ZhbHVlcyA9IGFyZ3MubWFwKChlKSA9PiB0aGlzLnZpc2l0KGUpKTtcbiAgICAgICAgLy8gcHJpbnQoXCJhcmdWYWx1ZXM6OlwiLCBhcmdWYWx1ZXMpXG4gICAgICAgIHJldHVybiBmbj8uKGFyZ1ZhbHVlcywgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0QmluYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBCaW5hcnlFeHByZXNzaW9uQVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgbGVmdCA9IG5vZGUubGVmdDtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgICAgICBjb25zdCBvcCA9IG5vZGUub3BlcmF0aW9uO1xuICAgICAgICBjb25zdCBsVmFsdWUgPSB0aGlzLnZpc2l0KGxlZnQpO1xuICAgICAgICBjb25zdCByVmFsdWUgPSB0aGlzLnZpc2l0KHJpZ2h0KTtcbiAgICAgICAgc3dpdGNoIChvcC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5wbHVzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSArIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2xWYWx1ZX0ke3JWYWx1ZX1gO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubWludXM6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIC0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgKiByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyhsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZS5yZXBlYXQoclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNTdHJpbmcoclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gclZhbHVlLnJlcGVhdChsVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmRpdjpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyVmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGl2aXNpb24gYnkgMFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIC8gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm1vZDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgJSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZ3JlYXQ6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlID4gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmdyZWF0RXE6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlID49IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sZXNzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA8IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sZXNzRXE6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIDw9IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5lcWVxOlxuICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPT09IHJWYWx1ZTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm5vdEVxOlxuICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgIT09IHJWYWx1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRVbmFyeUV4cHJlc3Npb25BU1Qobm9kZTogVW5hcnlFeHByZXNzaW9uQVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgYXJnID0gbm9kZS5hcmd1bWVudDtcbiAgICAgICAgY29uc3Qgb3AgPSBub2RlLm9wZXJhdGlvbjtcbiAgICAgICAgY29uc3QgYXJnVmFsdWUgPSB0aGlzLnZpc2l0KGFyZyk7XG4gICAgICAgIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUubm90KSB7XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZShhcmdWYWx1ZSkgPT09IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOdW0oYXJnVmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3AudHlwZSA9PT0gVG9rZW5UeXBlLnBsdXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUubWludXMpIHtcbiAgICAgICAgICAgIHJldHVybiAtYXJnVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0SWZTdGF0ZW1lbnRBU1Qobm9kZTogSWZTdGF0ZW1lbnRBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCB0ZXN0Tm9kZTogQVNUID0gbm9kZS50ZXN0O1xuICAgICAgICBjb25zdCB0ZXN0ID0gdGhpcy52aXNpdCh0ZXN0Tm9kZSk7XG4gICAgICAgIGNvbnN0IHRlc3RCb29sVmFsdWUgPSBfYm9vbFZhbHVlKHRlc3QpO1xuXG4gICAgICAgIGlmICh0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdChub2RlLmNvbnNlcXVlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQobm9kZS5hbHRlcm5hdGUhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlOiBMb2dpY2FsRXhwcmVzc2lvbkFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGxlZnROb2RlID0gbm9kZS5sZWZ0O1xuICAgICAgICBsZXQgdGVzdCA9IHRoaXMudmlzaXQobGVmdE5vZGUpO1xuICAgICAgICBpZiAobm9kZS5vcGVyYXRvci50eXBlID09PSBUb2tlblR5cGUubnVsbGl0eSkge1xuICAgICAgICAgICAgaWYgKHRlc3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQobm9kZS5yaWdodClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXN0Qm9vbFZhbHVlID0gX2Jvb2xWYWx1ZSh0ZXN0KTtcbiAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IudHlwZSA9PT0gVG9rZW5UeXBlLmFuZCkge1xuICAgICAgICAgICAgaWYgKCF0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9ib29sVmFsdWUodGhpcy52aXNpdChub2RlLnJpZ2h0KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5vcGVyYXRvci50eXBlID09PSBUb2tlblR5cGUub3IpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZSh0aGlzLnZpc2l0KG5vZGUucmlnaHQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRJbmRleEFjY2Vzc29yQVNUKG5vZGU6IEluZGV4QWNjZXNzb3JBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBvd25lck5vZGUgPSAobm9kZSBhcyBJbmRleEFjY2Vzc29yQVNUKS5vd25lcjtcbiAgICAgICAgY29uc3Qgb3duZXIgPSB0aGlzLnZpc2l0KG93bmVyTm9kZSk7XG4gICAgICAgIGlmIChvd25lciA9PT0gbnVsbCB8fCBvd25lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG93bmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy52aXNpdChub2RlLmtleSk7XG4gICAgICAgICAgICByZXR1cm4gb3duZXJba2V5XSA/PyBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3duZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnZpc2l0KG5vZGUua2V5KTtcbiAgICAgICAgICAgIHJldHVybiBpc051bShrZXkpICYmIG93bmVyLmxlbmd0aCA8IGtleSAmJiBrZXkgPj0gMCA/IG93bmVyW2tleV0gPz8gbnVsbCA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0T2JqZWN0UHJvcGVydHkobm9kZTogQVNUKTogYW55IHsgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0T2JqZWN0RXhwcmVzc2lvbihhc3Q6IEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlOiBhbnkgPSB7fTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGFzdCBhcyBPYmplY3RFeHByZXNzaW9uO1xuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIG5vZGUucHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKGl0IGluc3RhbmNlb2YgT2JqZWN0UHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gdGhpcy52aXNpdChpdC5rZXkpO1xuICAgICAgICAgICAgICAgIGtleSA9IGlzU3RyaW5nKGtleSkgPyBrZXkgOiBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gdGhpcy52aXNpdChpdC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEFycmF5RXhwcmVzc2lvbihhc3Q6IEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBhc3QgYXMgQXJyYXlFeHByZXNzaW9uO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5yZXNvbHZlQXJndW1lbnRzKG5vZGUuZWxlbWVudHMpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0QnJlYWtBU1Qobm9kZTogQnJlYWtBU1QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCcmVha0JyYW5jaCgpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRXaGlsZUxvb3BTdGF0ZW1lbnQobm9kZTogV2hpbGVMb29wU3RhdGVtZW50KTogYW55IHtcbiAgICAgICAgdGhpcy5sb2coYFdoaWxlTG9vcFN0YXRlbWVudCAke25vZGUudGVzdH0gJHtub2RlLmJvZHl9YClcbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKF9ib29sVmFsdWUodGhpcy52aXNpdChub2RlLnRlc3QpKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBDb250aW51ZUJyYW5jaCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFJldHVybkJyYW5jaCkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRhaW5lciA/PyBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEZvckxvb3BTdGF0ZW1lbnQobm9kZTogRm9yTG9vcFN0YXRlbWVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IHJldGFpbmVyOiBhbnlbXSB8IHVuZGVmaW5lZCA9IG5vZGUucmV0YWluID8gW10gOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGxvb3BJZGVudGlmaWVyID0gbm9kZS5pbml0LmlkZW50aWZpZXJcbiAgICAgICAgaWYgKCEobG9vcElkZW50aWZpZXIgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSkgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBpZGVudGlmZXIgZm91bmRcIilcbiAgICAgICAgdGhpcy5wdXNoU2NvcGUoXCJGb3JMb29wU3RhdGVtZW50XCIpO1xuICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSB0aGlzLnZpc2l0KG5vZGUuaW5pdC5pbml0KVxuICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGxvb3BJZGVudGlmaWVyLnZhbHVlLCBpbml0aWFsVmFsdWUpXG4gICAgICAgIHJldGFpbmVyPy5wdXNoKGluaXRpYWxWYWx1ZSlcbiAgICAgICAgY29uc3QgdGVzdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMudmlzaXQobm9kZS50ZXN0KVxuICAgICAgICAgICAgaWYgKGlzTnVtKHJldCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnJlc29sdmUobG9vcElkZW50aWZpZXIudmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZGlyZWN0aW9uLnR5cGUgPT09IFRva2VuVHlwZS51cCA/IHJldCA+PSB0bXAgOiByZXQgPD0gdG1wXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZShyZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVZhbHVlID0gdGhpcy52aXNpdChub2RlLnVwZGF0ZSk7XG4gICAgICAgICAgICBpZiAoaXNOdW0odXBkYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gYXV0byBoYW5kbGVcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnJlc29sdmUobG9vcElkZW50aWZpZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW0odG1wKSkgdGhyb3cgRXJyb3IoXCJDYW50IHVwZGF0ZSB2YWx1ZVwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGxvb3BJZGVudGlmaWVyLnZhbHVlLCBub2RlLmRpcmVjdGlvbi50eXBlID09PSBUb2tlblR5cGUudXAgPyB0bXAgKyB1cGRhdGVWYWx1ZSA6IHRtcCAtIHVwZGF0ZVZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJVcGRhdGUgdmFsdWUgY2FudCBiZSBub24gbnVtYmVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMudmlzaXQobm9kZS5ib2R5KVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIEJyZWFrQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQ29udGludWVCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBSZXR1cm5CcmFuY2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldGFpbmVyPy5wdXNoKHJldClcbiAgICAgICAgICAgIC8vIHVwZGF0ZVxuICAgICAgICAgICAgdXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gcmV0YWluZXIgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRGb3JPZlN0YXRlbWVudChub2RlOiBGb3JPZlN0YXRlbWVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLnZpc2l0KG5vZGUuY29sbGVjdGlvbik7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW4gaXRlcmF0ZSBub24gYXJyYXkgb2JqZWN0XCIpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wdXNoU2NvcGUoXCJGb3JPZlN0YXRlbWVudFwiKTtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWNsYXJlRm9ySWRlbnRpZmllcihub2RlLmlkZW50aWZpZXIsIGl0KVxuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBDb250aW51ZUJyYW5jaCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFJldHVybkJyYW5jaCkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgcmV0dXJuIHJldGFpbmVyID8/IG51bGw7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdENvbnRpbnVlQVNUKG5vZGU6IENvbnRpbnVlQVNUKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udGludWVCcmFuY2goKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIHZpc2l0UmV0dXJuQVNUKG5vZGU6IFJldHVybkFTVCk6IGFueSB7XG4gICAgICAgIHJldHVybiBuZXcgUmV0dXJuQnJhbmNoKG5vZGUudmFsdWUgIT0gbnVsbCA/IHRoaXMudmlzaXQobm9kZS52YWx1ZSkgOiBudWxsKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9kZWNsYXJlRm9ySWRlbnRpZmllcihub2RlOiBBU1QsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFR1cGxlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIG1ha2UgYSB0dXBsZSBmcm9tIG5vbiBBcnJheSBlbGVtZW50XCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKChub2RlLmZpcnN0IGFzIElkZW50aWZpZXJBU1QpLnZhbHVlLCB2YWx1ZVswXSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKChub2RlLnNlY29uZCBhcyBJZGVudGlmaWVyQVNUKS52YWx1ZSwgdmFsdWVbMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlVmFyaWFibGUoKG5vZGUgYXMgSWRlbnRpZmllckFTVCkudmFsdWUsIHZhbHVlKTtcbiAgICB9XG4gICAgcmVzb2x2ZUFyZ3VtZW50cyhhcmdzOiBBU1RbXSk6IGFueSB7XG4gICAgICAgIHJldHVybiBhcmdzLm1hcCgoaXQ6IEFTVCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQoaXQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2V0RnVuY3Rpb25SZXNvbHZlcihyZXNvbHZlcjogKG5hbWU6IHN0cmluZykgPT4gTUV2ZW50b0ZCaW5kaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2Z1bmN0aW9uUmVzb2x2ZXIgPSByZXNvbHZlcjtcbiAgICB9XG4gICAgcmVzb2x2ZUZ1bmN0aW9uKG5hbWU6IHN0cmluZyk6IE1FdmVudG9GQmluZGluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtuYW1lXSA/PyB0aGlzLl9mdW5jdGlvblJlc29sdmVyPy4obmFtZSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZywgZm46IE1FdmVudG9GQmluZGluZykge1xuICAgICAgICB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtpZF0gPSBmbjtcbiAgICB9XG5cbiAgICB1bnJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZykge1xuICAgICAgICBkZWxldGUgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbaWRdO1xuICAgIH1cblxuICAgIGV4ZWN1dGUoc291cmNlOiBzdHJpbmcsIGNhY2hlID0gdHJ1ZSwgaW5wdXQ/OiB7IFtrOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBNRXZlbnRvLmNvbXBpbGUoc291cmNlLCBjYWNoZSk7XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoaW5wdXQpLmZvckVhY2goayA9PiB0aGlzLmNoYW5nZVZhcmlhYmxlKGssIGlucHV0W2tdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQobW9kdWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29tcGlsZShzb3VyY2U6IHN0cmluZywgY2FjaGUgPSBmYWxzZSk6IEFTVCB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBoYXNoQ29kZShzb3VyY2UpO1xuICAgICAgICBpZiAoY2FjaGUgJiYgdGhpcy5fY2FjaGUuaGFzKGhhc2gpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZ2V0KGhhc2gpITtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZXhlciA9IG5ldyBMZXhlcihzb3VyY2UpO1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKGxleGVyKTtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gcGFyc2VyLnBhcnNlKCk7XG5cbiAgICAgICAgaWYgKGNhY2hlKSB0aGlzLl9jYWNoZS5zZXQoaGFzaCwgbW9kdWxlKTtcbiAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVnaXN0ZXIoaWQ6IHN0cmluZywgZm46IE1FdmVudG9GQmluZGluZykge1xuICAgICAgICBNRXZlbnRvLl9nbG9iYWxGdW5jdGlvbnNSZWdpc3RyeVtpZF0gPSBmbjtcbiAgICB9XG5cbiAgICBzdGF0aWMgdW5yZWdpc3RlcihpZDogc3RyaW5nKSB7XG4gICAgICAgIGRlbGV0ZSBNRXZlbnRvLl9nbG9iYWxGdW5jdGlvbnNSZWdpc3RyeVtpZF07XG4gICAgfVxuXG4gICAgc3RhdGljIHJ1bihzb3VyY2U6IHN0cmluZywgY2FjaGUgPSBmYWxzZSwgaW5wdXQ/OiB7IFtrOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICBjb25zdCBtZXZlbnRvID0gbmV3IE1FdmVudG8oKTtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gTUV2ZW50by5jb21waWxlKHNvdXJjZSwgY2FjaGUpO1xuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGlucHV0KS5mb3JFYWNoKGsgPT4gbWV2ZW50by5jaGFuZ2VWYXJpYWJsZShrLCBpbnB1dFtrXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXZlbnRvLnZpc2l0KG1vZHVsZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIG5ld0luc3RhbmNlKCk6IE1FdmVudG8ge1xuICAgICAgICAvLyBjb25zdCBsZXhlciA9IExleGVyKHNvdXJjZSk7XG4gICAgICAgIC8vIGNvbnN0IHBhcnNlciA9IFBhcnNlcihsZXhlcik7XG4gICAgICAgIC8vIGNvbnN0IG1vZHVsZSA9IHBhcnNlci5wYXJzZSgpO1xuICAgICAgICByZXR1cm4gbmV3IE1FdmVudG8oKTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBNRXZlbnRvIHtcbiAgICAgICAgdmFyIHJldCA9IG5ldyBNRXZlbnRvKCk7XG4gICAgICAgIHJldC5fZnVuY3Rpb25zUmVnaXN0cnkgPSB7IC4uLiB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeSB9O1xuICAgICAgICByZXQucm9vdFNjb3BlLm1lbW9yeSA9IHsgLi4udGhpcy5yb290U2NvcGUubWVtb3J5IH07XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIG5ld0FzeW5jSW5zdGFuY2UoKTogTUV2ZW50b0FzeW5jIHtcbiAgICAgICAgY29uc3QgYXN5bmNJbnMgPSBNRXZlbnRvQXN5bmMubmV3SW5zdGFuY2UoKTtcbiAgICAgICAgYXN5bmNJbnMucm9vdFNjb3BlLm1lbW9yeSA9IHRoaXMucm9vdFNjb3BlLm1lbW9yeTtcbiAgICAgICAgLy8vID8/Pz9cbiAgICAgICAgYXN5bmNJbnMuX2Z1bmN0aW9uc1JlZ2lzdHJ5ID0gdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnk7XG4gICAgICAgIHJldHVybiBhc3luY0lucztcbiAgICB9O1xuXG59XG5cbmV4cG9ydCBjbGFzcyBNRXZlbnRvQXN5bmMgZXh0ZW5kcyBNRXZlbnRvIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdFJvb3RBU1Qobm9kZTogUm9vdEFTVCkge1xuICAgICAgICBjb25zdCBsaXN0ID0gbm9kZS5ib2R5O1xuICAgICAgICBsZXQgbGFzdDtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGxpc3QpIHtcbiAgICAgICAgICAgIGxhc3QgPSBhd2FpdCB0aGlzLnZpc2l0KG4pO1xuICAgICAgICAgICAgaWYgKGxhc3QgaW5zdGFuY2VvZiBSZXR1cm5CcmFuY2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdC52YWx1ZSA/PyBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXN0ID8/IG51bGw7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEJsb2NrU3RhdGVtZW50QVNUKG5vZGU6IEJsb2NrU3RhdGVtZW50QVNUKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG5vZGUuYm9keTtcbiAgICAgICAgbGV0IGxhc3Q7XG4gICAgICAgIHRoaXMucHVzaFNjb3BlKFwiQmxvY2tcIik7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBsYXN0ID0gYXdhaXQgdGhpcy52aXNpdChuKTtcbiAgICAgICAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgTG9vcENvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgUmV0dXJuQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gbGFzdDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0SWRlbnRpZmllckFTVChub2RlOiBBU1QpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBpZCA9IChub2RlIGFzIElkZW50aWZpZXJBU1QpLnZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlKGlkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0TGl0ZXJhbEFTVChub2RlOiBMaXRlcmFsQVNUKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBub2RlLnZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKG5vZGU6IEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGlkOiBBU1QgPSBub2RlLmlkZW50aWZpZXI7XG5cbiAgICAgICAgY29uc3QgaW5pdDogQVNUID0gbm9kZS5pbml0O1xuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IG51bGw7XG4gICAgICAgIGlmIChpZCBpbnN0YW5jZW9mIEluZGV4QWNjZXNzb3JBU1QpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBhd2FpdCB0aGlzLnZpc2l0KGlkLm93bmVyKTtcbiAgICAgICAgICAgIHZhbHVlID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmluaXQpO1xuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gYXdhaXQgdGhpcy52aXNpdChpZC5rZXkpO1xuICAgICAgICAgICAgdGhpcy5hc3NpZ25Qcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaWQgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQoaW5pdCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGlkLnZhbHVlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QVNUKG5vZGU6IEV4cHJlc3Npb25TdGF0ZW1lbnRBU1QpIHtcbiAgICAgICAgY29uc3QgZXhwciA9IG5vZGUuZXhwcmVzc2lvbjtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQoZXhwcik7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdENhbGxFeHByZXNzaW9uQVNUKG5vZGU6IENhbGxFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICAgICAgICBjb25zdCBhcmdzID0gbm9kZS5hcmd1bWVudHM7XG4gICAgICAgIGNvbnN0IGNhbGxlZU5hbWUgPSBjYWxsZWUudmFsdWU7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbY2FsbGVlTmFtZV07XG4gICAgICAgIGNvbnN0IGFyZ1ZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKGFyZ3MubWFwKChlKSA9PiB0aGlzLnZpc2l0KGUpKSk7XG4gICAgICAgIC8vIHByaW50KFwiYXJnVmFsdWVzOjpcIiwgYXJnVmFsdWVzKVxuICAgICAgICByZXR1cm4gYXdhaXQgZm4/LihhcmdWYWx1ZXMsIHRoaXMpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRCaW5hcnlFeHByZXNzaW9uQVNUKG5vZGU6IEJpbmFyeUV4cHJlc3Npb25BU1QpIHtcbiAgICAgICAgY29uc3QgbGVmdCA9IG5vZGUubGVmdDtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgICAgICBjb25zdCBvcCA9IG5vZGUub3BlcmF0aW9uO1xuICAgICAgICBjb25zdCBsVmFsdWUgPSBhd2FpdCB0aGlzLnZpc2l0KGxlZnQpO1xuICAgICAgICBjb25zdCByVmFsdWUgPSBhd2FpdCB0aGlzLnZpc2l0KHJpZ2h0KTtcbiAgICAgICAgc3dpdGNoIChvcC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5wbHVzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSArIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2xWYWx1ZX0ke3JWYWx1ZX1gO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubWludXM6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIC0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcobFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUucmVwZWF0KHJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzU3RyaW5nKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJWYWx1ZS5yZXBlYXQobFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5tdWx0OlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAqIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5kaXY6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoclZhbHVlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRpdmlzaW9uIGJ5IDBcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAvIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5tb2Q6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICUgclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmdyZWF0OlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA+IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ncmVhdEVxOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA+PSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGVzczpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPCByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGVzc0VxOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA8PSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZXFlcTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlID09PSByVmFsdWU7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ub3RFcTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICE9PSByVmFsdWU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdFVuYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBVbmFyeUV4cHJlc3Npb25BU1QpIHtcbiAgICAgICAgY29uc3QgYXJnID0gbm9kZS5hcmd1bWVudDtcbiAgICAgICAgY29uc3Qgb3AgPSBub2RlLm9wZXJhdGlvbjtcbiAgICAgICAgY29uc3QgYXJnVmFsdWUgPSBhd2FpdCB0aGlzLnZpc2l0KGFyZyk7XG4gICAgICAgIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUubm90KSB7XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZShhcmdWYWx1ZSkgPT09IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOdW0oYXJnVmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3AudHlwZSA9PT0gVG9rZW5UeXBlLnBsdXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUubWludXMpIHtcbiAgICAgICAgICAgIHJldHVybiAtYXJnVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSAgYXN5bmMgdmlzaXRJZlN0YXRlbWVudEFTVChub2RlOiBJZlN0YXRlbWVudEFTVCkge1xuICAgICAgICBjb25zdCB0ZXN0Tm9kZTogQVNUID0gbm9kZS50ZXN0O1xuICAgICAgICBjb25zdCB0ZXN0ID0gYXdhaXQgdGhpcy52aXNpdCh0ZXN0Tm9kZSk7XG4gICAgICAgIGNvbnN0IHRlc3RCb29sVmFsdWUgPSBfYm9vbFZhbHVlKHRlc3QpO1xuXG4gICAgICAgIGlmICh0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy52aXNpdChub2RlLmNvbnNlcXVlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQobm9kZS5hbHRlcm5hdGUhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlOiBMb2dpY2FsRXhwcmVzc2lvbkFTVCkge1xuICAgICAgICBjb25zdCBsZWZ0Tm9kZSA9IG5vZGUubGVmdDtcbiAgICAgICAgbGV0IHRlc3QgPSBhd2FpdCB0aGlzLnZpc2l0KGxlZnROb2RlKTtcbiAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IudHlwZSA9PT0gVG9rZW5UeXBlLm51bGxpdHkpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZpc2l0KG5vZGUucmlnaHQpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGVzdEJvb2xWYWx1ZSA9IF9ib29sVmFsdWUodGVzdCk7XG4gICAgICAgIGlmIChub2RlLm9wZXJhdG9yLnR5cGUgPT09IFRva2VuVHlwZS5hbmQpIHtcbiAgICAgICAgICAgIGlmICghdGVzdEJvb2xWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfYm9vbFZhbHVlKGF3YWl0IHRoaXMudmlzaXQobm9kZS5yaWdodCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9wZXJhdG9yLnR5cGUgPT09IFRva2VuVHlwZS5vcikge1xuICAgICAgICAgICAgaWYgKHRlc3RCb29sVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9ib29sVmFsdWUoYXdhaXQgdGhpcy52aXNpdChub2RlLnJpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRJbmRleEFjY2Vzc29yQVNUKG5vZGU6IEluZGV4QWNjZXNzb3JBU1QpIHtcbiAgICAgICAgY29uc3Qgb3duZXJOb2RlID0gKG5vZGUgYXMgSW5kZXhBY2Nlc3NvckFTVCkub3duZXI7XG4gICAgICAgIGNvbnN0IG93bmVyID0gYXdhaXQgdGhpcy52aXNpdChvd25lck5vZGUpO1xuICAgICAgICBpZiAob3duZXIgPT09IG51bGwgfHwgb3duZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvd25lciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5rZXkpO1xuICAgICAgICAgICAgcmV0dXJuIG93bmVyW2tleV0gPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG93bmVyKSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmtleSk7XG4gICAgICAgICAgICByZXR1cm4gaXNOdW0oa2V5KSAmJiBvd25lci5sZW5ndGggPCBrZXkgJiYga2V5ID49IDAgPyBvd25lcltrZXldID8/IG51bGwgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRPYmplY3RQcm9wZXJ0eShub2RlOiBBU1QpIHsgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0T2JqZWN0RXhwcmVzc2lvbihhc3Q6IEFTVCkge1xuICAgICAgICBjb25zdCBpbnN0YW5jZTogYW55ID0ge307XG4gICAgICAgIGNvbnN0IG5vZGUgPSBhc3QgYXMgT2JqZWN0RXhwcmVzc2lvbjtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBub2RlLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChpdCBpbnN0YW5jZW9mIE9iamVjdFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGF3YWl0IHRoaXMudmlzaXQoaXQua2V5KTtcbiAgICAgICAgICAgICAgICBrZXkgPSBpc1N0cmluZyhrZXkpID8ga2V5IDoga2V5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IGF3YWl0IHRoaXMudmlzaXQoaXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRBcnJheUV4cHJlc3Npb24oYXN0OiBBU1QpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGFzdCBhcyBBcnJheUV4cHJlc3Npb247XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBhd2FpdCB0aGlzLnJlc29sdmVBcmd1bWVudHNBc3luYyhub2RlLmVsZW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdFdoaWxlTG9vcFN0YXRlbWVudChub2RlOiBXaGlsZUxvb3BTdGF0ZW1lbnQpIHtcbiAgICAgICAgdGhpcy5sb2coYFdoaWxlTG9vcFN0YXRlbWVudCAke25vZGUudGVzdH0gJHtub2RlLmJvZHl9YClcbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKF9ib29sVmFsdWUoYXdhaXQgdGhpcy52aXNpdChub2RlLnRlc3QpKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBDb250aW51ZUJyYW5jaCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFJldHVybkJyYW5jaCkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRhaW5lcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRGb3JMb29wU3RhdGVtZW50KG5vZGU6IEZvckxvb3BTdGF0ZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbG9vcElkZW50aWZpZXIgPSBub2RlLmluaXQuaWRlbnRpZmllclxuICAgICAgICBpZiAoIShsb29wSWRlbnRpZmllciBpbnN0YW5jZW9mIElkZW50aWZpZXJBU1QpKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGlkZW50aWZlciBmb3VuZFwiKVxuICAgICAgICB0aGlzLnB1c2hTY29wZShcIkZvckxvb3BTdGF0ZW1lbnRcIik7XG4gICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5pbml0LmluaXQpXG4gICAgICAgIHRoaXMuY2hhbmdlVmFyaWFibGUobG9vcElkZW50aWZpZXIudmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIHJldGFpbmVyPy5wdXNoKGluaXRpYWxWYWx1ZSlcbiAgICAgICAgY29uc3QgdGVzdCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS50ZXN0KVxuICAgICAgICAgICAgaWYgKGlzTnVtKHJldCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnJlc29sdmUobG9vcElkZW50aWZpZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmRpcmVjdGlvbi50eXBlID09PSBUb2tlblR5cGUudXAgPyByZXQgPj0gdG1wIDogcmV0IDw9IHRtcFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9ib29sVmFsdWUocmV0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVWYWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS51cGRhdGUpO1xuICAgICAgICAgICAgaWYgKGlzTnVtKHVwZGF0ZVZhbHVlKSkge1xuICAgICAgICAgICAgICAgIC8vIGF1dG8gaGFuZGxlXG4gICAgICAgICAgICAgICAgY29uc3QgdG1wID0gdGhpcy5yZXNvbHZlKGxvb3BJZGVudGlmaWVyLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtKHRtcCkpIHRocm93IEVycm9yKFwiQ2FudCB1cGRhdGUgdmFsdWVcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYXJpYWJsZShsb29wSWRlbnRpZmllci52YWx1ZSwgbm9kZS5kaXJlY3Rpb24udHlwZSA9PT0gVG9rZW5UeXBlLnVwID8gdG1wICsgdXBkYXRlVmFsdWUgOiB0bXAgLSB1cGRhdGVWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiVXBkYXRlIHZhbHVlIGNhbnQgYmUgbm9uIG51bWJlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoYXdhaXQgdGVzdCgpKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUuYm9keSlcbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBCcmVha0JyYW5jaCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIENvbnRpbnVlQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgUmV0dXJuQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRhaW5lcj8ucHVzaChyZXQpXG4gICAgICAgICAgICAvLyB1cGRhdGVcbiAgICAgICAgICAgIGF3YWl0IHVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgcmV0dXJuIHJldGFpbmVyID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0Rm9yT2ZTdGF0ZW1lbnQobm9kZTogRm9yT2ZTdGF0ZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5jb2xsZWN0aW9uKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkNhbiBpdGVyYXRlIG5vbiBhcnJheSBvYmplY3RcIilcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXRhaW5lcjogYW55W10gfCB1bmRlZmluZWQgPSBub2RlLnJldGFpbiA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnB1c2hTY29wZShcIkZvck9mU3RhdGVtZW50XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RlY2xhcmVGb3JJZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllciwgaXQpXG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUuYm9keSlcbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBCcmVha0JyYW5jaCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIENvbnRpbnVlQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgUmV0dXJuQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRhaW5lcj8ucHVzaChyZXQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gcmV0YWluZXI7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0UmV0dXJuQVNUKG5vZGU6IFJldHVybkFTVCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUmV0dXJuQnJhbmNoKG5vZGUudmFsdWUgIT0gbnVsbCA/IGF3YWl0IHRoaXMudmlzaXQobm9kZS52YWx1ZSkgOiBudWxsKTtcbiAgICB9XG4gICAgYXN5bmMgcmVzb2x2ZUFyZ3VtZW50c0FzeW5jKGFyZ3M6IEFTVFtdKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoYXJncy5tYXAoYXN5bmMgKGl0OiBBU1QpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZpc2l0KGl0KTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBvdmVycmlkZSByZWdpc3RlckZ1bmN0aW9uKGlkOiBzdHJpbmcsIGZuOiBNRXZlbnRvRkJpbmRpbmcpIHtcbiAgICAgICAgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbaWRdID0gZm47XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgdW5yZWdpc3RlckZ1bmN0aW9uKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5W2lkXTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgIGFzeW5jIGV4ZWN1dGUoc291cmNlOiBzdHJpbmcsIGNhY2hlID0gdHJ1ZSwgaW5wdXQ/OiB7IFtrOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBNRXZlbnRvLmNvbXBpbGUoc291cmNlLCBjYWNoZSk7XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoaW5wdXQpLmZvckVhY2goayA9PiB0aGlzLmNoYW5nZVZhcmlhYmxlKGssIGlucHV0W2tdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQobW9kdWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgb3ZlcnJpZGUgYXN5bmMgcnVuKHNvdXJjZTogc3RyaW5nLCBjYWNoZSA9IGZhbHNlLCBpbnB1dD86IHsgW2s6IHN0cmluZ106IGFueSB9KSB7XG4gICAgICAgIGNvbnN0IG1ldmVudG8gPSBuZXcgTUV2ZW50b0FzeW5jKCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IE1FdmVudG8uY29tcGlsZShzb3VyY2UsIGNhY2hlKTtcbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhpbnB1dCkuZm9yRWFjaChrID0+IG1ldmVudG8uY2hhbmdlVmFyaWFibGUoaywgaW5wdXRba10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgbWV2ZW50by52aXNpdChtb2R1bGUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBvdmVycmlkZSBuZXdJbnN0YW5jZSgpOiBNRXZlbnRvQXN5bmMge1xuICAgICAgICByZXR1cm4gbmV3IE1FdmVudG9Bc3luYygpO1xuICAgIH1cblxuXG4gICAgb3ZlcnJpZGUgY2xvbmUoKTogTUV2ZW50b0FzeW5jIHtcbiAgICAgICAgdmFyIHJldCA9IG5ldyBNRXZlbnRvQXN5bmMoKTtcbiAgICAgICAgcmV0Ll9mdW5jdGlvbnNSZWdpc3RyeSA9IHsgLi4udGhpcy5fZnVuY3Rpb25zUmVnaXN0cnkgfTtcbiAgICAgICAgcmV0LnJvb3RTY29wZS5tZW1vcnkgPSB7IC4uLnRoaXMucm9vdFNjb3BlLm1lbW9yeSB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbn1cbiJdfQ==
|
|
2264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV2ZW50by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldmVudG8vc3JjL2xpYi9tZXZlbnRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLFNBQVMsS0FBSyxDQUFDLEtBQVksRUFBRSxRQUFvQjtJQUM3QyxNQUFNLElBQUksR0FDTixpQkFBaUIsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxRQUFRLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ3RJLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFDRCxTQUFTLEtBQUssQ0FBQyxLQUFVO0lBQ3JCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxTQUFTLFNBQVMsQ0FBQyxLQUFVO0lBQ3pCLE9BQU8sT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQ3RDLENBQUM7QUFDRCxTQUFTLFFBQVEsQ0FBQyxLQUFVO0lBQ3hCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxTQUFTLFVBQVUsQ0FBQyxJQUFTO0lBQ3pCLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSTtRQUNqQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbkQsQ0FBQztBQUFB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dGlvbiBlcnJvcih0b2tlbjogVG9rZW4sIGV4cGVjdGVkPzogVG9rZW5UeXBlKSB7XG4gICAgY29uc3QgdGV4dCA9XG4gICAgICAgIGBJbnZhbGlkIHRva2VuICR7dG9rZW4udHlwZX1bJHt0b2tlbi52YWx1ZX1dIGF0ICR7dG9rZW4ubGluZX0sICR7dG9rZW4uY29sfSAke2V4cGVjdGVkID8gYDogZXhwZWN0aW5nICR7ZXhwZWN0ZWR9IHRva2VuYCA6ICcnfVxcbmA7XG4gICAgdGhyb3cgRXJyb3IodGV4dCk7XG59XG5mdW5jdGlvbiBpc051bSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbn1cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbn1cbmZ1bmN0aW9uIF9ib29sVmFsdWUodGVzdDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0ZXN0ID09PSBudWxsIHx8XG4gICAgICAgIChpc051bSh0ZXN0KSAmJiB0ZXN0ID09PSAwKSB8fFxuICAgICAgICAoaXNTdHJpbmcodGVzdCkgJiYgdGVzdC5sZW5ndGggPT09IDApIHx8XG4gICAgICAgIChpc0Jvb2xlYW4odGVzdCkgJiYgIXRlc3QpKSA/IGZhbHNlIDogdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIGhhc2hDb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgbGV0IGhhc2ggPSAwO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgY2hyO1xuICAgIGlmIChzdHIubGVuZ3RoID09PSAwKSByZXR1cm4gaGFzaDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNociA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBjaHI7XG4gICAgICAgIGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG4gICAgfVxuICAgIHJldHVybiBoYXNoO1xufTtcbmV4cG9ydCBjbGFzcyBUb2tlblR5cGUge1xuICAgIHN0YXRpYyBpZCA9IDA7XG4gICAgc3RhdGljIGNvbW1hID0gMTtcbiAgICBzdGF0aWMgc2VtaSA9IDI7XG4gICAgc3RhdGljIG51bWJlckNvbnN0ID0gMztcbiAgICBzdGF0aWMgc3RyaW5nQ29uc3QgPSA0O1xuICAgIHN0YXRpYyBlcXVhbCA9IDU7XG4gICAgc3RhdGljIGxwYXJlbiA9IDZcbiAgICBzdGF0aWMgcnBhcmVuID0gNztcbiAgICBzdGF0aWMgZW9sID0gODtcbiAgICBzdGF0aWMgZW9mID0gOTtcbiAgICBzdGF0aWMgbGJyYWNlID0gMTA7XG4gICAgc3RhdGljIHJicmFjZSA9IDExO1xuICAgIHN0YXRpYyBsYnJhY2tldCA9IDEyO1xuICAgIHN0YXRpYyByYnJhY2tldCA9IDEzO1xuICAgIHN0YXRpYyBncmVhdCA9IDE0O1xuICAgIHN0YXRpYyBncmVhdEVxID0gMTU7XG4gICAgc3RhdGljIGxlc3MgPSAxNjtcbiAgICBzdGF0aWMgbGVzc0VxID0gMTc7XG4gICAgc3RhdGljIGVxZXEgPSAxODtcbiAgICBzdGF0aWMgSUYgPSAxOTtcbiAgICBzdGF0aWMgRUxTRSA9IDIwO1xuICAgIHN0YXRpYyBUUlVFID0gMjE7XG4gICAgc3RhdGljIEZBTFNFID0gMjI7XG4gICAgc3RhdGljIE5VTEwgPSAyMztcbiAgICBzdGF0aWMgbm90ID0gMjQ7XG4gICAgc3RhdGljIG5vdEVxID0gMjU7XG4gICAgc3RhdGljIGFuZCA9IDI2O1xuICAgIHN0YXRpYyBvciA9IDI3O1xuICAgIHN0YXRpYyBwbHVzID0gMjg7XG4gICAgc3RhdGljIG1pbnVzID0gMjk7XG4gICAgc3RhdGljIGRpdiA9IDMwO1xuICAgIHN0YXRpYyBtdWx0ID0gMzE7XG4gICAgc3RhdGljIG1vZCA9IDMyO1xuICAgIHN0YXRpYyBpbnZhbGlkID0gMzM7XG4gICAgc3RhdGljIGNvbG9uID0gMzQ7XG4gICAgc3RhdGljIFdISUxFX1RJTEwgPSAzNTtcbiAgICBzdGF0aWMgRk9SX0xPT1AgPSAzNjtcbiAgICBzdGF0aWMgdXAgPSAzNztcbiAgICBzdGF0aWMgZG93biA9IDM4O1xuICAgIHN0YXRpYyB3aXRoID0gMzk7XG4gICAgc3RhdGljIGluID0gNDA7XG4gICAgc3RhdGljIFRJTEwgPSA0MTtcbiAgICBzdGF0aWMgQlJFQUsgPSA0MjtcbiAgICBzdGF0aWMgQ09OVElOVUUgPSA0MztcbiAgICBzdGF0aWMgbnVsbGl0eSA9IDQ0O1xuICAgIHN0YXRpYyBSRVRVUk4gPSA0NTtcbn1cblxuZXhwb3J0IGNsYXNzIFRva2VuIHtcbiAgICB0eXBlOiBudW1iZXI7XG4gICAgdmFsdWU6IGFueTtcbiAgICBsaW5lPzogbnVtYmVyO1xuICAgIGNvbD86IG51bWJlcjtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBudW1iZXIsIHZhbHVlOiBhbnksIGxpbmU6IG51bWJlciA9IDEsIGNvbDogbnVtYmVyID0gMSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMubGluZSA9IGxpbmU7XG4gICAgICAgIHRoaXMuY29sID0gY29sO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbSh0eXBlOiBudW1iZXIsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUb2tlbih0eXBlLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGBbJHt0aGlzLnR5cGUudG9TdHJpbmcoKX0sICR7dGhpcy52YWx1ZX1dYDtcbiAgICB9XG59XG5cblxuY2xhc3MgQ2hhcnMge1xuICAgIHN0YXRpYyBlcXVhbCA9ICc9Jy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBjb21tYSA9ICcsJy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBzZW1pQ29sb24gPSAnOycuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbHBhcmVuID0gJygnLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHJwYXJlbiA9ICcpJy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBiYWNrc2xhc2ggPSAnXFxcXCcuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgcXVvdGUgPSAnXCInLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHNxdW90ZSA9IFwiJ1wiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHBsdXMgPSBcIitcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBtaW51cyA9IFwiLVwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHN0YXIgPSBcIipcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBzbGFzaCA9IFwiL1wiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHBlcmNlbnQgPSBcIiVcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBsYnJhY2UgPSBcIntcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyByYnJhY2UgPSBcIn1cIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBsYnJhY2tldCA9IFwiW1wiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHJicmFja2V0ID0gXCJdXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbm90ID0gXCIhXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgZ3JlYXQgPSBcIj5cIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBsZXNzID0gXCI8XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgYW5kID0gXCImXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgcGlwZSA9IFwifFwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIGNvbG9uID0gXCI6XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgcXVlc3Rpb25NYXJrID0gXCI/XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgc2hlYmFuZyA9IFwiI1wiLmNoYXJDb2RlQXQoMCk7XG59XG5cbmV4cG9ydCBjbGFzcyBMZXhlckRpY3Rpb25hcnkge1xuICAgIGxhbmc6IHN0cmluZztcbiAgICBrZXl3b3JkczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGNvbnN0cnVjdG9yKGxhbmc6IHN0cmluZywga2V5d29yZHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICAgICAgdGhpcy5rZXl3b3JkcyA9IHsgLi4ua2V5d29yZHMgfTtcbiAgICAgICAgdGhpcy5sYW5nID0gbGFuZztcbiAgICB9XG59XG5cbi8qKlxuICogTGV4aW5nID0+IFBhcnNpbmcgPT09PiBBU1QgPT09PiBXYWxraW5nXG4gKi9cbi8qKlxuICogTGV4ZXJcbiAqL1xuY2xhc3MgTGV4ZXIge1xuICAgIHN0YXRpYyBfZGVmYXVsdExhbmd1YWdlID0gbmV3IExleGVyRGljdGlvbmFyeShcImVuXCIsIHtcbiAgICAgICAgXCJpZlwiOiBcImlmXCIsXG4gICAgICAgIFwiZWxzZVwiOiBcImVsc2VcIixcbiAgICAgICAgXCJ0cnVlXCI6IFwidHJ1ZVwiLFxuICAgICAgICBcImZhbHNlXCI6IFwiZmFsc2VcIixcbiAgICAgICAgXCJudWxsXCI6IFwibnVsbFwiLFxuICAgICAgICBcIndoaWxlXCI6IFwid2hpbGVcIixcbiAgICAgICAgXCJmb3JcIjogXCJmb3JcIixcbiAgICAgICAgXCJ3aXRoXCI6IFwid2l0aFwiLFxuICAgICAgICBcInVwXCI6IFwidXBcIixcbiAgICAgICAgXCJkb3duXCI6IFwiZG93blwiLFxuICAgICAgICBcInRpbGxcIjogXCJ0aWxsXCIsXG4gICAgICAgIFwiaW5cIjogXCJpblwiLFxuICAgICAgICBcImJyZWFrXCI6IFwiYnJlYWtcIixcbiAgICAgICAgXCJjb250aW51ZVwiOiBcImNvbnRpbnVlXCIsXG4gICAgICAgIFwicmV0dXJuXCI6IFwicmV0dXJuXCIsXG4gICAgfSk7XG4gICAgc3RhdGljIGxhbmd1YWdlczogTGV4ZXJEaWN0aW9uYXJ5W10gPSBbXG4gICAgICAgIExleGVyLl9kZWZhdWx0TGFuZ3VhZ2UsXG4gICAgICAgIG5ldyBMZXhlckRpY3Rpb25hcnkoXCJmclwiLCB7XG4gICAgICAgICAgICBcInNpXCI6IFwiaWZcIixcbiAgICAgICAgICAgIFwic2lub25cIjogXCJlbHNlXCIsXG4gICAgICAgICAgICBcInZyYWlcIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICBcImZhdXhcIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgXCJudWxcIjogXCJudWxsXCIsXG4gICAgICAgICAgICBcInRhbnF1ZVwiOiBcIndoaWxlXCIsXG4gICAgICAgICAgICBcInBvdXJcIjogXCJmb3JcIixcbiAgICAgICAgICAgIFwiYXZlY1wiOiBcIndpdGhcIixcbiAgICAgICAgICAgIFwibW9udFwiOiBcInVwXCIsXG4gICAgICAgICAgICBcImRlc2NcIjogXCJkb3duXCIsXG4gICAgICAgICAgICBcImp1c3F1YVwiOiBcInRpbGxcIixcbiAgICAgICAgICAgIFwiZGFuc1wiOiBcImluXCIsXG4gICAgICAgICAgICBcImNvdXBlclwiOiBcImJyZWFrXCIsXG4gICAgICAgICAgICBcImNvbnRpbnVlclwiOiBcImNvbnRpbnVlXCIsXG4gICAgICAgICAgICBcInJldHVybmVyXCI6IFwicmV0dXJuXCIsXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgTGV4ZXJEaWN0aW9uYXJ5KFwiYm1cIiwge1xuICAgICAgICAgICAgXCJuaWlcIjogXCJpZlwiLFxuICAgICAgICAgICAgXCJub3RlXCI6IFwiZWxzZVwiLFxuICAgICAgICAgICAgXCJ0aWVuXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgXCJnYWxvblwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICBcImdhbnNhblwiOiBcIm51bGxcIixcbiAgICAgICAgICAgIFwiZm9vXCI6IFwid2hpbGVcIixcbiAgICAgICAgICAgIFwic2VnaW5rYVwiOiBcImZvclwiLFxuICAgICAgICAgICAgXCJuaWluXCI6IFwid2l0aFwiLFxuICAgICAgICAgICAgXCJrYXlcIjogXCJ1cFwiLFxuICAgICAgICAgICAgXCJrYWpcIjogXCJkb3duXCIsXG4gICAgICAgICAgICBcImthdGFcIjogXCJ0aWxsXCIsXG4gICAgICAgICAgICBcImtvbm9cIjogXCJpblwiLFxuICAgICAgICAgICAgXCJ0aWtlXCI6IFwiYnJlYWtcIixcbiAgICAgICAgICAgIFwiaXBhblwiOiBcImNvbnRpbnVlXCIsXG4gICAgICAgICAgICBcInNlZ2luXCI6IFwicmV0dXJuXCIsXG4gICAgICAgIH0pLFxuICAgIF07XG4gICAgc3RhdGljIFJFU0VSVkVEOiB7IFtrZXk6IHN0cmluZ106IFRva2VuIH0gPSB7XG4gICAgICAgIFwiaWZcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuSUYsIFwiaWZcIiksXG4gICAgICAgIFwiZWxzZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5FTFNFLCBcImVsc2VcIiksXG4gICAgICAgIFwidHJ1ZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5UUlVFLCB0cnVlKSxcbiAgICAgICAgXCJmYWxzZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5GQUxTRSwgZmFsc2UpLFxuICAgICAgICBcIm51bGxcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuTlVMTCwgbnVsbCksXG4gICAgICAgIFwiZm9yXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLkZPUl9MT09QLCBcImZvclwiKSxcbiAgICAgICAgXCJ3aGlsZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5XSElMRV9USUxMLCBcIndoaWxlXCIpLFxuICAgICAgICBcIndpdGhcIjogVG9rZW4uZnJvbShUb2tlblR5cGUud2l0aCwgXCJ3aXRoXCIpLFxuICAgICAgICBcInVwXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLnVwLCBcInVwXCIpLFxuICAgICAgICBcImRvd25cIjogVG9rZW4uZnJvbShUb2tlblR5cGUuZG93biwgXCJkb3duXCIpLFxuICAgICAgICBcInRpbGxcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuVElMTCwgXCJ0aWxsXCIpLFxuICAgICAgICBcImluXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLmluLCBcImluXCIpLFxuICAgICAgICBcImJyZWFrXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLkJSRUFLLCBcImJyZWFrXCIpLFxuICAgICAgICBcImNvbnRpbnVlXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLkNPTlRJTlVFLCBcImNvbnRpbnVlXCIpLFxuICAgICAgICBcInJldHVyblwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5SRVRVUk4sIFwicmV0dXJuXCIpLFxuICAgIH07XG4gICAgX2xhbmd1YWdlPzogTGV4ZXJEaWN0aW9uYXJ5O1xuICAgIF9zb3VyY2UhOiBzdHJpbmc7XG4gICAgX3Bvc2l0aW9uID0gMDtcbiAgICBfbGluZSA9IDE7XG4gICAgX2NvbCA9IDE7XG4gICAgX2N1cnJlbnRDaGFyID0gLTE7XG4gICAgZ2V0IHNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgICB9XG4gICAgY29uc3RydWN0b3Ioc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50Q2hhciA9IHRoaXMuX3NvdXJjZVt0aGlzLl9wb3NpdGlvbl0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUxhbmd1YWdlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3Jlc29sdmVMYW5ndWFnZSgpIHtcbiAgICAgICAgbGV0IHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5sZXNzKSB7XG4gICAgICAgICAgICAvLyBsYW5ndWFnZSBzZXR0aW5nXG4gICAgICAgICAgICBjb25zdCBpZFRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgICAgIGlmIChpZFRva2VuLnR5cGUgIT09IFRva2VuVHlwZS5pZCkge1xuICAgICAgICAgICAgICAgIGVycm9yKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBpZFRva2VuLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLl9sYW5ndWFnZSA9IExleGVyLmxhbmd1YWdlcy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LmxhbmcgPT09IGxhbmcpID8/IExleGVyLl9kZWZhdWx0TGFuZ3VhZ2U7XG4gICAgICAgICAgICB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW5UeXBlLmdyZWF0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3IodG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGFuZ3VhZ2UgPSBMZXhlci5fZGVmYXVsdExhbmd1YWdlO1xuICAgICAgICAgICAgLy8gcmVzZXQgcmVhZGluZ1xuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXIgPSB0aGlzLl9zb3VyY2VbdGhpcy5fcG9zaXRpb25dLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hZHZhbmNlKCkge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbisrO1xuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb24gPj0gdGhpcy5fc291cmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXIgPSAtMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyZW50Q2hhciA9IHRoaXMuX3NvdXJjZVt0aGlzLl9wb3NpdGlvbl0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgdGhpcy5fY29sKys7XG4gICAgfVxuICAgIHByaXZhdGUgX2p1bXAobjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uICs9IG47XG4gICAgICAgIGlmICh0aGlzLl9wb3NpdGlvbiA+PSB0aGlzLl9zb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2hhciA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJlbnRDaGFyID0gdGhpcy5fc291cmNlW3RoaXMuX3Bvc2l0aW9uXS5jaGFyQ29kZUF0KDApO1xuICAgICAgICB0aGlzLl9jb2wrPW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGljaygpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb24gKyAxID49IHRoaXMuX3NvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlW3RoaXMuX3Bvc2l0aW9uICsgMV0uY2hhckNvZGVBdCgwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0lkKGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoY29kZSA8IDQ4KSB7XG4gICAgICAgICAgICByZXR1cm4gY29kZSA9PT0gMzY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUgPCA1OCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUgPCA2NSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgOTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgOTcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlID09PSA5NTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDEyMykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzSWRTdGFydChjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGNvZGUgPCA2NSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvZGUgPT09IDM2O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgOTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgOTcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlID09PSA5NTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDEyMykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lkKCk6IFRva2VuIHtcbiAgICAgICAgbGV0IHJldCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGxhc3RDID0gdGhpcy5fY29sO1xuICAgICAgICBjb25zdCBsYXN0UCA9IHRoaXMuX3Bvc2l0aW9uO1xuICAgICAgICBjb25zdCBsaW5lID0gdGhpcy5fbGluZTtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2lzSWQodGhpcy5fY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZElkID0gdGhpcy5fbGFuZ3VhZ2VcbiAgICAgICAgICAgID8gKHRoaXMuX2xhbmd1YWdlLmtleXdvcmRzW3JldF0pID8/IHJldFxuICAgICAgICAgICAgOiByZXQ7XG4gICAgICAgIHJldHVybiBMZXhlci5SRVNFUlZFRFt0cmFuc2xhdGVkSWRdID8/IG5ldyBUb2tlbihUb2tlblR5cGUuaWQsIHJldCwgbGluZSwgbGFzdEMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzTGluZUVuZChjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGMgPT09IDEwIHx8XG4gICAgICAgICAgICBjID09PSAxMyB8fFxuICAgICAgICAgICAgWydcXG4nLCAnXFxyJywgJ1xcdTIwMjgnLCAnXFx1MjAyOSddLmluY2x1ZGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzV2hpdGVTcGFjZShjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFsnICcsICdcXHQnXS5pbmNsdWRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0RpZ2l0KGM6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICByZXR1cm4gYyA+IDAgJiYgKGMgXiAweDMwKSA8PSA5O1xuICAgIH1cbiAgICBwcml2YXRlIF9za2lwV2hpdGVTcGFjZSgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2lzV2hpdGVTcGFjZSh0aGlzLl9jdXJyZW50Q2hhcikgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX251bWJlcigpOiBUb2tlbiB7XG4gICAgICAgIGxldCByZXQgPSBcIlwiO1xuICAgICAgICBjb25zdCBsYXN0QyA9IHRoaXMuX2NvbDtcbiAgICAgICAgY29uc3QgbGFzdFAgPSB0aGlzLl9wb3NpdGlvbjtcbiAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuX2xpbmU7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgY29uc3QgYmMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgbGV0IGJhc2UgPSAxMDtcbiAgICAgICAgaWYgKGZpcnN0ID09PSAnMCcgJiYgWydiJywgJ0InLCAneCcsICdYJywgJ28nLCAnTyddLmluY2x1ZGVzKGJjKSkge1xuICAgICAgICAgICAgLy8gbG9vayBhaGVhZCB0byBzZWUgdGhhdCB0aGUgbnVtYmVyIGlzIHRhZ2dlZFxuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgc3dpdGNoIChiYy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYic6XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSAyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwib1wiOlxuICAgICAgICAgICAgICAgICAgICBiYXNlID0gODtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDE2O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXQgKz0gZmlyc3Q7XG4gICAgICAgICAgICBiYXNlID0gMTA7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMuX2lzRGlnaXQodGhpcy5fY3VycmVudENoYXIpIHx8XG4gICAgICAgICAgICAoYmFzZSA9PT0gMTYgJiZcbiAgICAgICAgICAgICAgICBbJ0EnLCAnYScsICdCJywgJ2InLCAnQycsICdjJywgJ0QnLCAnZCcsICdFJywgJ2UnLCAnRicsICdmJ11cbiAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpKSkpIHtcbiAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcikgPT09ICcuJyAmJiB0aGlzLl9pc0RpZ2l0KHRoaXMuX3BpY2soKSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChiYXNlICE9PSAxMCkge1xuICAgICAgICAgICAgICAgIGVycm9yKG5ldyBUb2tlbihUb2tlblR5cGUuaWQsIGJjLCBsaW5lLCBsYXN0UCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZmxvYXRpbmcgbnVtYmVyXG4gICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5faXNEaWdpdCh0aGlzLl9jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubnVtYmVyQ29uc3QsIHBhcnNlRmxvYXQocmV0KSwgbGluZSwgbGFzdEMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4oXG4gICAgICAgICAgICBUb2tlblR5cGUubnVtYmVyQ29uc3QsIHBhcnNlSW50KHJldCwgYmFzZSksIGxpbmUsIGxhc3RDKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9saXRlcmFsU3RyaW5nKHN0YXJ0Q2hhcjogbnVtYmVyKTogVG9rZW4ge1xuICAgICAgICBsZXQgcmV0ID0gXCJcIjtcbiAgICAgICAgbGV0IGxhc3RDaGFyID0gLTE7XG4gICAgICAgIGNvbnN0IGxhc3RQID0gdGhpcy5fcG9zaXRpb247XG4gICAgICAgIGNvbnN0IGxhc3RDID0gdGhpcy5fY29sO1xuICAgICAgICBjb25zdCBsYXN0TCA9IHRoaXMuX2xpbmU7XG4gICAgICAgIHdoaWxlICh0aGlzLl9jdXJyZW50Q2hhciAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX3BpY2soKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT0gQ2hhcnMuYmFja3NsYXNoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1xcXFwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IFwiXFwwXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYSc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gXCJcXGFcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSBcIlxcYlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IFwiXFxmXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gXCJcXG5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSBcIlxcclwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IFwiXFx0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIucGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlLnN1YnN0cmluZyh0aGlzLl9wb3NpdGlvbiArIDIsIHRoaXMuX3Bvc2l0aW9uICsgNiksIDE2KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9qdW1wKDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3VtZSA0IHVuaWNvZGUgY2hhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSBcIlxcdlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyLnBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5zdWJzdHJpbmcodGhpcy5fcG9zaXRpb24gKyAyLCB0aGlzLl9wb3NpdGlvbiArIDQpLCAxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fanVtcCgyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0YXJ0Q2hhcikgPT0gbmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShzdGFydENoYXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXIgPSB0aGlzLl9jdXJyZW50Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc2NhcGUgY2hhclxuXG4gICAgICAgICAgICAgICAgdGhpcy5fanVtcCgyKTtcbiAgICAgICAgICAgICAgICBsYXN0Q2hhciA9IHRoaXMuX2N1cnJlbnRDaGFyO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBzdGFydENoYXIgJiYgbGFzdENoYXIgIT09IENoYXJzLmJhY2tzbGFzaCkge1xuICAgICAgICAgICAgICAgIC8vIGVuZFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgICAgICBsYXN0Q2hhciA9IHRoaXMuX2N1cnJlbnRDaGFyO1xuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLnN0cmluZ0NvbnN0LCByZXQsIGxhc3RMLCBsYXN0Qyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2tpcExpbmVDb21tZW50KCkge1xuICAgICAgICB3aGlsZSAoIXRoaXMuX2lzTGluZUVuZCh0aGlzLl9jdXJyZW50Q2hhcikgPT09IHRydWUgJiYgdGhpcy5fY3VycmVudENoYXIgIT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF9za2lwQ29tbWVudCgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRDaGFyICE9PSAtMSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5zdGFyICYmIHRoaXMuX3BpY2soKSA9PT0gQ2hhcnMuc2hlYmFuZykge1xuICAgICAgICAgICAgICAgIC8vIGVuZCBvZiBibG9jayBjb21tZW50XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBmPVNVQk1JVF9GT1JNKHh4eCk7XG4gICAgLy8gciA9IENBTExfQVBJKEFQSV9JRCwgZik7XG4gICAgLy8gRElTUExBWShcIk1TRyAjclwiKVxuICAgIG5leHRUb2tlbigpOiBUb2tlbiB7XG4gICAgICAgIGNvbnN0IGxhc3RMID0gdGhpcy5fbGluZTtcbiAgICAgICAgY29uc3QgbGFzdEMgPSB0aGlzLl9jb2w7XG4gICAgICAgIGNvbnN0IGxhc3RQID0gdGhpcy5fcG9zaXRpb247XG5cbiAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRDaGFyICE9PSAtMSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTGluZUVuZCh0aGlzLl9jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9saW5lKys7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sID0gMTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZW9sLCBcIlxcblwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5faXNXaGl0ZVNwYWNlKHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NraXBXaGl0ZVNwYWNlKCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT0gQ2hhcnMuc2hlYmFuZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnN0YXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbXV0bGkgYmxvY2sgY29tbWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NraXBDb21tZW50KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2tpcExpbmVDb21tZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzRGlnaXQodGhpcy5fY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzSWRTdGFydCh0aGlzLl9jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuZXF1YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5lcXVhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmVxZXEsIFwiPT1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZXF1YWwsIFwiPVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5ncmVhdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmVxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZ3JlYXRFcSwgXCI+PVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5ncmVhdCwgXCI+XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmxlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5lcXVhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmxlc3NFcSwgXCI8PVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5sZXNzLCBcIjxcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuc2VtaUNvbG9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLnNlbWksIFwiO1wiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5scGFyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubHBhcmVuLCBcIihcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucnBhcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLnJwYXJlbiwgXCIpXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmNvbW1hKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmNvbW1hLCBcIixcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMubGJyYWNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmxicmFjZSwgXCJ7XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnJicmFjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5yYnJhY2UsIFwifVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5sYnJhY2tldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5sYnJhY2tldCwgXCJbXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnJicmFja2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLnJicmFja2V0LCBcIl1cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucGx1cykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5wbHVzLCBcIitcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMubWludXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubWludXMsIFwiLVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5zbGFzaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5kaXYsIFwiL1wiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5zdGFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLm11bHQsIFwiKlwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5wZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLm1vZCwgXCIlXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmNvbG9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmNvbG9uLCBcIjpcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMubm90KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuZXF1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5ub3RFcSwgXCIhPVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5ub3QsIFwiIVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5hbmQgJiYgdGhpcy5fcGljaygpID09PSBDaGFycy5hbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmFuZCwgXCImJlwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5waXBlICYmIHRoaXMuX3BpY2soKSA9PT0gQ2hhcnMucGlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUub3IsICd8fCcsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnF1ZXN0aW9uTWFyayAmJiB0aGlzLl9waWNrKCkgPT09IENoYXJzLnF1ZXN0aW9uTWFyaykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubnVsbGl0eSwgJz8/JywgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucXVvdGUgfHwgdGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnNxdW90ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2hhciA9IHRoaXMuX2N1cnJlbnRDaGFyO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5fbGl0ZXJhbFN0cmluZyhzdGFydENoYXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXG4gICAgICAgICAgICAgICAgVG9rZW5UeXBlLmludmFsaWQsIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmVvZiwgXCJcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICB9XG59XG5cblxuLyoqXG4gKiBQYXJzZXJcbiAqL1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQVNUIHtcbiAgICBsaW5lPzogbnVtYmVyO1xuICAgIGNvbD86IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcihsaW5lPzogbnVtYmVyLCBjb2w/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5saW5lID0gbGluZTtcbiAgICAgICAgdGhpcy5jb2wgPSBjb2w7XG4gICAgfVxuICAgIGR1bXAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSb290QVNUIGV4dGVuZHMgQVNUIHtcbiAgICBib2R5OiBBU1RbXTtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoYm9keTogQVNUW10sIG5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoMSwgMSk7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGR1bXAoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGJ1aWxkZXIgPSBgTW9kdWxlICR7dGhpcy5uYW1lfSBTdGFydCB7YDtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiB0aGlzLmJvZHkpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIgKz0gYCR7aXQuZHVtcCgpfVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRlciArPSBcIn1cIjtcbiAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTdGF0ZW1lbnRBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGJvZHk6IEFTVFtdO1xuICAgIGNvbnN0cnVjdG9yKGJvZHk6IEFTVFtdLCB0b2tlbjogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIodG9rZW4ubGluZSwgdG9rZW4uY29sKTtcbiAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB7XFxuJHt0aGlzLmJvZHkubWFwKChlKSA9PiBlLnRvU3RyaW5nKCkpLmpvaW4oXCJcXG5cIil9fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWRlbnRpZmllckFTVCBleHRlbmRzIEFTVCB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBjb25zdHJ1Y3Rvcih0b2tlbjogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIodG9rZW4ubGluZSwgdG9rZW4uY29sKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRva2VuLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpdGVyYWxBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIHZhbHVlOiBhbnk7XG4gICAgcmF3OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IodG9rZW46IFRva2VuLCByYXc6IHN0cmluZykge1xuICAgICAgICBzdXBlcih0b2tlbi5saW5lLCB0b2tlbi5jb2wpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgIHRoaXMucmF3ID0gcmF3O1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBpZGVudGlmaWVyOiBBU1Q7XG4gICAgaW5pdDogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGlkZW50aWZpZXI6IEFTVCwgaW5pdDogQVNUKSB7XG4gICAgICAgIHN1cGVyKGlkZW50aWZpZXIubGluZSwgaWRlbnRpZmllci5jb2wpO1xuICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgICAgICB0aGlzLmluaXQgPSBpbml0O1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5pZGVudGlmaWVyfSA9ICR7dGhpcy5pbml0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblN0YXRlbWVudEFTVCBleHRlbmRzIEFTVCB7XG4gICAgZXhwcmVzc2lvbjogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IEFTVCkge1xuICAgICAgICBzdXBlcihleHByZXNzaW9uLmxpbmUsIGV4cHJlc3Npb24uY29sKTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi50b1N0cmluZygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbGxFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBjYWxsZWU6IElkZW50aWZpZXJBU1Q7XG4gICAgYXJndW1lbnRzOiBBU1RbXTtcbiAgICBjb25zdHJ1Y3RvcihjYWxsZWU6IElkZW50aWZpZXJBU1QsIGFnczogQVNUW10pIHtcbiAgICAgICAgc3VwZXIoY2FsbGVlLmxpbmUsIGNhbGxlZS5jb2wpO1xuICAgICAgICB0aGlzLmNhbGxlZSA9IGNhbGxlZTtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMgPSBhZ3M7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNhbGxlZS50b1N0cmluZygpfSguLi4ke3RoaXMuYXJndW1lbnRzLmxlbmd0aH0pYDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5hcnlFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBsZWZ0OiBBU1Q7XG4gICAgb3BlcmF0aW9uOiBUb2tlbjtcbiAgICByaWdodDogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGxlZnQ6IEFTVCwgb3BlcmF0aW9uOiBUb2tlbiwgcmlnaHQ6IEFTVCkge1xuICAgICAgICBzdXBlcihsZWZ0LmxpbmUsIGxlZnQuY29sKTtcbiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGVmdH0gJHt0aGlzLm9wZXJhdGlvbn0gJHt0aGlzLnJpZ2h0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hcnlFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBvcGVyYXRpb246IFRva2VuO1xuICAgIGFyZ3VtZW50OiBBU1Q7XG4gICAgY29uc3RydWN0b3Iob3BlcmF0aW9uOiBUb2tlbiwgYXJndW1lbnQ6IEFTVCkge1xuICAgICAgICBzdXBlcihvcGVyYXRpb24ubGluZSwgb3BlcmF0aW9uLmNvbCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uLCB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm9wZXJhdGlvbn0gJHt0aGlzLmFyZ3VtZW50fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWZTdGF0ZW1lbnRBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIHRlc3Q6IEFTVDtcbiAgICBjb25zZXF1ZW50OiBBU1Q7XG4gICAgYWx0ZXJuYXRlPzogQVNUO1xuICAgIGNvbnN0cnVjdG9yKHRlc3Q6IEFTVCwgY29uc2VxdWVudDogQVNULCBhbHRlcm5hdGU/OiBBU1QpIHtcbiAgICAgICAgc3VwZXIodGVzdC5saW5lLCB0ZXN0LmNvbCk7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7XG4gICAgICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgaWYgJHt0aGlzLnRlc3R9ICR7dGhpcy5jb25zZXF1ZW50fSAke3RoaXMuYWx0ZXJuYXRlID8gYGVsc2UgJHt0aGlzLmFsdGVybmF0ZX0gYCA6ICcnfWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9naWNhbEV4cHJlc3Npb25BU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGxlZnQ6IEFTVDtcbiAgICBvcGVyYXRvcjogVG9rZW47XG4gICAgcmlnaHQ6IEFTVDtcbiAgICBjb25zdHJ1Y3RvcihsZWZ0OiBBU1QsIG9wZXJhdG9yOiBUb2tlbiwgcmlnaHQ6IEFTVCkge1xuICAgICAgICBzdXBlcihsZWZ0LmxpbmUsIGxlZnQuY29sKTtcbiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxlZnR9ICR7dGhpcy5vcGVyYXRvci52YWx1ZX0gJHt0aGlzLnJpZ2h0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5kZXhBY2Nlc3NvckFTVCBleHRlbmRzIEFTVCB7XG4gICAgb3duZXI6IEFTVDtcbiAgICBrZXk6IEFTVDtcbiAgICBjb21wdXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKG93bmVyOiBBU1QsIGtleTogQVNULCBjb21wdXRlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKG93bmVyLmxpbmUsIG93bmVyLmNvbCk7XG4gICAgICAgIHRoaXMub3duZXIgPSBvd25lcjtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuY29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMub3duZXJ9WyR7dGhpcy5rZXl9XWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT2JqZWN0RXhwcmVzc2lvbiBleHRlbmRzIEFTVCB7XG4gICAgcHJvcGVydGllczogQVNUW107XG4gICAgY29uc3RydWN0b3IocHJvcHM6IEFTVFtdLCBzdGFydFRva2VuPzogVG9rZW4sIGVuZFRva2VuPzogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIoc3RhcnRUb2tlbj8ubGluZSwgc3RhcnRUb2tlbj8uY29sKTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHM7XG4gICAgfVxuICAgIG92ZXJyaWRlICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJ7Li4ufVwiO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5RXhwcmVzc2lvbiBleHRlbmRzIEFTVCB7XG4gICAgZWxlbWVudHM6IEFTVFtdO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBBU1RbXSwgc3RhcnQ/OiBBU1QsIGVuZD86IEFTVCkge1xuICAgICAgICBzdXBlcihzdGFydD8ubGluZSwgc3RhcnQ/LmNvbCk7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBwcm9wcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlsuLi5dXCI7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9iamVjdFByb3BlcnR5IGV4dGVuZHMgQVNUIHtcbiAgICBrZXk6IEFTVDtcbiAgICB2YWx1ZTogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGtleTogQVNULCB2YWx1ZTogQVNUKSB7XG4gICAgICAgIHN1cGVyKGtleS5saW5lLCBrZXkuY29sKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgV2hpbGVMb29wU3RhdGVtZW50IGV4dGVuZHMgQVNUIHtcbiAgICB0ZXN0OiBBU1Q7XG4gICAgYm9keTogQVNUO1xuICAgIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKHRlc3Q6IEFTVCwgYm9keTogQVNULCBzdGFydFRva2VuPzogVG9rZW4sIGVuZFRva2VuPzogVG9rZW4sIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKHN0YXJ0VG9rZW4/LmxpbmUsIHN0YXJ0VG9rZW4/LmNvbCk7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHRoaXMucmV0YWluID0gcmV0YWluO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBGb3JMb29wU3RhdGVtZW50IGV4dGVuZHMgQVNUIHtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpbml0OiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCxcbiAgICAgICAgcHVibGljIHRlc3Q6IEFTVCxcbiAgICAgICAgcHVibGljIHVwZGF0ZTogQVNULFxuICAgICAgICBwdWJsaWMgZGlyZWN0aW9uOiBUb2tlbixcbiAgICAgICAgcHVibGljIGJvZHk6IEFTVCxcbiAgICAgICAgc3RhcnRUb2tlbj86IFRva2VuLFxuICAgICAgICBlbmRUb2tlbj86IFRva2VuLFxuICAgICAgICBwdWJsaWMgcmV0YWluOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoc3RhcnRUb2tlbj8ubGluZSwgc3RhcnRUb2tlbj8uY29sKVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBGb3JPZlN0YXRlbWVudCBleHRlbmRzIEFTVCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBpZGVudGlmaWVyOiBBU1QsXG4gICAgICAgIHB1YmxpYyBjb2xsZWN0aW9uOiBBU1QsXG4gICAgICAgIHB1YmxpYyBib2R5OiBBU1QsXG4gICAgICAgIHN0YXJ0VG9rZW4/OiBUb2tlbixcbiAgICAgICAgZW5kVG9rZW4/OiBUb2tlbixcbiAgICAgICAgcHVibGljIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKHN0YXJ0VG9rZW4/LmxpbmUsIHN0YXJ0VG9rZW4/LmNvbClcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgVHVwbGVFeHByZXNzaW9uIGV4dGVuZHMgQVNUIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZmlyc3Q6IEFTVCwgcHVibGljIHNlY29uZDogQVNUKSB7XG4gICAgICAgIHN1cGVyKGZpcnN0LmxpbmUsIGZpcnN0LmNvbClcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQnJlYWtBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGNvbnN0cnVjdG9yKGxpbmU/OiBudW1iZXIsIGNvbD86IG51bWJlcikge1xuICAgICAgICBzdXBlcihsaW5lLCBjb2wpXG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFJldHVybkFTVCBleHRlbmRzIEFTVCB7XG4gICAgdmFsdWU/OiBBU1Q7XG4gICAgY29uc3RydWN0b3IodmFsdWU/OiBBU1QsIGxpbmU/OiBudW1iZXIsIGNvbD86IG51bWJlcikge1xuICAgICAgICBzdXBlcihsaW5lLCBjb2wpXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ29udGludWVBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGNvbnN0cnVjdG9yKGxpbmU/OiBudW1iZXIsIGNvbD86IG51bWJlcikge1xuICAgICAgICBzdXBlcihsaW5lLCBjb2wpO1xuICAgIH1cbn1cbmludGVyZmFjZSBRdWV1ZTxUPiB7XG4gICAgcHVzaChpdGVtOiBUKTogdm9pZDtcbiAgICBwb3AoKTogVCB8IHVuZGVmaW5lZDtcbiAgICBwZWVrKCk6IFQgfCB1bmRlZmluZWQ7XG4gICAgc2l6ZSgpOiBudW1iZXI7XG4gICAgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbjtcbn1cbmNsYXNzIExpc3RRdWV1ZTxUPiBpbXBsZW1lbnRzIFF1ZXVlPFQ+IHtcbiAgICBwcml2YXRlIHN0b3JhZ2U6IFRbXSA9IFtdO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FwYWNpdHk6IG51bWJlciA9IEluZmluaXR5KSB7IH1cbiAgICBwdXNoKGl0ZW06IFQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSgpID09PSB0aGlzLmNhcGFjaXR5KSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIlN0YWNrIGhhcyByZWFjaGVkIG1heCBjYXBhY2l0eSwgeW91IGNhbm5vdCBhZGQgbW9yZSBpdGVtc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JhZ2UucHVzaChpdGVtKTtcbiAgICB9XG5cbiAgICBwb3AoKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2UucG9wKCk7XG4gICAgfVxuXG4gICAgcGVlaygpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZVt0aGlzLnNpemUoKSAtIDFdO1xuICAgIH1cblxuICAgIHNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5sZW5ndGg7XG4gICAgfVxuICAgIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbn1cbmNsYXNzIFBhcnNlciB7XG4gICAgc3RhdGljIF9iaW5vcFByZWNkZW5jZXM6IHsgW2s6IG51bWJlcl06IG51bWJlciB9ID0ge1xuICAgICAgICBbVG9rZW5UeXBlLmVxZXFdOiAxMCxcbiAgICAgICAgW1Rva2VuVHlwZS5ub3RFcV06IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLmdyZWF0XTogMTAsXG4gICAgICAgIFtUb2tlblR5cGUuZ3JlYXRFcV06IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLmxlc3NdOiAxMCxcbiAgICAgICAgW1Rva2VuVHlwZS5sZXNzRXFdOiAxMCxcbiAgICAgICAgW1Rva2VuVHlwZS5wbHVzXTogMjAsXG4gICAgICAgIFtUb2tlblR5cGUubWludXNdOiAyMCxcbiAgICAgICAgW1Rva2VuVHlwZS5tdWx0XTogNDAsXG4gICAgICAgIFtUb2tlblR5cGUuZGl2XTogNDAsXG4gICAgICAgIFtUb2tlblR5cGUubW9kXTogNDAsXG4gICAgfTtcbiAgICBwcml2YXRlIF9sb29wVHJhY2sgPSBuZXcgTGlzdFF1ZXVlPGJvb2xlYW4+KCk7XG4gICAgbGV4ZXIhOiBMZXhlcjtcbiAgICBjdXJyZW50VG9rZW4/OiBUb2tlbjtcbiAgICBjb25zdHJ1Y3RvcihsZXhlcjogTGV4ZXIpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSBsZXhlci5uZXh0VG9rZW4oKTtcbiAgICAgICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2VhdCh0eXBlOiBUb2tlblR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRoaXMubGV4ZXIubmV4dFRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcih0aGlzLmN1cnJlbnRUb2tlbiEsIHR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZWF0RU9MKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5lb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuZW9sKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VhdFNlbWlPckVPTCgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSBUb2tlblR5cGUuZW9sIHx8XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLnNlbWkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdCh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9lYXRTZW1pKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5zZW1pKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnNlbWkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFyaWFibGUoKTogSWRlbnRpZmllckFTVCB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgSWRlbnRpZmllckFTVCh0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmlkKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIHByaXZhdGUgX3JldHVybigpOiBBU1Qge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBsZXQgdmFsdWU6IEFTVCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCF0aGlzLl9leHBlY3QoVG9rZW5UeXBlLmVvbCkgJiYgIXRoaXMuX2V4cGVjdChUb2tlblR5cGUuc2VtaSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZXhwcmVzc2lvbigpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm5BU1QodmFsdWUsIHRva2VuPy5saW5lLCB0b2tlbj8uY29sKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZmFjdG9yKCk6IEFTVCB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnBsdXM6XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5taW51czpcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm5vdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVW5hcnlFeHByZXNzaW9uQVNUKHRva2VuISwgdGhpcy5fdGVybSgpKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm51bWJlckNvbnN0OlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubnVtYmVyQ29uc3QpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbEFTVCh0b2tlbiwgdG9rZW4udmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5zdHJpbmdDb25zdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnN0cmluZ0NvbnN0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpdGVyYWxBU1QodG9rZW4sIHRva2VuLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubHBhcmVuOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubHBhcmVuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucnBhcmVuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLlRSVUU6XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5GQUxTRTpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbEFTVCh0b2tlbiwgdG9rZW4udmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5OVUxMOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuTlVMTCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsQVNUKHRva2VuLCBcIm51bGxcIik7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sYnJhY2tldDpcbiAgICAgICAgICAgICAgICAvLyBsaXRlcmFsIGFycmF5IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXJyYXlFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sYnJhY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLklGOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pZlN0YXRlbWVudCgpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuV0hJTEVfVElMTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2hpbGVMb29wKHRydWUpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuRk9SX0xPT1A6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvckxvb3AodHJ1ZSk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5CUkVBSzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5DT05USU5VRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udGludWVFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YXJpYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2JyZWFrRXhwcmVzc2lvbigpOiBBU1Qge1xuICAgICAgICBpZiAodGhpcy5fbG9vcFRyYWNrLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5CUkVBSyk7XG4gICAgICAgIHJldHVybiBuZXcgQnJlYWtBU1QodGhpcy5jdXJyZW50VG9rZW4/LmxpbmUsIHRoaXMuY3VycmVudFRva2VuPy5jb2wpO1xuICAgIH1cblxuICAgIF9jb250aW51ZUV4cHJlc3Npb24oKTogQVNUIHtcbiAgICAgICAgaWYgKHRoaXMuX2xvb3BUcmFjay5pc0VtcHR5KSB7XG4gICAgICAgICAgICBlcnJvcih0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuQ09OVElOVUUpO1xuICAgICAgICByZXR1cm4gbmV3IENvbnRpbnVlQVNUKHRoaXMuY3VycmVudFRva2VuPy5saW5lLCB0aGlzLmN1cnJlbnRUb2tlbj8uY29sKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfdGVybSgpOiBBU1Qge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuX2ZhY3RvcigpO1xuICAgICAgICBub2RlID0gdGhpcy5fdHJ5UGFyc2luZ0Z1bmN0aW9uQ2FsbChub2RlKTtcbiAgICAgICAgbm9kZSA9IHRoaXMuX3RyeVBhcnNpbmdNZW1iZXJFeHByZXNzaW9uKG5vZGUpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9leHByZXNzaW9uKCk6IEFTVCB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy5fdGVybSgpO1xuICAgICAgICBub2RlID0gdGhpcy5fdHJ5QmluYXJ5RXhwcmVzc2lvbigwLCBub2RlKTtcbiAgICAgICAgd2hpbGUgKFtUb2tlblR5cGUuYW5kLCBUb2tlblR5cGUub3IsIFRva2VuVHlwZS5udWxsaXR5XS5pbmNsdWRlcyh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICAgICAgdGhpcy5fZWF0KHRva2VuLnR5cGUpO1xuICAgICAgICAgICAgbm9kZSA9IG5ldyBMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlLCB0b2tlbiwgdGhpcy5fZXhwcmVzc2lvbigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS5lcXVhbCkpIHtcbiAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCB8fCBub2RlIGluc3RhbmNlb2YgSW5kZXhBY2Nlc3NvckFTVCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuZXF1YWwpO1xuICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgQXNzaWdubWVudEV4cHJlc3Npb25BU1Qobm9kZSwgdGhpcy5fZXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCB0b2tlblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfb2JqZWN0UHJvcGVydHkoKTogT2JqZWN0UHJvcGVydHkge1xuICAgICAgICBsZXQga2V5OiBBU1Q7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnN0cmluZ0NvbnN0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV3IExpdGVyYWxBU1QodGhpcy5jdXJyZW50VG9rZW4sIHRoaXMuY3VycmVudFRva2VuLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5zdHJpbmdDb25zdCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFja2V0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5sYnJhY2tldCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFja2V0KTtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gZXhwcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuaWQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3ZhcmlhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5ldyBMaXRlcmFsQVNUKG5ldyBUb2tlbihUb2tlblR5cGUuaWQsIGlkLnZhbHVlLCBpZC5saW5lLCBpZC5jb2wpLCBpZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgYFVuZXhwZWN0ZWQgdG9rZW4gJHt0aGlzLmN1cnJlbnRUb2tlbn1gO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuY29sb24pO1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0UHJvcGVydHkoa2V5ISwgdmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9wcm9wZXJ0eSgpOiBBU1Qge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0UHJvcGVydHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9vYmplY3RQcm9wZXJ0aWVzKCk6IEFTVFtdIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllczogQVNUW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuPy50eXBlICE9IFRva2VuVHlwZS5yYnJhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHRoaXMuX3Byb3BlcnR5KCkpO1xuICAgICAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSBUb2tlblR5cGUuY29tbWEpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuY29tbWEpO1xuICAgICAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS5yYnJhY2UpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2godGhpcy5fcHJvcGVydHkoKSk7XG4gICAgICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9vYmplY3RFeHByZXNzaW9uKGJyYWNlVG9rZW4/OiBUb2tlbik6IEFTVCB7XG4gICAgICAgIHZhciB0b2tlbiA9IGJyYWNlVG9rZW4gPz8gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIGlmICghYnJhY2VUb2tlbikgdGhpcy5fZWF0KFRva2VuVHlwZS5sYnJhY2UpO1xuICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuX29iamVjdFByb3BlcnRpZXMoKTtcbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5yYnJhY2UpO1xuICAgICAgICByZXR1cm4gbmV3IE9iamVjdEV4cHJlc3Npb24ocHJvcGVydGllcywgdG9rZW4sIHRoaXMuY3VycmVudFRva2VuKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hcnJheUV4cHJlc3Npb24oKTogQVNUIHtcbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5sYnJhY2tldCk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzOiBBU1RbXSA9IHRoaXMuX2V4cGVjdChUb2tlblR5cGUucmJyYWNrZXQpID8gW10gOiB0aGlzLl9leHByZXNzaW9uc0xpc3QoKTtcbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5yYnJhY2tldCk7XG4gICAgICAgIHZhciBzdGFydE5vZGUgPSBlbGVtZW50cy5sZW5ndGggIT09IDAgPyBlbGVtZW50c1swXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGxhc3ROb2RlID0gZWxlbWVudHMubGVuZ3RoICE9PSAwID8gZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBuZXcgQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzLCBzdGFydE5vZGUsIGxhc3ROb2RlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfdHJ5UGFyc2luZ01lbWJlckV4cHJlc3Npb24objogQVNUKTogQVNUIHtcbiAgICAgICAgbGV0IG5vZGUgPSBuO1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5sYnJhY2tldCkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5sYnJhY2tldCk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICBub2RlID0gbmV3IEluZGV4QWNjZXNzb3JBU1Qobm9kZSwga2V5KTtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RyeUJpbmFyeUV4cHJlc3Npb24ocHJlYzogbnVtYmVyLCBsZWZ0OiBBU1QpOiBBU1Qge1xuICAgICAgICBsZXQgbm9kZSA9IGxlZnQ7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UHJlYyA9IFBhcnNlci5fYmlub3BQcmVjZGVuY2VzW3RoaXMuY3VycmVudFRva2VuIS50eXBlXSB8fCAtMTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UHJlYyA8IHByZWMpIHJldHVybiBub2RlO1xuICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmN1cnJlbnRUb2tlbiE7XG4gICAgICAgICAgICB0aGlzLl9lYXQob3BlcmF0b3IudHlwZSk7XG4gICAgICAgICAgICBsZXQgcmlnaHQgPSB0aGlzLl90ZXJtKCk7XG4gICAgICAgICAgICBjb25zdCBuZXh0UHJlYyA9IFBhcnNlci5fYmlub3BQcmVjZGVuY2VzW3RoaXMuY3VycmVudFRva2VuIS50eXBlXSB8fCAtMTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UHJlYyA8IG5leHRQcmVjKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG1wID0gdGhpcy5fdHJ5QmluYXJ5RXhwcmVzc2lvbihjdXJyZW50UHJlYyArIDEsIHJpZ2h0KTtcbiAgICAgICAgICAgICAgICBpZiAodG1wID09PSBub2RlKSByZXR1cm4gdG1wO1xuICAgICAgICAgICAgICAgIHJpZ2h0ID0gdG1wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZSA9IG5ldyBCaW5hcnlFeHByZXNzaW9uQVNUKG5vZGUsIG9wZXJhdG9yLCByaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9leHByZXNzaW9uc0xpc3QoKTogQVNUW10ge1xuICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgLy8gaWYgKGV4cGVjdChMZXhlci5Ub2tlblR5cGUuUlBBUkVOKSkgcmV0dXJuIGVtcHR5TGlzdCgpXG4gICAgICAgIGxldCBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW2V4cHJdO1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5jb21tYSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5jb21tYSk7XG4gICAgICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJicmFja2V0KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwciA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGV4cHIpO1xuICAgICAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jYWxsRXhwcmVzc2lvbihub2RlOiBBU1QpOiBDYWxsRXhwcmVzc2lvbkFTVCB7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubHBhcmVuKTtcbiAgICAgICAgbGV0IGFyZ3M6IEFTVFtdID0gW107XG4gICAgICAgIGlmICghdGhpcy5fZXhwZWN0KFRva2VuVHlwZS5ycGFyZW4pKSB7XG4gICAgICAgICAgICBhcmdzID0gdGhpcy5fZXhwcmVzc2lvbnNMaXN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5ycGFyZW4pO1xuICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCkpIHtcbiAgICAgICAgICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDYWxsRXhwcmVzc2lvbkFTVChub2RlIGFzIElkZW50aWZpZXJBU1QsIGFyZ3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RyeVBhcnNpbmdGdW5jdGlvbkNhbGwobjogQVNUKTogQVNUIHtcbiAgICAgICAgbGV0IG5vZGUgPSBuO1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5scGFyZW4pIHtcbiAgICAgICAgICAgIC8vIHByb2JhYmxlIGZ1bmN0aW9uIGNhbGxcbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLl9jYWxsRXhwcmVzc2lvbihub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zdGF0ZW1lbnRFeHByZXNzaW9uKCk6IEFTVCB7XG5cbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX2V4cHJlc3Npb24oKTtcblxuICAgICAgICBpZiAoIVtUb2tlblR5cGUuc2VtaSwgVG9rZW5UeXBlLmVvbCwgVG9rZW5UeXBlLmVvZl1cbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkpIHtcbiAgICAgICAgICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYmxvY2tTdGF0ZW1lbnQoaWdub3JlRmlyc3RCcmFjZSA9IGZhbHNlKTogQmxvY2tTdGF0ZW1lbnRBU1Qge1xuICAgICAgICBpZiAoIWlnbm9yZUZpcnN0QnJhY2UpIHRoaXMuX2VhdChUb2tlblR5cGUubGJyYWNlKTtcbiAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJicmFjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvY2tTdGF0ZW1lbnRBU1QoW10sIHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgYm9keSA9IF9zdGF0ZW1lbnRzKCk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBbdGhpcy5fc3RhdGVtZW50KCldO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0U2VtaU9yRU9MKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5yYnJhY2UgfHwgdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5lb2YpIHtcbiAgICAgICAgICAgICAgICAvLyBfZWF0KHRoaXMuY3VycmVudFRva2VuIS50eXBlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJvZHkucHVzaCh0aGlzLl9zdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS5yYnJhY2UpKSBicmVhaztcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSAhPT0gVG9rZW5UeXBlLmVvbCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuc2VtaSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuZW9mKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFjZSk7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLnJicmFjZSkge1xuICAgICAgICAgICAgLy8gZW5kQmxvY2tcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQmxvY2tTdGF0ZW1lbnRBU1QoYm9keSwgdGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pZlN0YXRlbWVudCgpOiBJZlN0YXRlbWVudEFTVCB7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuSUYpO1xuICAgICAgICBjb25zdCB3aXRoUGFyID0gdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5scGFyZW47XG4gICAgICAgIGlmICh3aXRoUGFyKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxwYXJlbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGVzdCA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgaWYgKHdpdGhQYXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucnBhcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29uc2VxdWVudDogQVNUO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5sYnJhY2UpIHtcbiAgICAgICAgICAgIGNvbnNlcXVlbnQgPSB0aGlzLl9ibG9ja1N0YXRlbWVudCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc2VxdWVudCA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMuX2VhdFNlbWlPckVPTCgpO1xuICAgICAgICBsZXQgYWx0ZXJuYXRlOiBBU1QgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLkVMU0UpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuRUxTRSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFRva2VuIS50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSUY6XG4gICAgICAgICAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRoaXMuX2lmU3RhdGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFjZTpcbiAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gdGhpcy5fYmxvY2tTdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBJZlN0YXRlbWVudEFTVCh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpO1xuICAgIH1cblxuICAgIF9wdXNoTG9vcCgpIHtcbiAgICAgICAgdGhpcy5fbG9vcFRyYWNrLnB1c2godHJ1ZSk7XG4gICAgfVxuXG4gICAgX3BvcExvb3AoKSB7XG4gICAgICAgIHRoaXMuX2xvb3BUcmFjay5wb3AoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfd2hpbGVMb29wKHJldGFpbiA9IGZhbHNlKTogV2hpbGVMb29wU3RhdGVtZW50IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbiE7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuV0hJTEVfVElMTClcbiAgICAgICAgdGhpcy5fcHVzaExvb3AoKTtcbiAgICAgICAgY29uc3QgdGVzdCA9IHRoaXMuX2V4cHJlc3Npb24oKVxuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5sYnJhY2UgPyB0aGlzLl9ibG9ja1N0YXRlbWVudCgpIDogdGhpcy5fZXhwcmVzc2lvbigpXG4gICAgICAgIHRoaXMuX3BvcExvb3AoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBXaGlsZUxvb3BTdGF0ZW1lbnQodGVzdCwgYm9keSwgdG9rZW4sIHRoaXMuY3VycmVudFRva2VuISwgcmV0YWluKVxuICAgIH1cblxuICAgIHByaXZhdGUgX2Zvck9mSWRlbnRpZmllcigpOiBBU1Qge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFRva2VuIS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5scGFyZW46IHtcbiAgICAgICAgICAgICAgICAvLyBwcm9iYWJsZSB0dXBsZVxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubHBhcmVuKVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5fdmFyaWFibGUoKVxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuY29tbWEpXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gdGhpcy5fdmFyaWFibGUoKVxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucnBhcmVuKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHVwbGVFeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICBmaXJzdCxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRva2VuVHlwZS5MQlJBQ0UgLT4gb2JqZWN0UGF0dGVybigpXG4gICAgICAgICAgICAvLyBUb2tlblR5cGUuTEJSQUNLRVQgLT4gYXJyYXlQYXR0ZXJuKClcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlKClcbiAgICAgICAgfVxuXG4gICAgfVxuICAgIC8qKlxuICAgICAqICMgRm9yTG9vcFN0YXRlbWVudCB3aXRoIHN0ZXBcbiAgICAgKiAoc2VnaW5rYXxmb3IpIGE9MCAoZm9vfHRvKSAxMCAoa2F5fGthaikgbmlpbiAyIHsgIyBmb3IgYSA9IDA7IGE8MTA7IGErPTJcbiAgICAgKlxuICAgICAqIH1cbiAgICAgKiAoc2VnaW5rYXxmb3IpIG1hbGkga29ubyBhXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9yTG9vcChyZXRhaW4gPSBmYWxzZSk6IEFTVCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0VG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbiE7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuRk9SX0xPT1ApXG4gICAgICAgIHRoaXMuX3B1c2hMb29wKCk7XG4gICAgICAgIGxldCBmb3JPZiA9XG4gICAgICAgICAgICBbVG9rZW5UeXBlLmxwYXJlbl0uaW5jbHVkZXModGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpO1xuICAgICAgICBsZXQgbm9kZTogQVNUO1xuICAgICAgICBpZiAoZm9yT2YpIHtcbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLl9mb3JPZklkZW50aWZpZXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICBpZiAoIShleHByIGluc3RhbmNlb2YgQXNzaWdubWVudEV4cHJlc3Npb25BU1QpKSB7XG4gICAgICAgICAgICAgICAgZm9yT2YgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZSA9IGV4cHI7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGlmICghZm9yT2YgJiYgbm9kZSBpbnN0YW5jZW9mIEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgICAgICAvLyBub3JtYWwgZm9yXG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLlRJTEwpO1xuICAgICAgICAgICAgY29uc3QgdGVzdCA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGxldCBkaXJlY3Rpb246IFRva2VuO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS51cCB8fCB0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmRvd24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdCh0LnR5cGUpXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gdFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBuZXcgVG9rZW4oVG9rZW5UeXBlLnVwLCBcInVwXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHVwZGF0ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLndpdGgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS53aXRoKVxuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgdXBkYXRlID0gZXhwclxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUgPSBuZXcgTGl0ZXJhbEFTVChuZXcgVG9rZW4oVG9rZW5UeXBlLm51bWJlckNvbnN0LCAxLCB0aGlzLmN1cnJlbnRUb2tlbiEubGluZSwgdGhpcy5jdXJyZW50VG9rZW4hLmNvbCksIFwiMVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYm9keSA9ICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFjZSkgPyB0aGlzLl9ibG9ja1N0YXRlbWVudCgpIDogdGhpcy5fZXhwcmVzc2lvbigpXG5cbiAgICAgICAgICAgIG5vZGUgPSBuZXcgRm9yTG9vcFN0YXRlbWVudChub2RlLCB0ZXN0LCB1cGRhdGUsIGRpcmVjdGlvbiwgYm9keSwgc3RhcnRUb2tlbiwgdGhpcy5jdXJyZW50VG9rZW4hLCByZXRhaW4pO1xuICAgICAgICAgICAgdGhpcy5fcG9wTG9vcCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvck9mKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmluKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gKHRoaXMuY3VycmVudFRva2VuISEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFjZSkgPyB0aGlzLl9ibG9ja1N0YXRlbWVudCgpIDogdGhpcy5fZXhwcmVzc2lvbigpXG4gICAgICAgICAgICBub2RlID0gbmV3IEZvck9mU3RhdGVtZW50KFxuICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4sXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4hLFxuICAgICAgICAgICAgICAgIHJldGFpblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgdGhpcy5fcG9wTG9vcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIHByaXZhdGUgX3N0YXRlbWVudCgpOiBBU1Qge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFRva2VuIS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5CUkVBSzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5DT05USU5VRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udGludWVFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5SRVRVUk46XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5SRVRVUk4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVybigpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuc2VtaTpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXRTZW1pKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlbWVudCgpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZW9sOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIC8vIGNhc2UgVG9rZW5UeXBlLklGOlxuICAgICAgICAgICAgLy8gICAgIHJldHVybiB0aGlzLl9pZlN0YXRlbWVudCgpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuV0hJTEVfVElMTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2hpbGVMb29wKCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5GT1JfTE9PUDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9yTG9vcCgpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVtZW50RXhwcmVzc2lvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZXhwZWN0KHR5cGU6IFRva2VuVHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IHR5cGU7XG4gICAgfVxuICAgIHByaXZhdGUgX2RlZmluaXRpb24oKTogQVNUW10ge1xuICAgICAgICB0aGlzLl9lYXRTZW1pT3JFT0woKTtcblxuICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS5lb2YpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFt0aGlzLl9zdGF0ZW1lbnQoKV07XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXRTZW1pT3JFT0woKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmVvZikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuZW9mKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFjZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9ibG9ja1N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMuX3N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSAhPT0gVG9rZW5UeXBlLmVvbCAmJlxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuc2VtaSAmJlxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuZW9mKSB7XG4gICAgICAgICAgICAvLyAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yb290KCk6IFJvb3RBU1Qge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmxleGVyLnNvdXJjZTtcbiAgICAgICAgY29uc3QgbmFtZSA9IFwiPG1vZHVsZT5cIjtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuX2RlZmluaXRpb24oKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSb290QVNUKGxpc3QsIG5hbWUsIHNvdXJjZSk7XG4gICAgfVxuXG4gICAgcGFyc2UoKTogQVNUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIExvb3BDb250cm9sIHtcbn1cbmV4cG9ydCBjbGFzcyBCcmVha0JyYW5jaCBleHRlbmRzIExvb3BDb250cm9sIHsgfVxuZXhwb3J0IGNsYXNzIENvbnRpbnVlQnJhbmNoIGV4dGVuZHMgTG9vcENvbnRyb2wgeyB9XG5leHBvcnQgY2xhc3MgUmV0dXJuQnJhbmNoIHtcbiAgICB2YWx1ZTogYW55O1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbn07XG5cbnR5cGUgRnVuYyA9IChub2RlOiBhbnkpID0+IGFueTtcbi8vIEFTVCBXYWxsa2VyXG5hYnN0cmFjdCBjbGFzcyBBTm9kZVZpc2l0b3Ige1xuICAgIHByb3RlY3RlZCBfbm9kZXNWaXNpdG9yczogeyBbazogc3RyaW5nXTogRnVuYyB9ID0ge307XG4gICAgcHJvdGVjdGVkIHJlZ2lzdGVyVmlzaXRvcih0eXBlOiBhbnksIHZpc2l0b3I6IEZ1bmMpIHtcbiAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGB2aXNpdCR7KHR5cGUgYXMgYW55KS5uYW1lfWA7XG4gICAgICAgIHRoaXMuX25vZGVzVmlzaXRvcnNbbWV0aG9kTmFtZV0gPSB2aXNpdG9yO1xuICAgIH1cblxuICAgIGFic3RyYWN0IHZpc2l0KG5vZGU6IEFTVCk6IGFueTtcbn1cblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTm9kZVZpc2l0b3IgZXh0ZW5kcyBBTm9kZVZpc2l0b3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihSb290QVNULCB0aGlzLnZpc2l0Um9vdEFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEJsb2NrU3RhdGVtZW50QVNULCB0aGlzLnZpc2l0QmxvY2tTdGF0ZW1lbnRBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihJZGVudGlmaWVyQVNULCB0aGlzLnZpc2l0SWRlbnRpZmllckFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKExpdGVyYWxBU1QsIHRoaXMudmlzaXRMaXRlcmFsQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQXNzaWdubWVudEV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEV4cHJlc3Npb25TdGF0ZW1lbnRBU1QsIHRoaXMudmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQ2FsbEV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRDYWxsRXhwcmVzc2lvbkFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEJpbmFyeUV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRCaW5hcnlFeHByZXNzaW9uQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoVW5hcnlFeHByZXNzaW9uQVNULCB0aGlzLnZpc2l0VW5hcnlFeHByZXNzaW9uQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoSWZTdGF0ZW1lbnRBU1QsIHRoaXMudmlzaXRJZlN0YXRlbWVudEFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKExvZ2ljYWxFeHByZXNzaW9uQVNULCB0aGlzLnZpc2l0TG9naWNhbEV4cHJlc3Npb25BU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihJbmRleEFjY2Vzc29yQVNULCB0aGlzLnZpc2l0SW5kZXhBY2Nlc3NvckFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKE9iamVjdFByb3BlcnR5LCB0aGlzLnZpc2l0T2JqZWN0UHJvcGVydHkpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihPYmplY3RFeHByZXNzaW9uLCB0aGlzLnZpc2l0T2JqZWN0RXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEFycmF5RXhwcmVzc2lvbiwgdGhpcy52aXNpdEFycmF5RXhwcmVzc2lvbik7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoV2hpbGVMb29wU3RhdGVtZW50LCB0aGlzLnZpc2l0V2hpbGVMb29wU3RhdGVtZW50KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoRm9yTG9vcFN0YXRlbWVudCwgdGhpcy52aXNpdEZvckxvb3BTdGF0ZW1lbnQpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihGb3JPZlN0YXRlbWVudCwgdGhpcy52aXNpdEZvck9mU3RhdGVtZW50KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQnJlYWtBU1QsIHRoaXMudmlzaXRCcmVha0FTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKENvbnRpbnVlQVNULCB0aGlzLnZpc2l0Q29udGludWVBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihSZXR1cm5BU1QsIHRoaXMudmlzaXRSZXR1cm5BU1QpO1xuICAgIH1cbiAgICBvdmVycmlkZSB2aXNpdChub2RlOiBBU1QpOiBhbnkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGB2aXNpdCR7bm9kZS5jb25zdHJ1Y3Rvci5uYW1lfWA7XG4gICAgICAgICAgICAvLyBjb25zdCBmbiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKVttZXRob2ROYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZuID0gdGhpcy5fbm9kZXNWaXNpdG9yc1ttZXRob2ROYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBmbj8uY2FsbCh0aGlzLCBub2RlKSA/PyBudWxsO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIGFzc2lnblByb3BlcnR5KG93bmVyOiBhbnksIHByb3BlcnR5OiBhbnksIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvd25lcikpIHtcbiAgICAgICAgICAgIG93bmVyW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvd25lciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIG93bmVyW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2UgeyB9XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRSb290QVNUKG5vZGU6IFJvb3RBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0QmxvY2tTdGF0ZW1lbnRBU1Qobm9kZTogQmxvY2tTdGF0ZW1lbnRBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0SWRlbnRpZmllckFTVChub2RlOiBJZGVudGlmaWVyQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdExpdGVyYWxBU1Qobm9kZTogQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKG5vZGU6IEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKTogYW55O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudEFTVChub2RlOiBFeHByZXNzaW9uU3RhdGVtZW50QVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdENhbGxFeHByZXNzaW9uQVNUKG5vZGU6IENhbGxFeHByZXNzaW9uQVNUKTogYW55O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0QmluYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBCaW5hcnlFeHByZXNzaW9uQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdFVuYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBVbmFyeUV4cHJlc3Npb25BU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0SWZTdGF0ZW1lbnRBU1Qobm9kZTogSWZTdGF0ZW1lbnRBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0TG9naWNhbEV4cHJlc3Npb25BU1Qobm9kZTogTG9naWNhbEV4cHJlc3Npb25BU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0SW5kZXhBY2Nlc3NvckFTVChub2RlOiBJbmRleEFjY2Vzc29yQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdE9iamVjdFByb3BlcnR5KG5vZGU6IEFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRPYmplY3RFeHByZXNzaW9uKGFzdDogQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdEFycmF5RXhwcmVzc2lvbihhc3Q6IEFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRCcmVha0FTVChub2RlOiBCcmVha0FTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRXaGlsZUxvb3BTdGF0ZW1lbnQobm9kZTogV2hpbGVMb29wU3RhdGVtZW50KTogYW55O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0Rm9yTG9vcFN0YXRlbWVudChub2RlOiBGb3JMb29wU3RhdGVtZW50KTogYW55O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0Rm9yT2ZTdGF0ZW1lbnQobm9kZTogRm9yT2ZTdGF0ZW1lbnQpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0Q29udGludWVBU1Qobm9kZTogQ29udGludWVBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0UmV0dXJuQVNUKG5vZGU6IFJldHVybkFTVCk6IGFueTtcbn1cbmV4cG9ydCBjbGFzcyBNRXZlbnRTY29wZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhcmVudD86IE1FdmVudFNjb3BlO1xuICAgIG1lbW9yeTogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIG1lbW9yeTogeyBbazogc3RyaW5nXTogYW55IH0sIHBhcmVudD86IE1FdmVudFNjb3BlKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMubWVtb3J5ID0gbWVtb3J5O1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgcmVzb2x2ZShrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm1lbW9yeSkuaW5jbHVkZXMoa2V5KSA/IHRoaXMubWVtb3J5W2tleV0gOiAodGhpcy5wYXJlbnQ/LnJlc29sdmUoa2V5KSA/PyBudWxsKTtcbiAgICB9XG4gICAgY2hhbmdlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBkZWNsYXJlID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5tZW1vcnkpLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIC8vIGNoYW5nZSBoZXJlXG4gICAgICAgICAgICB0aGlzLm1lbW9yeVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuY2hhbmdlKGtleSwgdmFsdWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZWNsYXJlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZW1vcnlba2V5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnQgdHlwZSBNRXZlbnRvRkJpbmRpbmcgPSAoYXJnczogYW55W10sIHZtOiBNRXZlbnRvKSA9PiBhbnk7XG5leHBvcnQgY2xhc3MgTUV2ZW50byBleHRlbmRzIE5vZGVWaXNpdG9yIHtcblxuICAgIHJvb3RTY29wZTogTUV2ZW50U2NvcGUgPSBuZXcgTUV2ZW50U2NvcGUoXCJQcm9ncmFtXCIsIHt9KTtcbiAgICBwcm90ZWN0ZWQgY3VycmVudFNjb3BlPzogTUV2ZW50U2NvcGUgPSB0aGlzLnJvb3RTY29wZTtcblxuICAgIGRlYnVnID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2dsb2JhbEZ1bmN0aW9uc1JlZ2lzdHJ5OiB7IFtrOiBzdHJpbmddOiBNRXZlbnRvRkJpbmRpbmcgfSA9IHt9O1xuICAgIHByaXZhdGUgc3RhdGljIF9jYWNoZTogTWFwPG51bWJlciwgQVNUPiA9IG5ldyBNYXAoKTtcbiAgICBwcm90ZWN0ZWQgX2Z1bmN0aW9uc1JlZ2lzdHJ5OiB7IFtrOiBzdHJpbmddOiBNRXZlbnRvRkJpbmRpbmcgfSA9IHt9O1xuICAgIHByb3RlY3RlZCBfZnVuY3Rpb25SZXNvbHZlcj86IChuYW1lOiBzdHJpbmcpID0+IE1FdmVudG9GQmluZGluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnkgPSB7IC4uLk1FdmVudG8uX2dsb2JhbEZ1bmN0aW9uc1JlZ2lzdHJ5IH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNjb3BlPy5yZXNvbHZlKG5hbWUpID8/IG51bGw7XG4gICAgfVxuICAgIHByb3RlY3RlZCBjaGFuZ2VWYXJpYWJsZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2NvcGU/LmNoYW5nZShuYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcHVzaFNjb3BlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzY29wZSA9IG5ldyBNRXZlbnRTY29wZShuYW1lLCB7fSwgdGhpcy5jdXJyZW50U2NvcGUpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY29wZSA9IHNjb3BlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcG9wU2NvcGUoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNjb3BlID0gdGhpcy5jdXJyZW50U2NvcGU/LnBhcmVudDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGxvZyhtZXNzYWdlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0Um9vdEFTVChub2RlOiBSb290QVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG5vZGUuYm9keTtcbiAgICAgICAgbGV0IGxhc3Q7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBsYXN0ID0gdGhpcy52aXNpdChuKTtcbiAgICAgICAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgUmV0dXJuQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3QudmFsdWUgPz8gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFzdCA/PyBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEJsb2NrU3RhdGVtZW50QVNUKG5vZGU6IEJsb2NrU3RhdGVtZW50QVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG5vZGUuYm9keTtcbiAgICAgICAgbGV0IGxhc3Q7XG4gICAgICAgIHRoaXMucHVzaFNjb3BlKFwiQmxvY2tcIik7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBsYXN0ID0gdGhpcy52aXNpdChuKTtcbiAgICAgICAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgTG9vcENvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgUmV0dXJuQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gbGFzdCA/PyBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdElkZW50aWZpZXJBU1Qobm9kZTogSWRlbnRpZmllckFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGlkID0gbm9kZS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM/LnJlc29sdmUoaWQpID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0TGl0ZXJhbEFTVChub2RlOiBBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChub2RlIGFzIExpdGVyYWxBU1QpLnZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0QXNzaWdubWVudEV4cHJlc3Npb25BU1Qobm9kZTogQXNzaWdubWVudEV4cHJlc3Npb25BU1QpOiBhbnkge1xuXG4gICAgICAgIGNvbnN0IGlkOiBBU1QgPSBub2RlLmlkZW50aWZpZXI7XG5cbiAgICAgICAgY29uc3QgaW5pdDogQVNUID0gbm9kZS5pbml0O1xuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IG51bGw7XG4gICAgICAgIGlmIChpZCBpbnN0YW5jZW9mIEluZGV4QWNjZXNzb3JBU1QpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnZpc2l0KGlkLm93bmVyKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy52aXNpdChub2RlLmluaXQpO1xuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy52aXNpdChpZC5rZXkpO1xuICAgICAgICAgICAgdGhpcy5hc3NpZ25Qcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaWQgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMudmlzaXQoaW5pdCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGlkLnZhbHVlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRBU1Qobm9kZTogRXhwcmVzc2lvblN0YXRlbWVudEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGV4cHIgPSBub2RlLmV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2l0KGV4cHIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdENhbGxFeHByZXNzaW9uQVNUKG5vZGU6IENhbGxFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICAgICAgICBjb25zdCBhcmdzID0gbm9kZS5hcmd1bWVudHM7XG4gICAgICAgIGNvbnN0IGNhbGxlZU5hbWUgPSBjYWxsZWUudmFsdWU7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpcy5yZXNvbHZlRnVuY3Rpb24oY2FsbGVlTmFtZSk7XG4gICAgICAgIGNvbnN0IGFyZ1ZhbHVlcyA9IGFyZ3MubWFwKChlKSA9PiB0aGlzLnZpc2l0KGUpKTtcbiAgICAgICAgLy8gcHJpbnQoXCJhcmdWYWx1ZXM6OlwiLCBhcmdWYWx1ZXMpXG4gICAgICAgIHJldHVybiBmbj8uKGFyZ1ZhbHVlcywgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0QmluYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBCaW5hcnlFeHByZXNzaW9uQVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgbGVmdCA9IG5vZGUubGVmdDtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgICAgICBjb25zdCBvcCA9IG5vZGUub3BlcmF0aW9uO1xuICAgICAgICBjb25zdCBsVmFsdWUgPSB0aGlzLnZpc2l0KGxlZnQpO1xuICAgICAgICBjb25zdCByVmFsdWUgPSB0aGlzLnZpc2l0KHJpZ2h0KTtcbiAgICAgICAgc3dpdGNoIChvcC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5wbHVzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSArIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2xWYWx1ZX0ke3JWYWx1ZX1gO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubWludXM6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIC0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgKiByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyhsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZS5yZXBlYXQoclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNTdHJpbmcoclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gclZhbHVlLnJlcGVhdChsVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmRpdjpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyVmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGl2aXNpb24gYnkgMFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIC8gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm1vZDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgJSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZ3JlYXQ6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlID4gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmdyZWF0RXE6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlID49IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sZXNzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA8IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sZXNzRXE6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIDw9IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5lcWVxOlxuICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPT09IHJWYWx1ZTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm5vdEVxOlxuICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgIT09IHJWYWx1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRVbmFyeUV4cHJlc3Npb25BU1Qobm9kZTogVW5hcnlFeHByZXNzaW9uQVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgYXJnID0gbm9kZS5hcmd1bWVudDtcbiAgICAgICAgY29uc3Qgb3AgPSBub2RlLm9wZXJhdGlvbjtcbiAgICAgICAgY29uc3QgYXJnVmFsdWUgPSB0aGlzLnZpc2l0KGFyZyk7XG4gICAgICAgIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUubm90KSB7XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZShhcmdWYWx1ZSkgPT09IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOdW0oYXJnVmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3AudHlwZSA9PT0gVG9rZW5UeXBlLnBsdXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUubWludXMpIHtcbiAgICAgICAgICAgIHJldHVybiAtYXJnVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0SWZTdGF0ZW1lbnRBU1Qobm9kZTogSWZTdGF0ZW1lbnRBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCB0ZXN0Tm9kZTogQVNUID0gbm9kZS50ZXN0O1xuICAgICAgICBjb25zdCB0ZXN0ID0gdGhpcy52aXNpdCh0ZXN0Tm9kZSk7XG4gICAgICAgIGNvbnN0IHRlc3RCb29sVmFsdWUgPSBfYm9vbFZhbHVlKHRlc3QpO1xuXG4gICAgICAgIGlmICh0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdChub2RlLmNvbnNlcXVlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQobm9kZS5hbHRlcm5hdGUhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlOiBMb2dpY2FsRXhwcmVzc2lvbkFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGxlZnROb2RlID0gbm9kZS5sZWZ0O1xuICAgICAgICBsZXQgdGVzdCA9IHRoaXMudmlzaXQobGVmdE5vZGUpO1xuICAgICAgICBpZiAobm9kZS5vcGVyYXRvci50eXBlID09PSBUb2tlblR5cGUubnVsbGl0eSkge1xuICAgICAgICAgICAgaWYgKHRlc3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQobm9kZS5yaWdodClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXN0Qm9vbFZhbHVlID0gX2Jvb2xWYWx1ZSh0ZXN0KTtcbiAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IudHlwZSA9PT0gVG9rZW5UeXBlLmFuZCkge1xuICAgICAgICAgICAgaWYgKCF0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9ib29sVmFsdWUodGhpcy52aXNpdChub2RlLnJpZ2h0KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5vcGVyYXRvci50eXBlID09PSBUb2tlblR5cGUub3IpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZSh0aGlzLnZpc2l0KG5vZGUucmlnaHQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRJbmRleEFjY2Vzc29yQVNUKG5vZGU6IEluZGV4QWNjZXNzb3JBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBvd25lck5vZGUgPSAobm9kZSBhcyBJbmRleEFjY2Vzc29yQVNUKS5vd25lcjtcbiAgICAgICAgY29uc3Qgb3duZXIgPSB0aGlzLnZpc2l0KG93bmVyTm9kZSk7XG4gICAgICAgIGlmIChvd25lciA9PT0gbnVsbCB8fCBvd25lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG93bmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy52aXNpdChub2RlLmtleSk7XG4gICAgICAgICAgICByZXR1cm4gb3duZXJba2V5XSA/PyBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3duZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnZpc2l0KG5vZGUua2V5KTtcbiAgICAgICAgICAgIHJldHVybiBpc051bShrZXkpICYmIG93bmVyLmxlbmd0aCA8IGtleSAmJiBrZXkgPj0gMCA/IG93bmVyW2tleV0gPz8gbnVsbCA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0T2JqZWN0UHJvcGVydHkobm9kZTogQVNUKTogYW55IHsgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0T2JqZWN0RXhwcmVzc2lvbihhc3Q6IEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlOiBhbnkgPSB7fTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGFzdCBhcyBPYmplY3RFeHByZXNzaW9uO1xuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIG5vZGUucHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKGl0IGluc3RhbmNlb2YgT2JqZWN0UHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gdGhpcy52aXNpdChpdC5rZXkpO1xuICAgICAgICAgICAgICAgIGtleSA9IGlzU3RyaW5nKGtleSkgPyBrZXkgOiBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gdGhpcy52aXNpdChpdC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEFycmF5RXhwcmVzc2lvbihhc3Q6IEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBhc3QgYXMgQXJyYXlFeHByZXNzaW9uO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5yZXNvbHZlQXJndW1lbnRzKG5vZGUuZWxlbWVudHMpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0QnJlYWtBU1Qobm9kZTogQnJlYWtBU1QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCcmVha0JyYW5jaCgpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRXaGlsZUxvb3BTdGF0ZW1lbnQobm9kZTogV2hpbGVMb29wU3RhdGVtZW50KTogYW55IHtcbiAgICAgICAgdGhpcy5sb2coYFdoaWxlTG9vcFN0YXRlbWVudCAke25vZGUudGVzdH0gJHtub2RlLmJvZHl9YClcbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKF9ib29sVmFsdWUodGhpcy52aXNpdChub2RlLnRlc3QpKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBDb250aW51ZUJyYW5jaCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFJldHVybkJyYW5jaCkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRhaW5lciA/PyBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEZvckxvb3BTdGF0ZW1lbnQobm9kZTogRm9yTG9vcFN0YXRlbWVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IHJldGFpbmVyOiBhbnlbXSB8IHVuZGVmaW5lZCA9IG5vZGUucmV0YWluID8gW10gOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGxvb3BJZGVudGlmaWVyID0gbm9kZS5pbml0LmlkZW50aWZpZXJcbiAgICAgICAgaWYgKCEobG9vcElkZW50aWZpZXIgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSkgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBpZGVudGlmZXIgZm91bmRcIilcbiAgICAgICAgdGhpcy5wdXNoU2NvcGUoXCJGb3JMb29wU3RhdGVtZW50XCIpO1xuICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSB0aGlzLnZpc2l0KG5vZGUuaW5pdC5pbml0KVxuICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGxvb3BJZGVudGlmaWVyLnZhbHVlLCBpbml0aWFsVmFsdWUpXG4gICAgICAgIC8vIHJldGFpbmVyPy5wdXNoKGluaXRpYWxWYWx1ZSlcbiAgICAgICAgY29uc3QgdGVzdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMudmlzaXQobm9kZS50ZXN0KVxuICAgICAgICAgICAgaWYgKGlzTnVtKHJldCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnJlc29sdmUobG9vcElkZW50aWZpZXIudmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZGlyZWN0aW9uLnR5cGUgPT09IFRva2VuVHlwZS51cCA/IHJldCA+PSB0bXAgOiByZXQgPD0gdG1wXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZShyZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVZhbHVlID0gdGhpcy52aXNpdChub2RlLnVwZGF0ZSk7XG4gICAgICAgICAgICBpZiAoaXNOdW0odXBkYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gYXV0byBoYW5kbGVcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnJlc29sdmUobG9vcElkZW50aWZpZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW0odG1wKSkgdGhyb3cgRXJyb3IoXCJDYW50IHVwZGF0ZSB2YWx1ZVwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGxvb3BJZGVudGlmaWVyLnZhbHVlLCBub2RlLmRpcmVjdGlvbi50eXBlID09PSBUb2tlblR5cGUudXAgPyB0bXAgKyB1cGRhdGVWYWx1ZSA6IHRtcCAtIHVwZGF0ZVZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJVcGRhdGUgdmFsdWUgY2FudCBiZSBub24gbnVtYmVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMudmlzaXQobm9kZS5ib2R5KVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIEJyZWFrQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQ29udGludWVCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBSZXR1cm5CcmFuY2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldGFpbmVyPy5wdXNoKHJldClcbiAgICAgICAgICAgIC8vIHVwZGF0ZVxuICAgICAgICAgICAgdXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gcmV0YWluZXIgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRGb3JPZlN0YXRlbWVudChub2RlOiBGb3JPZlN0YXRlbWVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLnZpc2l0KG5vZGUuY29sbGVjdGlvbik7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW4gaXRlcmF0ZSBub24gYXJyYXkgb2JqZWN0XCIpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wdXNoU2NvcGUoXCJGb3JPZlN0YXRlbWVudFwiKTtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWNsYXJlRm9ySWRlbnRpZmllcihub2RlLmlkZW50aWZpZXIsIGl0KVxuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBDb250aW51ZUJyYW5jaCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFJldHVybkJyYW5jaCkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgcmV0dXJuIHJldGFpbmVyID8/IG51bGw7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdENvbnRpbnVlQVNUKG5vZGU6IENvbnRpbnVlQVNUKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udGludWVCcmFuY2goKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIHZpc2l0UmV0dXJuQVNUKG5vZGU6IFJldHVybkFTVCk6IGFueSB7XG4gICAgICAgIHJldHVybiBuZXcgUmV0dXJuQnJhbmNoKG5vZGUudmFsdWUgIT0gbnVsbCA/IHRoaXMudmlzaXQobm9kZS52YWx1ZSkgOiBudWxsKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9kZWNsYXJlRm9ySWRlbnRpZmllcihub2RlOiBBU1QsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFR1cGxlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIG1ha2UgYSB0dXBsZSBmcm9tIG5vbiBBcnJheSBlbGVtZW50XCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKChub2RlLmZpcnN0IGFzIElkZW50aWZpZXJBU1QpLnZhbHVlLCB2YWx1ZVswXSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKChub2RlLnNlY29uZCBhcyBJZGVudGlmaWVyQVNUKS52YWx1ZSwgdmFsdWVbMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlVmFyaWFibGUoKG5vZGUgYXMgSWRlbnRpZmllckFTVCkudmFsdWUsIHZhbHVlKTtcbiAgICB9XG4gICAgcmVzb2x2ZUFyZ3VtZW50cyhhcmdzOiBBU1RbXSk6IGFueSB7XG4gICAgICAgIHJldHVybiBhcmdzLm1hcCgoaXQ6IEFTVCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQoaXQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2V0RnVuY3Rpb25SZXNvbHZlcihyZXNvbHZlcjogKG5hbWU6IHN0cmluZykgPT4gTUV2ZW50b0ZCaW5kaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2Z1bmN0aW9uUmVzb2x2ZXIgPSByZXNvbHZlcjtcbiAgICB9XG4gICAgcmVzb2x2ZUZ1bmN0aW9uKG5hbWU6IHN0cmluZyk6IE1FdmVudG9GQmluZGluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtuYW1lXSA/PyB0aGlzLl9mdW5jdGlvblJlc29sdmVyPy4obmFtZSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZywgZm46IE1FdmVudG9GQmluZGluZykge1xuICAgICAgICB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtpZF0gPSBmbjtcbiAgICB9XG5cbiAgICB1bnJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZykge1xuICAgICAgICBkZWxldGUgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbaWRdO1xuICAgIH1cblxuICAgIGV4ZWN1dGUoc291cmNlOiBzdHJpbmcsIGNhY2hlID0gdHJ1ZSwgaW5wdXQ/OiB7IFtrOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBNRXZlbnRvLmNvbXBpbGUoc291cmNlLCBjYWNoZSk7XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoaW5wdXQpLmZvckVhY2goayA9PiB0aGlzLmNoYW5nZVZhcmlhYmxlKGssIGlucHV0W2tdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQobW9kdWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29tcGlsZShzb3VyY2U6IHN0cmluZywgY2FjaGUgPSBmYWxzZSk6IEFTVCB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBoYXNoQ29kZShzb3VyY2UpO1xuICAgICAgICBpZiAoY2FjaGUgJiYgdGhpcy5fY2FjaGUuaGFzKGhhc2gpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZ2V0KGhhc2gpITtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZXhlciA9IG5ldyBMZXhlcihzb3VyY2UpO1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKGxleGVyKTtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gcGFyc2VyLnBhcnNlKCk7XG5cbiAgICAgICAgaWYgKGNhY2hlKSB0aGlzLl9jYWNoZS5zZXQoaGFzaCwgbW9kdWxlKTtcbiAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVnaXN0ZXIoaWQ6IHN0cmluZywgZm46IE1FdmVudG9GQmluZGluZykge1xuICAgICAgICBNRXZlbnRvLl9nbG9iYWxGdW5jdGlvbnNSZWdpc3RyeVtpZF0gPSBmbjtcbiAgICB9XG5cbiAgICBzdGF0aWMgdW5yZWdpc3RlcihpZDogc3RyaW5nKSB7XG4gICAgICAgIGRlbGV0ZSBNRXZlbnRvLl9nbG9iYWxGdW5jdGlvbnNSZWdpc3RyeVtpZF07XG4gICAgfVxuXG4gICAgc3RhdGljIHJ1bihzb3VyY2U6IHN0cmluZywgY2FjaGUgPSBmYWxzZSwgaW5wdXQ/OiB7IFtrOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICBjb25zdCBtZXZlbnRvID0gbmV3IE1FdmVudG8oKTtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gTUV2ZW50by5jb21waWxlKHNvdXJjZSwgY2FjaGUpO1xuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGlucHV0KS5mb3JFYWNoKGsgPT4gbWV2ZW50by5jaGFuZ2VWYXJpYWJsZShrLCBpbnB1dFtrXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXZlbnRvLnZpc2l0KG1vZHVsZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIG5ld0luc3RhbmNlKCk6IE1FdmVudG8ge1xuICAgICAgICAvLyBjb25zdCBsZXhlciA9IExleGVyKHNvdXJjZSk7XG4gICAgICAgIC8vIGNvbnN0IHBhcnNlciA9IFBhcnNlcihsZXhlcik7XG4gICAgICAgIC8vIGNvbnN0IG1vZHVsZSA9IHBhcnNlci5wYXJzZSgpO1xuICAgICAgICByZXR1cm4gbmV3IE1FdmVudG8oKTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBNRXZlbnRvIHtcbiAgICAgICAgdmFyIHJldCA9IG5ldyBNRXZlbnRvKCk7XG4gICAgICAgIHJldC5fZnVuY3Rpb25zUmVnaXN0cnkgPSB7IC4uLiB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeSB9O1xuICAgICAgICByZXQucm9vdFNjb3BlLm1lbW9yeSA9IHsgLi4udGhpcy5yb290U2NvcGUubWVtb3J5IH07XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIG5ld0FzeW5jSW5zdGFuY2UoKTogTUV2ZW50b0FzeW5jIHtcbiAgICAgICAgY29uc3QgYXN5bmNJbnMgPSBNRXZlbnRvQXN5bmMubmV3SW5zdGFuY2UoKTtcbiAgICAgICAgYXN5bmNJbnMucm9vdFNjb3BlLm1lbW9yeSA9IHRoaXMucm9vdFNjb3BlLm1lbW9yeTtcbiAgICAgICAgLy8vID8/Pz9cbiAgICAgICAgYXN5bmNJbnMuX2Z1bmN0aW9uc1JlZ2lzdHJ5ID0gdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnk7XG4gICAgICAgIHJldHVybiBhc3luY0lucztcbiAgICB9O1xuXG59XG5cbmV4cG9ydCBjbGFzcyBNRXZlbnRvQXN5bmMgZXh0ZW5kcyBNRXZlbnRvIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdFJvb3RBU1Qobm9kZTogUm9vdEFTVCkge1xuICAgICAgICBjb25zdCBsaXN0ID0gbm9kZS5ib2R5O1xuICAgICAgICBsZXQgbGFzdDtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGxpc3QpIHtcbiAgICAgICAgICAgIGxhc3QgPSBhd2FpdCB0aGlzLnZpc2l0KG4pO1xuICAgICAgICAgICAgaWYgKGxhc3QgaW5zdGFuY2VvZiBSZXR1cm5CcmFuY2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdC52YWx1ZSA/PyBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXN0ID8/IG51bGw7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEJsb2NrU3RhdGVtZW50QVNUKG5vZGU6IEJsb2NrU3RhdGVtZW50QVNUKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG5vZGUuYm9keTtcbiAgICAgICAgbGV0IGxhc3Q7XG4gICAgICAgIHRoaXMucHVzaFNjb3BlKFwiQmxvY2tcIik7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBsYXN0ID0gYXdhaXQgdGhpcy52aXNpdChuKTtcbiAgICAgICAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgTG9vcENvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgUmV0dXJuQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gbGFzdDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0SWRlbnRpZmllckFTVChub2RlOiBBU1QpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBpZCA9IChub2RlIGFzIElkZW50aWZpZXJBU1QpLnZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlKGlkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0TGl0ZXJhbEFTVChub2RlOiBMaXRlcmFsQVNUKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBub2RlLnZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKG5vZGU6IEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGlkOiBBU1QgPSBub2RlLmlkZW50aWZpZXI7XG5cbiAgICAgICAgY29uc3QgaW5pdDogQVNUID0gbm9kZS5pbml0O1xuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IG51bGw7XG4gICAgICAgIGlmIChpZCBpbnN0YW5jZW9mIEluZGV4QWNjZXNzb3JBU1QpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBhd2FpdCB0aGlzLnZpc2l0KGlkLm93bmVyKTtcbiAgICAgICAgICAgIHZhbHVlID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmluaXQpO1xuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gYXdhaXQgdGhpcy52aXNpdChpZC5rZXkpO1xuICAgICAgICAgICAgdGhpcy5hc3NpZ25Qcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaWQgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQoaW5pdCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGlkLnZhbHVlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QVNUKG5vZGU6IEV4cHJlc3Npb25TdGF0ZW1lbnRBU1QpIHtcbiAgICAgICAgY29uc3QgZXhwciA9IG5vZGUuZXhwcmVzc2lvbjtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQoZXhwcik7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdENhbGxFeHByZXNzaW9uQVNUKG5vZGU6IENhbGxFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICAgICAgICBjb25zdCBhcmdzID0gbm9kZS5hcmd1bWVudHM7XG4gICAgICAgIGNvbnN0IGNhbGxlZU5hbWUgPSBjYWxsZWUudmFsdWU7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbY2FsbGVlTmFtZV07XG4gICAgICAgIGNvbnN0IGFyZ1ZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKGFyZ3MubWFwKChlKSA9PiB0aGlzLnZpc2l0KGUpKSk7XG4gICAgICAgIC8vIHByaW50KFwiYXJnVmFsdWVzOjpcIiwgYXJnVmFsdWVzKVxuICAgICAgICByZXR1cm4gYXdhaXQgZm4/LihhcmdWYWx1ZXMsIHRoaXMpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRCaW5hcnlFeHByZXNzaW9uQVNUKG5vZGU6IEJpbmFyeUV4cHJlc3Npb25BU1QpIHtcbiAgICAgICAgY29uc3QgbGVmdCA9IG5vZGUubGVmdDtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgICAgICBjb25zdCBvcCA9IG5vZGUub3BlcmF0aW9uO1xuICAgICAgICBjb25zdCBsVmFsdWUgPSBhd2FpdCB0aGlzLnZpc2l0KGxlZnQpO1xuICAgICAgICBjb25zdCByVmFsdWUgPSBhd2FpdCB0aGlzLnZpc2l0KHJpZ2h0KTtcbiAgICAgICAgc3dpdGNoIChvcC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5wbHVzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSArIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2xWYWx1ZX0ke3JWYWx1ZX1gO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubWludXM6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIC0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcobFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUucmVwZWF0KHJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzU3RyaW5nKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJWYWx1ZS5yZXBlYXQobFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5tdWx0OlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAqIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5kaXY6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoclZhbHVlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRpdmlzaW9uIGJ5IDBcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAvIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5tb2Q6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICUgclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmdyZWF0OlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA+IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ncmVhdEVxOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA+PSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGVzczpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPCByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGVzc0VxOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA8PSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZXFlcTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlID09PSByVmFsdWU7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ub3RFcTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICE9PSByVmFsdWU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdFVuYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBVbmFyeUV4cHJlc3Npb25BU1QpIHtcbiAgICAgICAgY29uc3QgYXJnID0gbm9kZS5hcmd1bWVudDtcbiAgICAgICAgY29uc3Qgb3AgPSBub2RlLm9wZXJhdGlvbjtcbiAgICAgICAgY29uc3QgYXJnVmFsdWUgPSBhd2FpdCB0aGlzLnZpc2l0KGFyZyk7XG4gICAgICAgIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUubm90KSB7XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZShhcmdWYWx1ZSkgPT09IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOdW0oYXJnVmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3AudHlwZSA9PT0gVG9rZW5UeXBlLnBsdXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUubWludXMpIHtcbiAgICAgICAgICAgIHJldHVybiAtYXJnVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSAgYXN5bmMgdmlzaXRJZlN0YXRlbWVudEFTVChub2RlOiBJZlN0YXRlbWVudEFTVCkge1xuICAgICAgICBjb25zdCB0ZXN0Tm9kZTogQVNUID0gbm9kZS50ZXN0O1xuICAgICAgICBjb25zdCB0ZXN0ID0gYXdhaXQgdGhpcy52aXNpdCh0ZXN0Tm9kZSk7XG4gICAgICAgIGNvbnN0IHRlc3RCb29sVmFsdWUgPSBfYm9vbFZhbHVlKHRlc3QpO1xuXG4gICAgICAgIGlmICh0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy52aXNpdChub2RlLmNvbnNlcXVlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQobm9kZS5hbHRlcm5hdGUhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlOiBMb2dpY2FsRXhwcmVzc2lvbkFTVCkge1xuICAgICAgICBjb25zdCBsZWZ0Tm9kZSA9IG5vZGUubGVmdDtcbiAgICAgICAgbGV0IHRlc3QgPSBhd2FpdCB0aGlzLnZpc2l0KGxlZnROb2RlKTtcbiAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IudHlwZSA9PT0gVG9rZW5UeXBlLm51bGxpdHkpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZpc2l0KG5vZGUucmlnaHQpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGVzdEJvb2xWYWx1ZSA9IF9ib29sVmFsdWUodGVzdCk7XG4gICAgICAgIGlmIChub2RlLm9wZXJhdG9yLnR5cGUgPT09IFRva2VuVHlwZS5hbmQpIHtcbiAgICAgICAgICAgIGlmICghdGVzdEJvb2xWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfYm9vbFZhbHVlKGF3YWl0IHRoaXMudmlzaXQobm9kZS5yaWdodCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9wZXJhdG9yLnR5cGUgPT09IFRva2VuVHlwZS5vcikge1xuICAgICAgICAgICAgaWYgKHRlc3RCb29sVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9ib29sVmFsdWUoYXdhaXQgdGhpcy52aXNpdChub2RlLnJpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRJbmRleEFjY2Vzc29yQVNUKG5vZGU6IEluZGV4QWNjZXNzb3JBU1QpIHtcbiAgICAgICAgY29uc3Qgb3duZXJOb2RlID0gKG5vZGUgYXMgSW5kZXhBY2Nlc3NvckFTVCkub3duZXI7XG4gICAgICAgIGNvbnN0IG93bmVyID0gYXdhaXQgdGhpcy52aXNpdChvd25lck5vZGUpO1xuICAgICAgICBpZiAob3duZXIgPT09IG51bGwgfHwgb3duZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvd25lciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5rZXkpO1xuICAgICAgICAgICAgcmV0dXJuIG93bmVyW2tleV0gPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG93bmVyKSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmtleSk7XG4gICAgICAgICAgICByZXR1cm4gaXNOdW0oa2V5KSAmJiBvd25lci5sZW5ndGggPCBrZXkgJiYga2V5ID49IDAgPyBvd25lcltrZXldID8/IG51bGwgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRPYmplY3RQcm9wZXJ0eShub2RlOiBBU1QpIHsgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0T2JqZWN0RXhwcmVzc2lvbihhc3Q6IEFTVCkge1xuICAgICAgICBjb25zdCBpbnN0YW5jZTogYW55ID0ge307XG4gICAgICAgIGNvbnN0IG5vZGUgPSBhc3QgYXMgT2JqZWN0RXhwcmVzc2lvbjtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBub2RlLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChpdCBpbnN0YW5jZW9mIE9iamVjdFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGF3YWl0IHRoaXMudmlzaXQoaXQua2V5KTtcbiAgICAgICAgICAgICAgICBrZXkgPSBpc1N0cmluZyhrZXkpID8ga2V5IDoga2V5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IGF3YWl0IHRoaXMudmlzaXQoaXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRBcnJheUV4cHJlc3Npb24oYXN0OiBBU1QpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGFzdCBhcyBBcnJheUV4cHJlc3Npb247XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBhd2FpdCB0aGlzLnJlc29sdmVBcmd1bWVudHNBc3luYyhub2RlLmVsZW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdFdoaWxlTG9vcFN0YXRlbWVudChub2RlOiBXaGlsZUxvb3BTdGF0ZW1lbnQpIHtcbiAgICAgICAgdGhpcy5sb2coYFdoaWxlTG9vcFN0YXRlbWVudCAke25vZGUudGVzdH0gJHtub2RlLmJvZHl9YClcbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKF9ib29sVmFsdWUoYXdhaXQgdGhpcy52aXNpdChub2RlLnRlc3QpKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBDb250aW51ZUJyYW5jaCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFJldHVybkJyYW5jaCkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRhaW5lcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRGb3JMb29wU3RhdGVtZW50KG5vZGU6IEZvckxvb3BTdGF0ZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbG9vcElkZW50aWZpZXIgPSBub2RlLmluaXQuaWRlbnRpZmllclxuICAgICAgICBpZiAoIShsb29wSWRlbnRpZmllciBpbnN0YW5jZW9mIElkZW50aWZpZXJBU1QpKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGlkZW50aWZlciBmb3VuZFwiKVxuICAgICAgICB0aGlzLnB1c2hTY29wZShcIkZvckxvb3BTdGF0ZW1lbnRcIik7XG4gICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5pbml0LmluaXQpXG4gICAgICAgIHRoaXMuY2hhbmdlVmFyaWFibGUobG9vcElkZW50aWZpZXIudmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIC8vIHJldGFpbmVyPy5wdXNoKGluaXRpYWxWYWx1ZSlcbiAgICAgICAgY29uc3QgdGVzdCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS50ZXN0KVxuICAgICAgICAgICAgaWYgKGlzTnVtKHJldCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnJlc29sdmUobG9vcElkZW50aWZpZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmRpcmVjdGlvbi50eXBlID09PSBUb2tlblR5cGUudXAgPyByZXQgPj0gdG1wIDogcmV0IDw9IHRtcFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9ib29sVmFsdWUocmV0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVWYWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS51cGRhdGUpO1xuICAgICAgICAgICAgaWYgKGlzTnVtKHVwZGF0ZVZhbHVlKSkge1xuICAgICAgICAgICAgICAgIC8vIGF1dG8gaGFuZGxlXG4gICAgICAgICAgICAgICAgY29uc3QgdG1wID0gdGhpcy5yZXNvbHZlKGxvb3BJZGVudGlmaWVyLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtKHRtcCkpIHRocm93IEVycm9yKFwiQ2FudCB1cGRhdGUgdmFsdWVcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYXJpYWJsZShsb29wSWRlbnRpZmllci52YWx1ZSwgbm9kZS5kaXJlY3Rpb24udHlwZSA9PT0gVG9rZW5UeXBlLnVwID8gdG1wICsgdXBkYXRlVmFsdWUgOiB0bXAgLSB1cGRhdGVWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiVXBkYXRlIHZhbHVlIGNhbnQgYmUgbm9uIG51bWJlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoYXdhaXQgdGVzdCgpKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUuYm9keSlcbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBCcmVha0JyYW5jaCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIENvbnRpbnVlQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgUmV0dXJuQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRhaW5lcj8ucHVzaChyZXQpXG4gICAgICAgICAgICAvLyB1cGRhdGVcbiAgICAgICAgICAgIGF3YWl0IHVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgcmV0dXJuIHJldGFpbmVyID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0Rm9yT2ZTdGF0ZW1lbnQobm9kZTogRm9yT2ZTdGF0ZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5jb2xsZWN0aW9uKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkNhbiBpdGVyYXRlIG5vbiBhcnJheSBvYmplY3RcIilcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXRhaW5lcjogYW55W10gfCB1bmRlZmluZWQgPSBub2RlLnJldGFpbiA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnB1c2hTY29wZShcIkZvck9mU3RhdGVtZW50XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RlY2xhcmVGb3JJZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllciwgaXQpXG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUuYm9keSlcbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBCcmVha0JyYW5jaCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIENvbnRpbnVlQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgUmV0dXJuQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRhaW5lcj8ucHVzaChyZXQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gcmV0YWluZXI7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0UmV0dXJuQVNUKG5vZGU6IFJldHVybkFTVCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUmV0dXJuQnJhbmNoKG5vZGUudmFsdWUgIT0gbnVsbCA/IGF3YWl0IHRoaXMudmlzaXQobm9kZS52YWx1ZSkgOiBudWxsKTtcbiAgICB9XG4gICAgYXN5bmMgcmVzb2x2ZUFyZ3VtZW50c0FzeW5jKGFyZ3M6IEFTVFtdKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoYXJncy5tYXAoYXN5bmMgKGl0OiBBU1QpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZpc2l0KGl0KTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBvdmVycmlkZSByZWdpc3RlckZ1bmN0aW9uKGlkOiBzdHJpbmcsIGZuOiBNRXZlbnRvRkJpbmRpbmcpIHtcbiAgICAgICAgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbaWRdID0gZm47XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgdW5yZWdpc3RlckZ1bmN0aW9uKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5W2lkXTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgIGFzeW5jIGV4ZWN1dGUoc291cmNlOiBzdHJpbmcsIGNhY2hlID0gdHJ1ZSwgaW5wdXQ/OiB7IFtrOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBNRXZlbnRvLmNvbXBpbGUoc291cmNlLCBjYWNoZSk7XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoaW5wdXQpLmZvckVhY2goayA9PiB0aGlzLmNoYW5nZVZhcmlhYmxlKGssIGlucHV0W2tdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQobW9kdWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgb3ZlcnJpZGUgYXN5bmMgcnVuKHNvdXJjZTogc3RyaW5nLCBjYWNoZSA9IGZhbHNlLCBpbnB1dD86IHsgW2s6IHN0cmluZ106IGFueSB9KSB7XG4gICAgICAgIGNvbnN0IG1ldmVudG8gPSBuZXcgTUV2ZW50b0FzeW5jKCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IE1FdmVudG8uY29tcGlsZShzb3VyY2UsIGNhY2hlKTtcbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhpbnB1dCkuZm9yRWFjaChrID0+IG1ldmVudG8uY2hhbmdlVmFyaWFibGUoaywgaW5wdXRba10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgbWV2ZW50by52aXNpdChtb2R1bGUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBvdmVycmlkZSBuZXdJbnN0YW5jZSgpOiBNRXZlbnRvQXN5bmMge1xuICAgICAgICByZXR1cm4gbmV3IE1FdmVudG9Bc3luYygpO1xuICAgIH1cblxuXG4gICAgb3ZlcnJpZGUgY2xvbmUoKTogTUV2ZW50b0FzeW5jIHtcbiAgICAgICAgdmFyIHJldCA9IG5ldyBNRXZlbnRvQXN5bmMoKTtcbiAgICAgICAgcmV0Ll9mdW5jdGlvbnNSZWdpc3RyeSA9IHsgLi4udGhpcy5fZnVuY3Rpb25zUmVnaXN0cnkgfTtcbiAgICAgICAgcmV0LnJvb3RTY29wZS5tZW1vcnkgPSB7IC4uLnRoaXMucm9vdFNjb3BlLm1lbW9yeSB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbn1cbiJdfQ==
|