with-style 5.0.241 → 5.0.242
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/example.js +255 -156
- package/package.json +3 -3
package/example.js
CHANGED
|
@@ -9230,12 +9230,24 @@
|
|
|
9230
9230
|
return this.childNodes.some(callback);
|
|
9231
9231
|
}
|
|
9232
9232
|
},
|
|
9233
|
+
{
|
|
9234
|
+
key: "findChildNode",
|
|
9235
|
+
value: function findChildNode(callback) {
|
|
9236
|
+
return this.childNodes.find(callback);
|
|
9237
|
+
}
|
|
9238
|
+
},
|
|
9233
9239
|
{
|
|
9234
9240
|
key: "everyChildNode",
|
|
9235
9241
|
value: function everyChildNode(callback) {
|
|
9236
9242
|
return this.childNodes.every(callback);
|
|
9237
9243
|
}
|
|
9238
9244
|
},
|
|
9245
|
+
{
|
|
9246
|
+
key: "filterChildNode",
|
|
9247
|
+
value: function filterChildNode(callback) {
|
|
9248
|
+
return this.childNodes.filter(callback);
|
|
9249
|
+
}
|
|
9250
|
+
},
|
|
9239
9251
|
{
|
|
9240
9252
|
key: "reduceChildNode",
|
|
9241
9253
|
value: function reduceChildNode(callback, initialValue) {
|
|
@@ -24245,83 +24257,6 @@
|
|
|
24245
24257
|
_define_property(CSSParser, "bnf", _bnf.default);
|
|
24246
24258
|
});
|
|
24247
24259
|
|
|
24248
|
-
// node_modules/occam-query/lib/utilities/array.js
|
|
24249
|
-
var require_array2 = __commonJS((exports) => {
|
|
24250
|
-
"use strict";
|
|
24251
|
-
Object.defineProperty(exports, "__esModule", {
|
|
24252
|
-
value: true
|
|
24253
|
-
});
|
|
24254
|
-
function _export(target, all) {
|
|
24255
|
-
for (var name in all)
|
|
24256
|
-
Object.defineProperty(target, name, {
|
|
24257
|
-
enumerable: true,
|
|
24258
|
-
get: all[name]
|
|
24259
|
-
});
|
|
24260
|
-
}
|
|
24261
|
-
_export(exports, {
|
|
24262
|
-
clear: function() {
|
|
24263
|
-
return clear;
|
|
24264
|
-
},
|
|
24265
|
-
fifth: function() {
|
|
24266
|
-
return fifth;
|
|
24267
|
-
},
|
|
24268
|
-
first: function() {
|
|
24269
|
-
return first;
|
|
24270
|
-
},
|
|
24271
|
-
fourth: function() {
|
|
24272
|
-
return fourth;
|
|
24273
|
-
},
|
|
24274
|
-
includes: function() {
|
|
24275
|
-
return includes;
|
|
24276
|
-
},
|
|
24277
|
-
last: function() {
|
|
24278
|
-
return last;
|
|
24279
|
-
},
|
|
24280
|
-
push: function() {
|
|
24281
|
-
return push;
|
|
24282
|
-
},
|
|
24283
|
-
second: function() {
|
|
24284
|
-
return second;
|
|
24285
|
-
},
|
|
24286
|
-
third: function() {
|
|
24287
|
-
return third;
|
|
24288
|
-
},
|
|
24289
|
-
trim: function() {
|
|
24290
|
-
return trim;
|
|
24291
|
-
}
|
|
24292
|
-
});
|
|
24293
|
-
var _necessary = require_browser();
|
|
24294
|
-
var clear = _necessary.arrayUtilities.clear;
|
|
24295
|
-
var push = _necessary.arrayUtilities.push;
|
|
24296
|
-
var first = _necessary.arrayUtilities.first;
|
|
24297
|
-
var second = _necessary.arrayUtilities.second;
|
|
24298
|
-
var third = _necessary.arrayUtilities.third;
|
|
24299
|
-
var fourth = _necessary.arrayUtilities.fourth;
|
|
24300
|
-
var fifth = _necessary.arrayUtilities.fifth;
|
|
24301
|
-
var last = _necessary.arrayUtilities.last;
|
|
24302
|
-
function trim(array, startIndex, endIndex) {
|
|
24303
|
-
if (startIndex < 0) {
|
|
24304
|
-
var length = array.length;
|
|
24305
|
-
startIndex = length + startIndex;
|
|
24306
|
-
endIndex = length + endIndex;
|
|
24307
|
-
}
|
|
24308
|
-
if (endIndex !== Infinity) {
|
|
24309
|
-
var start = endIndex + 1;
|
|
24310
|
-
array.splice(start);
|
|
24311
|
-
}
|
|
24312
|
-
var start1 = 0, deleteCount = startIndex;
|
|
24313
|
-
array.splice(start1, deleteCount);
|
|
24314
|
-
}
|
|
24315
|
-
function includes(array) {
|
|
24316
|
-
for (var _len = arguments.length, elements = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
24317
|
-
elements[_key - 1] = arguments[_key];
|
|
24318
|
-
}
|
|
24319
|
-
return elements.some(function(element) {
|
|
24320
|
-
return array.includes(element);
|
|
24321
|
-
});
|
|
24322
|
-
}
|
|
24323
|
-
});
|
|
24324
|
-
|
|
24325
24260
|
// node_modules/occam-query/lib/ruleNames.js
|
|
24326
24261
|
var require_ruleNames2 = __commonJS((exports) => {
|
|
24327
24262
|
"use strict";
|
|
@@ -24399,6 +24334,9 @@
|
|
|
24399
24334
|
errorNodesFromExpressionNode: function() {
|
|
24400
24335
|
return errorNodesFromExpressionNode;
|
|
24401
24336
|
},
|
|
24337
|
+
indexFromIndexNode: function() {
|
|
24338
|
+
return indexFromIndexNode;
|
|
24339
|
+
},
|
|
24402
24340
|
indexFromSpreadNode: function() {
|
|
24403
24341
|
return indexFromSpreadNode;
|
|
24404
24342
|
},
|
|
@@ -24414,6 +24352,9 @@
|
|
|
24414
24352
|
ruleNamesFromPathNode: function() {
|
|
24415
24353
|
return ruleNamesFromPathNode;
|
|
24416
24354
|
},
|
|
24355
|
+
selectorNodesFromPathNode: function() {
|
|
24356
|
+
return selectorNodesFromPathNode;
|
|
24357
|
+
},
|
|
24417
24358
|
spreadNodeFromExpressionNode: function() {
|
|
24418
24359
|
return spreadNodeFromExpressionNode;
|
|
24419
24360
|
},
|
|
@@ -24436,66 +24377,100 @@
|
|
|
24436
24377
|
return uniqueFromSpreadNode;
|
|
24437
24378
|
}
|
|
24438
24379
|
});
|
|
24439
|
-
var _array = require_array2();
|
|
24440
24380
|
var _ruleNames = require_ruleNames2();
|
|
24381
|
+
function indexFromIndexNode(indexNode) {
|
|
24382
|
+
var nonTerminalNode = indexNode, index = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
|
|
24383
|
+
var terminalNode = firstChildNode, content = terminalNode.getContent(), index2 = Number(content);
|
|
24384
|
+
return index2;
|
|
24385
|
+
});
|
|
24386
|
+
return index;
|
|
24387
|
+
}
|
|
24441
24388
|
function ruleNamesFromPathNode(pathNode) {
|
|
24442
24389
|
var selectorNodes = selectorNodesFromPathNode(pathNode), ruleNameNodes = selectorNodes.reduce(function(ruleNameNodes2, selectorNode) {
|
|
24443
|
-
var nonTerminalNode
|
|
24444
|
-
|
|
24445
|
-
|
|
24446
|
-
|
|
24447
|
-
|
|
24448
|
-
|
|
24449
|
-
|
|
24390
|
+
var nonTerminalNode = selectorNode, ruleNameNode = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
|
|
24391
|
+
var ruleNameNode2 = null;
|
|
24392
|
+
var nonTerminalNode2 = firstChildNode, ruleName = nonTerminalNode2.getRuleName(), ruleNameRuleNameRuleName = ruleName === _ruleNames.RULE_NAME_RULE_NAME;
|
|
24393
|
+
if (ruleNameRuleNameRuleName) {
|
|
24394
|
+
ruleNameNode2 = nonTerminalNode2;
|
|
24395
|
+
}
|
|
24396
|
+
return ruleNameNode2;
|
|
24397
|
+
});
|
|
24398
|
+
if (ruleNameNode !== null) {
|
|
24450
24399
|
ruleNameNodes2.push(ruleNameNode);
|
|
24451
24400
|
}
|
|
24452
24401
|
return ruleNameNodes2;
|
|
24453
24402
|
}, []), ruleNames = ruleNameNodes.map(function(ruleNameNode) {
|
|
24454
|
-
var nonTerminalNode = ruleNameNode,
|
|
24403
|
+
var nonTerminalNode = ruleNameNode, ruleName = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
|
|
24404
|
+
var terminalNode = firstChildNode, content = terminalNode.getContent(), ruleName2 = content;
|
|
24405
|
+
return ruleName2;
|
|
24406
|
+
});
|
|
24455
24407
|
return ruleName;
|
|
24456
24408
|
});
|
|
24457
24409
|
return ruleNames;
|
|
24458
24410
|
}
|
|
24459
24411
|
function tokenTypesFromPathNode(pathNode) {
|
|
24460
24412
|
var selectorNodes = selectorNodesFromPathNode(pathNode), tokenTYpeNodes = selectorNodes.reduce(function(tokenTYpeNodes2, selectorNode) {
|
|
24461
|
-
var nonTerminalNode
|
|
24462
|
-
|
|
24463
|
-
|
|
24464
|
-
|
|
24465
|
-
|
|
24466
|
-
|
|
24467
|
-
|
|
24468
|
-
|
|
24413
|
+
var nonTerminalNode = selectorNode, tokenTypeNode = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
|
|
24414
|
+
var tokenTYpeNode = null;
|
|
24415
|
+
var nonTerminalNode2 = firstChildNode, ruleName = nonTerminalNode2.getRuleName(), ruleNameTokenTypeRuleName = ruleName === _ruleNames.TOKEN_TYPE_RULE_NAME;
|
|
24416
|
+
if (ruleNameTokenTypeRuleName) {
|
|
24417
|
+
tokenTYpeNode = nonTerminalNode2;
|
|
24418
|
+
}
|
|
24419
|
+
return tokenTYpeNode;
|
|
24420
|
+
});
|
|
24421
|
+
if (tokenTypeNode !== null) {
|
|
24422
|
+
tokenTYpeNodes2.push(tokenTypeNode);
|
|
24469
24423
|
}
|
|
24470
24424
|
return tokenTYpeNodes2;
|
|
24471
24425
|
}, []), tokenTypes = tokenTYpeNodes.map(function(tokenTypeNode) {
|
|
24472
|
-
var nonTerminalNode = tokenTypeNode,
|
|
24426
|
+
var nonTerminalNode = tokenTypeNode, tokenType = fromThirdChildNode(nonTerminalNode, function(thirdChildNode) {
|
|
24427
|
+
var terminalNode = thirdChildNode, content = terminalNode.getContent(), tokenType2 = content;
|
|
24428
|
+
return tokenType2;
|
|
24429
|
+
});
|
|
24473
24430
|
return tokenType;
|
|
24474
24431
|
});
|
|
24475
24432
|
return tokenTypes;
|
|
24476
24433
|
}
|
|
24477
|
-
function
|
|
24434
|
+
function selectorNodesFromPathNode(pathNode) {
|
|
24478
24435
|
var nonTerminalNode;
|
|
24479
24436
|
nonTerminalNode = pathNode;
|
|
24480
|
-
var
|
|
24481
|
-
|
|
24482
|
-
|
|
24437
|
+
var selectorsNode = fromLastChildNode(nonTerminalNode, function(lastChildNode) {
|
|
24438
|
+
var selectorsNode2 = lastChildNode;
|
|
24439
|
+
return selectorsNode2;
|
|
24440
|
+
});
|
|
24441
|
+
nonTerminalNode = selectorsNode;
|
|
24442
|
+
var selectorNodes = nonTerminalNode.filterChildNode(function(childNode) {
|
|
24443
|
+
var childNodeNonTerminalNode = childNode.isNonTerminalNode();
|
|
24444
|
+
if (childNodeNonTerminalNode) {
|
|
24445
|
+
return true;
|
|
24446
|
+
}
|
|
24447
|
+
});
|
|
24448
|
+
return selectorNodes;
|
|
24449
|
+
}
|
|
24450
|
+
function infiniteDescentFromPathNode(pathNode) {
|
|
24451
|
+
var nonTerminalNode = pathNode, infiniteDescent = fromSecondChildNode(nonTerminalNode, function(secondChildNode) {
|
|
24452
|
+
var nonTerminalNode2 = secondChildNode, ruleName = nonTerminalNode2.getRuleName(), ruleNameInfiniteDescentRuleName = ruleName === _ruleNames.INFINITE_DESCENT_RULE_NAME, infiniteDescent2 = ruleNameInfiniteDescentRuleName;
|
|
24453
|
+
return infiniteDescent2;
|
|
24454
|
+
});
|
|
24483
24455
|
return infiniteDescent;
|
|
24484
24456
|
}
|
|
24485
24457
|
function uniqueFromSpreadNode(spreadNode) {
|
|
24486
|
-
var unique =
|
|
24487
|
-
|
|
24488
|
-
|
|
24489
|
-
|
|
24490
|
-
|
|
24491
|
-
|
|
24458
|
+
var nonTerminalNode = spreadNode, unique = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
|
|
24459
|
+
var unique2 = false;
|
|
24460
|
+
var firstChildNodeNonTerminalNode = firstChildNode.isNonTerminalNode();
|
|
24461
|
+
if (firstChildNodeNonTerminalNode) {
|
|
24462
|
+
var nonTerminalNode2 = firstChildNode, ruleName = nonTerminalNode2.getRuleName(), ruleNameUniqueRuleName = ruleName === _ruleNames.UNIQUE_RULE_NAME;
|
|
24463
|
+
if (ruleNameUniqueRuleName) {
|
|
24464
|
+
unique2 = true;
|
|
24465
|
+
}
|
|
24492
24466
|
}
|
|
24493
|
-
|
|
24467
|
+
return unique2;
|
|
24468
|
+
});
|
|
24494
24469
|
return unique;
|
|
24495
24470
|
}
|
|
24496
24471
|
function indexFromSpreadNode(spreadNode) {
|
|
24497
24472
|
var index = null;
|
|
24498
|
-
var nonTerminalNode = spreadNode,
|
|
24473
|
+
var nonTerminalNode = spreadNode, indexNode = nonTerminalNode.findChildNode(function(childNode) {
|
|
24499
24474
|
var childNodeNonTerminalNode = childNode.isNonTerminalNode();
|
|
24500
24475
|
if (childNodeNonTerminalNode) {
|
|
24501
24476
|
var nonTerminalNode2 = childNode, ruleName = nonTerminalNode2.getRuleName(), ruleNameIndexRuleName = ruleName === _ruleNames.INDEX_RULE_NAME;
|
|
@@ -24511,7 +24486,7 @@
|
|
|
24511
24486
|
}
|
|
24512
24487
|
function endIndexFromSpreadNode(spreadNode) {
|
|
24513
24488
|
var endIndex = Infinity;
|
|
24514
|
-
var nonTerminalNode = spreadNode,
|
|
24489
|
+
var nonTerminalNode = spreadNode, endIndexNode = nonTerminalNode.findChildNode(function(childNode) {
|
|
24515
24490
|
var childNodeNonTerminalNode = childNode.isNonTerminalNode();
|
|
24516
24491
|
if (childNodeNonTerminalNode) {
|
|
24517
24492
|
var nonTerminalNode2 = childNode, ruleName = nonTerminalNode2.getRuleName(), ruleNameEndIndexRuleName = ruleName === _ruleNames.END_INDEX_RULE_NAME;
|
|
@@ -24527,7 +24502,7 @@
|
|
|
24527
24502
|
}
|
|
24528
24503
|
function startIndexFromSpreadNode(spreadNode) {
|
|
24529
24504
|
var startIndex = 0;
|
|
24530
|
-
var nonTerminalNode = spreadNode,
|
|
24505
|
+
var nonTerminalNode = spreadNode, startIndexNode = nonTerminalNode.findChildNode(function(childNode) {
|
|
24531
24506
|
var childNodeNonTerminalNode = childNode.isNonTerminalNode();
|
|
24532
24507
|
if (childNodeNonTerminalNode) {
|
|
24533
24508
|
var nonTerminalNode2 = childNode, ruleName = nonTerminalNode2.getRuleName(), ruleNameStartIndexRuleName = ruleName === _ruleNames.START_INDEX_RULE_NAME;
|
|
@@ -24542,22 +24517,25 @@
|
|
|
24542
24517
|
return startIndex;
|
|
24543
24518
|
}
|
|
24544
24519
|
function pathNodeFromExpressionNode(expressionNode) {
|
|
24545
|
-
var nonTerminalNode = expressionNode,
|
|
24520
|
+
var nonTerminalNode = expressionNode, pathNode = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
|
|
24521
|
+
var pathNode2 = firstChildNode;
|
|
24522
|
+
return pathNode2;
|
|
24523
|
+
});
|
|
24546
24524
|
return pathNode;
|
|
24547
24525
|
}
|
|
24548
24526
|
function spreadNodeFromExpressionNode(expressionNode) {
|
|
24549
|
-
var spreadNode =
|
|
24550
|
-
|
|
24551
|
-
|
|
24552
|
-
var secondChildNode = (0, _array.second)(childNodes), secondChildNodeRuleName = secondChildNode.getRuleName(), ruleNameSpreadRuleName = secondChildNodeRuleName === _ruleNames.SPREAD_RULE_NAME;
|
|
24527
|
+
var nonTerminalNode = expressionNode, spreadNode = fromSecondChildNode(nonTerminalNode, function(secondChildNode) {
|
|
24528
|
+
var spreadNode2 = null;
|
|
24529
|
+
var nonTerminalNode2 = secondChildNode, ruleName = nonTerminalNode2.getRuleName(), ruleNameSpreadRuleName = ruleName === _ruleNames.SPREAD_RULE_NAME;
|
|
24553
24530
|
if (ruleNameSpreadRuleName) {
|
|
24554
|
-
|
|
24531
|
+
spreadNode2 = secondChildNode;
|
|
24555
24532
|
}
|
|
24556
|
-
|
|
24533
|
+
return spreadNode2;
|
|
24534
|
+
});
|
|
24557
24535
|
return spreadNode;
|
|
24558
24536
|
}
|
|
24559
24537
|
function errorNodesFromExpressionNode(expressionNode) {
|
|
24560
|
-
var nonTerminalNode = expressionNode,
|
|
24538
|
+
var nonTerminalNode = expressionNode, errorNodes = nonTerminalNode.reduceChildNode(function(errorNodes2, childNode) {
|
|
24561
24539
|
var childNodeNonTerminalNode = childNode.isNonTerminalNode();
|
|
24562
24540
|
if (childNodeNonTerminalNode) {
|
|
24563
24541
|
var nonTerminalNode2 = childNode, ruleName = nonTerminalNode2.getRuleName(), ruleNameErrorRuleName = ruleName === _ruleNames.ERROR_RULE_NAME;
|
|
@@ -24572,60 +24550,104 @@
|
|
|
24572
24550
|
}
|
|
24573
24551
|
function subExpressionNodeFromExpressionNode(expressionNode) {
|
|
24574
24552
|
var subExpressionNode = null;
|
|
24575
|
-
var nonTerminalNode = expressionNode,
|
|
24576
|
-
if (
|
|
24577
|
-
|
|
24578
|
-
|
|
24579
|
-
|
|
24580
|
-
|
|
24553
|
+
var nonTerminalNode = expressionNode, multiplicity = nonTerminalNode.getMultiplicity();
|
|
24554
|
+
if (multiplicity > 1) {
|
|
24555
|
+
subExpressionNode = fromLastChildNode(nonTerminalNode, function(lastChildNode) {
|
|
24556
|
+
var subExpressionNode2 = null;
|
|
24557
|
+
var nonTerminalNode2 = lastChildNode, ruleName = nonTerminalNode2.getRuleName(), ruleNameSubExpressionRuleName = ruleName === _ruleNames.SUB_EXPRESSION_RULE_NAME;
|
|
24558
|
+
if (ruleNameSubExpressionRuleName) {
|
|
24559
|
+
subExpressionNode2 = lastChildNode;
|
|
24560
|
+
}
|
|
24561
|
+
return subExpressionNode2;
|
|
24562
|
+
});
|
|
24581
24563
|
}
|
|
24582
24564
|
return subExpressionNode;
|
|
24583
24565
|
}
|
|
24584
24566
|
function pathNodeFromSubExpressionNode(subExpressionNode) {
|
|
24585
|
-
var nonTerminalNode = subExpressionNode,
|
|
24567
|
+
var nonTerminalNode = subExpressionNode, pathNode = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
|
|
24568
|
+
var pathNode2 = firstChildNode;
|
|
24569
|
+
return pathNode2;
|
|
24570
|
+
});
|
|
24586
24571
|
return pathNode;
|
|
24587
24572
|
}
|
|
24588
24573
|
function spreadNodeFromSubExpressionNode(subExpressionNode) {
|
|
24589
24574
|
var spreadNode = null;
|
|
24590
|
-
var nonTerminalNode = subExpressionNode,
|
|
24591
|
-
if (
|
|
24592
|
-
|
|
24593
|
-
|
|
24594
|
-
|
|
24595
|
-
|
|
24575
|
+
var nonTerminalNode = subExpressionNode, multiplicity = nonTerminalNode.getMultiplicity();
|
|
24576
|
+
if (multiplicity > 1) {
|
|
24577
|
+
spreadNode = fromSecondChildNode(nonTerminalNode, function(secondChildNode) {
|
|
24578
|
+
var spreadNode2 = null;
|
|
24579
|
+
var nonTerminalNode2 = secondChildNode, ruleName = nonTerminalNode2.getRuleName(), ruleNameSpreadRuleName = ruleName === _ruleNames.SPREAD_RULE_NAME;
|
|
24580
|
+
if (ruleNameSpreadRuleName) {
|
|
24581
|
+
spreadNode2 = secondChildNode;
|
|
24582
|
+
}
|
|
24583
|
+
return spreadNode2;
|
|
24584
|
+
});
|
|
24596
24585
|
}
|
|
24597
24586
|
return spreadNode;
|
|
24598
24587
|
}
|
|
24599
24588
|
function subExpressionNodeFromSubExpressionNode(subExpressionNode) {
|
|
24600
24589
|
var nonTerminalNode = subExpressionNode;
|
|
24601
24590
|
subExpressionNode = null;
|
|
24602
|
-
var
|
|
24603
|
-
if (
|
|
24604
|
-
|
|
24605
|
-
|
|
24606
|
-
|
|
24607
|
-
|
|
24591
|
+
var multiplicity = nonTerminalNode.getMultiplicity();
|
|
24592
|
+
if (multiplicity > 1) {
|
|
24593
|
+
subExpressionNode = fromLastChildNode(nonTerminalNode, function(lastChildNode) {
|
|
24594
|
+
var _$subExpressionNode = null;
|
|
24595
|
+
var nonTerminalNoe = lastChildNode, ruleName = nonTerminalNoe.getRuleName(), ruleNameSubExpressionRuleName = ruleName === _ruleNames.SUB_EXPRESSION_RULE_NAME;
|
|
24596
|
+
if (ruleNameSubExpressionRuleName) {
|
|
24597
|
+
_$subExpressionNode = lastChildNode;
|
|
24598
|
+
}
|
|
24599
|
+
return _$subExpressionNode;
|
|
24600
|
+
});
|
|
24608
24601
|
}
|
|
24609
24602
|
return subExpressionNode;
|
|
24610
24603
|
}
|
|
24611
|
-
function
|
|
24612
|
-
var
|
|
24613
|
-
|
|
24614
|
-
|
|
24615
|
-
|
|
24616
|
-
|
|
24617
|
-
|
|
24618
|
-
childNodes = nonTerminalNode.getChildNodes();
|
|
24619
|
-
var lastChildNode = (0, _array.last)(childNodes), selectorsNode = lastChildNode;
|
|
24620
|
-
nonTerminalNode = selectorsNode;
|
|
24621
|
-
childNodes = nonTerminalNode.getChildNodes();
|
|
24622
|
-
var selectorNodes = childNodes.filter(function(childNode) {
|
|
24623
|
-
var childNodeNonTerminalNode = childNode.isNonTerminalNode();
|
|
24624
|
-
if (childNodeNonTerminalNode) {
|
|
24604
|
+
function fromFirstChildNode(nonTerminalNode, callback) {
|
|
24605
|
+
var result;
|
|
24606
|
+
var firstIndex = 0;
|
|
24607
|
+
nonTerminalNode.forwardsSomeChildNode(function(childNode, index) {
|
|
24608
|
+
if (index === firstIndex) {
|
|
24609
|
+
var firstChildNode = childNode;
|
|
24610
|
+
result = callback(firstChildNode);
|
|
24625
24611
|
return true;
|
|
24626
24612
|
}
|
|
24627
24613
|
});
|
|
24628
|
-
return
|
|
24614
|
+
return result;
|
|
24615
|
+
}
|
|
24616
|
+
function fromSecondChildNode(nonTerminalNode, callback) {
|
|
24617
|
+
var result;
|
|
24618
|
+
var secondIndex = 1;
|
|
24619
|
+
nonTerminalNode.forwardsSomeChildNode(function(childNode, index) {
|
|
24620
|
+
if (index === secondIndex) {
|
|
24621
|
+
var firstChildNode = childNode;
|
|
24622
|
+
result = callback(firstChildNode);
|
|
24623
|
+
return true;
|
|
24624
|
+
}
|
|
24625
|
+
});
|
|
24626
|
+
return result;
|
|
24627
|
+
}
|
|
24628
|
+
function fromThirdChildNode(nonTerminalNode, callback) {
|
|
24629
|
+
var result;
|
|
24630
|
+
var thirdIndex = 2;
|
|
24631
|
+
nonTerminalNode.forwardsSomeChildNode(function(childNode, index) {
|
|
24632
|
+
if (index === thirdIndex) {
|
|
24633
|
+
var thirdChildNode = childNode;
|
|
24634
|
+
result = callback(thirdChildNode);
|
|
24635
|
+
return true;
|
|
24636
|
+
}
|
|
24637
|
+
});
|
|
24638
|
+
return result;
|
|
24639
|
+
}
|
|
24640
|
+
function fromLastChildNode(nonTerminalNode, callback) {
|
|
24641
|
+
var result;
|
|
24642
|
+
var multiplicity = nonTerminalNode.getMultiplicity(), lastIndex = multiplicity - 1;
|
|
24643
|
+
nonTerminalNode.backwardsSomeChildNode(function(childNode, index) {
|
|
24644
|
+
if (index === lastIndex) {
|
|
24645
|
+
var thirdChildNode = childNode;
|
|
24646
|
+
result = callback(thirdChildNode);
|
|
24647
|
+
return true;
|
|
24648
|
+
}
|
|
24649
|
+
});
|
|
24650
|
+
return result;
|
|
24629
24651
|
}
|
|
24630
24652
|
});
|
|
24631
24653
|
|
|
@@ -24703,6 +24725,83 @@
|
|
|
24703
24725
|
}();
|
|
24704
24726
|
});
|
|
24705
24727
|
|
|
24728
|
+
// node_modules/occam-query/lib/utilities/array.js
|
|
24729
|
+
var require_array2 = __commonJS((exports) => {
|
|
24730
|
+
"use strict";
|
|
24731
|
+
Object.defineProperty(exports, "__esModule", {
|
|
24732
|
+
value: true
|
|
24733
|
+
});
|
|
24734
|
+
function _export(target, all) {
|
|
24735
|
+
for (var name in all)
|
|
24736
|
+
Object.defineProperty(target, name, {
|
|
24737
|
+
enumerable: true,
|
|
24738
|
+
get: all[name]
|
|
24739
|
+
});
|
|
24740
|
+
}
|
|
24741
|
+
_export(exports, {
|
|
24742
|
+
clear: function() {
|
|
24743
|
+
return clear;
|
|
24744
|
+
},
|
|
24745
|
+
fifth: function() {
|
|
24746
|
+
return fifth;
|
|
24747
|
+
},
|
|
24748
|
+
first: function() {
|
|
24749
|
+
return first;
|
|
24750
|
+
},
|
|
24751
|
+
fourth: function() {
|
|
24752
|
+
return fourth;
|
|
24753
|
+
},
|
|
24754
|
+
includes: function() {
|
|
24755
|
+
return includes;
|
|
24756
|
+
},
|
|
24757
|
+
last: function() {
|
|
24758
|
+
return last;
|
|
24759
|
+
},
|
|
24760
|
+
push: function() {
|
|
24761
|
+
return push;
|
|
24762
|
+
},
|
|
24763
|
+
second: function() {
|
|
24764
|
+
return second;
|
|
24765
|
+
},
|
|
24766
|
+
third: function() {
|
|
24767
|
+
return third;
|
|
24768
|
+
},
|
|
24769
|
+
trim: function() {
|
|
24770
|
+
return trim;
|
|
24771
|
+
}
|
|
24772
|
+
});
|
|
24773
|
+
var _necessary = require_browser();
|
|
24774
|
+
var clear = _necessary.arrayUtilities.clear;
|
|
24775
|
+
var push = _necessary.arrayUtilities.push;
|
|
24776
|
+
var first = _necessary.arrayUtilities.first;
|
|
24777
|
+
var second = _necessary.arrayUtilities.second;
|
|
24778
|
+
var third = _necessary.arrayUtilities.third;
|
|
24779
|
+
var fourth = _necessary.arrayUtilities.fourth;
|
|
24780
|
+
var fifth = _necessary.arrayUtilities.fifth;
|
|
24781
|
+
var last = _necessary.arrayUtilities.last;
|
|
24782
|
+
function trim(array, startIndex, endIndex) {
|
|
24783
|
+
if (startIndex < 0) {
|
|
24784
|
+
var length = array.length;
|
|
24785
|
+
startIndex = length + startIndex;
|
|
24786
|
+
endIndex = length + endIndex;
|
|
24787
|
+
}
|
|
24788
|
+
if (endIndex !== Infinity) {
|
|
24789
|
+
var start = endIndex + 1;
|
|
24790
|
+
array.splice(start);
|
|
24791
|
+
}
|
|
24792
|
+
var start1 = 0, deleteCount = startIndex;
|
|
24793
|
+
array.splice(start1, deleteCount);
|
|
24794
|
+
}
|
|
24795
|
+
function includes(array) {
|
|
24796
|
+
for (var _len = arguments.length, elements = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
24797
|
+
elements[_key - 1] = arguments[_key];
|
|
24798
|
+
}
|
|
24799
|
+
return elements.some(function(element) {
|
|
24800
|
+
return array.includes(element);
|
|
24801
|
+
});
|
|
24802
|
+
}
|
|
24803
|
+
});
|
|
24804
|
+
|
|
24706
24805
|
// node_modules/occam-query/lib/spread.js
|
|
24707
24806
|
var require_spread = __commonJS((exports) => {
|
|
24708
24807
|
"use strict";
|
|
@@ -25523,8 +25622,8 @@
|
|
|
25523
25622
|
if (this.infiniteDescent) {
|
|
25524
25623
|
if (nodeNonTerminalNode) {
|
|
25525
25624
|
depth++;
|
|
25526
|
-
var nonTerminalNode1 = node
|
|
25527
|
-
|
|
25625
|
+
var nonTerminalNode1 = node;
|
|
25626
|
+
nonTerminalNode1.forEachChildNode(function(childNode) {
|
|
25528
25627
|
_this.find(childNode, depth, maximumDepth);
|
|
25529
25628
|
});
|
|
25530
25629
|
}
|
|
@@ -25543,9 +25642,9 @@
|
|
|
25543
25642
|
var intermediateNodeNonTerminalNode = intermediateNode.isNonTerminalNode();
|
|
25544
25643
|
if (intermediateNodeNonTerminalNode) {
|
|
25545
25644
|
depth++;
|
|
25546
|
-
var nonTerminalNode = intermediateNode
|
|
25645
|
+
var nonTerminalNode = intermediateNode;
|
|
25547
25646
|
_this.subQuery.clear();
|
|
25548
|
-
|
|
25647
|
+
nonTerminalNode.forEachChildNode(function(childNode) {
|
|
25549
25648
|
_this.subQuery.find(childNode, depth, maximumDepth);
|
|
25550
25649
|
});
|
|
25551
25650
|
_this.subQuery.apply(nodes, depth, maximumDepth);
|
|
@@ -26972,4 +27071,4 @@
|
|
|
26972
27071
|
});
|
|
26973
27072
|
require_example();
|
|
26974
27073
|
})();
|
|
26975
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3RhZ05hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3N0cmluZy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvYXN5bmNocm9ub3VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hamF4LmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2Jyb3dzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvc3BlY2lhbFN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdXRpbGl0aWVzL3J1bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ibmYvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy91dGlsaXRpZXMvdG9rZW4uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2Jhc2ljL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvcHl0aG9uU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9pbmRleC5qcyIsICJzcmMvY3NzL2VudHJpZXMuanMiLCAic3JjL2Nzcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbWl4aW5zL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy90b2tlbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2hvcml6b250YWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9jaGlsZE5vZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcGFyc2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZU5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL25vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvZXBzaWxvbk5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydENob2ljZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9lbmRPZkxpbmVOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0Q2hvaWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRDaG9pY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL3BhcnRDaG9pY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL3F1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcHJlY2VkZW5jZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wcmVjZWRlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9wcmVjZWRlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi90ZXJtaW5hbFBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9ub25UZXJtaW5hbFBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvb3BhY2l0eU1vZGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvbm9XaGl0ZXNwYWNlTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL29wYWNpdHlNb2RpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL29wYWNpdHlNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9jYWxsQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9jYWxsQWhlYWRNb2RpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL2NhbGxBaGVhZE1vZGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3F1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL29wdGlvbmFsUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3N0YXJ0T2ZDb250ZW50Tm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9zdGFydE9mQ29udGVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9zdGFydE9mQ29udGVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc3RhcnRPZkNvbnRlbnRQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3N0YXJ0T2ZDb250ZW50UGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvc3RhcnRPZkNvbnRlbnRQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9vbmVPck1vcmVRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi96ZXJvT3JNb3JlUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvaW5kZXguanMiLCAic3JjL2Nzcy9ibmYuanMiLCAic3JjL2Nzcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy9ydWxlTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy91dGlsaXRpZXMvbm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcXVlcnkvc3JjL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy9zcHJlYWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy9zdWJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1xdWVyeS9zcmMvZXhwcmVzc2lvbi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1xdWVyeS9zcmMvZXhwcmVzc2lvbi9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcXVlcnkvc3JjL2V4cHJlc3Npb24vYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1xdWVyeS9zcmMvZXhwcmVzc2lvbi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy9leHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1xdWVyeS9zcmMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLmpzIiwgInNyYy91dGlsaXRpZXMvY29udGVudC5qcyIsICJzcmMvc3R5bGUvZGVjbGFyYXRpb24uanMiLCAic3JjL3N0eWxlL2RlY2xhcmF0aW9ucy5qcyIsICJzcmMvc3R5bGUvcnVsZVNldC5qcyIsICJzcmMvc3R5bGUvcnVsZVNldHMuanMiLCAic3JjL3V0aWxpdGllcy9zdHJpbmcuanMiLCAic3JjL3N0eWxlL21lZGlhLmpzIiwgInNyYy9zdHlsZS9tZWRpYXMuanMiLCAic3JjL3N0eWxlL2tleWZyYW1lLmpzIiwgInNyYy9zdHlsZS9rZXlmcmFtZXMuanMiLCAic3JjL3N0eWxlL2tleWZyYW1lc3MuanMiLCAic3JjL3N0eWxlLmpzIiwgInNyYy91dGlsaXRpZXMvc3R5bGVzLmpzIiwgInNyYy91dGlsaXRpZXMvY2xhc3NOYW1lLmpzIiwgInNyYy9pbmRleC5qcyIsICJzcmMvZXhhbXBsZS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHRhZ05hbWVzID0gW1xuICBcImFcIiwgXCJhYmJyXCIsIFwiYWRkcmVzc1wiLCBcImFzaWRlXCIsIFwiYXVkaW9cIixcbiAgXCJiXCIsIFwiYmFzZVwiLCBcImJkaVwiLCBcImJkb1wiLCBcImJsb2NrcXVvdGVcIiwgXCJib2R5XCIsIFwiYnJcIiwgXCJidXR0b25cIixcbiAgXCJjYW52YXNcIiwgXCJjYXB0aW9uXCIsIFwiY2l0ZVwiLCBcImNvZGVcIiwgXCJjb2xcIiwgXCJjb2xncm91cFwiLFxuICBcImRhdGFcIiwgXCJkYXRhbGlzdFwiLCBcImRkXCIsIFwiZGVsXCIsIFwiZGV0YWlsc1wiLCBcImRmblwiLCBcImRpYWxvZ1wiLCBcImRpdlwiLCBcImRsXCIsIFwiZHRcIiwgXCJlbVwiLCBcImVtYmVkXCIsIFwiZmllbGRzZXRcIiwgXCJmaWdjYXB0aW9uXCIsIFwiZmlndXJlXCIsIFwiZm9vdGVyXCIsIFwiZm9ybVwiLFxuICBcImgxXCIsIFwiaDJcIiwgXCJoM1wiLCBcImg0XCIsIFwiaDVcIiwgXCJoNlwiLCBcImhlYWRcIiwgXCJoZWFkZXJcIiwgXCJoclwiLCBcImh0bWxcIixcbiAgXCJpXCIsIFwiaWZyYW1lXCIsIFwiaW1nXCIsIFwiaW5wdXRcIiwgXCJpbnNcIiwgXCJrYmRcIiwgXCJsYWJlbFwiLCBcImxlZ2VuZFwiLCBcImxpXCIsIFwibGlua1wiLFxuICBcIm1haW5cIiwgXCJtYXBcIiwgXCJtYXJrXCIsIFwibWV0YVwiLCBcIm1ldGVyXCIsIFwibmF2XCIsIFwibm9zY3JpcHRcIixcbiAgXCJvYmplY3RcIiwgXCJvbFwiLCBcIm9wdGdyb3VwXCIsIFwib3B0aW9uXCIsIFwib3V0cHV0XCIsXG4gIFwicFwiLCBcInBhcmFtXCIsIFwicGljdHVyZVwiLCBcInByZVwiLCBcInByb2dyZXNzXCIsXG4gIFwicVwiLCBcInJwXCIsIFwicnRcIiwgXCJydWJ5XCIsXG4gIFwic1wiLCBcInNhbXBcIiwgXCJzY3JpcHRcIiwgXCJzZWN0aW9uXCIsIFwic2VsZWN0XCIsIFwic21hbGxcIiwgXCJzb3VyY2VcIiwgXCJzcGFuXCIsIFwic3Ryb25nXCIsIFwic3R5bGVcIiwgXCJzdWJcIiwgXCJzdW1tYXJ5XCIsIFwic3VwXCIsIFwic3ZnXCIsXG4gIFwidGFibGVcIiwgXCJ0Ym9keVwiLCBcInRkXCIsIFwidGVtcGxhdGVcIiwgXCJ0ZXh0YXJlYVwiLCBcInRmb290XCIsIFwidGhcIiwgXCJ0aGVhZFwiLCBcInRpbWVcIiwgXCJ0aXRsZVwiLCBcInRyXCIsIFwidHJhY2tcIixcbiAgXCJ1XCIsIFwidWxcIixcbiAgXCJ2YXJcIiwgXCJ2aWRlb1wiLFxuICBcIndiclwiXG5dO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdOYW1lcztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFRSQUNFX0xFVkVMID0gXCJ0cmFjZVwiO1xuZXhwb3J0IGNvbnN0IERFQlVHX0xFVkVMID0gXCJkZWJ1Z1wiO1xuZXhwb3J0IGNvbnN0IElORk9fTEVWRUwgPSBcImluZm9cIjtcbmV4cG9ydCBjb25zdCBXQVJOSU5HX0xFVkVMID0gXCJ3YXJuaW5nXCI7XG5leHBvcnQgY29uc3QgRVJST1JfTEVWRUwgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgRkFUQUxfTEVWRUwgPSBcImZhdGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVFJBQ0VfTEVWRUwsXG4gIERFQlVHX0xFVkVMLFxuICBJTkZPX0xFVkVMLFxuICBXQVJOSU5HX0xFVkVMLFxuICBFUlJPUl9MRVZFTCxcbiAgRkFUQUxfTEVWRUxcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBHRVRfTUVUSE9EID0gXCJHRVRcIjtcbmV4cG9ydCBjb25zdCBQT1NUX01FVEhPRCA9IFwiUE9TVFwiO1xuZXhwb3J0IGNvbnN0IFBBVENIX01FVEhPRCA9IFwiUEFUQ0hcIjtcbmV4cG9ydCBjb25zdCBERUxFVEVfTUVUSE9EID0gXCJERUxFVEVcIjtcbmV4cG9ydCBjb25zdCBPUFRJT05TX01FVEhPRCA9IFwiT1BUSU9OU1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEdFVF9NRVRIT0QsXG4gIFBPU1RfTUVUSE9ELFxuICBQQVRDSF9NRVRIT0QsXG4gIERFTEVURV9NRVRIT0QsXG4gIE9QVElPTlNfTUVUSE9EXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUFJBR01BX0hFQURFUiA9IFwicHJhZ21hXCI7XG5leHBvcnQgY29uc3QgQUNDRVBUX0hFQURFUiA9IFwiYWNjZXB0XCI7XG5leHBvcnQgY29uc3QgTE9DQVRJT05fSEVBREVSID0gXCJsb2NhdGlvblwiO1xuZXhwb3J0IGNvbnN0IFVTRVJfQUdFTlRfSEVBREVSID0gXCJ1c2VyLWFnZW50XCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9UWVBFX0hFQURFUiA9IFwiY29udGVudC10eXBlXCI7XG5leHBvcnQgY29uc3QgQVVUSE9SSVpBVElPTl9IRUFERVIgPSBcImF1dGhvcml6YXRpb25cIjtcbmV4cG9ydCBjb25zdCBDQUNIRV9DT05UUk9MX0hFQURFUiA9IFwiY2FjaGUtY29udHJvbFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfTEVOR1RIX0hFQURFUiA9IFwiY29udGVudC1sZW5ndGhcIjtcbmV4cG9ydCBjb25zdCBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIgPSBcInRyYW5zZmVyLWVuY29kaW5nXCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9ESVNQT1NJVElPTl9IRUFERVIgPSBcImNvbnRlbnQtZGlzcG9zaXRpb25cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfUkVRVUVTVF9NRVRIT0RfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LW1ldGhvZFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFBSQUdNQV9IRUFERVIsXG4gIEFDQ0VQVF9IRUFERVIsXG4gIExPQ0FUSU9OX0hFQURFUixcbiAgVVNFUl9BR0VOVF9IRUFERVIsXG4gIENPTlRFTlRfVFlQRV9IRUFERVIsXG4gIEFVVEhPUklaQVRJT05fSEVBREVSLFxuICBDQUNIRV9DT05UUk9MX0hFQURFUixcbiAgQ09OVEVOVF9MRU5HVEhfSEVBREVSLFxuICBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIsXG4gIENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfSEVBREVSU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUlxufTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUQUJfS0VZX0NPREUgPSA5O1xuZXhwb3J0IGNvbnN0IFNISUZUX0tFWV9DT0RFID0gMTY7XG5leHBvcnQgY29uc3QgRU5URVJfS0VZX0NPREUgPSAxMztcbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZX0NPREUgPSAyNztcbmV4cG9ydCBjb25zdCBERUxFVEVfS0VZX0NPREUgPSA0NjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfS0VZX0NPREUgPSA4O1xuZXhwb3J0IGNvbnN0IEFSUk9XX1VQX0tFWV9DT0RFID0gMzg7XG5leHBvcnQgY29uc3QgQVJST1dfRE9XTl9LRVlfQ09ERSA9IDQwO1xuZXhwb3J0IGNvbnN0IEFSUk9XX0xFRlRfS0VZX0NPREUgPSAzNztcbmV4cG9ydCBjb25zdCBBUlJPV19SSUdIVF9LRVlfQ09ERSA9IDM5O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRBQl9LRVlfQ09ERSxcbiAgU0hJRlRfS0VZX0NPREUsXG4gIEVOVEVSX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZX0NPREUsXG4gIERFTEVURV9LRVlfQ09ERSxcbiAgQkFDS1NQQUNFX0tFWV9DT0RFLFxuICBBUlJPV19VUF9LRVlfQ09ERSxcbiAgQVJST1dfRE9XTl9LRVlfQ09ERSxcbiAgQVJST1dfTEVGVF9LRVlfQ09ERSxcbiAgQVJST1dfUklHSFRfS0VZX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVVEY4X0VOQ09ESU5HID0gXCJ1dGY4XCI7XG5leHBvcnQgY29uc3QgVVRGXzhfRU5DT0RJTkcgPSBcInV0Zi04XCI7XG5leHBvcnQgY29uc3QgQkFTRTY0X0VOQ09ESU5HID0gXCJiYXNlNjRcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBVVEY4X0VOQ09ESU5HLFxuICBVVEZfOF9FTkNPRElORyxcbiAgQkFTRTY0X0VOQ09ESU5HXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVVBfQ0hBUkFDVEVSID0gXCJcdTAwMWJbQVwiO1xuZXhwb3J0IGNvbnN0IEVUWF9DSEFSQUNURVIgPSBcIlxcdTAwMDNcIjtcbmV4cG9ydCBjb25zdCBCQVJfQ0hBUkFDVEVSID0gXCJ8XCI7XG5leHBvcnQgY29uc3QgSEFUX0NIQVJBQ1RFUiA9IFwiXlwiO1xuZXhwb3J0IGNvbnN0IFBMVVNfQ0hBUkFDVEVSID0gXCIrXCI7XG5leHBvcnQgY29uc3QgREFTSF9DSEFSQUNURVIgPSBcIi1cIjtcbmV4cG9ydCBjb25zdCBET1dOX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0JcIjtcbmV4cG9ydCBjb25zdCBMRUZUX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0RcIjtcbmV4cG9ydCBjb25zdCBSSUdIVF9DSEFSQUNURVIgPSBcIlx1MDAxYltDXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IERPTExBUl9DSEFSQUNURVIgPSBcIiRcIjtcbmV4cG9ydCBjb25zdCBDVFJMX0NfQ0hBUkFDVEVSID0gXCJeQ1wiO1xuZXhwb3J0IGNvbnN0IEVTQ0FQRV9DSEFSQUNURVIgPSBcIlxcdTAwMWJcIjtcbmV4cG9ydCBjb25zdCBBU1RFUklTS19DSEFSQUNURVIgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBXSUxEQ0FSRF9DSEFSQUNURVIgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBCQUNLVElDS19ERUxJTUlURVIgPSBcImBcIjtcbmV4cG9ydCBjb25zdCBORVdfTElORV9DSEFSQUNURVIgPSBcIlxcblwiO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBCQUNLU0xBU0hfQ0hBUkFDVEVSID0gXCJcXFxcXCI7XG5leHBvcnQgY29uc3QgQkFDS1NQQUNFX0NIQVJBQ1RFUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTI3KTtcbmV4cG9ydCBjb25zdCBRVUVTVElPTl9NQVJLX0NIQVJBQ1RFUiA9IFwiP1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgT1BFTklOR19CUkFDS0VUX0NIQVJBQ1RFUiA9IFwiKFwiO1xuZXhwb3J0IGNvbnN0IENMT1NJTkdfQlJBQ0tFVF9DSEFSQUNURVIgPSBcIilcIjtcbmV4cG9ydCBjb25zdCBDQVJSSUFHRV9SRVRVUk5fQ0hBUkFDVEVSID0gXCJcXHJcIjtcbmV4cG9ydCBjb25zdCBFWENMQU1BVElPTl9NQVJLX0NIQVJBQ1RFUiA9IFwiIVwiO1xuZXhwb3J0IGNvbnN0IE9QRU5JTkdfQ1VSTFlfQlJBQ0tFVF9DSEFSQUNURVIgPSBcIntcIjtcbmV4cG9ydCBjb25zdCBDTE9TSU5HX0NVUkxZX0JSQUNLRVRfQ0hBUkFDVEVSID0gXCJ9XCI7XG5leHBvcnQgY29uc3QgT1BFTklOR19TUVVBUkVfQlJBQ0tFVF9DSEFSQUNURVIgPSBcIltcIjtcbmV4cG9ydCBjb25zdCBDTE9TSU5HX1NRVUFSRV9CUkFDS0VUX0NIQVJBQ1RFUiA9IFwiXVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFVQX0NIQVJBQ1RFUixcbiAgRVRYX0NIQVJBQ1RFUixcbiAgQkFSX0NIQVJBQ1RFUixcbiAgSEFUX0NIQVJBQ1RFUixcbiAgUExVU19DSEFSQUNURVIsXG4gIERBU0hfQ0hBUkFDVEVSLFxuICBET1dOX0NIQVJBQ1RFUixcbiAgTEVGVF9DSEFSQUNURVIsXG4gIFJJR0hUX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgRE9MTEFSX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgRVNDQVBFX0NIQVJBQ1RFUixcbiAgQVNURVJJU0tfQ0hBUkFDVEVSLFxuICBXSUxEQ0FSRF9DSEFSQUNURVIsXG4gIEJBQ0tUSUNLX0RFTElNSVRFUixcbiAgTkVXX0xJTkVfQ0hBUkFDVEVSLFxuICBBTVBFUlNBTkRfQ0hBUkFDVEVSLFxuICBCQUNLU0xBU0hfQ0hBUkFDVEVSLFxuICBCQUNLU1BBQ0VfQ0hBUkFDVEVSLFxuICBRVUVTVElPTl9NQVJLX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIE9QRU5JTkdfQlJBQ0tFVF9DSEFSQUNURVIsXG4gIENMT1NJTkdfQlJBQ0tFVF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSLFxuICBPUEVOSU5HX0NVUkxZX0JSQUNLRVRfQ0hBUkFDVEVSLFxuICBDTE9TSU5HX0NVUkxZX0JSQUNLRVRfQ0hBUkFDVEVSLFxuICBPUEVOSU5HX1NRVUFSRV9CUkFDS0VUX0NIQVJBQ1RFUixcbiAgQ0xPU0lOR19TUVVBUkVfQlJBQ0tFVF9DSEFSQUNURVJcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBaRVJPXzBfU1RBVFVTX0NPREUgPSAwO1xuZXhwb3J0IGNvbnN0IE9LXzIwMF9TVEFUVVNfQ09ERSA9IDIwMDtcbmV4cG9ydCBjb25zdCBGT1VORF8zMDJfU1RBVFVTX0NPREUgPSAzMDI7XG5leHBvcnQgY29uc3QgQ1JFQVRFRF8yMDFfU1RBVFVTX0NPREUgPSAyMDE7XG5leHBvcnQgY29uc3QgU0VFX09USEVSXzMwM19TVEFUVVNfQ09ERSA9IDMwMztcbmV4cG9ydCBjb25zdCBGT1JCSURERU5fNDAzX1NUQVRVU19DT0RFID0gNDAzO1xuZXhwb3J0IGNvbnN0IE5PVF9GT1VORF80MDRfU1RBVFVTX0NPREUgPSA0MDQ7XG5leHBvcnQgY29uc3QgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX0NPREUgPSAyMDQ7XG5leHBvcnQgY29uc3QgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19DT0RFID0gNTAyO1xuZXhwb3J0IGNvbnN0IEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfQ09ERSA9IDQwMDtcbmV4cG9ydCBjb25zdCBVTkFVVEhPUklaRURfNDAxX1NUQVRVU19DT0RFID0gNDAxO1xuZXhwb3J0IGNvbnN0IFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX0NPREUgPSA0MDg7XG5leHBvcnQgY29uc3QgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19DT0RFID0gNDI5O1xuZXhwb3J0IGNvbnN0IFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19DT0RFID0gNTAzO1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREUgPSA1MDA7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgWkVST18wX1NUQVRVU19DT0RFLFxuICBPS18yMDBfU1RBVFVTX0NPREUsXG4gIEZPVU5EXzMwMl9TVEFUVVNfQ09ERSxcbiAgQ1JFQVRFRF8yMDFfU1RBVFVTX0NPREUsXG4gIFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUsXG4gIEZPUkJJRERFTl80MDNfU1RBVFVTX0NPREUsXG4gIE5PVF9GT1VORF80MDRfU1RBVFVTX0NPREUsXG4gIE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFLFxuICBCQURfR0FURVdBWV81MDJfU1RBVFVTX0NPREUsXG4gIEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfQ09ERSxcbiAgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfQ09ERSxcbiAgUkVRVUVTVF9USU1FT1VUXzQwOF9TVEFUVVNfQ09ERSxcbiAgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19DT0RFLFxuICBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfQ09ERSxcbiAgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfQ09ERVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFRFWFRfSFRNTF9DT05URU5UX1RZUEUgPSBcInRleHQvaHRtbFwiO1xuZXhwb3J0IGNvbnN0IFRFWFRfUExBSU5fQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUgPSBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUgPSBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTl9PQ1RFVF9TVFJFQU1fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjtcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTl9YX1dXV19GT1JNX0VOQ09ERURfQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIjtcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTl9KU09OX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9dXRmLThcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBURVhUX0hUTUxfQ09OVEVOVF9UWVBFLFxuICBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gIFRFWFRfSFRNTF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fT0NURVRfU1RSRUFNX0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVST18wX1NUQVRVU19NRVNTQUdFID0gXCJcIjtcbmV4cG9ydCBjb25zdCBPS18yMDBfU1RBVFVTX01FU1NBR0UgPSBcIk9LXCI7XG5leHBvcnQgY29uc3QgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFID0gXCJGb3VuZFwiO1xuZXhwb3J0IGNvbnN0IENSRUFURURfMjAxX1NUQVRVU19NRVNTQUdFID0gXCJDcmVhdGVkXCI7XG5leHBvcnQgY29uc3QgU0VFX09USEVSXzMwM19TVEFUVVNfTUVTU0FHRSA9IFwiU2VlIG90aGVyXCI7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfTUVTU0FHRSA9IFwiRm9yYmlkZGVuXCI7XG5leHBvcnQgY29uc3QgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfTUVTU0FHRSA9IFwiTm90IGZvdW5kXCI7XG5leHBvcnQgY29uc3QgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX01FU1NBR0UgPSBcIk5vIGNvbnRlbnRcIjtcbmV4cG9ydCBjb25zdCBCQURfR0FURVdBWV81MDJfU1RBVFVTX01FU1NBR0UgPSBcIkJhZCBnYXRld2F5XCI7XG5leHBvcnQgY29uc3QgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19NRVNTQUdFID0gXCJCYWQgcmVxdWVzdFwiO1xuZXhwb3J0IGNvbnN0IFVOQVVUSE9SSVpFRF80MDFfU1RBVFVTX01FU1NBR0UgPSBcIlVuYXV0aG9yaXplZFwiO1xuZXhwb3J0IGNvbnN0IFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX01FU1NBR0UgPSBcIlJlcXVlc3QgdGltZW91dFwiO1xuZXhwb3J0IGNvbnN0IFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfTUVTU0FHRSA9IFwiVG9vIG1hbnkgcmVxdWVzdHNcIjtcbmV4cG9ydCBjb25zdCBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfTUVTU0FHRSA9IFwiU2VydmljZSB1bmF2YWlsYWJsZVwiO1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX01FU1NBR0UgPSBcIkludGVybmFsIHNlcnZlciBlcnJvclwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFpFUk9fMF9TVEFUVVNfTUVTU0FHRSxcbiAgT0tfMjAwX1NUQVRVU19NRVNTQUdFLFxuICBGT1VORF8zMDJfU1RBVFVTX01FU1NBR0UsXG4gIENSRUFURURfMjAxX1NUQVRVU19NRVNTQUdFLFxuICBTRUVfT1RIRVJfMzAzX1NUQVRVU19NRVNTQUdFLFxuICBGT1JCSURERU5fNDAzX1NUQVRVU19NRVNTQUdFLFxuICBOT1RfRk9VTkRfNDA0X1NUQVRVU19NRVNTQUdFLFxuICBOT19DT05URU5UXzIwNF9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19NRVNTQUdFLFxuICBCQURfUkVRVUVTVF80MDBfU1RBVFVTX01FU1NBR0UsXG4gIFVOQVVUSE9SSVpFRF80MDFfU1RBVFVTX01FU1NBR0UsXG4gIFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX01FU1NBR0UsXG4gIFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfTUVTU0FHRSxcbiAgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX01FU1NBR0UsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX01FU1NBR0Vcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBaRVJPID0gXCIwXCI7XG5leHBvcnQgY29uc3QgREFUQSA9IFwiZGF0YVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gXCJudW1iZXJcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVCA9IFwiZGVmYXVsdFwiO1xuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gXCJFTlZJUk9OTUVOVFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9KU09OID0gXCJwYWNrYWdlLmpzb25cIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0KGFycmF5KSB7IHJldHVybiBhcnJheVswXTt9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzFdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZChhcnJheSkgeyByZXR1cm4gYXJyYXlbMl07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbM107IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoKGFycmF5KSB7IHJldHVybiBhcnJheVs0XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc2l4dGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzVdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXZlbnRoKGFycmF5KSB7IHJldHVybiBhcnJheVs2XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZWlnaHRoKGFycmF5KSB7IHJldHVybiBhcnJheVs3XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbmludGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzhdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW50aChhcnJheSkgeyByZXR1cm4gYXJyYXlbOV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0TGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY29uZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA0XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlmdGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA1XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc2l4dGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA2XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc2V2ZW50aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDddOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBlaWdodGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA4XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbmludGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA5XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBNYXRoLm1heCgxLCBhcnJheS5sZW5ndGggLSAxKSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXlBLCBhcnJheUIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXlBLCBhcnJheUIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNoaWZ0KGFycmF5QSwgYXJyYXlCKSB7IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGFycmF5QSwgYXJyYXlCKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KGFycmF5QSwgZWxlbWVudE9yQXJyYXkyKSB7XG4gIGNvbnN0IGFycmF5QiA9IChlbGVtZW50T3JBcnJheTIgaW5zdGFuY2VvZiBBcnJheSkgP1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50T3JBcnJheTIgOlxuICAgICAgICAgICAgICAgICAgICAgWyBlbGVtZW50T3JBcnJheTIgXTtcbiAgXG4gIHB1c2goYXJyYXlBLCBhcnJheUIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5QSwgYXJyYXlCKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheUIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXlBLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Qik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheUEsIGFycmF5QikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheUEsIGFycmF5Qik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGg7XG5cbiAgaWYgKGFycmF5QUxlbmd0aCA9PT0gYXJyYXlCTGVuZ3RoKSB7XG4gICAgbWF0Y2hlcyA9IGFycmF5QS5ldmVyeSgoZWxlbWVudEEsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50QiA9IGFycmF5QltpbmRleF0sXG4gICAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50QSwgZWxlbWVudEIsIGluZGV4KTtcblxuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZShhcnJheUEsIGFycmF5QiwgY2FsbGJhY2spIHtcbiAgbGV0IGNvdXBsZWQgPSBmYWxzZTtcblxuICBjb25zdCBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoLFxuICAgICAgICBhcnJheUJMZW5ndGggPSBhcnJheUIubGVuZ3RoO1xuXG4gIGlmIChhcnJheUFMZW5ndGggPT09IGFycmF5Qkxlbmd0aCkge1xuICAgIGFycmF5QiA9IFsgIC8vL1xuICAgICAgLi4uYXJyYXlCXG4gICAgXTtcblxuICAgIGNvdXBsZWQgPSBhcnJheUEuZXZlcnkoKGVsZW1lbnRBLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudEIgPSBleHRyYWN0KGFycmF5QiwgKGVsZW1lbnRCKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnRBLCBlbGVtZW50Qik7XG5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuXG4gICAgICBpZiAoZWxlbWVudEIgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY291cGxlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcnJlbGF0ZShhcnJheUEsIGFycmF5QiwgY2FsbGJhY2spIHtcbiAgYXJyYXlCID0gWyAgLy8vXG4gICAgLi4uYXJyYXlCXG4gIF07XG5cbiAgY29uc3QgY29ycmVsYXRlcyA9IGFycmF5QS5ldmVyeSgoZWxlbWVudEEpID0+IHtcbiAgICBjb25zdCBlbGVtZW50QiA9IGV4dHJhY3QoYXJyYXlCLCAoZWxlbWVudEIpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnRBLCBlbGVtZW50Qik7XG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChlbGVtZW50QiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY29ycmVsYXRlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUoYXJyYXlBLCBhcnJheUIsIGNhbGxiYWNrKSB7XG4gIGxldCByZXNvbHZlZDtcblxuICBhcnJheUEgPSBbICAvLy9cbiAgICAuLi5hcnJheUFcbiAgXTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgYXJyYXlBTGVuZ3RoID0gYXJyYXlBLmxlbmd0aDtcblxuICAgIGlmIChhcnJheUFMZW5ndGggPT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlZCA9IGZhbHNlO1xuXG4gICAgYXJyYXlBLmZvckVhY2goKGVsZW1lbnRBKSA9PiB7XG4gICAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50QSk7XG5cbiAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudEIgPSBlbGVtZW50QTsgIC8vL1xuXG4gICAgICAgIGFycmF5Qi5wdXNoKGVsZW1lbnRCKTtcblxuICAgICAgICByZXNvbHZlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc29sdmVkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBmaWx0ZXIoYXJyYXlBLCAoZWxlbWVudEEpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5QkluY2x1ZGVzRWxlbWVudEEgPSBhcnJheUIuaW5jbHVkZXMoZWxlbWVudEEpO1xuXG4gICAgICBpZiAoIWFycmF5QkluY2x1ZGVzRWxlbWVudEEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoO1xuXG4gIHJlc29sdmVkID0gKGFycmF5QUxlbmd0aCA9PT0gMCk7XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgZWxlbWVudHMgPSBbXTtcblxuICBmb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlKGFycmF5LCBlbGVtZW50LCBjYWxsYmFjaykge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgc3RhcnQgPSBpbmRleDsgIC8vL1xuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgaWYgKGZvdW5kKSB7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpY2UoYXJyYXlBLCBzdGFydCwgZGVsZXRlQ291bnQgPSBJbmZpbml0eSwgYXJyYXlCID0gW10pIHtcbiAgY29uc3QgYXJncyA9IFsgc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5hcnJheUIgXSxcbiAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShhcnJheUEsIGFyZ3MpO1xuXG4gIHJldHVybiBkZWxldGVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGRlbGV0ZWRFbGVtZW50cyA9IFtdO1xuICBcbiAgYmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgICAgZmlyc3REZWxldGVkRWxlbWVudCA9IGZpcnN0KGRlbGV0ZWRFbGVtZW50cyk7XG4gICAgICBcbiAgICAgIGRlbGV0ZWRFbGVtZW50cy51bnNoaWZ0KGZpcnN0RGVsZXRlZEVsZW1lbnQpOyAgLy8vXG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBkZWxldGVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgY2FsbGJhY2spIHtcbiAgbGV0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICBcbiAgYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgZGVsZXRlZEVsZW1lbnQgPSBmaXJzdERlbGV0ZWRFbGVtZW50OyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICByZXR1cm4gZGVsZXRlZEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaykge1xuICBsZXQgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuXG4gICAgICBkZWxldGVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZGVsZXRlZEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaChhcnJheSwgZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cblxuICBpZiAoZm91bmQpIHtcbiAgICBhcnJheS5wdXNoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGxldCBpbmRleDEgPSAwLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleDEgPCBsZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50QiA9IGFycmF5W2luZGV4MV07XG5cbiAgICBmb3IgKGxldCBpbmRleDIgPSBsZW5ndGggLSAxOyBpbmRleDIgPiBpbmRleDE7IGluZGV4Mi0tKSB7XG4gICAgICBjb25zdCBlbGVtZW50QSA9IGFycmF5W2luZGV4Ml0sXG4gICAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50QSwgZWxlbWVudEIpO1xuXG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgyLCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluZGV4MSsrO1xuXG4gICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheSA9IFtcbiAgICAuLi5hcnJheUEsXG4gICAgLi4uYXJyYXlCXG4gIF07XG5cbiAgY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnNlKGFycmF5KSB7XG4gIGFycmF5ID0gWyAvLy9cbiAgICAuLi5hcnJheVxuICBdLnJldmVyc2UoKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBhcnJheUIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheUEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGUoYXJyYXksIGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheUEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Qi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlOyAvLy9cblxuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsgLy8vXG5cbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgc2l4dGgsXG4gIHNldmVudGgsXG4gIGVpZ2h0aCxcbiAgbmludGgsXG4gIGZpcnN0TGFzdCxcbiAgc2Vjb25kTGFzdCxcbiAgdGhpcmRMYXN0LFxuICBmb3VydGhMYXN0LFxuICBmaWZ0aExhc3QsXG4gIHNpeHRoTGFzdCxcbiAgc2V2ZW50aExhc3QsXG4gIGVpZ2h0aExhc3QsXG4gIG5pbnRoTGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBtYXRjaCxcbiAgY29tcGFyZSxcbiAgY29ycmVsYXRlLFxuICByZXNvbHZlLFxuICBmaW5kLFxuICByZXBsYWNlLFxuICBzcGxpY2UsXG4gIGZpbHRlcixcbiAgcHJ1bmUsXG4gIGV4dHJhY3QsXG4gIHBhdGNoLFxuICBjb21wcmVzcyxcbiAgY29tYmluZSxcbiAgcmV2ZXJzZSxcbiAgYXVnbWVudCxcbiAgc2VwYXJhdGUsXG4gIGZvcndhcmRzRmluZCxcbiAgYmFja3dhcmRzRmluZCxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCBsYXN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoTmFtZShwYXRoKSB7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAvLy9cblxuICBjb25zdCBwYXRoTmFtZSA9ICgvXFwvLy50ZXN0KHBhdGgpID09PSBmYWxzZSk7XG5cbiAgcmV0dXJuIHBhdGhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoVG9wbW9zdE5hbWUocGF0aCkge1xuICBjb25zdCBwYXRoTmFtZSA9IGlzUGF0aE5hbWUocGF0aCksXG4gICAgICAgIHBhdGhBYnNvbHV0ZVBhdGggPSBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCksXG4gICAgICAgIHBhdGhUb3Btb3N0TmFtZSA9IChwYXRoTmFtZSAmJiBwYXRoQWJzb2x1dGVQYXRoKTtcblxuICByZXR1cm4gcGF0aFRvcG1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoUmVsYXRpdmVQYXRoKHBhdGgpIHtcbiAgY29uc3QgcGF0aFJlbGF0aXZlUGF0aCA9ICEvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aFJlbGF0aXZlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEFic29sdXRlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhBYnNvbHV0ZVBhdGggPSAvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCh0b3Btb3N0TmFtZSwgYWJzb2x1dGVQYXRoKSB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4ke3RvcG1vc3ROYW1lfSg/OlxcXFwvLispPyRgKSxcbiAgICAgICAgdG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCA9IHJlZ0V4cC50ZXN0KGFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgbGV0IGNvbWJpbmVkUGF0aCA9IG51bGw7XG5cbiAgY29uc3QgcGF0aE5hbWVzID0gcGF0aC5zcGxpdCgvXFwvLyksXG4gICAgICAgIHJlbGF0aXZlUGF0aE5hbWVzID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9cXC8vKTtcblxuICBsZXQgbGFzdFBhdGhOYW1lLFxuICAgICAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gIGlmIChmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPT09IFwiLlwiKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgfVxuXG4gIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuXG4gIHdoaWxlICgoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi4uXCIpICYmIChsYXN0UGF0aE5hbWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICByZWxhdGl2ZVBhdGhOYW1lcy5zaGlmdCgpO1xuICAgIHBhdGhOYW1lcy5wb3AoKTtcblxuICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgICBsYXN0UGF0aE5hbWUgPSBsYXN0KHBhdGhOYW1lcyk7XG4gIH1cblxuICBpZiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb21iaW5lZFBhdGhOYW1lcyA9IFtdLmNvbmNhdChwYXRoTmFtZXMpLmNvbmNhdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG5cbiAgICBjb21iaW5lZFBhdGggPSBjb21iaW5lZFBhdGhOYW1lcy5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGxldCBjb25jYXRlbmF0ZWRQYXRoO1xuXG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAgLy8vXG5cbiAgY29uY2F0ZW5hdGVkUGF0aCA9IGAke3BhdGh9LyR7cmVsYXRpdmVQYXRofWA7XG5cbiAgY29uc3QgcmVtYWluaW5nQUFyZ3VtZW50c0xlbmd0aCA9IHJlbWFpbmluZ0FyZ3VtZW50cy5sZW5ndGg7XG5cbiAgaWYgKHJlbWFpbmluZ0FBcmd1bWVudHNMZW5ndGggPiAwKSB7XG4gICAgY29uc3QgcGF0aCA9IGNvbmNhdGVuYXRlZFBhdGgsICAvLy9cbiAgICAgICAgICByZWxhdGl2ZVBhdGggPSByZW1haW5pbmdBcmd1bWVudHMuc2hpZnQoKTtcblxuICAgIGNvbmNhdGVuYXRlZFBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBjb25jYXRlbmF0ZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBib3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14uKlxcLyhbXlxcL10rXFwvPykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIGJvdHRvbW1vc3ROYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBib3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgocGF0aCkge1xuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKylcXC9bXlxcL10rXFwvPyQvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlQYXRoID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5UGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKFteXFwvXSspXFwvLiskLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKilcXC9bXlxcL10rXFwvPyQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eW15cXC9dK1xcLyguKykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzZWNvbmRNYXRjaDtcbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzUGF0aE5hbWUsXG4gIGlzUGF0aFRvcG1vc3ROYW1lLFxuICBpc1BhdGhSZWxhdGl2ZVBhdGgsXG4gIGlzUGF0aEFic29sdXRlUGF0aCxcbiAgaXNUb3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoLFxuICBjb21iaW5lUGF0aHMsXG4gIGNvbmNhdGVuYXRlUGF0aHMsXG4gIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCxcbiAgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzZWNvbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDT0xPTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIgfSBmcm9tIFwiLi4vY2hhcmFjdGVyc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb3ZlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgIT09IG51bGwpIHtcbiAgICBoZWFkZXJzW2V4aXN0aW5nTmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBsb3dlckNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBleGlzdGluZ05hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycyksICAvLy9cbiAgICAgICAgZXhpc3RpbmdOYW1lID0gZXhpc3RpbmdOYW1lcy5maW5kKChleGlzdGluZ05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPSBleGlzdGluZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGlmIChleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPT09IGxvd2VyQ2FzZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAoZXhpc3RpbmdOYW1lID09PSBudWxsKSB7XG4gICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3J0RnJvbUhvc3QoaG9zdCkge1xuICBsZXQgcG9ydDtcblxuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW15cXC9dKykvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIGluZGV4ID0gc2Vjb25kTWF0Y2guaW5kZXhPZihDT0xPTl9DSEFSQUNURVIpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICBjb25zdCBzZWN1cmUgPSBzZWN1cmVGcm9tSG9zdChob3N0KTtcblxuICAgIHBvcnQgPSBzZWN1cmUgPyA0NDMgOiA4MDsgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpbmRleCArIDEsXG4gICAgICAgICAgcG9ydFN0cmluZyA9IHNlY29uZE1hdGNoLnN1YnN0cmluZyhzdGFydCk7XG5cbiAgICBwb3J0ID0gTnVtYmVyKHBvcnRTdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN1cmVGcm9tSG9zdChob3N0KSB7XG4gIGNvbnN0IHNlY3VyZSA9IC9eaHR0cHM6XFwvXFwvLy50ZXN0KGhvc3QpO1xuXG4gIHJldHVybiBzZWN1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IGhvc3QubWF0Y2goL15odHRwcz86XFwvXFwvKFteOlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaG9zdG5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgcmV0dXJuIGhvc3RuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpIHtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhxdWVyeSksXG4gICAgICAgIG5hbWVzTGVuZ3RoID0gbmFtZXMubGVuZ3RoLFxuICAgICAgICBsYXN0SW5kZXggPSBuYW1lc0xlbmd0aCAtIDEsXG4gICAgICAgIHF1ZXJ5U3RyaW5nID0gbmFtZXMucmVkdWNlKChxdWVyeVN0cmluZywgbmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W25hbWVdLFxuICAgICAgICAgICAgICAgIGVuY29kZWROYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxuICAgICAgICAgICAgICAgIGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgYW1wZXJzYW5kT3JOb3RoaW5nID0gKGluZGV4ICE9PSBsYXN0SW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNUEVSU0FORF9DSEFSQUNURVIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG4gIFxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke2VuY29kZWROYW1lfT0ke2VuY29kZWRWYWx1ZX0ke2FtcGVyc2FuZE9yTm90aGluZ31gO1xuICBcbiAgICAgICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSB7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpLFxuICAgICAgICB1cmwgPSAocXVlcnlTdHJpbmcgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9YCA6XG4gICAgICAgICAgICAgICAgICBgJHtob3N0fSR7dXJpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvdmVyd3JpdGUsXG4gIHVuZGVyd3JpdGUsXG4gIHBvcnRGcm9tSG9zdCxcbiAgc2VjdXJlRnJvbUhvc3QsXG4gIGhvc3RuYW1lRnJvbUhvc3QsXG4gIHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5LFxuICB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4oc3RyaW5nKSB7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKTtcblxuICBsZXQgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIHdoaWxlICghY2hhcmFjdGVyLmRvbmUpIHtcbiAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICBsZW5ndGgrK1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmNtcChzdHJpbmdBLCBzdHJpbmdCKSB7XG4gIGxldCBkaWZmZXJlbmNlO1xuXG4gIGNvbnN0IGl0ZXJhdG9yQSA9IHN0cmluZ0FbU3ltYm9sLml0ZXJhdG9yXSgpLCAvLy9cbiAgICAgICAgaXRlcmF0b3JCID0gc3RyaW5nQltTeW1ib2wuaXRlcmF0b3JdKCk7IC8vL1xuXG4gIGxldCBjaGFyYWN0ZXJBID0gaXRlcmF0b3JBLm5leHQoKSxcbiAgICAgIGNoYXJhY3RlckIgPSBpdGVyYXRvckIubmV4dCgpLFxuICAgICAgY29kZVBvaW50QSxcbiAgICAgIGNvZGVQb2ludEI7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb2RlUG9pbnRBID0gY2hhcmFjdGVyQS52YWx1ZSA/IC8vL1xuICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckEudmFsdWUuY29kZVBvaW50QXQoMCkgOlxuICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICBjb2RlUG9pbnRCID0gY2hhcmFjdGVyQi52YWx1ZSA/IC8vL1xuICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckIudmFsdWUuY29kZVBvaW50QXQoMCkgOlxuICAgICAgICAgICAgICAgICAgICAgMDtcblxuICAgIGRpZmZlcmVuY2UgPSBjb2RlUG9pbnRCIC0gY29kZVBvaW50QTtcblxuICAgIGlmIChkaWZmZXJlbmNlICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY2hhcmFjdGVyQS5kb25lIHx8IGNoYXJhY3RlckIuZG9uZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hhcmFjdGVyQSA9IGl0ZXJhdG9yQS5uZXh0KCk7XG4gICAgY2hhcmFjdGVyQiA9IGl0ZXJhdG9yQi5uZXh0KCk7XG4gIH1cblxuICByZXR1cm4gZGlmZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2Yoc3RyaW5nLCBzZWFyY2hTdHJpbmcpIHtcbiAgbGV0IGluZGV4ID0gLTEsXG4gICAgICBmb3VuZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHNlYXJjaFN0cmluZ0xlbmd0aCA9IHN0cmxlbihzZWFyY2hTdHJpbmcpO1xuXG4gIGlmIChzZWFyY2hTdHJpbmdMZW5ndGggPiAwKSB7XG4gICAgbGV0IGNoYXJhY3RlcjtcblxuICAgIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKSxcbiAgICAgICAgICBzZWFyY2hJdGVyYXRvciA9IHNlYXJjaFN0cmluZ1tTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgICAgICAgc2VhcmNoQ2hhcmFjdGVyID0gc2VhcmNoSXRlcmF0b3IubmV4dCgpO1xuXG4gICAgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgaW5kZXgrKztcblxuICAgIHdoaWxlICghY2hhcmFjdGVyLmRvbmUpIHtcbiAgICAgIGlmIChjaGFyYWN0ZXIudmFsdWUgPT09IHNlYXJjaENoYXJhY3Rlci52YWx1ZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgc2VhcmNoU3RyaW5nTGVuZ3RoLFxuICAgICAgICAgICAgICBzdWJTdHJpbmcgPSBzdWJzdHJpbmcoc3RyaW5nLCBzdGFydCwgZW5kKSxcbiAgICAgICAgICAgICAgZGlmZmVyZW5jZSA9IHN0cmNtcChzdWJTdHJpbmcsIHNlYXJjaFN0cmluZyk7XG5cbiAgICAgICAgaWYgKGRpZmZlcmVuY2UgPT09IDApIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgIGluZGV4KytcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kKSB7XG4gICAgaW5kZXggPSAtMTtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZyhzdHJpbmcsIHN0YXJ0LCBlbmQgPSBJbmZpbml0eSkge1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKSxcbiAgICAgICAgY2hhcmFjdGVycyA9IFtdO1xuXG4gIGxldCBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgd2hpbGUgKCFjaGFyYWN0ZXIuZG9uZSkge1xuICAgIGlmIChpbmRleCA9PT0gZW5kKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPj0gc3RhcnQpIHtcbiAgICAgIGNoYXJhY3RlcnMucHVzaChjaGFyYWN0ZXIudmFsdWUpOyAvLy9cbiAgICB9XG5cbiAgICBpbmRleCsrXG5cbiAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG4gIH1cblxuICBjb25zdCBzdWJzdHJpbmcgPSBjaGFyYWN0ZXJzLmpvaW4oRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3Vic3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN0cmNtcCxcbiAgc3RybGVuLFxuICBpbmRleE9mLFxuICBzdWJzdHJpbmdcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtaWdyYXRlKGpzb24sIG1pZ3JhdGlvbk1hcCwgbGF0ZXN0VmVyc2lvbikge1xuICBsZXQgeyB2ZXJzaW9uIH0gPSBqc29uO1xuXG4gIHdoaWxlICh2ZXJzaW9uICE9PSBsYXRlc3RWZXJzaW9uKSB7XG4gICAgY29uc3QgbWlncmF0ZUZ1bmN0aW9uID0gbWlncmF0aW9uTWFwW3ZlcnNpb25dO1xuXG4gICAganNvbiA9IG1pZ3JhdGVGdW5jdGlvbihqc29uKTtcblxuICAgICh7IHZlcnNpb24gfSA9IGpzb24pO1xuICB9XG5cbiAgcmV0dXJuIGpzb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWlncmF0ZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3aGlsc3Qob3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgIHRlcm1pbmF0ZSA9IG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXZlbnR1YWxseShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlcmF0aW9ucy5mb3JFYWNoKChvcGVyYXRpb24sIGluZGV4KSA9PiB7XHJcbiAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwZWF0ZWRseShvcGVyYXRpb24sIGxlbmd0aCwgZG9uZSwgY29udGV4dCkge1xyXG4gIGxldCBjb3VudCA9IDA7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gbGVuZ3RoO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQtLTtcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IC0xKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICB3aGlsc3QsXHJcbiAgZm9yRWFjaCxcclxuICBzZXF1ZW5jZSxcclxuICBldmVudHVhbGx5LFxyXG4gIHJlcGVhdGVkbHksXHJcbiAgZm9yd2FyZHNGb3JFYWNoLFxyXG4gIGJhY2t3YXJkc0ZvckVhY2hcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBHRVRfTUVUSE9ELCBQT1NUX01FVEhPRCB9IGZyb20gXCIuLi9tZXRob2RzXCI7XG5pbXBvcnQgeyBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSB9IGZyb20gXCIuLi9jb250ZW50VHlwZXNcIjtcbmltcG9ydCB7IEFDQ0VQVF9IRUFERVIsIENPTlRFTlRfVFlQRV9IRUFERVIgfSBmcm9tIFwiLi4vaGVhZGVyc1wiO1xuaW1wb3J0IHsgdW5kZXJ3cml0ZSwgdXJsRnJvbUhvc3RVUklBbmRRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvaHR0cFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBoZWFkZXJzOyAvLy9cbiAgICBoZWFkZXJzID0ge307XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSBHRVRfTUVUSE9ELFxuICAgICAgICBhY2NlcHQgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgICAgICAgY29udGVudCA9IG51bGw7XG5cbiAgdW5kZXJ3cml0ZUFjY2VwdEhlYWRlcihoZWFkZXJzLCBhY2NlcHQpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3N0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBjb250ZW50O1xuICAgIGNvbnRlbnQgPSBoZWFkZXJzO1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IFBPU1RfTUVUSE9ELFxuICAgICAgICBhY2NlcHQgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgICAgICAgY29udGVudFR5cGUgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRTtcblxuICB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgdW5kZXJ3cml0ZUNvbnRlbnRUeXBlSGVhZGVyKGhlYWRlcnMsIGNvbnRlbnRUeXBlKTtcblxuICByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHVybCA9IHVybEZyb21Ib3N0VVJJQW5kUXVlcnkoaG9zdCwgdXJpLCBxdWVyeSksXG4gICAgICAgIGFjY2VwdCA9IGhlYWRlcnNbQUNDRVBUX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgY29udGVudFR5cGUgPSBoZWFkZXJzW0NPTlRFTlRfVFlQRV9IRUFERVJdIHx8IG51bGwsXG4gICAgICAgIHhtbEh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgaWYgKGNvbnRlbnRUeXBlID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgIGNvbnN0IGpzb24gPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xuXG4gICAgY29udGVudCA9IGpzb25TdHJpbmc7ICAvLy9cbiAgfVxuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IHJlYWR5U3RhdGUsIHN0YXR1cywgcmVzcG9uc2UgfSA9IHhtbEh0dHBSZXF1ZXN0LFxuICAgICAgICAgIHN0YXR1c0NvZGUgPSBzdGF0dXM7XG5cbiAgICBpZiAocmVhZHlTdGF0ZSA9PSA0KSB7XG4gICAgICBsZXQgY29udGVudCA9IHJlc3BvbnNlO1xuXG4gICAgICBpZiAoYWNjZXB0ID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG5cbiAgICAgICAgICBjb250ZW50ID0ganNvbjsgIC8vL1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnRlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKGNvbnRlbnQsIHN0YXR1c0NvZGUpO1xuICAgIH1cbiAgfTtcblxuICB4bWxIdHRwUmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsKTtcblxuICBpZiAoYWNjZXB0ICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihBQ0NFUFRfSEVBREVSLCBhY2NlcHQpO1xuICB9XG5cbiAgaWYgKGNvbnRlbnRUeXBlICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihDT05URU5UX1RZUEVfSEVBREVSLCBjb250ZW50VHlwZSk7XG4gIH1cblxuICAoY29udGVudCAhPT0gbnVsbCkgP1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoY29udGVudCkgOlxuICAgICAgeG1sSHR0cFJlcXVlc3Quc2VuZCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCxcbiAgcG9zdCxcbiAgcmVxdWVzdFxufVxuXG5mdW5jdGlvbiB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCkge1xuICBjb25zdCBuYW1lID0gQUNDRVBUX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGFjY2VwdDsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVDb250ZW50VHlwZUhlYWRlcihoZWFkZXJzLCBjb250ZW50VFlwZSkge1xuICBjb25zdCBuYW1lID0gQ09OVEVOVF9UWVBFX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGNvbnRlbnRUWXBlOyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBsZXZlbHMgfSBmcm9tIFwiLi9sZXZlbHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWV0aG9kcyB9IGZyb20gXCIuL21ldGhvZHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaGVhZGVycyB9IGZyb20gXCIuL2hlYWRlcnNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMga2V5Q29kZXMgfSBmcm9tIFwiLi9rZXlDb2Rlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbmNvZGluZ3MgfSBmcm9tIFwiLi9lbmNvZGluZ3NcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2hhcmFjdGVycyB9IGZyb20gXCIuL2NoYXJhY3RlcnNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RhdHVzQ29kZXMgfSBmcm9tIFwiLi9zdGF0dXNDb2Rlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb250ZW50VHlwZXMgfSBmcm9tIFwiLi9jb250ZW50VHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RhdHVzTWVzc2FnZXMgfSBmcm9tIFwiLi9zdGF0dXNNZXNzYWdlc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhdGhVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcGF0aFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBodHRwVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2h0dHBcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RyaW5nVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB2ZXJzaW9uVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3ZlcnNpb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FzeW5jaHJvbm91c1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGFqYXhVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYWpheFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVSA9IFwidVwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgRVNDQVBFRF9BTVBFUlNBTkQgPSBcIiZhbXA7XCI7XG5leHBvcnQgY29uc3QgRVNDQVBFRF9MRVNTX1RIQU4gPSBcIiZsdDtcIjtcbmV4cG9ydCBjb25zdCBFU0NBUEVEX0dSRUFURVJfVEhBTiA9IFwiJmd0O1wiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFU0NBUEVEX0FNUEVSU0FORCwgRVNDQVBFRF9MRVNTX1RIQU4sIEVTQ0FQRURfR1JFQVRFUl9USEFOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpIHtcbiAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgRVNDQVBFRF9BTVBFUlNBTkQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88L2csIEVTQ0FQRURfTEVTU19USEFOKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPi9nLCBFU0NBUEVEX0dSRUFURVJfVEhBTik7XG5cbiAgcmV0dXJuIHNhbml0aXNlZENvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCB0eXBlVHlwZSA9IFwidHlwZVwiO1xuZXhwb3J0IGNvbnN0IG5hbWVUeXBlID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgbnVtYmVyVHlwZSA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgY29tbWVudFR5cGUgPSBcImNvbW1lbnRcIjtcbmV4cG9ydCBjb25zdCBlbmRPZkxpbmVUeXBlID0gXCJlbmQtb2YtbGluZVwiO1xuZXhwb3J0IGNvbnN0IHdoaXRlc3BhY2VUeXBlID0gXCJ3aGl0ZXNwYWNlXCI7XG5leHBvcnQgY29uc3Qgc3RyaW5nTGl0ZXJhbFR5cGUgPSBcInN0cmluZy1saXRlcmFsXCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lQ29tbWVudFR5cGUgPSBgJHtlbmRPZkxpbmVUeXBlfSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3Qgc2luZ2xlTGluZUNvbW1lbnRUeXBlID0gYHNpbmdsZS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCByZWd1bGFyRXhwcmVzc2lvblR5cGUgPSBcInJlZ3VsYXItZXhwcmVzc2lvblwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgZW5kLW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBzdGFydC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYG1pZGRsZS1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICB0eXBlVHlwZSxcbiAgbmFtZVR5cGUsXG4gIG51bWJlclR5cGUsXG4gIGNvbW1lbnRUeXBlLFxuICBlbmRPZkxpbmVUeXBlLFxuICB3aGl0ZXNwYWNlVHlwZSxcbiAgc3RyaW5nTGl0ZXJhbFR5cGUsXG4gIGVuZE9mTGluZUNvbW1lbnRUeXBlLFxuICBzaW5nbGVMaW5lQ29tbWVudFR5cGUsXG4gIHJlZ3VsYXJFeHByZXNzaW9uVHlwZSxcbiAgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlLFxuICBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcywgc3RyaW5nVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBzYW5pdGlzZUNvbnRlbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvY29udGVudFwiO1xuaW1wb3J0IHsgY29tbWVudFR5cGUsIGVuZE9mTGluZVR5cGUsIHdoaXRlc3BhY2VUeXBlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IHN0cmxlbiB9ID0gc3RyaW5nVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNvbnRlbnQsIHNpZ25pZmljYW50KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuICBcbiAgZ2V0Q29udGVudExlbmd0aChuYWl2ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IG5haXZlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQubGVuZ3RoIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbih0aGlzLmNvbnRlbnQpOyAvLy9cblxuICAgIHJldHVybiBjb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgaXNTaWduaWZpY2FudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduaWZpY2FudDtcbiAgfVxuICBcbiAgaXNDb21tZW50VG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZUluY2x1ZGVzQ29tbWVudFR5cGUgPSB0aGlzLnR5cGUuaW5jbHVkZXMoY29tbWVudFR5cGUpLFxuICAgICAgICAgIGNvbW1lbnRUb2tlbiA9IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlOyAvLy9cblxuICAgIHJldHVybiBjb21tZW50VG9rZW47XG4gIH1cblxuICBpc0VuZE9mTGluZVRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVFbmRPZkxpbmVUeXBlID0gKHRoaXMudHlwZS5pbmNsdWRlcyhlbmRPZkxpbmVUeXBlKSksXG4gICAgICAgICAgZW5kT2ZMaW5lVG9rZW4gPSB0eXBlRW5kT2ZMaW5lVHlwZTsgLy8vXG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lVG9rZW47XG4gIH1cblxuICBpc1doaXRlc3BhY2VUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlV2hpdGVzcGFjZVR5cGUgPSAodGhpcy50eXBlID09PSB3aGl0ZXNwYWNlVHlwZSksXG4gICAgICAgICAgd2hpdGVzcGFjZVRva2VuID0gdHlwZVdoaXRlc3BhY2VUeXBlOyAvLy9cblxuICAgIHJldHVybiB3aGl0ZXNwYWNlVG9rZW47XG4gIH1cblxuICBtYXRjaCh0b2tlbikge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBpZiAodG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0b2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgICBjb250ZW50ID0gdG9rZW4uZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgc2lnbmlmaWNhbnQgPSB0b2tlbi5pc1NpZ25pZmljYW50KCk7XG5cbiAgICAgIG1hdGNoZXMgPSAoKHRoaXMudHlwZSA9PT0gdHlwZSkgJiYgKHRoaXMuY29udGVudCA9PT0gY29udGVudCkgJiYgKHRoaXMuc2lnbmlmaWNhbnQgPT09IHNpZ25pZmljYW50KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlLCAvLy9cbiAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KHRoaXMuY29udGVudCksXG4gICAgICAgICAgaHRtbCA9IGA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPiR7c2FuaXRpc2VkQ29udGVudH08L3NwYW4+YDtcblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY2xvbmUoLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgQ2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHR5cGUgPSB0aGlzLnR5cGUsXG4gICAgICAgICAgY29udGVudCA9IHRoaXMuY29udGVudCxcbiAgICAgICAgICBzaWduaWZpY2FudCA9IHRoaXMuc2lnbmlmaWNhbnQsXG4gICAgICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgdG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgeyByZWd1bGFyRXhwcmVzc2lvbiB9ID0gQ2xhc3MsXG4gICAgICAgICAgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2gocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDsgLy8vXG5cbiAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgeyB0eXBlIH0gPSBDbGFzcztcblxuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0eXBlIH0gPSBDbGFzcyxcbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHsgcmV0dXJuIG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG5cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnQgPSB0cnVlLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG5cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnQgPSB0cnVlLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGUgPSBjb250ZW50OyAvLy9cblxuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG5cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnQgPSB0cnVlLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IFUgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCByZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cbiAgXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgbWF0Y2goY29udGVudCkge1xuICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDsgLy8vXG5cbiAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKGNvbnRlbnQsIHRoaXMudHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuICBcbiAgc3RhdGljIGZyb21Ub2tlbihUb2tlbikge1xuICAgIGNvbnN0IHsgdHlwZSwgcmVndWxhckV4cHJlc3Npb24gfSA9IFRva2VuLFxuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZSh0eXBlLCByZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRW50cnkoZW50cnkpIHtcbiAgICBjb25zdCBlbnRyeUtleXMgPSBPYmplY3Qua2V5cyhlbnRyeSksXG4gICAgICAgICAgZmlyc3RFbnRyeUtleSA9IGZpcnN0KGVudHJ5S2V5cyksXG4gICAgICAgICAgdHlwZSA9IGZpcnN0RW50cnlLZXksIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiA9IGVudHJ5W3R5cGVdLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb25Gcm9tUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiksXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcbiAgICAgICAgXG4gICAgcmV0dXJuIHJ1bGU7IFxuICB9XG5cbiAgc3RhdGljIGZyb21UeXBlQW5kUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb25Gcm9tUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiksXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZ3VsYXJFeHByZXNzaW9uRnJvbVJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybihyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pIHtcbiAgY29uc3QgZmxhZ3MgPSBVLCAgLy8vXG4gICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuLCBmbGFncyksXG4gICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gcmVnRXhwOyAvLy9cblxuICByZXR1cm4gcmVndWxhckV4cHJlc3Npb247XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5leHBvcnQgY29uc3QgcGx1cyA9IFwiK1wiO1xyXG5leHBvcnQgY29uc3Qgb3BhcXVlID0gXCIuXCI7XHJcbmV4cG9ydCBjb25zdCBlcHNpbG9uID0gJ1x1MDNCNSc7XHJcbmV4cG9ydCBjb25zdCB3aWxkY2FyZCA9IFwiLlwiO1xyXG5leHBvcnQgY29uc3QgYXN0ZXJpc2sgPSBcIipcIjtcclxuZXhwb3J0IGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuZXhwb3J0IGNvbnN0IHNlcGFyYXRvciA9IFwiOjo9XCI7XHJcbmV4cG9ydCBjb25zdCBzZW1pT3BhcXVlID0gXCIuLlwiO1xyXG5leHBvcnQgY29uc3QgdGVybWluYXRvciA9IFwiO1wiO1xyXG5leHBvcnQgY29uc3QgdmVydGljYWxCYXIgPSBcInxcIjtcclxuZXhwb3J0IGNvbnN0IG9wZW5CcmFja2V0ID0gXCIoXCI7XHJcbmV4cG9ydCBjb25zdCBjbG9zZUJyYWNrZXQgPSBcIilcIjtcclxuZXhwb3J0IGNvbnN0IHF1ZXN0aW9uTWFyayA9IFwiP1wiO1xyXG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lID0gXCI8RU5EX09GX0xJTkU+XCI7XHJcbmV4cG9ydCBjb25zdCBub1doaXRlc3BhY2UgPSBcIjxOT19XSElURVNQQUNFPlwiO1xyXG5leHBvcnQgY29uc3Qgc3RhcnRPZkNvbnRlbnQgPSBcIjxTVEFSVF9PRl9DT05URU5UPlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHBsdXMsXHJcbiAgb3BhcXVlLFxyXG4gIGVwc2lsb24sXHJcbiAgd2lsZGNhcmQsXHJcbiAgYXN0ZXJpc2ssXHJcbiAgZWxsaXBzaXMsXHJcbiAgc2VwYXJhdG9yLFxyXG4gIHNlbWlPcGFxdWUsXHJcbiAgdGVybWluYXRvcixcclxuICB2ZXJ0aWNhbEJhcixcclxuICBvcGVuQnJhY2tldCxcclxuICBjbG9zZUJyYWNrZXQsXHJcbiAgcXVlc3Rpb25NYXJrLFxyXG4gIGVuZE9mTGluZSxcclxuICBub1doaXRlc3BhY2UsXHJcbiAgc3RhcnRPZkNvbnRlbnRcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNBc0VudHJpZXMocnVsZXMpIHtcbiAgY29uc3QgZW50cmllcyA9IHJ1bGVzLm1hcCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gcnVsZUFzRW50cnkocnVsZSk7XG5cbiAgICByZXR1cm4gZW50cnk7XG4gIH0pO1xuXG4gIHJldHVybiBlbnRyaWVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJ1bGVzQXNFbnRyaWVzXG59O1xuXG5mdW5jdGlvbiBydWxlQXNFbnRyeShydWxlKSB7XG4gIGNvbnN0IHR5cGUgPSBydWxlLmdldFR5cGUoKSxcbiAgICAgICAgcmVndWxhckV4cHJlc3Npb24gPSBydWxlLmdldFJlZ3VsYXJFeHByZXNzaW9uKCksXG4gICAgICAgIHsgc291cmNlIH0gPSByZWd1bGFyRXhwcmVzc2lvbixcbiAgICAgICAgZW50cnkgPSB7XG4gICAgICAgICAgW3R5cGVdOiBzb3VyY2VcbiAgICAgICAgfTtcblxuICByZXR1cm4gZW50cnk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21FbnRyaWVzKGVudHJpZXMpIHtcbiAgY29uc3QgcnVsZXMgPSBlbnRyaWVzLm1hcCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBydWxlID0gUnVsZS5mcm9tRW50cnkoZW50cnkpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0pO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxleGVyRnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICBjb25zdCBJbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcyksXG4gICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcbiAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpO1xuXG4gIHJldHVybiBsZXhlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBydWxlc0Zyb21FbnRyaWVzLFxuICBsZXhlckZyb21SdWxlc1xufTtcblxuZnVuY3Rpb24gSW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcykge1xuICBjb25zdCB7IEVuZE9mTGluZUNvbW1lbnRUb2tlbiwgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gPSBDbGFzcztcblxuICBjb25zdCBJbkNvbW1lbnRDbGFzc2VzID0gW1xuICAgIEVuZE9mTGluZUNvbW1lbnRUb2tlbixcbiAgICBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcbiAgICBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlblxuICBdO1xuXG4gIHJldHVybiBJbkNvbW1lbnRDbGFzc2VzO1xufVxuXG5mdW5jdGlvbiBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSB7XG4gIGNvbnN0IHsgRW5kT2ZMaW5lVG9rZW4sXG4gICAgICAgICAgV2hpdGVzcGFjZVRva2VuLFxuICAgICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXG4gICAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcbiAgICAgICAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxuICAgICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcbiAgICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSA9IENsYXNzO1xuXG4gIGNvbnN0IE5vdEluQ29tbWVudENsYXNzZXMgPSBbXG4gICAgRW5kT2ZMaW5lVG9rZW4sXG4gICAgV2hpdGVzcGFjZVRva2VuLFxuICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXG4gICAgU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcbiAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxuICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcbiAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW5cbiAgXTtcblxuICByZXR1cm4gTm90SW5Db21tZW50Q2xhc3Nlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJzcGVjaWFsXCI6IFwiXig/OlxcXFx8fFxcXFwofFxcXFwpfFxcXFw/fFxcXFwqfFxcXFwrfFxcXFwuXFxcXC5cXFxcLnxcXFxcLlxcXFwufFxcXFwufDo6PXw7fFx1MDNCNXw8U1RBUlRfT0ZfQ09OVEVOVD58PE5PX1dISVRFU1BBQ0U+fDxFTkRfT0ZfTElORT4pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwibnVtYmVyXCI6IFwiXig/OjB8WzEtOV1bMC05XSopXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIl5bXFxcXHd+XStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ0eXBlXCI6IFwiXlxcXFxbW15cXFxcXV0rXFxcXF1cIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50KHRva2VuLCBpbkNvbW1lbnQpIHtcbiAgY29uc3QgdG9rZW5Db21tZW50VG9rZW4gPSB0b2tlbi5pc0NvbW1lbnRUb2tlbigpO1xuXG4gIGlmICh0b2tlbkNvbW1lbnRUb2tlbikge1xuICAgIGNvbnN0IGNvbW1lbnRUb2tlbiA9IHRva2VuLCAvLy9cbiAgICAgICAgICBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nID0gY29tbWVudFRva2VuLmlzSW5Db21tZW50UHJlc2VydmluZygpO1xuXG4gICAgaW5Db21tZW50ID0gY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZzsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIGluQ29tbWVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy90b2tlblwiO1xyXG5pbXBvcnQgeyBydWxlc0Zyb21FbnRyaWVzLCBsZXhlckZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvbGV4ZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1vbkxleGVyIHtcclxuICBjb25zdHJ1Y3RvcihydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcykge1xyXG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xyXG4gICAgdGhpcy5JbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3NlcztcclxuICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG4gIFxyXG4gIGdldFJ1bGVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucnVsZXM7XHJcbiAgfVxyXG5cclxuICBnZXRJbkNvbW1lbnRDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuSW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcblxyXG4gIGdldE5vdEluQ29tbWVudENsYXNzZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2UoY29udGVudCwgaW5Db21tZW50ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHRva2VucyA9IFtdO1xyXG5cclxuICAgIHdoaWxlIChjb250ZW50ICE9PSBFTVBUWV9TVFJJTkcpIHtcclxuICAgICAgbGV0IHRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IENsYXNzZXMgPSBpbkNvbW1lbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkluQ29tbWVudENsYXNzZXMgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcztcclxuXHJcbiAgICAgIENsYXNzZXMuc29tZSgoQ2xhc3MpID0+IHtcclxuICAgICAgICBpZiAoQ2xhc3MgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRva2VuID0gQ2xhc3MubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMucnVsZXMuc29tZSgocnVsZSkgPT4ge1xyXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IHJ1bGUubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdG9rZW4gPSBzaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZW50ICcke2NvbnRlbnR9JyBjYW5ub3QgYmUgdG9rZW5pc2VkLmApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XHJcblxyXG4gICAgICBpbkNvbW1lbnQgPSBpbkNvbW1lbnRGcm9tVG9rZW5BbmRJbkNvbW1lbnQodG9rZW4sIGluQ29tbWVudCk7XHJcblxyXG4gICAgICBjb25zdCBuYWl2ZSA9IHRydWUsXHJcbiAgICAgICAgICAgIHRva2VuQ29udGVudExlbmd0aCA9IHRva2VuLmdldENvbnRlbnRMZW5ndGgobmFpdmUpLFxyXG4gICAgICAgICAgICBzdGFydCA9IHRva2VuQ29udGVudExlbmd0aDsgLy8vXHJcblxyXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcclxuICAgIGNvbnN0IHsgZW50cmllcyB9ID0gQ2xhc3MsXHJcbiAgICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUVudHJpZXMoZW50cmllcyksXHJcbiAgICAgICAgICBsZXhlciA9IGxleGVyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcclxuICAgIGNvbnN0IGxleGVyID0gbGV4ZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoQ2xhc3MsIGVudHJpZXMpIHtcclxuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tRW50cmllcyhlbnRyaWVzKSxcclxuICAgICAgICAgIGxleGVyID0gbGV4ZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRva2VuIGZyb20gXCIuLi90b2tlblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25TaWduaWZpY2FudFRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudCA9IGZhbHNlLFxuICAgICAgICAgIG5vblNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpO1xuXG4gICAgcmV0dXJuIG5vblNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudCA9IGZhbHNlLFxuICAgICAgICAgIG5vblNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpO1xuXG4gICAgcmV0dXJuIG5vblNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnQgPSBmYWxzZSxcbiAgICAgICAgICBub25TaWduaWZpY2FudFRva2VuID0gVG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCk7XG5cbiAgICByZXR1cm4gbm9uU2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hpdGVzcGFjZVRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIHN0YXRpYyB0eXBlID0gd2hpdGVzcGFjZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15bXFx0XFx2IF0rLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChXaGl0ZXNwYWNlVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgcmVndWxhckV4cHJlc3Npb25UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgc3RhdGljIHR5cGUgPSByZWd1bGFyRXhwcmVzc2lvblR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oPzpcXFxcW15cXHNdfFteXFwvXFxyXFxuXFxmXSkqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBodG1sID0gY29udGVudDsgLy8vXG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZMaW5lVHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlxcclxcbnxcXHJ8XFxufFxcZikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3RyaW5nVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuY29uc3QgeyBzdWJzdHJpbmcgfSA9IHN0cmluZ1V0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGdldFN0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IHRoaXMuZ2V0Q29udGVudExlbmd0aCgpLFxuICAgICAgICAgIHN0YXJ0ID0gMSxcbiAgICAgICAgICBlbmQgPSBjb250ZW50TGVuZ3RoIC0gMSxcbiAgICAgICAgICBzdHJpbmcgPSBzdWJzdHJpbmcoY29udGVudCwgc3RhcnQsIGVuZCk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi8uLi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFN0cmluZ0xpdGVyYWxUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoPzpcXFxcW15cXHNdfFteXCJcXFxcXFxyXFxuXSkqXCIvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4uZnJvbUNvbnRlbnQoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICB0b2tlbnNGcm9tQk5GKGJuZikge1xyXG4gICAgY29uc3QgY29udGVudCA9IGJuZiwgIC8vL1xyXG4gICAgICAgICAgdG9rZW5zID0gc3VwZXIudG9rZW5pc2UoY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQk5GTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCTkZMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCTkZMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwiZGlnaXRcIjogXCJeXFxcXGQrXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiYnJhY2tldFwiOiBcIl4oPzpcXFxcKHxcXFxcKSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJvcGVyYXRvclwiOiBcIl4oPzpcXFxcK3wtfFxcXFwqfFxcXFwvKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14nKD86XFxcXFteXFxzXXxbXidcXFxcXFxyXFxuXSkqJy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzaW5nbGVMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHNpbmdsZUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXiNbXlxcclxcblxcZl0qLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG58XFxmKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86W15cXHJcXG5cXGZdKz8oPz0jIyMpfFteXFxyXFxuXFxmXSspLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuaW1wb3J0IENvbW1vbkxleGVyIGZyb20gXCIuLi9jb21tb24vbGV4ZXJcIjtcclxuaW1wb3J0IFdoaXRlc3BhY2VUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiO1xyXG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcclxuaW1wb3J0IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xyXG5pbXBvcnQgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZFwiO1xyXG5pbXBvcnQgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZVwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9weXRob25TdHlsZVwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvcHl0aG9uU3R5bGVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2ljTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBSZWd1bGFyRXhwcmVzc2lvblRva2VuO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhCYXNpY0xleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQmFzaWNMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCYXNpY0xleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGh0bWwgPSBjb250ZW50OyAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG58XFxmKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG58XFxmKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcL1teXFxyXFxuXFxmXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXCpcXC8vO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXCovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpbXlxcclxcblxcZl0rPyg/PVxcKlxcLyl8W15cXHJcXG5cXGZdKykvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHlwZXMgfSBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCIuL3NwZWNpYWxTeW1ib2xzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcnVsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcnVsZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV4ZXJVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZMZXhlciB9IGZyb20gXCIuL2JuZi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY0xleGVyIH0gZnJvbSBcIi4vYmFzaWMvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uTGV4ZXIgfSBmcm9tIFwiLi9jb21tb24vbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaGl0ZXNwYWNlVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWd1bGFyRXhwcmVzc2lvblRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcIm1lZGlhXCI6IFwiXkBtZWRpYVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImtleWZyYW1lc1wiOiBcIl5Aa2V5ZnJhbWVzXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiY29sb3VyXCI6IFwiXiMoPzpbMC05YS1mQS1GXXs2fXxbMC05YS1mQS1GXXszfSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJpbXBvcnRhbnRcIjogXCJeIWltcG9ydGFudFwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInBlcmNlbnRhZ2VcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSVcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJmcmVxdWVuY3lcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/Omh6fGtoeilcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJmcmFjdGlvblwiOiBcIl5bMS05XVswLTldKj9mclwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImxlbmd0aFwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86cHh8Y218bW18aW58cHR8cGMpXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiYW5nbGVcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OmRlZ3xyYWR8Z3JhZClcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ0aW1lXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpzfG1zKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKXJlbVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImVtc1wiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspZW1cIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJudW1iZXJcIjogXCJeWzAtOV0rfFswLTldKlxcXFwuWzAtOV0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl47fDo6fDp8XFxcXC58LHxcXFxcfD18fj18PXw+fFxcXFx7fFxcXFx9fFxcXFwofFxcXFwpfFxcXFxbfFxcXFxdXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiaWRlbnRpZmllclwiOiBcIl5bX2EtekEtWjAtOS1dK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImxvZ2ljYWwtb3BlcmF0b3JcIjogXCJeXig/OmFuZHxub3QpJFwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInBsdXMtb3ItbWludXNcIjogXCJeXFxcXCt8LVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciwgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuLCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU1NMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQ1NTTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhDU1NMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhDU1NMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuICAgICAgZG9jdW1lbnQgICAgICAgICAgICAgICAgIDo6PSAgKCBydWxlIHwgZXJyb3IgKSsgO1xuXG4gICAgICBydWxlICAgICAgICAgICAgICAgICAgICAgOjo9ICBuYW1lIG9wYWNpdHlNb2RpZmllcj8gXCI6Oj1cIiBkZWZpbml0aW9ucyBcIjtcIiA7XG5cbiAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIGRlZmluaXRpb25zICAgICAgICAgICAgICA6Oj0gIGRlZmluaXRpb24gKCBcInxcIiBkZWZpbml0aW9uICkqIDtcblxuICAgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgIDo6PSAgcGFydCsgcHJlY2VkZW5jZT8gO1xuIFxuICAgICAgcGFydCAgICAgICAgICAgICAgICAgICAgIDo6PSAgbm9uVGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIG5vblRlcm1pbmFsUGFydCAgICAgICAgICA6Oj0gIGNob2ljZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgc2VxdWVuY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJ1bGVOYW1lIGNhbGxBaGVhZE1vZGlmaWVyP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIHRlcm1pbmFsUGFydCAgICAgICAgICAgICA6Oj0gIHNpZ25pZmljYW50VG9rZW5UeXBlXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcmVndWxhckV4cHJlc3Npb25cbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlcm1pbmFsU3ltYm9sXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZW5kT2ZMaW5lXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgd2lsZGNhcmRcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlcHNpbG9uXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG5vV2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBzdGFydE9mQ29udGVudFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIHNlcXVlbmNlT2ZQYXJ0cyAgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgcGFydCsgXCIpXCIgO1xuXG4gICAgICBjaG9pY2VPZlBhcnRzICAgICAgICAgICAgOjo9ICBcIihcIiBwYXJ0Q2hvaWNlICggXCJ8XCIgcGFydENob2ljZSApKyBcIilcIiA7XG5cbiAgICAgIHBhcnRDaG9pY2UgICAgICAgICAgICAgICA6Oj0gIHBhcnQgcHJlY2VkZW5jZT8gO1xuXG4gICAgICBydWxlTmFtZSAgICAgICAgICAgICAgICAgOjo9ICBbbmFtZV0gO1xuXG4gICAgICBzaWduaWZpY2FudFRva2VuVHlwZSAgICAgOjo9ICBbdHlwZV0gO1xuXG4gICAgICByZWd1bGFyRXhwcmVzc2lvbiAgICAgICAgOjo9ICBbcmVndWxhci1leHByZXNzaW9uXSA7XG5cbiAgICAgIHRlcm1pbmFsU3ltYm9sICAgICAgICAgICA6Oj0gIFtzdHJpbmctbGl0ZXJhbF0gO1xuXG4gICAgICBwcmVjZWRlbmNlICAgICAgICAgICAgICAgOjo9ICBcIihcIiBbbnVtYmVyXT8gXCIpXCIgO1xuICAgICAgXG4gICAgICBlbmRPZkxpbmUgICAgICAgICAgICAgICAgOjo9ICBcIjxFTkRfT0ZfTElORT5cIiA7XG4gICAgICBcbiAgICAgIHdpbGRjYXJkICAgICAgICAgICAgICAgICA6Oj0gIFwiLlwiIDtcblxuICAgICAgZXBzaWxvbiAgICAgICAgICAgICAgICAgIDo6PSAgXCJcdTAzQjVcIiA7XG5cbiAgICAgIG5vV2hpdGVzcGFjZSAgICAgICAgICAgICA6Oj0gIFwiPE5PX1dISVRFU1BBQ0U+XCIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICBzdGFydE9mQ29udGVudCAgICAgICAgICAgOjorICBcIjxTVEFSVF9PRl9DT05URU5UPlwiOyBcbiAgICAgIFxuICAgICAgcXVhbnRpZmllciAgICAgICAgICAgICAgIDo6PSAgb3B0aW9uYWxRdWFudGlmaWVyXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvbmVPck1vcmVRdWFudGlmaWVyXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgemVyb09yTW9yZVF1YW50aWZpZXJcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIG9wYWNpdHlNb2RpZmllciAgICAgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPiggXCIuXCIgfCBcIi4uXCIgKTtcbiAgICAgIFxuICAgICAgY2FsbEFoZWFkTW9kaWZpZXIgICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIuLi5cIiA7XG5cbiAgICAgIG9wdGlvbmFsUXVhbnRpZmllciAgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiP1wiIDtcblxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllciAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIrXCIgO1xuXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllciAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIipcIiA7XG5cbiAgICAgIGVycm9yLiAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IEVTQ0FQRURfQkFDS1NMQVNIID1cIlxcXFxcIjtcbmV4cG9ydCBjb25zdCBFU0NBUEVEX0RPVUJMRV9RVU9URSA9IFwiXFxcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgU1BBQ0VfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKHBhZGRpbmdMZW5ndGgpIHtcbiAgbGV0IHBhZGRpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IHBhZGRpbmdMZW5ndGg7IHBvc2l0aW9uKyspIHtcbiAgICBwYWRkaW5nICs9IFNQQUNFX0NIQVJBQ1RFUjtcbiAgfVxuXG4gIHJldHVybiBwYWRkaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcbmltcG9ydCB7IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuY29uc3QgeyBjbGVhciB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IG9wYXF1ZTogb3BhcXVlU3BlY2lhbFN5bWJvbCwgc2VtaU9wYXF1ZTogc2VtaU9wYXF1ZVNwZWNpYWxTeW1ib2wgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlIHtcbiAgY29uc3RydWN0b3IobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5vcGFjaXR5ID0gb3BhY2l0eTtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRPcGFjaXR5KCkge1xuICAgIHJldHVybiB0aGlzLm9wYWNpdHk7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldE5vblRlcm1pbmFsTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0T3BhY2l0eShvcGFjaXR5KSB7XG4gICAgdGhpcy5vcGFjaXR5ID0gb3BhY2l0eTtcbiAgfVxuXG4gIHNldERlZmluaXRpb25zKGRlZmluaXRpb25zKSB7XG4gICAgdGhpcy5kZWZpbml0aW9ucyA9IGRlZmluaXRpb25zO1xuICB9XG5cbiAgc2V0Tm9uVGVybWluYWxOb2RlKE5vblRlcm1pbmFsTm9kZSkge1xuICAgIHRoaXMuTm9uVGVybWluYWxOb2RlID0gTm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNPcGFxdWUoKSB7XG4gICAgY29uc3Qgb3BhcXVlID0gKHRoaXMub3BhY2l0eSA9PT0gb3BhcXVlU3BlY2lhbFN5bWJvbCk7XG5cbiAgICByZXR1cm4gb3BhcXVlO1xuICB9XG5cbiAgaXNTZW1pT3BhcXVlKCkge1xuICAgIGNvbnN0IHNlbWlPcGFxdWUgPSAodGhpcy5vcGFjaXR5ID09PSBzZW1pT3BhcXVlU3BlY2lhbFN5bWJvbCk7XG5cbiAgICByZXR1cm4gc2VtaU9wYXF1ZTtcbiAgfVxuXG4gIGlzVHJhbnNwYXJlbnQoKSB7XG4gICAgY29uc3Qgc2VtaU9wYXF1ZSA9ICh0aGlzLm9wYWNpdHkgPT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHNlbWlPcGFxdWU7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgb3BhY2l0eSA9IHRoaXMub3BhY2l0eSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgY2hpbGROb2RlcyA9IFtdLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IHRoaXMuTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSxcbiAgICAgICAgICBzYXZlZFByZWNlZGVuY2UgPSBzdGF0ZS5nZXRTYXZlZFByZWNlZGVuY2UoKTtcblxuICAgIGxldCBub2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cblxuICAgIG5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICBwYXJzZWQgPSB0aGlzLmRlZmluaXRpb25zLnNvbWUoKGRlZmluaXRpb24pID0+IHtcbiAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgIGNsZWFyKGNoaWxkTm9kZXMpO1xuXG4gICAgICBjb25zdCBwcmVjZWRlbmNlID0gZGVmaW5pdGlvbi5nZXRQcmVjZWRlbmNlKCk7XG5cbiAgICAgIHN0YXRlLnNldFByZWNlZGVuY2UocHJlY2VkZW5jZSk7XG5cbiAgICAgIGNhbGxiYWNrID0gKCkgPT4geyAgLy8vXG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgY29uc3QgcHJlY2VkZW5jZSA9IHN0YXRlLmdldFByZWNlZGVuY2UoKTtcblxuICAgICAgICBub25UZXJtaW5hbE5vZGUuc2V0UHJlY2VkZW5jZShwcmVjZWRlbmNlKTtcblxuICAgICAgICBwYXJzZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICBub2RlLnNldENoaWxkTm9kZXNQYXJlbnROb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUgPSBub25UZXJtaW5hbE5vZGUucmV3cml0ZSgpO1xuXG4gICAgICAgIGlmIChyZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICBub2Rlcy5wb3AoKTtcblxuICAgICAgICAgICAgbm9kZSA9IHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZTsgLy8vXG5cbiAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgIGNvbnN0IGVtcHR5ID0gbm9kZS5pc0VtcHR5KCk7XG5cbiAgICAgICAgICBpZiAoZW1wdHkpIHtcbiAgICAgICAgICAgIHBhcnNlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICBjb25zdCB1bnByZWNlZGVudGVkID0gbm9kZS5pc1VucHJlY2VkZW50ZWQoKTtcblxuICAgICAgICAgIGlmICh1bnByZWNlZGVudGVkKSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXRQcmVjZWRlbmNlKHNhdmVkUHJlY2VkZW5jZSk7XG5cbiAgICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgbm9kZXMucG9wKCk7XG5cbiAgICAgICAgICAgIG5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuXG4gICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZS5yZXNldENoaWxkTm9kZXNQYXJlbnROb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgfTtcblxuICAgICAgcGFyc2VkID0gZGVmaW5pdGlvbi5wYXJzZShjaGlsZE5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIHN0YXRlLnJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnBvcCgpO1xuICAgIH1cblxuICAgIGlmIChjYWxsQWhlYWQgPT09IG51bGwpIHtcbiAgICAgIHN0YXRlLnJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZyhtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIG11bHRpTGluZSA9IHRydWUpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0xlbmd0aCA9IHRoaXMuZGVmaW5pdGlvbnMubGVuZ3RoO1xuXG4gICAgbXVsdGlMaW5lID0gbXVsdGlMaW5lICYmIChkZWZpbml0aW9uc0xlbmd0aCA+IDEpOyAgLy8vXG5cbiAgICBjb25zdCBtYXhpbXVtUGFkZGluZyA9IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChtYXhpbXVtUnVsZU5hbWVMZW5ndGgpLFxuICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gdGhpcy5kZWZpbml0aW9ucy5yZWR1Y2UoKGRlZmluaXRpb25zU3RyaW5nLCBkZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uU3RyaW5nID0gZGVmaW5pdGlvbi5hc1N0cmluZygpO1xuXG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbnNTdHJpbmcgPT09IEVNUFRZX1NUUklORykge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IGRlZmluaXRpb25TdHJpbmc7IC8vL1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtkZWZpbml0aW9uc1N0cmluZ31cblxuJHttYXhpbXVtUGFkZGluZ30gICB8ICR7ZGVmaW5pdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtkZWZpbml0aW9uc1N0cmluZ30gfCAke2RlZmluaXRpb25TdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb25zU3RyaW5nO1xuICAgICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lTGVuZ3RoID0gcnVsZU5hbWUubGVuZ3RoLFxuICAgICAgICAgIG9wYWNpdHlTdHJpbmcgPSAodGhpcy5vcGFjaXR5ID09PSBudWxsKT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGFjaXR5LCAvLy9cbiAgICAgICAgICBvcGFjaXR5U3RyaW5nTGVuZ3RoID0gb3BhY2l0eVN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZ0xlbmd0aCA9IG1heGltdW1SdWxlTmFtZUxlbmd0aCAtIHJ1bGVOYW1lTGVuZ3RoIC0gb3BhY2l0eVN0cmluZ0xlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKHBhZGRpbmdMZW5ndGgpO1xuXG4gICAgY29uc3Qgc2VtaWNvbG9uU3RyaW5nID0gbXVsdGlMaW5lID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuXG4ke21heGltdW1QYWRkaW5nfSAgIDtgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiA7XCIsXG4gICAgICAgICAgc3RyaW5nID0gYFxuXG4ke3RoaXMubmFtZX0ke29wYWNpdHlTdHJpbmd9JHtwYWRkaW5nfSA6Oj0gJHtkZWZpbml0aW9uc1N0cmluZ30ke3NlbWljb2xvblN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTmFtZU9wYWNpdHlEZWZpbml0aW9uc0FuZE5vblRlcm1pbmFsTm9kZShDbGFzcywgbmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSkge1xuICAgIGlmIChOb25UZXJtaW5hbE5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgTm9uVGVybWluYWxOb2RlID0gZGVmaW5pdGlvbnM7ICAvLy9cblxuICAgICAgZGVmaW5pdGlvbnMgPSBvcGFjaXR5OyAgLy8vXG5cbiAgICAgIG9wYWNpdHkgPSBuYW1lOyAvLy9cblxuICAgICAgbmFtZSA9IENsYXNzOyAvLy9cblxuICAgICAgQ2xhc3MgPSBSdWxlOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0gbmV3IENsYXNzKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGUge1xuICBjb25zdHJ1Y3RvcihpbmRleCwgdG9rZW5zLCBydWxlTWFwLCBwcmVjZWRlbmNlLCBzdGFydE9mQ29udGVudCkge1xuXHRcdHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5zdGFydE9mQ29udGVudCA9IHN0YXJ0T2ZDb250ZW50O1xuICB9XG5cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgZ2V0U3RhcnRPZkNvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRPZkNvbnRlbnQ7XG4gIH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgfVxuXG4gIHNldFJ1bGVNYXAocnVsZU1hcCkge1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gIH1cblxuICBzZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0U3RhcnRPZkNvbnRlbnQoc3RhcnRPZkNvbnRlbnQpIHtcbiAgICB0aGlzLnN0YXJ0T2ZDb250ZW50ID0gc3RhcnRPZkNvbnRlbnQ7XG4gIH1cblxuICBnZXRTYXZlZFByZWNlZGVuY2UoKSB7XG4gICAgY29uc3Qgc2F2ZWRQcmVjZWRlbmNlID0gdGhpcy5wcmVjZWRlbmNlO1xuXG4gICAgcmV0dXJuIHNhdmVkUHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFNhdmVkSW5kZXgoKSB7XG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHRoaXMuaW5kZXg7IC8vL1xuICBcbiAgICByZXR1cm4gc2F2ZWRJbmRleDtcbiAgfVxuXG4gIGdldE5leHRUb2tlbigpIHtcbiAgICBsZXQgbmV4dFRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4KytdO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0VG9rZW47XG4gIH1cblxuICBpc0F0U3RhcnRPZkNvbnRlbnQoKSB7XG4gICAgY29uc3QgYXRTdGFydE9mQ29udGVudCA9IHRoaXMuc3RhcnRPZkNvbnRlbnQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaW5kZXggPT09IDApOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTtcblxuICAgIHJldHVybiBhdFN0YXJ0T2ZDb250ZW50O1xuICB9XG5cbiAgZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSB7XG5cdFx0bGV0IG5leHRTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICBcdGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICBcdHdoaWxlICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gIFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK10sXG5cdFx0XHRcdFx0XHR0b2tlblNpZ25pZmljYW50ID0gdG9rZW4uaXNTaWduaWZpY2FudCgpO1xuXG4gIFx0XHRpZiAodG9rZW5TaWduaWZpY2FudCkge1xuICBcdFx0ICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdG9rZW47IC8vL1xuXG5cdFx0XHRcdG5leHRTaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcdC8vL1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuICBcdH1cblxuXHRcdHJldHVybiBuZXh0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblxuICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gbmV4dFRva2VuLmlzV2hpdGVzcGFjZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG5cdGJhY2t0cmFjayhzYXZlZEluZGV4KSB7XG5cdFx0dGhpcy5pbmRleCA9IHNhdmVkSW5kZXg7ICAvLy9cblx0fVxuXG4gIHJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBzYXZlZFByZWNlZGVuY2U7ICAvLy9cbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW5zUnVsZU1hcEFuZFN0YXJ0T2ZDb250ZW50KHRva2VucywgcnVsZU1hcCwgc3RhcnRPZkNvbnRlbnQpIHtcbiAgICBjb25zdCBpbmRleCA9IDAsXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG5cdFx0XHRcdFx0c3RhdGUgPSBuZXcgU3RhdGUoaW5kZXgsIHRva2VucywgcnVsZU1hcCwgcHJlY2VkZW5jZSwgc3RhcnRPZkNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU3RhdGUgZnJvbSBcIi4uL3N0YXRlXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5mdW5jdGlvbiBwYXJzZSh0b2tlbnMsIHJ1bGUgPSB0aGlzLnN0YXJ0UnVsZSwgc3RhcnRPZkNvbnRlbnQgPSB0cnVlKSB7XG4gIGxldCBub2RlID0gbnVsbDtcblxuICBjb25zdCBub2RlcyA9IFtdLFxuICAgICAgICBzdGF0ZSA9IFN0YXRlLmZyb21Ub2tlbnNSdWxlTWFwQW5kU3RhcnRPZkNvbnRlbnQodG9rZW5zLCB0aGlzLnJ1bGVNYXAsIHN0YXJ0T2ZDb250ZW50KSxcbiAgICAgICAgY2FsbGJhY2sgPSBudWxsLFxuICAgICAgICBjYWxsQWhlYWQgPSBudWxsLFxuICAgICAgICBwYXJzZWQgPSBydWxlLnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgaWYgKHBhcnNlZCkge1xuICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICAgIG5vZGUgPSBmaXJzdE5vZGU7IC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmNvbnN0IHBhcnNlck1peGlucyA9IHtcbiAgcGFyc2Vcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlck1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycywgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGxhc3QgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBORVdfTElORV9DSEFSQUNURVIsIFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlIHtcbiAgY29uc3RydWN0b3IobGluZXMpIHtcbiAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMubGluZXMuc2xpY2UoKSwgIC8vL1xuICAgICAgICAgIHBhcnNlVHJlZSA9IG5ldyBQYXJzZVRyZWUobGluZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGxldCB3aWR0aDtcblxuICAgIGxldCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxpbmVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB3aWR0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxhc3RMaW5lID0gbGFzdCh0aGlzLmxpbmVzKSxcbiAgICAgICAgICAgIGxhc3RMaW5lTGVuZ3RoID0gbGFzdExpbmUubGVuZ3RoO1xuXG4gICAgICB3aWR0aCA9IGxhc3RMaW5lTGVuZ3RoOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXREZXB0aCgpIHtcbiAgICBjb25zdCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoLFxuICAgICAgICAgIGRlcHRoID0gbGluZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBkZXB0aDtcbiAgfVxuXG4gIGZvckVhY2hMaW5lKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5saW5lcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFwcGVuZFRvVG9wKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9MZWZ0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGluZSArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9SaWdodChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgbGluZTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvQm90dG9tKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkVG9wTWFyZ2luKHRvcE1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgdG9wTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIHRvcE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aCh0b3BNYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdG9wTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdCh0b3BNYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgbGVmdE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChsZWZ0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGVmdE1hcmdpblN0cmluZyArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCByaWdodE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChyaWdodE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgcmlnaHRNYXJnaW5TdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgYWRkQm90dG9tTWFyZ2luKGJvdHRvbU1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgYm90dG9tTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIGJvdHRvbU1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChib3R0b21NYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYm90dG9tTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMucHVzaChib3R0b21NYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuICBcbiAgcG9wTGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMucG9wKCk7IH1cbiAgXG4gIHNoaWZ0TGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMuc2hpZnQoKTsgfVxuICBcbiAgcHVzaExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnB1c2gobGluZSk7IH1cbiAgXG4gIHVuc2hpZnRMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpOyB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5saW5lcy5yZWR1Y2UoKHN0cmluZywgbGluZSkgPT4ge1xuICAgICAgc3RyaW5nICs9IGxpbmUgKyBORVdfTElORV9DSEFSQUNURVI7XG5cbiAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKG1hcmdpbldpZHRoLCBzcGFjZUNoYXJhY3Rlcikge1xuICBzcGFjZUNoYXJhY3RlciA9IHNwYWNlQ2hhcmFjdGVyIHx8IFNQQUNFX0NIQVJBQ1RFUjtcblxuICBsZXQgbWFyZ2luU3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXJnaW5XaWR0aDsgaW5kZXgrKykge1xuICAgIG1hcmdpblN0cmluZyArPSBzcGFjZUNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBtYXJnaW5TdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgQkFSX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZXh0ZW5kcyBQYXJzZVRyZWUge1xuICBjb25zdHJ1Y3RvcihsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgIHN1cGVyKGxpbmVzKTtcbiAgICBcbiAgICB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICB9XG4gIFxuICBnZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gIH1cblxuICBhZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCkge1xuICAgIHN1cGVyLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcblxuICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBsZWZ0TWFyZ2luV2lkdGg7IC8vL1xuICB9XG5cbiAgc3RhdGljIGZyb21XaWR0aCh3aWR0aCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEJBUl9DSEFSQUNURVIsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IDAsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSxcbiAgICAgICAgICBsZWZ0TWFyZ2luV2lkdGggPSBNYXRoLmZsb29yKHdpZHRoLzIpLFxuICAgICAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSB3aWR0aCAtIGxlZnRNYXJnaW5XaWR0aCAtIDE7XG5cbiAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG5cbiAgICByZXR1cm4gdmVydGljYWxCcmFuY2hQYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbURlcHRoQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDbGFzcywgZGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pIHtcbiAgICBjb25zdCBsaW5lcyA9IGxpbmVzRnJvbURlcHRoKGRlcHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyBDbGFzcyhsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICByZXR1cm4gdmVydGljYWxCcmFuY2hQYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2xhc3MsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgIGlmICh2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBzdHJpbmc7ICAvLy9cblxuICAgICAgc3RyaW5nID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IFBhcnNlVHJlZTsgIC8vL1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBsaW5lID0gc3RyaW5nLCAvLy9cbiAgICAgICAgICBsaW5lcyA9IFtcbiAgICAgICAgICAgIGxpbmVcbiAgICAgICAgICBdLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gbmV3IENsYXNzKGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsaW5lc0Zyb21EZXB0aChkZXB0aCkge1xuICBjb25zdCBsaW5lcyA9IFtdO1xuXG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGluZGV4IDwgZGVwdGgpIHtcbiAgICBsaW5lc1tpbmRleCsrXSA9IEVNUFRZX1NUUklORztcbiAgfVxuXG4gIHJldHVybiBsaW5lcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVJbmRleEZyb21Ub2tlbkluZGV4QW5kVG9rZW5zKHRva2VuSW5kZXgsIHRva2Vucykge1xuICBsZXQgbGluZUluZGV4ID0gbnVsbDtcblxuICBpZiAodG9rZW5JbmRleCAhPT0gbnVsbCkge1xuICAgIGxpbmVJbmRleCA9IDA7XG5cbiAgICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgICAgZW5kID0gdG9rZW5JbmRleDtcblxuICAgIHRva2VucyA9IHRva2Vucy5zbGljZShzdGFydCwgZW5kKTsgIC8vL1xuXG4gICAgdG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICBjb25zdCB0b2tlbkVuZE9mTGluZVRva2VuID0gdG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgICBpZiAodG9rZW5FbmRPZkxpbmVUb2tlbikge1xuICAgICAgICBsaW5lSW5kZXgrKztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsaW5lSW5kZXg7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnN9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxpbmVJbmRleEZyb21Ub2tlbkluZGV4QW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90b2tlbnNcIjtcblxuY29uc3QgeyBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgb3BhY2l0eSA9IG5vblRlcm1pbmFsTm9kZS5nZXRPcGFjaXR5KCksXG4gICAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub25UZXJtaW5hbE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSxcbiAgICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9uVGVybWluYWxOb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSxcbiAgICAgICAgICBmaXJzdExpbmVJbmRleCA9IGxpbmVJbmRleEZyb21Ub2tlbkluZGV4QW5kVG9rZW5zKGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4LCB0b2tlbnMpLFxuICAgICAgICAgIGxhc3RMaW5lSW5kZXggPSBsaW5lSW5kZXhGcm9tVG9rZW5JbmRleEFuZFRva2VucyhsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4LCB0b2tlbnMpO1xuXG4gICAgbGV0IGxpbmVJbmRleGVzO1xuXG4gICAgaWYgKGZpcnN0TGluZUluZGV4ID09PSBsYXN0TGluZUluZGV4KSB7XG4gICAgICBjb25zdCBsaW5lSW5kZXggPSBmaXJzdExpbmVJbmRleDsgLy8vXG5cbiAgICAgIGlmIChsaW5lSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgbGluZUluZGV4ZXMgPSBFTVBUWV9TVFJJTkc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaW5lSW5kZXhlcyA9IGAgWyR7bGluZUluZGV4fV1gO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgLy8vXG4gICAgICB9IGVsc2UgaWYgKGZpcnN0TGluZUluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIGxpbmVJbmRleGVzID0gYCBbJHtsYXN0TGluZUluZGV4fV1gO1xuICAgICAgfSBlbHNlIGlmIChsYXN0TGluZUluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIGxpbmVJbmRleGVzID0gYCBbJHtmaXJzdExpbmVJbmRleH1dYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmVJbmRleGVzID0gYCBbJHtmaXJzdExpbmVJbmRleH0tJHtsYXN0TGluZUluZGV4fV1gXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHN0cmluZyA9IGAke3J1bGVOYW1lfWA7XG5cbiAgICBpZiAob3BhY2l0eSAhPT0gbnVsbCkge1xuICAgICAgc3RyaW5nID0gYCR7c3RyaW5nfSR7b3BhY2l0eX1gO1xuICAgIH1cblxuICAgIHN0cmluZyA9IGAke3N0cmluZ30ke2xpbmVJbmRleGVzfWA7XG5cbiAgICBsZXQgcHJlY2VkZW5jZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRQcmVjZWRlbmNlKCk7XG5cbiAgICBpZiAocHJlY2VkZW5jZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHByZWNlZGVuY2UgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHByZWNlZGVuY2UgPSBTUEFDRV9DSEFSQUNURVI7XG4gICAgICB9XG5cbiAgICAgIHN0cmluZyA9IGAke3N0cmluZ30gKCR7cHJlY2VkZW5jZX0pYDtcbiAgICB9XG5cbiAgICBjb25zdCBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihSdWxlTmFtZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IERBU0hfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlIGV4dGVuZHMgUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21XaWR0aCh3aWR0aCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHN0cmluZ0Zyb21DaGFyYWN0ZXJzV2lkdGgod2lkdGgsIERBU0hfQ0hBUkFDVEVSKSxcbiAgICAgICAgICBsaW5lID0gc3RyaW5nLCAvLy9cbiAgICAgICAgICBsaW5lcyA9IFtcbiAgICAgICAgICAgIGxpbmVcbiAgICAgICAgICBdLFxuICAgICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKGNoYXJhY3RlcnNXaWR0aCwgY2hhcmFjdGVyKSB7XG4gIGxldCBzdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoYXJhY3RlcnNXaWR0aDsgaW5kZXgrKykge1xuICAgIHN0cmluZyArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5pbXBvcnQgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi9ob3Jpem9udGFsQnJhbmNoXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGlsZE5vZGVzUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbUNoaWxkTm9kZXNBbmRUb2tlbnMoY2hpbGROb2RlcywgdG9rZW5zKSB7XG4gICAgbGV0IGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBudWxsO1xuXG4gICAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gICAgaWYgKGNoaWxkTm9kZXNMZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVzID0gY2hpbGROb2Rlcy5yZWR1Y2UoKGNoaWxkTm9kZVBhcnNlVHJlZXMsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGUuYXNQYXJzZVRyZWUodG9rZW5zKTtcblxuICAgICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLnB1c2goY2hpbGROb2RlUGFyc2VUcmVlKTtcblxuICAgICAgICAgICAgICByZXR1cm4gY2hpbGROb2RlUGFyc2VUcmVlcztcbiAgICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzLmxlbmd0aDtcblxuICAgICAgaWYgKGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBmaXJzdChjaGlsZE5vZGVQYXJzZVRyZWVzKTtcblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWU7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24sXG4gICAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IDAsXG4gICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggPSAwLFxuICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gMDtcblxuICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLmZvckVhY2goKGNoaWxkTm9kZVBhcnNlVHJlZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCk7XG5cbiAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLFxuICAgICAgICAgICAgICAgICAgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgICBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGluZGV4ID09PSBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICAgIGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gbGFzdENoaWxkTm9kZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbmRleCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IDE7XG5cbiAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggPSBNYXRoLm1heChjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgsIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgd2lkdGggPSBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArIDEsXG4gICAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLFxuICAgICAgICAgICAgICByaWdodE1hcmdpbldpZHRoID0gY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoIC0gd2lkdGggLSBsZWZ0TWFyZ2luV2lkdGg7XG5cbiAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG5cbiAgICAgICAgY29uc3QgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbURlcHRoQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDaGlsZE5vZGVzUGFyc2VUcmVlLCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMuZm9yRWFjaCgoY2hpbGROb2RlUGFyc2VUcmVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLmNsb25lKCk7XG5cbiAgICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgcmlnaHRNYXJnaW5XaWR0aCA9IDE7XG5cbiAgICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbU1hcmdpbkRlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoIC0gY2hpbGROb2RlUGFyc2VUcmVlRGVwdGg7XG5cbiAgICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGROb2Rlc1BhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJzZVRyZWUgZnJvbSBcIi4vcnVsZU5hbWVcIjtcbmltcG9ydCBDaGlsZE5vZGVzUGFyc2VUcmVlIGZyb20gXCIuL2NoaWxkTm9kZXNcIjtcbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgbGV0IG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlID0gUnVsZU5hbWVQYXJzZVRyZWUuZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IENoaWxkTm9kZXNQYXJzZVRyZWUuZnJvbUNoaWxkTm9kZXNBbmRUb2tlbnMoY2hpbGROb2RlcywgdG9rZW5zKTtcblxuICAgIGlmIChjaGlsZE5vZGVzUGFyc2VUcmVlID09PSBudWxsKSB7XG4gICAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWVEZXB0aCwgLy8vXG4gICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uOyAvLy9cblxuICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbURlcHRoQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUsIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZURlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQocnVsZU5hbWVQYXJzZVRyZWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICBjb25zdCBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID0gcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG5cbiAgICAgIGxldCBsZWZ0TWFyZ2luV2lkdGg7XG5cbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAvLy9cbiAgICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgICBsZWZ0TWFyZ2luV2lkdGggPSAtdmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlO1xuXG4gICAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID4gMCkge1xuICAgICAgICBsZWZ0TWFyZ2luV2lkdGggPSArdmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlO1xuXG4gICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZVdpZHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgIHdpZHRoc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVdpZHRoIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoO1xuXG4gICAgICBsZXQgcmlnaHRNYXJnaW5XaWR0aDtcblxuICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIC8vL1xuICAgICAgfSBlbHNlIGlmICh3aWR0aHNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgICByaWdodE1hcmdpbldpZHRoID0gLXdpZHRoc0RpZmZlcmVuY2U7XG5cbiAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPiAwKSB7XG4gICAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSArd2lkdGhzRGlmZmVyZW5jZTtcblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgfVxuXG4gICAgICBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgIGNvbnN0IHJ1bGVOYW1lUGFyc2VUcmVlRGVwdGggPSBydWxlTmFtZVBhcnNlVHJlZS5nZXREZXB0aCgpLFxuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGggPSBydWxlTmFtZVBhcnNlVHJlZURlcHRoLCAvLy9cbiAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247IC8vL1xuXG4gICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChydWxlTmFtZVBhcnNlVHJlZSk7XG5cbiAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb0JvdHRvbShjaGlsZE5vZGVzUGFyc2VUcmVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGVcIjtcblxuY29uc3QgeyBmaXJzdCwgbWF0Y2gsIGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IG9wYXF1ZTogb3BhcXVlU3BlY2lhbFN5bWJvbCAsIHNlbWlPcGFxdWU6IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICAgIHRoaXMub3BhY2l0eSA9IG9wYWNpdHk7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgZ2V0UGFyZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xuICB9XG5cbiAgZ2V0Q2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICB9XG5cbiAgZ2V0T3BhY2l0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcGFjaXR5O1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRDaGlsZE5vZGVzKGNoaWxkTm9kZXMpIHtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gMCxcbiAgICAgICAgICBkZWxldGVDb3VudCA9IEluZmluaXR5LFxuICAgICAgICAgIGFkZGVkQ2hpbGROb2RlcyA9IGNoaWxkTm9kZXM7ICAvLy9cblxuICAgIHRoaXMuc3BsaWNlQ2hpbGROb2RlcyhzdGFydEluZGV4LCBkZWxldGVDb3VudCwgYWRkZWRDaGlsZE5vZGVzKTtcbiAgfVxuXG4gIHNldFBhcmVudE5vZGUocGFyZW50Tm9kZSkge1xuICAgIHRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gIH1cblxuICBzZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0T3BhY2l0eShvcGFjaXR5KSB7XG4gICAgdGhpcy5vcGFjaXR5ID0gb3BhY2l0eTtcbiAgfVxuXG4gIGlzT3BhcXVlKCkge1xuICAgIGNvbnN0IG9wYXF1ZSA9ICh0aGlzLm9wYWNpdHkgPT09IG9wYXF1ZVNwZWNpYWxTeW1ib2wpO1xuXG4gICAgcmV0dXJuIG9wYXF1ZTtcbiAgfVxuXG4gIGlzU2VtaU9wYXF1ZSgpIHtcbiAgICBjb25zdCBzZW1pT3BhcXVlID0gKHRoaXMub3BhY2l0eSA9PT0gc2VtaU9wYXF1ZVNwZWNpYWxTeW1ib2wpO1xuXG4gICAgcmV0dXJuIHNlbWlPcGFxdWU7XG4gIH1cblxuICBpc1RyYW5zcGFyZW50KCkge1xuICAgIGNvbnN0IHNlbWlPcGFxdWUgPSAodGhpcy5vcGFjaXR5ID09PSBudWxsKTtcblxuICAgIHJldHVybiBzZW1pT3BhcXVlO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmZvcndhcmRzU29tZUNoaWxkTm9kZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucyk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmJhY2t3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKTtcblxuICAgICAgaWYgKGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5zKHNpZ25pZmljYW50VG9rZW5zID0gW10pIHtcbiAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbnMoc2lnbmlmaWNhbnRUb2tlbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5zO1xuICB9XG5cbiAgZ2V0QW5jZXN0b3JOb2RlcygpIHtcbiAgICBjb25zdCBhbmNlc3Rvck5vZGVzID0gW107XG5cbiAgICBsZXQgcGFyZW50Tm9kZSA9IHRoaXMucGFyZW50Tm9kZTtcblxuICAgIHdoaWxlIChwYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBhbmNlc3Rvck5vZGUgPSBwYXJlbnROb2RlOyAgLy8vXG5cbiAgICAgIGFuY2VzdG9yTm9kZXMucHVzaChhbmNlc3Rvck5vZGUpO1xuXG4gICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXRQYXJlbnROb2RlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9yTm9kZXM7XG4gIH1cblxuICBnZXRNdWx0aXBsaWNpdHkoKSB7XG4gICAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IHRoaXMuY2hpbGROb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgbXVsdGlwbGljaXR5ID0gY2hpbGROb2Rlc0xlbmd0aDsgIC8vL1xuXG4gICAgcmV0dXJuIG11bHRpcGxpY2l0eTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgbXVsdGlwbGljaXR5ID0gdGhpcy5nZXRNdWx0aXBsaWNpdHkoKSxcbiAgICAgICAgICBlbXB0eSA9IChtdWx0aXBsaWNpdHkgPT09IDApO1xuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBtdWx0aXBsaWNpdHkgPSB0aGlzLmdldE11bHRpcGxpY2l0eSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0gKG11bHRpcGxpY2l0eSA9PT0gMSk7XG5cbiAgICByZXR1cm4gc2luZ3VsYXI7XG4gIH1cblxuICBpc0xvd2VyUHJlY2VkZW5jZShydWxlTmFtZSwgcHJlY2VkZW5jZSkge1xuICAgIGxldCBsb3dlclByZWNlZGVuY2U7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcmVjZWRlbmNlID09PSBudWxsKSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJlY2VkZW5jZSA9PT0gSW5maW5pdHkpIHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlID0gZmlyc3QodGhpcy5jaGlsZE5vZGVzKTtcblxuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gZmlyc3RDaGlsZE5vZGUuaXNMb3dlclByZWNlZGVuY2UocnVsZU5hbWUsIHByZWNlZGVuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSAoKHRoaXMucnVsZU5hbWUgPT09IHJ1bGVOYW1lKSAmJiAodGhpcy5wcmVjZWRlbmNlIDwgcHJlY2VkZW5jZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBsb3dlclByZWNlZGVuY2U7XG4gIH1cblxuICBpc1VucHJlY2VkZW50ZWQoKSB7XG4gICAgbGV0IHVucHJlY2VkZW50ZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgIHVucHJlY2VkZW50ZWQgPSB0aGlzLmNoaWxkTm9kZXMuc29tZSgoY2hpbGROb2RlKSA9PiB7ICAvLy9cbiAgICAgICAgY29uc3QgY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlID0gY2hpbGROb2RlLmlzTG93ZXJQcmVjZWRlbmNlKHRoaXMucnVsZU5hbWUsIHRoaXMucHJlY2VkZW5jZSk7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5wcmVjZWRlbnRlZDtcbiAgfVxuXG4gIGlzSW5jbHVkZWRJbihub2RlKSB7XG4gICAgbGV0IGluY2x1ZGVkSW4gPSBmYWxzZTtcblxuICAgIGlmICh0aGlzID09PSBub2RlKSB7XG4gICAgICBpbmNsdWRlZEluID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgIGluY2x1ZGVkSW4gPSBjaGlsZE5vZGVzLnNvbWUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluY2x1ZGVkSW5DaGlsZE5vZGUgPSB0aGlzLmlzSW5jbHVkZWRJbihjaGlsZE5vZGUpO1xuXG4gICAgICAgICAgaWYgKGluY2x1ZGVkSW5DaGlsZE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluY2x1ZGVkSW47XG4gIH1cblxuICBtYXBDaGlsZE5vZGUoY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5tYXAoY2FsbGJhY2spOyB9XG5cbiAgc29tZUNoaWxkTm9kZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLnNvbWUoY2FsbGJhY2spOyB9XG5cbiAgZXZlcnlDaGlsZE5vZGUoY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5ldmVyeShjYWxsYmFjayk7IH1cblxuICByZWR1Y2VDaGlsZE5vZGUoY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLnJlZHVjZShjYWxsYmFjaywgaW5pdGlhbFZhbHVlKTsgfVxuXG4gIGZvckVhY2hDaGlsZE5vZGUoY2FsbGJhY2spIHsgdGhpcy5jaGlsZE5vZGVzLmZvckVhY2goY2FsbGJhY2spOyB9XG5cbiAgZm9yd2FyZHNTb21lQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHJldHVybiBmb3J3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCBjYWxsYmFjayk7IH1cblxuICBiYWNrd2FyZHNTb21lQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHJldHVybiBiYWNrd2FyZHNTb21lKHRoaXMuY2hpbGROb2RlcywgY2FsbGJhY2spOyB9XG5cbiAgc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoY2hpbGROb2Rlcykge1xuICAgIGlmIChjaGlsZE5vZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkTm9kZXMgPSBbXG4gICAgICAgIC4uLnRoaXMuY2hpbGROb2Rlc1xuICAgICAgXTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcztcblxuICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuc2V0UGFyZW50Tm9kZShwYXJlbnROb2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoY2hpbGROb2Rlcykge1xuICAgIGlmIChjaGlsZE5vZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkTm9kZXMgPSBbXG4gICAgICAgIC4uLnRoaXMuY2hpbGROb2Rlc1xuICAgICAgXTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnROb2RlID0gbnVsbDtcblxuICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuc2V0UGFyZW50Tm9kZShwYXJlbnROb2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZENoaWxkTm9kZShhZGRlZENoaWxkTm9kZSwgb2Zmc2V0KSB7XG4gICAgY29uc3QgYWRkZWRDaGlsZE5vZGVzID0gW1xuICAgICAgICBhZGRlZENoaWxkTm9kZVxuICAgIF07XG5cbiAgICB0aGlzLmFkZENoaWxkTm9kZXMoYWRkZWRDaGlsZE5vZGVzLCBvZmZzZXQpO1xuICB9XG5cbiAgYWRkQ2hpbGROb2RlcyhhZGRlZENoaWxkTm9kZXMsIG9mZnNldCkge1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBvZmZzZXQsIC8vL1xuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMDtcblxuICAgIHRoaXMuc3BsaWNlQ2hpbGROb2RlcyhzdGFydEluZGV4LCBkZWxldGVDb3VudCwgLi4uYWRkZWRDaGlsZE5vZGVzKTtcbiAgfVxuXG4gIHJlbW92ZUNoaWxkTm9kZShyZW1vdmVkQ2hpbGROb2RlKSB7XG4gICAgbGV0IHJlbW92ZWRDaGlsZE5vZGVzO1xuXG4gICAgcmVtb3ZlZENoaWxkTm9kZXMgPSBbXG4gICAgICByZW1vdmVkQ2hpbGROb2RlXG4gICAgXTtcblxuICAgIHJlbW92ZWRDaGlsZE5vZGVzID0gdGhpcy5yZW1vdmVDaGlsZE5vZGVzKHJlbW92ZWRDaGlsZE5vZGVzKTtcblxuICAgIHJldHVybiByZW1vdmVkQ2hpbGROb2RlcztcbiAgfVxuXG4gIHJlbW92ZUNoaWxkTm9kZXMocmVtb3ZlZENoaWxkTm9kZXMpIHtcbiAgICBpZiAocmVtb3ZlZENoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVtb3ZlZENoaWxkTm9kZXMgPSBbXG4gICAgICAgIC4uLnRoaXMuY2hpbGROb2Rlc1xuICAgICAgXTtcbiAgICB9XG5cbiAgICBjb25zdCByZW1vdmVkQ2hpbGROb2Rlc0xlbmd0aCA9IHJlbW92ZWRDaGlsZE5vZGVzLmxlbmd0aDtcblxuICAgIGlmIChyZW1vdmVkQ2hpbGROb2Rlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0UmVwbGFjZWRDaGlsZE5vZGUgPSBmaXJzdChyZW1vdmVkQ2hpbGROb2RlcyksXG4gICAgICAgICAgZmlyc3RJbmRleCA9IHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKGZpcnN0UmVwbGFjZWRDaGlsZE5vZGUpLFxuICAgICAgICAgIHN0YXJ0SW5kZXggPSBmaXJzdEluZGV4LCAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IHJlbW92ZWRDaGlsZE5vZGVzTGVuZ3RoLCAvLy9cbiAgICAgICAgICBhZGRlZENoaWxkTm9kZXMgPSBbXTtcblxuICAgIHJlbW92ZWRDaGlsZE5vZGVzID0gdGhpcy5zcGxpY2VDaGlsZE5vZGVzKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50LCBhZGRlZENoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIHJlbW92ZWRDaGlsZE5vZGVzO1xuICB9XG5cbiAgcmVwbGFjZUNoaWxkTm9kZShyZXBsYWNlZENoaWxkTm9kZSwgcmVwbGFjZW1lbnRDaGlsZE5vZGVzKSB7XG4gICAgY29uc3QgcmVwbGFjZWRDaGlsZE5vZGVzID0gW1xuICAgICAgcmVwbGFjZWRDaGlsZE5vZGVcbiAgICBdO1xuXG4gICAgdGhpcy5yZXBsYWNlQ2hpbGROb2RlcyhyZXBsYWNlZENoaWxkTm9kZXMsIHJlcGxhY2VtZW50Q2hpbGROb2Rlcyk7XG4gIH1cblxuICByZXBsYWNlQ2hpbGROb2RlcyhyZXBsYWNlZENoaWxkTm9kZXMsIHJlcGxhY2VtZW50Q2hpbGROb2Rlcykge1xuICAgIGNvbnN0IHJlcGxhY2VkQ2hpbGROb2Rlc0xlbmd0aCA9IHJlcGxhY2VkQ2hpbGROb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RSZXBsYWNlZENoaWxkTm9kZSA9IGZpcnN0KHJlcGxhY2VkQ2hpbGROb2RlcyksXG4gICAgICAgICAgZmlyc3RJbmRleCA9IHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKGZpcnN0UmVwbGFjZWRDaGlsZE5vZGUpLFxuICAgICAgICAgIHN0YXJ0SW5kZXggPSBmaXJzdEluZGV4LCAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IHJlcGxhY2VkQ2hpbGROb2Rlc0xlbmd0aDsgLy8vXG5cbiAgICB0aGlzLnNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIHJlcGxhY2VtZW50Q2hpbGROb2Rlcyk7XG4gIH1cblxuICBzcGxpY2VDaGlsZE5vZGVzKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50LCBhZGRlZENoaWxkTm9kZXMgPSBbXSkge1xuICAgIGNvbnN0IHJlbW92ZWRDaGlsZE5vZGVzID0gdGhpcy5jaGlsZE5vZGVzLnNwbGljZShzdGFydEluZGV4LCBkZWxldGVDb3VudCwgLi4uYWRkZWRDaGlsZE5vZGVzKTtcblxuICAgIHRoaXMucmVzZXRDaGlsZE5vZGVzUGFyZW50Tm9kZShyZW1vdmVkQ2hpbGROb2Rlcyk7XG5cbiAgICB0aGlzLnNldENoaWxkTm9kZXNQYXJlbnROb2RlKGFkZGVkQ2hpbGROb2Rlcyk7XG5cbiAgICByZXR1cm4gcmVtb3ZlZENoaWxkTm9kZXM7XG4gIH1cblxuICBzbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5jaGlsZE5vZGVzLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcblxuICAgIHJldHVybiBjaGlsZE5vZGVzO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGggPSBJbmZpbml0eSwgZXhhY3RseSA9IGZhbHNlKSB7XG4gICAgbGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgICBpZiAodGhpcy5ydWxlTmFtZSA9PT0gbm9uVGVybWluYWxOb2RlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlT3BhY2l0eSA9IG5vblRlcm1pbmFsTm9kZS5nZXRPcGFjaXR5KCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3BhY2l0eSA9PT0gbm9uVGVybWluYWxOb2RlT3BhY2l0eSkge1xuICAgICAgICAgIGNvbnN0IHByZWNlZGVuY2UgPSB0aGlzLmdldFByZWNlZGVuY2UoKSxcbiAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGVQcmVjZWRlbmNlID0gbm9uVGVybWluYWxOb2RlLmdldFByZWNlZGVuY2UoKTtcblxuICAgICAgICAgIGlmIChwcmVjZWRlbmNlID09PSBub25UZXJtaW5hbE5vZGVQcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICBkZXB0aC0tO1xuXG4gICAgICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgICAgICBtYXRjaGVzID0gbWF0Y2godGhpcy5jaGlsZE5vZGVzLCBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzLCAoY2hpbGROb2RlLCBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlID0gY2hpbGROb2RlLm1hdGNoKG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSwgZGVwdGgsIGV4YWN0bHkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZU1hdGNoZXNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICByZXdyaXRlKCkge1xuICAgIGNvbnN0IHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSA9IG51bGw7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuTm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBjbG9uZSguLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBDbGFzcyA9IHRoaXMuY29uc3RydWN0b3IsXG4gICAgICAgICAgcGFyZW50Tm9kZSA9IG51bGwsXG4gICAgICAgICAgcnVsZU5hbWUgPSB0aGlzLnJ1bGVOYW1lLFxuICAgICAgICAgIGNoaWxkTm9kZXMgPSBjbG9uZUNoaWxkTm9kZXModGhpcy5jaGlsZE5vZGVzKSxcbiAgICAgICAgICBvcGFjaXR5ID0gdGhpcy5vcGFjaXR5LFxuICAgICAgICAgIHByZWNlZGVuY2UgPSB0aGlzLnByZWNlZGVuY2UsXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gbmV3IENsYXNzKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzLCBvcGFjaXR5LCBwcmVjZWRlbmNlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgbm9uVGVybWluYWxOb2RlLnNldENoaWxkTm9kZXNQYXJlbnROb2RlKCk7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KENsYXNzLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKG9wYWNpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3BhY2l0eSA9IGNoaWxkTm9kZXM7IC8vL1xuXG4gICAgICBjaGlsZE5vZGVzID0gcnVsZU5hbWU7ICAvLy9cblxuICAgICAgcnVsZU5hbWUgPSBDbGFzczsgLy8vXG5cbiAgICAgIENsYXNzID0gTm9uVGVybWluYWxOb2RlOyAgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IG51bGwsXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gbmV3IENsYXNzKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzLCBvcGFjaXR5LCBwcmVjZWRlbmNlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgbm9uVGVybWluYWxOb2RlLnNldENoaWxkTm9kZXNQYXJlbnROb2RlKCk7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lQ2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gIGNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzLm1hcCgoY2hpbGROb2RlKSA9PiB7ICAvLy9cbiAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY2xvbmUoKTsgIC8vL1xuXG4gICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNoaWxkTm9kZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdldE5hbWUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBuYW1lID0gdGVybWluYWxOb2RlQ29udGVudDsgLy8vXG4gICAgXG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZSwgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KE5hbWVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlLCBvcGFjaXR5KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICBsZXQgcGFyc2VkO1xuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgcGFydFxuICAgICAgICBdO1xuXG4gIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMoaW5kZXgsIHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcnRzKHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgbGV0IHBhcnNlZDtcblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcGFyc2VkID0gcGFyc2VQYXJ0T2ZQYXJ0cyhpbmRleCwgcGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0T2ZQYXJ0cyhpbmRleCwgcGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICBsZXQgcGFyc2VkO1xuXG4gIGNvbnN0IHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGgpIHtcbiAgICBwYXJzZWQgPSAoY2FsbGJhY2sgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgIGNhbGxiYWNrKCkgOlxuICAgICAgICAgICAgICAgICB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpbmRleF0sXG4gICAgICAgICAgcGFydENhbGxBaGVhZCA9IChjYWxsQWhlYWQgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmlzQ2FsbEFoZWFkKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZTtcblxuICAgIGluZGV4Kys7XG5cbiAgICBwYXJzZWQgPSBwYXJ0Q2FsbEFoZWFkID9cbiAgICAgICAgICAgICAgIHBhcnNlUGFydFdpdGhDYWxsQWhlYWQocGFydCwgaW5kZXgsIHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIDpcbiAgICAgICAgICAgICAgICAgcGFyc2VQYXJ0V2l0aG91dENhbGxBaGVhZChwYXJ0LCBpbmRleCwgcGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBhcnRXaXRoQ2FsbEFoZWFkKHBhcnQsIGluZGV4LCBwYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgY2FsbEFoZWFkID0gKCkgPT4geyAvLy9cbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0T2ZQYXJ0cyhpbmRleCwgcGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9O1xuXG4gIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICBpZiAoIXBhcnNlZCkge1xuICAgIGNvbnN0IHN0YXJ0ID0gbm9kZXNMZW5ndGg7ICAvLy9cblxuICAgIG5vZGVzLnNwbGljZShzdGFydCk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBhcnRXaXRob3V0Q2FsbEFoZWFkKHBhcnQsIGluZGV4LCBwYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gIGlmIChwYXJzZWQpIHtcbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRPZlBhcnRzKGluZGV4LCBwYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcGFyc2VcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcnRzLCBwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIGdldFByZWNlZGVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlY2VkZW5jZTtcbiAgfVxuXG4gIHBhcnNlKGNoaWxkTm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IG5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydHModGhpcy5wYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGxldCBzdHJpbmc7XG5cbiAgICBjb25zdCBwYXJ0c1N0cmluZyA9IHRoaXMucGFydHMucmVkdWNlKChwYXJ0c1N0cmluZywgcGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nOyAvLy9cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHN0cmluZyA9IHBhcnRzU3RyaW5nOyAvLy9cblxuICAgIGlmICh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByZWNlZGVuY2UgPSAodGhpcy5wcmVjZWRlbmNlID09PSBJbmZpbml0eSkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BBQ0VfQ0hBUkFDVEVSIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVjZWRlbmNlO1xuXG4gICAgICBzdHJpbmcgPSBgJHtzdHJpbmd9ICgke3ByZWNlZGVuY2V9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydHMoQ2xhc3MsIHBhcnRzKSB7XG4gICAgaWYgKHBhcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnRzID0gQ2xhc3M7ICAvLy9cblxuICAgICAgQ2xhc3MgPSBEZWZpbml0aW9uOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9uID0gbmV3IENsYXNzKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21QYXJ0c0FuZFByZWNlZGVuY2UoQ2xhc3MsIHBhcnRzLCBwcmVjZWRlbmNlKSB7XG4gICAgaWYgKHByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJlY2VkZW5jZSA9IHBhcnRzOyAvLy9cblxuICAgICAgcGFydHMgPSBDbGFzczsgIC8vL1xuXG4gICAgICBDbGFzcyA9IERlZmluaXRpb247IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBuZXcgQ2xhc3MocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0IHtcbiAgaXNDYWxsQWhlYWQoKSB7XG4gICAgY29uc3QgY2FsbEFoZWFkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY2FsbEFoZWFkO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxQYXJ0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNUZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3QgdGVybWluYWxQYXJ0ID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VQYXJ0KCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG5cbiAgaXNTdGFydE9mQ29udGVudFBhcnQoKSB7XG4gICAgY29uc3Qgc3RhcnRPZkNvbnRlbnRQYXJ0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gc3RhcnRPZkNvbnRlbnRQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsaW5lSW5kZXhGcm9tVG9rZW5JbmRleEFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvdG9rZW5zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21UZXJtaW5hbE5vZGVBbmRUb2tlbnModGVybWluYWxOb2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCB0eXBlID0gdGVybWluYWxOb2RlLmdldFR5cGUoKSxcbiAgICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuSW5kZXggPSB0ZXJtaW5hbE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2VucyksXG4gICAgICAgICAgbGluZUluZGV4ID0gbGluZUluZGV4RnJvbVRva2VuSW5kZXhBbmRUb2tlbnMoc2lnbmlmaWNhbnRUb2tlbkluZGV4LCB0b2tlbnMpO1xuXG4gICAgbGV0IGxpbmVJbmRleGVzO1xuXG4gICAgaWYgKGxpbmVJbmRleCA9PT0gbnVsbCkge1xuICAgICAgbGluZUluZGV4ZXMgPSBFTVBUWV9TVFJJTkc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVJbmRleGVzID0gYCBbJHtsaW5lSW5kZXh9XWA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyaW5nID0gYFwiJHtjb250ZW50fVwiWyR7dHlwZX1dJHtsaW5lSW5kZXhlc31gLFxuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihUZXJtaW5hbE5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvdGVybWluYWxOb2RlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHBhcmVudE5vZGUsIHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRQYXJlbnROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGU7XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0U2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKSB7XG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzU3RhcnRPZkNvbnRlbnROb2RlKCkge1xuICAgIGNvbnN0IHN0YXJ0T2ZDb250ZW50Tm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHN0YXJ0T2ZDb250ZW50Tm9kZTtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxuXG4gIGlzRXBzaWxvbk5vZGUoKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBlcHNpbG9uTm9kZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGdldFR5cGUoKSB7IHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpOyB9XG5cbiAgZ2V0Q29udGVudCgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCk7IH1cblxuICBnZXRQcmVjZWRlbmNlKCkgIHtcbiAgICBjb25zdCBwcmVjZWRlbmNlID0gbnVsbDtcblxuICAgIHJldHVybiBwcmVjZWRlbmNlO1xuICB9XG5cbiAgaXNMb3dlclByZWNlZGVuY2UocGFyZW50UnVsZU5hbWUsIHBhcmVudFByZWNlZGVuY2UpIHtcbiAgICBjb25zdCBsb3dlclByZWNlZGVuY2UgPSBmYWxzZTtcblxuICAgIHJldHVybiBsb3dlclByZWNlZGVuY2U7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuSW5kZXggPSB0aGlzLmdldFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpLFxuICAgICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gc2lnbmlmaWNhbnRUb2tlbkluZGV4OyAvLy9cblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdGhpcy5nZXRTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSxcbiAgICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gc2lnbmlmaWNhbnRUb2tlbkluZGV4OyAvLy9cblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4O1xuICB9XG5cbiAgZ2V0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucykge1xuICAgIGxldCBzaWduaWZpY2FudFRva2VuSW5kZXggPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgc2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YodGhpcy5zaWduaWZpY2FudFRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbkluZGV4O1xuICB9XG5cbiAgZ2V0U2lnbmlmaWNhbnRUb2tlbnMoc2lnbmlmaWNhbnRUb2tlbnMgPSBbXSkge1xuICAgIGlmICh0aGlzLnNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIHNpZ25pZmljYW50VG9rZW5zLnB1c2godGhpcy5zaWduaWZpY2FudFRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbnM7XG4gIH1cblxuICBnZXRBbmNlc3Rvck5vZGVzKCkge1xuICAgIGNvbnN0IGFuY2VzdG9yTm9kZXMgPSBbXTtcblxuICAgIGxldCBwYXJlbnROb2RlID0gdGhpcy5wYXJlbnROb2RlO1xuXG4gICAgd2hpbGUgKHBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGFuY2VzdG9yTm9kZSA9IHBhcmVudE5vZGU7ICAvLy9cblxuICAgICAgYW5jZXN0b3JOb2Rlcy5wdXNoKGFuY2VzdG9yTm9kZSk7XG5cbiAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLmdldFBhcmVudE5vZGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYW5jZXN0b3JOb2RlcztcbiAgfVxuXG4gIGlzSW5jbHVkZWRJbihub2RlKSB7XG4gICAgbGV0IGluY2x1ZGVkSW4gPSBmYWxzZTtcblxuICAgIGlmICh0aGlzID09PSBub2RlKSB7XG4gICAgICBpbmNsdWRlZEluID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgIGluY2x1ZGVkSW4gPSBjaGlsZE5vZGVzLnNvbWUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluY2x1ZGVkSW5DaGlsZE5vZGUgPSB0aGlzLmlzSW5jbHVkZWRJbihjaGlsZE5vZGUpO1xuXG4gICAgICAgICAgaWYgKGluY2x1ZGVkSW5DaGlsZE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluY2x1ZGVkSW47XG4gIH1cblxuICBtYXRjaChub2RlLCBkZXB0aCA9IEluZmluaXR5LCBleGFjdGx5ID0gZmFsc2UpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gdGVybWluYWxOb2RlLmdldFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgICAgbWF0Y2hlcyA9IGV4YWN0bHkgP1xuICAgICAgICAgICAgICAgICAgKHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9PT0gc2lnbmlmaWNhbnRUb2tlbikgOlxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaWduaWZpY2FudFRva2VuLm1hdGNoKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBjbG9uZSguLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBDbGFzcyA9IHRoaXMuY29uc3RydWN0b3IsXG4gICAgICAgICAgcGFyZW50Tm9kZSA9IG51bGwsXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IHRoaXMuc2lnbmlmaWNhbnRUb2tlbixcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocGFyZW50Tm9kZSwgc2lnbmlmaWNhbnRUb2tlbiwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmIChDbGFzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBDbGFzcyA9IFRlcm1pbmFsTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IG51bGwsXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGwsXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gbmV3IENsYXNzKHBhcmVudE5vZGUsIHNpZ25pZmljYW50VG9rZW4sIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKENsYXNzLCBzaWduaWZpY2FudFRva2VuLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduaWZpY2FudFRva2VuID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IFRlcm1pbmFsTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IG51bGwsXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gbmV3IENsYXNzKHBhcmVudE5vZGUsIHNpZ25pZmljYW50VG9rZW4sIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgICBcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlblR5cGU7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IHNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpO1xuXG4gICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlblR5cGUgPT09IHRoaXMuc2lnbmlmaWNhbnRUb2tlblR5cGUpIHtcbiAgICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGlmIChjYWxsQWhlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IGBbJHt0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlfV1gO1xuICAgIFxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChzaWduaWZpY2FudFRva2VuVHlwZSk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5jb25zdCB7IG5hbWVUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gbmFtZVR5cGUsICAvLy9cbiAgICAgICAgICBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LmZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBuYW1lRGVmaW5pdGlvbiA9IG5ldyBOYW1lRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gbmFtZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IG5hbWVSdWxlTmFtZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IHBhcnRSdWxlTmFtZSA9IFwicGFydFwiO1xuZXhwb3J0IGNvbnN0IHJ1bGVSdWxlTmFtZSA9IFwicnVsZVwiO1xuZXhwb3J0IGNvbnN0IGVycm9yUnVsZU5hbWUgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgZXBzaWxvblJ1bGVOYW1lID0gXCJlcHNpbG9uXCI7XG5leHBvcnQgY29uc3QgcnVsZU5hbWVSdWxlTmFtZSA9IFwicnVsZU5hbWVcIjtcbmV4cG9ydCBjb25zdCBkb2N1bWVudFJ1bGVOYW1lID0gXCJkb2N1bWVudFwiO1xuZXhwb3J0IGNvbnN0IHdpbGRjYXJkUnVsZU5hbWUgPSBcIndpbGRjYXJkXCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lUnVsZU5hbWUgPSBcImVuZE9mTGluZVwiO1xuZXhwb3J0IGNvbnN0IGRlZmluaXRpb25SdWxlTmFtZSA9IFwiZGVmaW5pdGlvblwiO1xuZXhwb3J0IGNvbnN0IHByZWNlZGVuY2VSdWxlTmFtZSA9IFwicHJlY2VkZW5jZVwiO1xuZXhwb3J0IGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFwicXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IHBhcnRDaG9pY2VSdWxlTmFtZSA9IFwicGFydENob2ljZVwiO1xuZXhwb3J0IGNvbnN0IGRlZmluaXRpb25zUnVsZU5hbWUgPSBcImRlZmluaXRpb25zXCI7XG5leHBvcnQgY29uc3QgdGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcInRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IGNob2ljZU9mUGFydHNSdWxlTmFtZSA9IFwiY2hvaWNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgPSBcInRlcm1pbmFsU3ltYm9sXCI7XG5leHBvcnQgY29uc3Qgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcIm5vblRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJzZXF1ZW5jZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBvcGFjaXR5TW9kaWZpZXJSdWxlTmFtZSA9IFwib3BhY2l0eU1vZGlmaWVyXCI7XG5leHBvcnQgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lID0gXCJub1doaXRlc3BhY2VcIjtcbmV4cG9ydCBjb25zdCBDYWxsQWhlYWRNb2RpZmllclJ1bGVOYW1lID0gXCJjYWxsQWhlYWRNb2RpZmllclwiO1xuZXhwb3J0IGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUgPSBcInJlZ3VsYXJFeHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3Qgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgPSBcIm9wdGlvbmFsUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IHN0YXJ0T2ZDb250ZW50UGFydFJ1bGVOYW1lID0gXCJzdGFydE9mQ29udGVudFwiO1xuZXhwb3J0IGNvbnN0IG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFwib25lT3JNb3JlUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBcInplcm9Pck1vcmVRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSA9IFwic2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBOYW1lQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvbmFtZVwiO1xuaW1wb3J0IE5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL25hbWVcIjtcblxuaW1wb3J0IHsgbmFtZVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBOYW1lRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBuYW1lUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBOYW1lQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWVSdWxlID0gbmV3IE5hbWVCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIG5hbWVSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNhbGxBaGVhZCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jYWxsQWhlYWQgPSBjYWxsQWhlYWQ7XG4gIH1cbiAgXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGlzQ2FsbEFoZWFkKCkge1xuICAgIHJldHVybiB0aGlzLmNhbGxBaGVhZDtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNUZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3QgdGVybWluYWxQYXJ0ID0gZmFsc2U7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzUnVsZU5hbWVQYXJ0KCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUnVsZU5hbWVQYXJ0VHlwZSA9IFwicnVsZU5hbWVQYXJ0XCI7XG5leHBvcnQgY29uc3QgT3B0aW9uYWxQYXJ0UGFydFR5cGUgPSBcIm9wdGlvbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IENob2ljZU9mUGFydHNQYXJ0VHlwZSA9IFwiY2hvaWNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgPSBcIm9uZU9yTW9yZVBhcnRzXCI7XG5leHBvcnQgY29uc3QgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUgPSBcInplcm9Pck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlID0gXCJzZXF1ZW5jZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBSdWxlTmFtZVBhcnRUeXBlLFxuICBPcHRpb25hbFBhcnRQYXJ0VHlwZSxcbiAgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlLFxuICBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlLFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IE9wdGlvbmFsUGFydFBhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5cbmNvbnN0IHsgcXVlc3Rpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3B0aW9uYWxQYXJ0UGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNhbGxBaGVhZCwgcGFydCkge1xuICAgIHN1cGVyKHR5cGUsIGNhbGxBaGVhZCk7XG5cbiAgICB0aGlzLnBhcnQgPSBwYXJ0O1xuICB9XG5cbiAgZ2V0UGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgICBwYXJzZWQgPSBwYXJzZU9wdGlvbmFsUGFydCh0aGlzLnBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBub2Rlc0xlbmd0aDsgIC8vL1xuXG4gICAgICBub2Rlcy5zcGxpY2Uoc3RhcnQpO1xuXG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7cXVlc3Rpb25NYXJrfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21QYXJ0KHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gT3B0aW9uYWxQYXJ0UGFydFR5cGUsXG4gICAgICAgICAgY2FsbEFoZWFkID0gZmFsc2UsXG4gICAgICAgICAgb3B0aW9uYWxQYXJ0UGFydCA9IG5ldyBPcHRpb25hbFBhcnRQYXJ0KHR5cGUsIGNhbGxBaGVhZCwgcGFydCk7XG5cbiAgICByZXR1cm4gb3B0aW9uYWxQYXJ0UGFydDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcHRpb25hbFBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxBaGVhZCA9PT0gbnVsbCkge1xuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuXG5cblxuXG4gICAgcGFyc2VkID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cblxuXG5cblxuXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cblxuY29uc3QgeyBhc3RlcmlzayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFplcm9Pck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjYWxsQWhlYWQsIHBhcnQpIHtcbiAgICBzdXBlcih0eXBlLCBjYWxsQWhlYWQpO1xuXG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgcGFyc2VkID0gcGFyc2VaZXJvT3JNb3JlUGFydHNQYXJ0KHRoaXMucGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IG5vZGVzTGVuZ3RoOyAgLy8vXG5cbiAgICAgIG5vZGVzLnNwbGljZShzdGFydCk7XG5cbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydFN0cmluZyA9IHRoaXMucGFydC5hc1N0cmluZygpLFxuICAgICAgICAgIHN0cmluZyA9IGAke3BhcnRTdHJpbmd9JHthc3Rlcmlza31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydChwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlLFxuICAgICAgICAgIGNhbGxBaGVhZCA9IGZhbHNlLFxuICAgICAgICAgIHplcm9Pck1vcmVQYXJ0c1BhcnQgPSBuZXcgWmVyb09yTW9yZVBhcnRzUGFydCh0eXBlLCBjYWxsQWhlYWQsIHBhcnQpO1xuXG4gICAgcmV0dXJuIHplcm9Pck1vcmVQYXJ0c1BhcnQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWmVyb09yTW9yZVBhcnRzUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbEFoZWFkID09PSBudWxsKSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcGFyc2VaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG4gICAgfVxuXG4gICAgcGFyc2VkID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssICgpID0+IHtcbiAgICAgICAgbGV0IHBhcnNlZDtcblxuICAgICAgICBwYXJzZWQgPSBwYXJzZVplcm9Pck1vcmVQYXJ0c1BhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcbmltcG9ydCB7IHBhcnNlWmVyb09yTW9yZVBhcnRzUGFydCB9IGZyb20gXCIuL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5jb25zdCB7IHBsdXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbmVPck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjYWxsQWhlYWQsIHBhcnQpIHtcbiAgICBzdXBlcih0eXBlLCBjYWxsQWhlYWQpO1xuXG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgcGFyc2VkID0gcGFyc2VPbmVPck1vcmVQYXJ0c1BhcnQodGhpcy5wYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gbm9kZXNMZW5ndGg7ICAvLy9cblxuICAgICAgbm9kZXMuc3BsaWNlKHN0YXJ0KTtcblxuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cGFydFN0cmluZ30ke3BsdXN9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnQocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlLFxuICAgICAgICAgIGNhbGxBaGVhZCA9IGZhbHNlLFxuICAgICAgICAgIG9uZU9yTW9yZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQodHlwZSwgY2FsbEFoZWFkLCBwYXJ0KTtcblxuICAgIHJldHVybiBvbmVPck1vcmVQYXJ0c1BhcnQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT25lT3JNb3JlUGFydHNQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsQWhlYWQgPT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwYXJzZVplcm9Pck1vcmVQYXJ0c1BhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcbiAgICB9XG5cblxuICB9IGVsc2Uge1xuXG5cblxuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCAoKSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgcGFyc2VkID0gcGFyc2VaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH0pO1xuXG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVSdWxlTmFtZSwgcXVhbnRpZmllclJ1bGVOYW1lLCBjYWxsQWhlYWRNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZUNob2ljZU5vZGUobm9kZSkge1xuICBsZXQgbm9kZU5vQ2hvaWNlTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICBub2RlTm9DaG9pY2VOb2RlID0gKHRlcm1pbmFsTm9kZUNvbnRlbnQgPT09IFwifFwiKTtcbiAgfVxuXG4gIHJldHVybiBub2RlTm9DaG9pY2VOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlUnVsZU5hbWVOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVSdWxlTmFtZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgbm9kZVJ1bGVOYW1lTm9kZSA9IChub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gcnVsZU5hbWVSdWxlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZVJ1bGVOYW1lTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVF1YW50aWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVRdWFudGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBxdWFudGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZVF1YW50aWZpZXJOb2RlID0gcnVsZU5hbWVRdWFudGlmaWVyUnVsZU5hbWU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBub2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVDYWxsQWhlYWRNb2RpZmllck5vZGUobm9kZSkge1xuICBsZXQgbm9kZUNhbGxBaGVhZE1vZGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lQ2FsbEFoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gY2FsbEFoZWFkTW9kaWZpZXJSdWxlTmFtZSk7XG5cbiAgICBub2RlQ2FsbEFoZWFkTW9kaWZpZXJOb2RlID0gcnVsZU5hbWVDYWxsQWhlYWRNb2RpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZUNhbGxBaGVhZE1vZGlmaWVyTm9kZTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBxdWFudGlmaWVyTm9kZTsgLy8vXG5cbiAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2Rlcyk7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGU7ICAvLy9cblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gIHJldHVybiBydWxlTmFtZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IGlzTm9kZVF1YW50aWZpZXJOb2RlLCBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYm5mXCI7XG5pbXBvcnQgeyBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGxhc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChjYWxsQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG5cbmZ1bmN0aW9uIHBhcnRGcm9tTm9kZXMobm9kZXMpIHtcbiAgbGV0IHBhcnQ7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgIGNhbGxBaGVhZCA9IGZhbHNlO1xuXG4gICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGNhbGxBaGVhZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcyk7XG5cbiAgICBpZiAobGFzdE5vZGVRdWFudGlmaWVyTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgICAgcXVhbnRpZmllck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZShxdWFudGlmaWVyTm9kZSksXG4gICAgICAgICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKTtcblxuICAgICAgcGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydDsgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnNoaWZ0KCk7XG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydDtcbn1cblxuZnVuY3Rpb24gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKSB7XG4gIGNvbnN0IGxhc3ROb2RlID0gbGFzdChub2RlcyksXG4gICAgICAgIGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc05vZGVRdWFudGlmaWVyTm9kZShsYXN0Tm9kZSk7XG5cbiAgcmV0dXJuIGxhc3ROb2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpIHtcbiAgbGV0IGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcblxuICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgY2FzZSBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gT3B0aW9uYWxQYXJ0UGFydC5mcm9tUGFydChwYXJ0KTtcblxuICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gb3B0aW9uYWxQYXJ0UGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2Ugb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IG9uZU9yTW9yZVBhcnRzUGFydCA9IE9uZU9yTW9yZVBhcnRzUGFydC5mcm9tUGFydChwYXJ0KTtcblxuICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gb25lT3JNb3JlUGFydHNQYXJ0OyAvLy9cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IHplcm9Pck1vcmVQYXJ0c1BhcnQgPSBaZXJvT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0OyAgLy8vXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFJ1bGVOYW1lUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgZWxsaXBzaXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVBhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjYWxsQUFoZWFkLCBydWxlTmFtZSkge1xuICAgIHN1cGVyKHR5cGUsIGNhbGxBQWhlYWQpO1xuXG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICB9XG4gIFxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGlzUnVsZU5hbWVQYXJ0KCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgZmluZFJ1bGUoc3RhdGUpIHtcbiAgICBjb25zdCBydWxlTWFwID0gc3RhdGUuZ2V0UnVsZU1hcCgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3RoaXMucnVsZU5hbWVdIHx8IG51bGw7ICAvLy9cblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmZpbmRSdWxlKHN0YXRlKTtcblxuICAgIHBhcnNlZCA9IChydWxlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICBydWxlLnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkgOlxuICAgICAgICAgICAgICAgICBmYWxzZTtcblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBjYWxsQUFoZWFkID0gdGhpcy5pc0NhbGxBaGVhZCgpLFxuICAgICAgICAgIGNhbGxBQWhlYWRTdHJpbmcgPSBjYWxsQUFoZWFkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIHN0cmluZyA9IGAke3RoaXMucnVsZU5hbWV9JHtjYWxsQUFoZWFkU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZShydWxlTmFtZSkge1xuICAgIGNvbnN0IHR5cGUgPSBSdWxlTmFtZVBhcnRUeXBlLFxuICAgICAgICAgIGNhbGxBQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBydWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHR5cGUsIGNhbGxBQWhlYWQsIHJ1bGVOYW1lKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNhbGxBaGVhZEFuZFJ1bGVOYW1lKGNhbGxBQWhlYWQsIHJ1bGVOYW1lKSB7XG4gICAgY29uc3QgdHlwZSA9IFJ1bGVOYW1lUGFydFR5cGUsXG4gICAgICAgICAgcnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydCh0eXBlLCBjYWxsQUFoZWFkLCBydWxlTmFtZSk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcXVhbnRpZmllclJ1bGVOYW1lLCB0ZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZSh0ZXJtaW5hbFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydCA9IFplcm9Pck1vcmVQYXJ0c1BhcnQuZnJvbVBhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBxdWFudGlmaWVyUnVsZU5hbWUsIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gWmVyb09yTW9yZVBhcnRzUGFydC5mcm9tUGFydChxdWFudGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcbiAgICBcbiAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvcGFydFwiO1xuaW1wb3J0IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3BhcnRSdWxlL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0Qk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IHBhcnRSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBQYXJ0Qk5GTm9kZSwgIC8vL1xuICAgICAgICAgIHBhcnRSdWxlID0gbmV3IFBhcnRCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHBhcnRSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBydWxlTmFtZSkge1xuICBsZXQgbm9kZSA9IG51bGw7XG5cbiAgY2hpbGROb2Rlcy5zb21lKChjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJ1bGVOYW1lKTtcblxuICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUpIHtcbiAgICAgICAgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBydWxlTmFtZSkge1xuICBjb25zdCBub2RlcyA9IGNoaWxkTm9kZXMuZmlsdGVyKChjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJ1bGVOYW1lKTtcblxuICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbm9kZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IG9wYWNpdHlNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuaW1wb3J0IHsgbm9kZUZyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL25vZGVcIjtcblxuY29uc3QgeyBmaXJzdCwgc2Vjb25kTGFzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlKFJ1bGUpIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgb3BhY2l0eSA9IHRoaXMuZ2V0T3BhY2l0eSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gdGhpcy5nZW5lcmF0ZURlZmluaXRpb25zKCksXG4gICAgICAgICAgcnVsZSA9IFJ1bGUuZnJvbU5hbWVPcGFjaXR5RGVmaW5pdGlvbnNBbmROb25UZXJtaW5hbE5vZGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIGdldE9wYWNpdHkoKSB7XG4gICAgbGV0IG9wYWNpdHkgPSBudWxsO1xuXG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG9wYWNpdHlNb2RpZmllckJORk5vZGUgPSBub2RlRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBvcGFjaXR5TW9kaWZpZXJSdWxlTmFtZSk7XG5cbiAgICBpZiAob3BhY2l0eU1vZGlmaWVyQk5GTm9kZSAhPT0gbnVsbCkge1xuICAgICAgb3BhY2l0eSA9IG9wYWNpdHlNb2RpZmllckJORk5vZGUuZ2V0T3BhY2l0eSgpO1xuICAgIH1cblxuICAgIHJldHVybiBvcGFjaXR5O1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBuYW1lQk5GTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVCTkZOb2RlLmdldE5hbWUoKTtcbiAgICBcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuICBcbiAgZ2VuZXJhdGVEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgc2Vjb25kTGFzdENoaWxkTm9kZSA9IHNlY29uZExhc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgZGVmaW5pdGlvbnNCTkZOb2RlID0gc2Vjb25kTGFzdENoaWxkTm9kZSwgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uc0JORk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9ucygpO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KFJ1bGVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbFBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZW50KSB7XG4gICAgc3VwZXIoKTtcbiAgICBcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGVudCA9IHNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpO1xuXG4gICAgICBpZiAoY29udGVudCA9PT0gdGhpcy5jb250ZW50KSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBpZiAoY2FsbEFoZWFkICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cbiAgXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQucmVwbGFjZSgvXFxcXC8sIFwiXFxcXFxcXFxcIiksXG4gICAgICAgICAgc3RyaW5nID0gYFwiJHtjb250ZW50fVwiYDtcbiAgICBcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsU3ltYm9sUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBuYW1lUnVsZU5hbWUsIGRlZmluaXRpb25zUnVsZU5hbWUsIG9wYWNpdHlNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHNlcGFyYXRvciwgdGVybWluYXRvciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBzZXBhcmF0b3IsXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHRlcm1pbmF0b3IsXG4gICAgICAgICAgb3BhY2l0eU1vZGlmaWVyUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShvcGFjaXR5TW9kaWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgbmFtZVJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUobmFtZVJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbE9wYWNpdHlSdWxlTmFtZVBhcnRQYXJ0ID0gT3B0aW9uYWxQYXJ0UGFydC5mcm9tUGFydChvcGFjaXR5TW9kaWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGRlZmluaXRpb25zUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShkZWZpbml0aW9uc1J1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsT3BhY2l0eVJ1bGVOYW1lUGFydFBhcnQsXG4gICAgICAgICAgICBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBydWxlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9ydWxlXCI7XG5pbXBvcnQgUnVsZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcnVsZVwiO1xuXG5pbXBvcnQgeyBydWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBydWxlRGVmaW5pdGlvbiA9IFJ1bGVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbmFtZSA9IHJ1bGVSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFJ1bGVCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgcnVsZVJ1bGUgPSBuZXcgUnVsZUJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcnVsZVJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvckJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShFcnJvckJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5jb25zdCB7IHdpbGRjYXJkIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGlmIChjYWxsQWhlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHdpbGRjYXJkOyAgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKTtcblxuICAgIHJldHVybiB3aWxkY2FyZFBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBXaWxkY2FyZFBhcnQuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgZXJyb3JEZWZpbml0aW9uID0gbmV3IEVycm9yRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZXJyb3JEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IEVycm9yQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvZXJyb3JcIjtcbmltcG9ydCBFcnJvckRlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vZXJyb3JcIjtcblxuaW1wb3J0IHsgZXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBvcGFxdWUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvckJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGVycm9yRGVmaW5pdGlvbiA9IEVycm9yRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBlcnJvclJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBvcGFjaXR5ID0gb3BhcXVlLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGVycm9yRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gRXJyb3JCTkZOb2RlLCAvLy9cbiAgICAgICAgICBlcnJvclJ1bGUgPSBuZXcgRXJyb3JCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGVycm9yUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuY2xhc3MgRXBzaWxvbk5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBlcHNpbG9uLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oRXBzaWxvbk5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlUGFyc2VUcmVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRXBzaWxvbk5vZGVQYXJzZVRyZWU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFcHNpbG9uTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2Vwc2lsb25Ob2RlXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBlcHNpbG9uOyAgLy8vXG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlzRXBzaWxvbk5vZGUoKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSBFcHNpbG9uTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVwc2lsb25Ob2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGgpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVFcHNpbG9uTm9kZSA9IHRlcm1pbmFsTm9kZS5pc0Vwc2lsb25Ob2RlKCk7XG5cbiAgICAgIGlmICh0ZXJtaW5hbE5vZGVFcHNpbG9uTm9kZSkge1xuICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tTm90aGluZyhFcHNpbG9uTm9kZSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBFcHNpbG9uQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9lcHNpbG9uXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25QYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgZXBzaWxvbkJORk5vZGUgPSBFcHNpbG9uQk5GTm9kZS5mcm9tTm90aGluZygpO1xuXG4gICAgcGFyc2VkID0gKGVwc2lsb25CTkZOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZXBzaWxvbkJORk5vZGUpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGlmIChjYWxsQWhlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IGVwc2lsb247IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBlcHNpbG9uUGFydCA9IG5ldyBFcHNpbG9uUGFydCgpO1xuXG4gICAgcmV0dXJuIGVwc2lsb25QYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFcHNpbG9uUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9lcHNpbG9uXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGNhbGxBaGVhZCkge1xuICAgIGNvbnN0IGVwc2lsb25QYXJ0ID0gRXBzaWxvblBhcnQuZnJvbU5vdGhpbmcoKTtcblxuICAgIHJldHVybiBlcHNpbG9uUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KEVwc2lsb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7XG4gICAgY29uc3QgdGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbFN5bWJvbERlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgRXBzaWxvbkJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL2Vwc2lsb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgZXBzaWxvblJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGVwc2lsb24sIC8vL1xuICAgICAgICAgIGVwc2lsb25UZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24uZnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgbmFtZSA9IGVwc2lsb25SdWxlTmFtZSwgLy8vXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBlcHNpbG9uVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBFcHNpbG9uQk5GTm9kZSwgLy8vXG4gICAgICAgICAgZXBzaWxvblJ1bGUgPSBuZXcgRXBzaWxvbkJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gZXBzaWxvblJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHJ1bGVSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcbmltcG9ydCB7IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVJ1bGVzKFJ1bGUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcnVsZUJORk5vZGVzID0gbm9kZXNGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lKGNoaWxkTm9kZXMsIHJ1bGVSdWxlTmFtZSksXG4gICAgICAgICAgcnVsZXMgPSBydWxlQk5GTm9kZXMubWFwKChydWxlQk5GTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVCTkZOb2RlLmdlbmVyYXRlUnVsZShSdWxlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoRG9jdW1lbnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnRDaG9pY2Uge1xuICBjb25zdHJ1Y3RvcihwYXJ0LCBwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlO1xuICB9XG5cbiAgZ2V0UGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgbGV0IHN0cmluZztcblxuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKTtcblxuICAgIHN0cmluZyA9IHBhcnRTdHJpbmc7ICAvLy9cblxuICAgIGlmICh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByZWNlZGVuY2UgPSAodGhpcy5wcmVjZWRlbmNlID09PSBJbmZpbml0eSkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BBQ0VfQ0hBUkFDVEVSIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVjZWRlbmNlO1xuXG4gICAgICBzdHJpbmcgPSBgJHtzdHJpbmd9ICgke3ByZWNlZGVuY2V9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydChwYXJ0KSB7XG4gICAgY29uc3QgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgcGFydENob2ljZSA9IG5ldyBQYXJ0Q2hvaWNlKHBhcnQsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHBhcnRDaG9pY2U7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnRBbmRQcmVjZWRlbmNlKHBhcnQsIHByZWNlZGVuY2UpIHtcbiAgICBjb25zdCBwYXJ0Q2hvaWNlID0gbmV3IFBhcnRDaG9pY2UocGFydCwgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gcGFydENob2ljZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHBhcnNlUGFydCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcGFyc2VcIjtcbmltcG9ydCB7IENob2ljZU9mUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjYWxsQWhlYWQsIHBhcnRDaG9pY2VzKSB7XG4gICAgc3VwZXIodHlwZSwgY2FsbEFoZWFkKTtcbiAgICBcbiAgICB0aGlzLnBhcnRDaG9pY2VzID0gcGFydENob2ljZXM7XG4gIH1cbiAgXG4gIGdldFBhcnRDaG9pY2VzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRDaG9pY2VzO1xuICB9XG5cbiAgZ2V0UGFydHMoKSB7XG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRDaG9pY2VzLm1hcCgocGFydENob2ljZSkgPT4ge1xuICAgICAgY29uc3QgcGFydCA9IHBhcnRDaG9pY2UuZ2V0UGFydCgpO1xuXG4gICAgICByZXR1cm4gcGFydDtcbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZFByZWNlZGVuY2UgPSBzdGF0ZS5nZXRTYXZlZFByZWNlZGVuY2UoKTtcblxuICAgIHBhcnNlZCA9IHRoaXMucGFydENob2ljZXMuc29tZSgocGFydENob2ljZSkgPT4ge1xuICAgICAgbGV0IHBhcnNlZDtcblxuICAgICAgY29uc3QgcGFydCA9IHBhcnRDaG9pY2UuZ2V0UGFydCgpLFxuICAgICAgICAgICAgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICAgIHByZWNlZGVuY2UgPSBwYXJ0Q2hvaWNlLmdldFByZWNlZGVuY2UoKSxcbiAgICAgICAgICAgIG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgICBpZiAocHJlY2VkZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZS5zZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpO1xuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayA9IChjYWxsQWhlYWQgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgICAgKCkgPT4geyAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBub2Rlc0xlbmd0aDsgIC8vL1xuXG4gICAgICAgIG5vZGVzLnNwbGljZShzdGFydCk7XG5cbiAgICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLnJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0Q2hvaWNlc1N0cmluZyA9IHRoaXMucGFydENob2ljZXMucmVkdWNlKChwYXJ0Q2hvaWNlc1N0cmluZywgcGFydENob2ljZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydENob2ljZVN0cmluZyA9IHBhcnRDaG9pY2UuYXNTdHJpbmcoKTtcbiAgICBcbiAgICAgICAgICAgIGlmIChwYXJ0Q2hvaWNlc1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0Q2hvaWNlc1N0cmluZyA9IHBhcnRDaG9pY2VTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0Q2hvaWNlc1N0cmluZyA9IGAke3BhcnRDaG9pY2VzU3RyaW5nfSB8ICR7cGFydENob2ljZVN0cmluZ31gO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnRDaG9pY2VzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydENob2ljZXNTdHJpbmd9IClgO1xuICAgIFxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnRDaG9pY2VzKHBhcnRDaG9pY2VzKSB7XG4gICAgY29uc3QgdHlwZSA9IENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgICBjYWxsQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydCh0eXBlLCBjYWxsQWhlYWQsIHBhcnRDaG9pY2VzKTtcblxuICAgIHJldHVybiBjaG9pY2VPZlBhcnRzUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFBhcnRDaG9pY2UgZnJvbSBcIi4uL3BhcnRDaG9pY2VcIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHJ1bGVSdWxlTmFtZSwgZXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBydWxlUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShlcnJvclJ1bGVOYW1lKSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0Q2hvaWNlID0gUGFydENob2ljZS5mcm9tUGFydChydWxlUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBlcnJvclJ1bGVOYW1lUGFydENob2ljZSA9IFBhcnRDaG9pY2UuZnJvbVBhcnQoZXJyb3JSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRDaG9pY2VzID0gW1xuICAgICAgICAgICAgcnVsZVJ1bGVOYW1lUGFydENob2ljZSxcbiAgICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0Q2hvaWNlXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQgPSBDaG9pY2VPZlBhcnRzUGFydC5mcm9tUGFydENob2ljZXMocGFydENob2ljZXMpLFxuICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0ID0gT25lT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVDaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnRzUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uID0gbmV3IERvY3VtZW50RGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZG9jdW1lbnREZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgRG9jdW1lbnRCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9kb2N1bWVudFwiO1xuaW1wb3J0IERvY3VtZW50RGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9kb2N1bWVudFwiO1xuXG5pbXBvcnQgeyBkb2N1bWVudFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudEJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGRvY3VtZW50RGVmaW5pdGlvbiA9IERvY3VtZW50RGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBkb2N1bWVudFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IERvY3VtZW50Qk5GTm9kZSwgIC8vL1xuICAgICAgICAgIGRvY3VtZW50UnVsZSA9IG5ldyBEb2N1bWVudEJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gZG9jdW1lbnRSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQsIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tQ2FsbEFoZWFkQW5kUnVsZU5hbWUoY2FsbEFoZWFkLCBydWxlTmFtZSk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoUnVsZU5hbWVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5pbXBvcnQgUnVsZU5hbWVCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBydWxlTmFtZVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZUJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWVEZWZpbml0aW9uID0gTmFtZURlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBuYW1lID0gcnVsZU5hbWVSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbmFtZURlZmluaXRpb24gIC8vL1xuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gUnVsZU5hbWVCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgcnVsZU5hbWVSdWxlID0gbmV3IFJ1bGVOYW1lQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRQYXJ0ID0gV2lsZGNhcmRQYXJ0LmZyb21Ob3RoaW5nKCk7XG5cbiAgICByZXR1cm4gd2lsZGNhcmRQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoV2lsZGNhcmRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgV2lsZGNhcmRCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi93aWxkY2FyZFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyB3aWxkY2FyZFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHdpbGRjYXJkIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gd2lsZGNhcmQsIC8vL1xuICAgICAgICAgIHdpbGRjYXJkVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gVGVybWluYWxTeW1ib2xEZWZpbml0aW9uLmZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSB3aWxkY2FyZFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gV2lsZGNhcmRCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgd2lsZGNhcmRSdWxlID0gbmV3IFdpbGRjYXJkQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiB3aWxkY2FyZFJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IGVuZE9mTGluZSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBlbmRPZkxpbmUsIC8vL1xuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihFbmRPZkxpbmVOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IGVuZE9mTGluZU5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZU5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFbmRPZkxpbmVOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi8uLi9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vZGUgZXh0ZW5kcyBUZXJtaW5hbE5vZGUge1xuICBnZXRDb250ZW50KGZhaXRoZnVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZmFpdGhmdWwgP1xuICAgICAgICAgICAgICAgICAgICAgIHN1cGVyLmdldENvbnRlbnQoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVuZE9mTGluZU5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikgeyByZXR1cm4gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKEVuZE9mTGluZU5vZGUsIHNpZ25pZmljYW50VG9rZW4pOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcblxuY29uc3QgeyBlbmRPZkxpbmUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBlbmRPZkxpbmVOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5FbmRPZkxpbmVUb2tlbiA9IHNpZ25pZmljYW50VG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuKSB7XG4gICAgICAgIGVuZE9mTGluZU5vZGUgPSBFbmRPZkxpbmVOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9IChlbmRPZkxpbmVOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZW5kT2ZMaW5lTm9kZSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gZW5kT2ZMaW5lOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lUGFydCA9IG5ldyBFbmRPZkxpbmVQYXJ0KCk7XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRW5kT2ZMaW5lUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChjYWxsQWhlYWQpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVQYXJ0ID0gRW5kT2ZMaW5lUGFydC5mcm9tTm90aGluZygpO1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShFbmRPZkxpbmVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgRW5kT2ZMaW5lQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGVuZE9mTGluZSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBlbmRPZkxpbmUsXG4gICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gVGVybWluYWxTeW1ib2xEZWZpbml0aW9uLmZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSBlbmRPZkxpbmVSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IEVuZE9mTGluZUJORk5vZGUsIC8vL1xuICAgICAgICAgIGVuZE9mTGluZVJ1bGUgPSBuZXcgRW5kT2ZMaW5lQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBlbmRPZkxpbmVSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQYXJ0Q2hvaWNlIGZyb20gXCIuLi8uLi9wYXJ0Q2hvaWNlXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ub2RlXCI7XG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUsIHByZWNlZGVuY2VSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydENob2ljZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnRDaG9pY2UoY2FsbEFoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnRCTkZOb2RlID0gbm9kZUZyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgcGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBwcmVjZWRlbmNlQk5GTm9kZSA9IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lKGNoaWxkTm9kZXMsIHByZWNlZGVuY2VSdWxlTmFtZSk7XG5cbiAgICBjYWxsQWhlYWQgPSBmYWxzZTsgIC8vL1xuXG4gICAgY29uc3QgcGFydCA9IHBhcnRCTkZOb2RlLmdlbmVyYXRlUGFydChjYWxsQWhlYWQpLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSAocHJlY2VkZW5jZUJORk5vZGUgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkZW5jZUJORk5vZGUuZ2V0UHJlY2VkZW5jZSgpLFxuICAgICAgICAgIGRlZmluaXRpb24gPSBQYXJ0Q2hvaWNlLmZyb21QYXJ0QW5kUHJlY2VkZW5jZShwYXJ0LCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoUGFydENob2ljZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSwgcHJlY2VkZW5jZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0Q2hvaWNlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBwcmVjZWRlbmNlUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShwcmVjZWRlbmNlUnVsZU5hbWUpLFxuICAgICAgICAgIG9wdGlvbmFsUHJlY2VkZW5jZVJ1bGVOYW1lUGFydFBhcnQgPSBPcHRpb25hbFBhcnRQYXJ0LmZyb21QYXJ0KHByZWNlZGVuY2VSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsUHJlY2VkZW5jZVJ1bGVOYW1lUGFydFBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHBhcnRDaG9pY2VEZWZpbml0aW9uID0gbmV3IFBhcnRDaG9pY2VEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBwYXJ0Q2hvaWNlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnRDaG9pY2VCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9wYXJ0Q2hvaWNlXCI7XG5pbXBvcnQgUGFydENob2ljZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcGFydENob2ljZVwiO1xuXG5pbXBvcnQgeyBwYXJ0Q2hvaWNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnRDaG9pY2VCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gcGFydENob2ljZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgcGFydENob2ljZURlZmluaXRpb24gPSBQYXJ0Q2hvaWNlRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcGFydENob2ljZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFBhcnRDaG9pY2VCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvblJ1bGUgPSBuZXcgUGFydENob2ljZUJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvblJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICBjb25zdCBydWxlTmFtZVJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocnVsZU5hbWUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnRCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IHF1YW50aWZpZXJSdWxlTmFtZSwgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllckJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBxdWFudGlmaWVyUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZSh6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gUGFydEJORk5vZGUsICAvLy9cbiAgICAgICAgICBxdWFudGlmaWVyUnVsZSA9IG5ldyBRdWFudGlmaWVyQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBxdWFudGlmaWVyUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUsIHByZWNlZGVuY2VSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcbmltcG9ydCB7IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lLCBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL25vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbkJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZURlZmluaXRpb24oKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnRCTkZOb2RlcyA9IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHByZWNlZGVuY2VCTkZOb2RlID0gbm9kZUZyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgcHJlY2VkZW5jZVJ1bGVOYW1lKSxcbiAgICAgICAgICBjYWxsQWhlYWQgPSBmYWxzZSwgIC8vL1xuICAgICAgICAgIHBhcnRzID0gcGFydEJORk5vZGVzLm1hcCgocGFydEJORk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0Qk5GTm9kZS5nZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKTtcbiAgXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gKHByZWNlZGVuY2VCTkZOb2RlID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2VCTkZOb2RlLmdldFByZWNlZGVuY2UoKSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gRGVmaW5pdGlvbi5mcm9tUGFydHNBbmRQcmVjZWRlbmNlKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoRGVmaW5pdGlvbkJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSwgcHJlY2VkZW5jZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBwcmVjZWRlbmNlUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShwcmVjZWRlbmNlUnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0ID0gT25lT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIG9wdGlvbmFsUHJlY2VkZW5jZVJ1bGVOYW1lUGFydFBhcnQgPSBPcHRpb25hbFBhcnRQYXJ0LmZyb21QYXJ0KHByZWNlZGVuY2VSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlUnVsZU5hbWVQYXJ0c1BhcnQsXG4gICAgICAgICAgICBvcHRpb25hbFByZWNlZGVuY2VSdWxlTmFtZVBhcnRQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbkRlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IERlZmluaXRpb25EZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL2RlZmluaXRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IGRlZmluaXRpb25SdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uID0gRGVmaW5pdGlvbkRlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25SdWxlID0gbmV3IERlZmluaXRpb25CTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb25SdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmNvbnN0IHsgc2Vjb25kIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJlY2VkZW5jZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXRQcmVjZWRlbmNlKCkge1xuICAgIGxldCBwcmVjZWRlbmNlID0gSW5maW5pdHk7XG5cbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gICAgaWYgKGNoaWxkTm9kZXNMZW5ndGggPT09IDMpIHtcbiAgICAgIGNvbnN0IHNlY29uZENoaWxkTm9kZSA9IHNlY29uZChjaGlsZE5vZGVzKSxcbiAgICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IHNlY29uZENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICAgIHByZWNlZGVuY2UgPSBOdW1iZXIoY29udGVudCk7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBwcmVjZWRlbmNlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoUHJlY2VkZW5jZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcywgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBudW1iZXJUeXBlIH0gPSB0eXBlcyxcbiAgICAgIHsgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZWNlZGVuY2VEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IG51bWJlclR5cGUsICAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBudW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQuZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBvcHRpb25hbE51bWJlclNpZ25pZmljYW50VG9rZW5UeXBlUGFydFBhcnQgPSBPcHRpb25hbFBhcnRQYXJ0LmZyb21QYXJ0KG51bWJlclNpZ25pZmljYW50VG9rZW5UeXBlUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsTnVtYmVyU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0UGFydCxcbiAgICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgcHJlY2VkZW5jZURlZmluaXRpb24gPSBuZXcgUHJlY2VkZW5jZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHByZWNlZGVuY2VEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgUHJlY2VkZW5jZUJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL3ByZWNlZGVuY2VcIjtcbmltcG9ydCBQcmVjZWRlbmNlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9wcmVjZWRlbmNlXCI7XG5cbmltcG9ydCB7IHByZWNlZGVuY2VSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJlY2VkZW5jZUJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBwcmVjZWRlbmNlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBwcmVjZWRlbmNlRGVmaW5pdGlvbiA9IFByZWNlZGVuY2VEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBwcmVjZWRlbmNlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gUHJlY2VkZW5jZUJORk5vZGUsICAvLy9cbiAgICAgICAgICBwcmVjZWRlbmNlUnVsZSA9IG5ldyBQcmVjZWRlbmNlQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBwcmVjZWRlbmNlUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGRlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcbmltcG9ydCB7IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBkZWZpbml0aW9uQk5GTm9kZXMgPSBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgZGVmaW5pdGlvblJ1bGVOYW1lKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25CTkZOb2Rlcy5tYXAoKGRlZmluaXRpb25CTkZOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJORk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2RlLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoRGVmaW5pdGlvbnNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlLCBvcGFjaXR5KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3BhcnNlXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNhbGxBaGVhZCwgcGFydHMpIHtcbiAgICBzdXBlcih0eXBlLCBjYWxsQWhlYWQpO1xuXG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG5cbiAgZ2V0UGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydHM7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgIGNhbGxiYWNrID0gKGNhbGxBaGVhZCA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgICgpID0+IHsgIC8vL1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHRoaXMucGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBub2Rlc0xlbmd0aDsgIC8vL1xuXG4gICAgICBub2Rlcy5zcGxpY2Uoc3RhcnQpO1xuXG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuXG4gICAgICAgICAgICBpZiAocGFydHNTdHJpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBgJHtwYXJ0c1N0cmluZ30gJHtwYXJ0U3RyaW5nfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgICB9LCBudWxsKSxcbiAgICAgICAgICBzdHJpbmcgPSBgKCAke3BhcnRzU3RyaW5nfSApYDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnRzKHBhcnRzKSB7XG4gICAgY29uc3QgdHlwZSA9IFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlLFxuICAgICAgICAgIGNhbGxBaGVhZCA9IGZhbHNlLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydCh0eXBlLCBjYWxsQWhlYWQsIHBhcnRzKTtcblxuICAgIHJldHVybiBzZXF1ZW5jZU9mUGFydHNQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgZGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHZlcnRpY2FsQmFyIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBsZXQgcGFydHM7XG5cbiAgICBjb25zdCBjb250ZW50ID0gdmVydGljYWxCYXIsICAvLy9cbiAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShkZWZpbml0aW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpO1xuXG4gICAgcGFydHMgPSBbXG4gICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnRcbiAgICBdO1xuXG4gICAgY29uc3Qgc2VxdWVuY2VPZlBhcnRzUGFydCA9IFNlcXVlbmNlT2ZQYXJ0c1BhcnQuZnJvbVBhcnRzKHBhcnRzKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IFplcm9Pck1vcmVQYXJ0c1BhcnQuZnJvbVBhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCk7XG5cbiAgICBwYXJ0cyA9IFtcbiAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnQsXG4gICAgICB6ZXJvT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydFxuICAgIF07XG5cbiAgICBjb25zdCBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9uc0RlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbnNEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uc0RlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uc0JORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL2RlZmluaXRpb25zXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL2RlZmluaXRpb25zXCI7XG5cbmltcG9ydCB7IGRlZmluaXRpb25zUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNEZWZpbml0aW9uID0gRGVmaW5pdGlvbnNEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbmFtZSA9IGRlZmluaXRpb25zUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvbnNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBEZWZpbml0aW9uc0JORk5vZGUsIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25zUnVsZSA9IG5ldyBEZWZpbml0aW9uc0JORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbnNSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGNhbGxBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChjYWxsQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShUZXJtaW5hbFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGVwc2lsb25SdWxlTmFtZSxcbiAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZSxcbiAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSxcbiAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsXG4gICAgICAgICBzdGFydE9mQ29udGVudFBhcnRSdWxlTmFtZSxcbiAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydEJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSB0ZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBlcHNpbG9uUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShlcHNpbG9uUnVsZU5hbWUpLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZSh3aWxkY2FyZFJ1bGVOYW1lKSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKGVuZE9mTGluZVJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUodGVybWluYWxTeW1ib2xSdWxlTmFtZSksXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUobm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUocmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSksXG4gICAgICAgICAgc3RhcnRPZkNvbnRlbnRQYXJ0UnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShzdGFydE9mQ29udGVudFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUpLFxuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgd2lsZGNhcmRSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBlcHNpbG9uUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHN0YXJ0T2ZDb250ZW50UGFydFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gVGVybWluYWxQYXJ0Qk5GTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGUgPSBuZXcgVGVybWluYWxQYXJ0Qk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnRSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRDaG9pY2VSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcbmltcG9ydCB7IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChjYWxsQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcGFydENob2ljZUJORk5vZGVzID0gbm9kZXNGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lKGNoaWxkTm9kZXMsIHBhcnRDaG9pY2VSdWxlTmFtZSk7XG5cbiAgICBjYWxsQWhlYWQgPSBmYWxzZTsgIC8vL1xuXG4gICAgY29uc3QgcGFydENob2ljZXMgPSBwYXJ0Q2hvaWNlQk5GTm9kZXMubWFwKChwYXJ0Q2hvaWNlQk5GTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydENob2ljZSA9IHBhcnRDaG9pY2VCTkZOb2RlLmdlbmVyYXRlUGFydENob2ljZShjYWxsQWhlYWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydENob2ljZTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUGFydCA9IENob2ljZU9mUGFydHNQYXJ0LmZyb21QYXJ0Q2hvaWNlcyhwYXJ0Q2hvaWNlcyksXG4gICAgICAgICAgcGFydCA9IGNob2ljZU9mUGFydHNQYXJ0OyAvLy9cblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoQ2hvaWNlT2ZQYXJ0c0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRDaG9pY2VSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB2ZXJ0aWNhbEJhcixcbiAgICAgICAgb3BlbkJyYWNrZXQsXG4gICAgICAgIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBsZXQgcGFydHM7XG5cbiAgICBjb25zdCB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHZlcnRpY2FsQmFyLCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRDaG9pY2VSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHBhcnRDaG9pY2VSdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KTtcblxuICAgIHBhcnRzID0gW1xuICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICBwYXJ0Q2hvaWNlUnVsZU5hbWVQYXJ0XG4gICAgXTtcblxuICAgIGNvbnN0IHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0LmZyb21QYXJ0cyhwYXJ0cyksXG4gICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IE9uZU9yTW9yZVBhcnRzUGFydC5mcm9tUGFydChzZXF1ZW5jZU9mUGFydHNQYXJ0KTtcblxuICAgIHBhcnRzID0gW1xuICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICBwYXJ0Q2hvaWNlUnVsZU5hbWVQYXJ0LFxuICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCxcbiAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgIF07XG5cbiAgICBjb25zdCBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiA9IG5ldyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IGNob2ljZU9mUGFydHNSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gPSBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IENob2ljZU9mUGFydHNCTkZOb2RlLCAvLy9cbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZSA9IG5ldyBDaG9pY2VPZlBhcnRzQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBjaG9pY2VPZlBhcnRzUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBFU0NBUEVEX0JBQ0tTTEFTSCwgRVNDQVBFRF9ET1VCTEVfUVVPVEUgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cIigoPzpcXFxcLnxbXlwiXFxcXF0pKilcIiQvO1xuXG4gIGdlbmVyYXRlUGFydChjYWxsQWhlYWQpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsU3ltYm9sUGFydDtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgbGV0IGNvbnRlbnQ7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIGNvbnRlbnQgPSBzZWNvbmRNYXRjaDsgIC8vL1xuXG4gICAgY29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KTtcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoVGVybWluYWxTeW1ib2xCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cblxuZnVuY3Rpb24gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpIHtcbiAgY29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcXFxcL2csIEVTQ0FQRURfQkFDS1NMQVNIKVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csIEVTQ0FQRURfRE9VQkxFX1FVT1RFKTtcblxuICByZXR1cm4gY29udGVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tU2lnbmlmaWNhbnRUb2tlblR5cGUoc2lnbmlmaWNhbnRUb2tlblR5cGUpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQuZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgdGVybWluYWxTeW1ib2xSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBzdHJpbmdMaXRlcmFsVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZSwgIC8vL1xuICAgICAgICAgIHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24uZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gdGVybWluYWxTeW1ib2xSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gVGVybWluYWxTeW1ib2xCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlID0gbmV3IFRlcm1pbmFsU3ltYm9sQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbFN5bWJvbFJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgY2FsbEFoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi9ydWxlTmFtZXNcIjtcbmltcG9ydCB7IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9ub2RlXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGNhbGxBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKTtcblxuICAgIGlmICghY2FsbEFoZWFkKSB7XG4gICAgICBjb25zdCBjYWxsQWhlYWRNb2RpZmllckJORk5vZGUgPSBub2RlRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBjYWxsQWhlYWRNb2RpZmllclJ1bGVOYW1lKTtcblxuICAgICAgY2FsbEFoZWFkID0gKGNhbGxBaGVhZE1vZGlmaWVyQk5GTm9kZSAhPT0gbnVsbCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBub2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVSdWxlTmFtZSwgY2FsbEFoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHJ1bGVOYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIGNhbGxBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShjYWxsQWhlYWRNb2RpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbENhbGxBaGVhZFJ1bGVOYW1lUGFydFBhcnQgPSBPcHRpb25hbFBhcnRQYXJ0LmZyb21QYXJ0KGNhbGxBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxDYWxsQWhlYWRSdWxlTmFtZVBhcnRQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSwgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLCBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0Qk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShjaG9pY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUoc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgcnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSA9IG5ldyBOb25UZXJtaW5hbFBhcnRCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydFJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcbmltcG9ydCB7IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGNhbGxBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBwYXJ0Qk5GTm9kZXMgPSBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgcGFydFJ1bGVOYW1lKTtcblxuICAgIGNhbGxBaGVhZCA9IGZhbHNlOyAgLy8vXG5cbiAgICBjb25zdCBwYXJ0cyA9IHBhcnRCTkZOb2Rlcy5tYXAoKHBhcnRCTkZOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydEJORk5vZGUuZ2VuZXJhdGVQYXJ0KGNhbGxBaGVhZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0LmZyb21QYXJ0cyhwYXJ0cyksXG4gICAgICAgICAgcGFydCA9IHNlcXVlbmNlT2ZQYXJ0c1BhcnQ7IC8vL1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShTZXF1ZW5jZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBvcGVuQnJhY2tldCwgY2xvc2VCcmFja2V0IH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvbmVPck1vcmVQYXJ0UnVsZU5hbWVQYXJ0c1BhcnQgPSBPbmVPck1vcmVQYXJ0c1BhcnQuZnJvbVBhcnQocGFydFJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvbmVPck1vcmVQYXJ0UnVsZU5hbWVQYXJ0c1BhcnQsXG4gICAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gPSBuZXcgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gc2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gPSBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlLCAvLy9cbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c0JORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gc2VxdWVuY2VPZlBhcnRzUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5jb25zdCB7IHNlY29uZCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wYWNpdHlNb2RpZmllckJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXRPcGFjaXR5KCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBzZWNvbmRDaGlsZE5vZGUgPSBzZWNvbmQoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gc2Vjb25kQ2hpbGROb2RlLCAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBvcGFjaXR5ID0gdGVybWluYWxOb2RlQ29udGVudDsgIC8vL1xuXG4gICAgcmV0dXJuIG9wYWNpdHk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZSwgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KE9wYWNpdHlNb2RpZmllckJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGUsIG9wYWNpdHkpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBub1doaXRlc3BhY2UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gbm9XaGl0ZXNwYWNlLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGgpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVOb1doaXRlc3BhY2VOb2RlID0gdGVybWluYWxOb2RlLmlzTm9XaGl0ZXNwYWNlTm9kZSgpO1xuXG4gICAgICBpZiAodGVybWluYWxOb2RlTm9XaGl0ZXNwYWNlTm9kZSkge1xuICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tTm90aGluZyhOb1doaXRlc3BhY2VOb2RlKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmNvbnN0IHsgbm9XaGl0ZXNwYWNlIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGlzTm9XaGl0ZXNwYWNlUGFydCgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBub1doaXRlc3BhY2VOb2RlID0gbnVsbDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gc3RhdGUuaXNOZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4oKTtcblxuICAgIGlmICghbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKSB7XG4gICAgICBub1doaXRlc3BhY2VOb2RlID0gTm9XaGl0ZXNwYWNlTm9kZS5mcm9tTm90aGluZygpO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IChub1doaXRlc3BhY2VOb2RlICE9PSBudWxsKVxuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChub1doaXRlc3BhY2VOb2RlKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBpZiAoY2FsbEFoZWFkICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBub1doaXRlc3BhY2U7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0ID0gbmV3IE5vV2hpdGVzcGFjZVBhcnQoKTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFBhcnRDaG9pY2UgZnJvbSBcIi4uL3BhcnRDaG9pY2VcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBvcGFxdWUsIHNlbWlPcGFxdWUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcGFjaXR5TW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgbGV0IGNvbnRlbnQ7XG5cbiAgICBjb250ZW50ID0gb3BhcXVlOyAvLy9cblxuICAgIGNvbnN0IG9wYXF1ZVRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChjb250ZW50KTtcblxuICAgIGNvbnRlbnQgPSBzZW1pT3BhcXVlOyAvLy9cblxuICAgIGNvbnN0IHNlbWlPcGFxdWVUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY29udGVudCk7XG5cbiAgICBjb25zdCBvcGFxdWVUZXJtaW5hbFN5bWJvbFBhcnRDaG9pY2UgPSBQYXJ0Q2hvaWNlLmZyb21QYXJ0KG9wYXF1ZVRlcm1pbmFsU3ltYm9sUGFydCksXG4gICAgICAgICAgc2VtaU9wYXF1ZVRlcm1pbmFsU3ltYm9sUGFydENob2ljZSA9IFBhcnRDaG9pY2UuZnJvbVBhcnQoc2VtaU9wYXF1ZVRlcm1pbmFsU3ltYm9sUGFydCksXG4gICAgICAgICAgcGFydENob2ljZXMgPSBbXG4gICAgICAgICAgICBvcGFxdWVUZXJtaW5hbFN5bWJvbFBhcnRDaG9pY2UsXG4gICAgICAgICAgICBzZW1pT3BhcXVlVGVybWluYWxTeW1ib2xQYXJ0Q2hvaWNlXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaG9pY2VPZk9wYXF1ZVRlcm1pbmFsU3ltYm9sQW5kU2VtaU9wYXF1ZVRlcm1pbmFsU3ltYm9sUGFydHNQYXJ0ID0gQ2hvaWNlT2ZQYXJ0c1BhcnQuZnJvbVBhcnRDaG9pY2VzKHBhcnRDaG9pY2VzKSxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0ID0gTm9XaGl0ZXNwYWNlUGFydC5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCxcbiAgICAgICAgICAgIGNob2ljZU9mT3BhcXVlVGVybWluYWxTeW1ib2xBbmRTZW1pT3BhcXVlVGVybWluYWxTeW1ib2xQYXJ0c1BhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIG9wYWNpdHlNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IE9wYWNpdHlNb2RpZmllclJ1bGVEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBvcGFjaXR5TW9kaWZpZXJSdWxlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IE9wYWNpdHlNb2RpZmllckJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL29wYWNpdHlNb2RpZmllclwiO1xuaW1wb3J0IE9wYWNpdHlNb2RpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL29wYWNpdHlNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgb3BhY2l0eU1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wYWNpdHlNb2RpZmllckJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBvcGFjaXR5TW9kaWZpZXJSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgb3BhY2l0eU1vZGlmaWVyUnVsZURlZmluaXRpb24gPSBPcGFjaXR5TW9kaWZpZXJSdWxlRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3BhY2l0eU1vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IE9wYWNpdHlNb2RpZmllckJORk5vZGUsIC8vL1xuICAgICAgICAgIG9wYWNpdHlNb2RpZmllclJ1bGUgPSBuZXcgT3BhY2l0eU1vZGlmaWVyQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBvcGFjaXR5TW9kaWZpZXJSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChjYWxsQWhlYWQpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0ID0gTm9XaGl0ZXNwYWNlUGFydC5mcm9tTm90aGluZygpO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IG5vV2hpdGVzcGFjZSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gbm9XaGl0ZXNwYWNlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvbm9XaGl0ZXNwYWNlUGFydFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL25vV2hpdGVzcGFjZVBhcnRcIjtcblxuaW1wb3J0IHsgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0Qk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gPSBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSwgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlID0gbmV3IE5vV2hpdGVzcGFjZVBhcnRCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnRSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FsbEFoZWFkTW9kaWZpZXJCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRDYWxsQWhlYWQocnVsZU5hbWUsIGNoaWxkTm9kZSwgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRDYWxsQWhlYWQoQ2FsbEFoZWFkTW9kaWZpZXJCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlLCBvcGFjaXR5KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IGVsbGlwc2lzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FsbEFoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGVsbGlwc2lzLCAgLy8vXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IE5vV2hpdGVzcGFjZVBhcnQuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBjYWxsQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IENhbGxBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGNhbGxBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBDYWxsQWhlYWRNb2RpZmllckJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL2NhbGxBaGVhZE1vZGlmaWVyXCI7XG5pbXBvcnQgQ2FsbEFoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9jYWxsQWhlYWRNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgY2FsbEFoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FsbEFoZWFkTW9kaWZpZXJCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gY2FsbEFoZWFkTW9kaWZpZXJSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgY2FsbEFoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IENhbGxBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNhbGxBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IENhbGxBaGVhZE1vZGlmaWVyQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIGNhbGxBaGVhZE1vZGlmaWVyUnVsZSA9IG5ldyBDYWxsQWhlYWRNb2RpZmllckJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gY2FsbEFoZWFkTW9kaWZpZXJSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihyZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCksXG4gICAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGlmIChmaXJzdE1hdGNoID09PSBjb250ZW50KSB7XG4gICAgICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb25TdHJpbmcgPSB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uLnRvU3RyaW5nKCksXG5cdFx0ICAgICAgc3RyaW5nID0gcmVndWxhckV4cHJlc3Npb25TdHJpbmc7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUmVndWxhckV4cHJlc3Npb24ocmVndWxhckV4cHJlc3Npb24pIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblBhcnQgPSBuZXcgUmVndWxhckV4cHJlc3Npb25QYXJ0KHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvblBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcblxuY29uc3QgeyBmaXJzdCwgc2Vjb25kIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcLygoPzpcXFxcLnxbXlxcL10pKilcXC8kLztcblxuICBnZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb24gPSB0aGlzLmdldFJlZ3VsYXJFeHByZXNzaW9uKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXJ0ID0gUmVndWxhckV4cHJlc3Npb25QYXJ0LmZyb21SZWd1bGFyRXhwcmVzc2lvbihyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb25QYXJ0O1xuICB9XG5cbiAgZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBwYXR0ZXJuID0gc2Vjb25kTWF0Y2gsIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTsgIC8vL1xuXG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoUmVndWxhckV4cHJlc3Npb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcmVndWxhckV4cHJlc3Npb25UeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25CTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSwgIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uLmZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSwgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlID0gbmV3IFJlZ3VsYXJFeHByZXNzaW9uQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvblJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KFF1YW50aWZpZXJCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21TcGVjaWFsU3ltYm9sKHNwZWNpYWxTeW1ib2wpIHtcbiAgICBjb25zdCBjb250ZW50ID0gc3BlY2lhbFN5bWJvbCwgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBOb1doaXRlc3BhY2VQYXJ0LmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gcXVhbnRpZmllclJ1bGVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9xdWFudGlmaWVyXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHF1ZXN0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsUXVhbnRpZmllckJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIHNwZWNpYWxTeW1ib2wgPSBxdWVzdGlvbk1hcmssIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uLmZyb21TcGVjaWFsU3ltYm9sKHNwZWNpYWxTeW1ib2wpLFxuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSA9IG5ldyBPcHRpb25hbFF1YW50aWZpZXJCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUXVhbnRpZmllclJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IHN0YXJ0T2ZDb250ZW50IH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhcnRPZkNvbnRlbnROb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gc3RhcnRPZkNvbnRlbnQsIC8vL1xuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihTdGFydE9mQ29udGVudE5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3Qgc3RhcnRPZkNvbnRlbnROb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBzdGFydE9mQ29udGVudE5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBTdGFydE9mQ29udGVudE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9zdGFydE9mQ29udGVudE5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mQ29udGVudE5vZGUgZXh0ZW5kcyBUZXJtaW5hbE5vZGUge1xuICBnZXRUeXBlKCkge1xuICAgIGNvbnN0IHR5cGUgPSBudWxsOyAgLy8vXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaXNTdGFydE9mQ29udGVudE5vZGUoKSB7XG4gICAgY29uc3Qgc3RhcnRPZkNvbnRlbnROb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBzdGFydE9mQ29udGVudE5vZGU7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBzdGFydE9mQ29udGVudE5vZGVQYXJzZVRyZWUgPSBTdGFydE9mQ29udGVudE5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBzdGFydE9mQ29udGVudE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBtYXRjaChub2RlLCBkZXB0aCkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIHRlcm1pbmFsTm9kZVN0YXJ0T2ZDb250ZW50Tm9kZSA9IHRlcm1pbmFsTm9kZS5pc1N0YXJ0T2ZDb250ZW50Tm9kZSgpO1xuXG4gICAgICBpZiAodGVybWluYWxOb2RlU3RhcnRPZkNvbnRlbnROb2RlKSB7XG4gICAgICAgIG1hdGNoZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gVGVybWluYWxOb2RlLmZyb21Ob3RoaW5nKFN0YXJ0T2ZDb250ZW50Tm9kZSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBTdGFydE9mQ29udGVudE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvc3RhcnRPZkNvbnRlbnRcIjtcblxuY29uc3QgeyBzdGFydE9mQ29udGVudCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZDb250ZW50UGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGlzU3RhcnRPZkNvbnRlbnRQYXJ0KCkge1xuICAgIGNvbnN0IHN0YXJ0T2ZDb250ZW50UGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gc3RhcnRPZkNvbnRlbnRQYXJ0O1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBzdGFydE9mQ29udGVudE5vZGUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBhdFN0YXJ0T2ZDb250ZW50ID0gc3RhdGUuaXNBdFN0YXJ0T2ZDb250ZW50KCk7XG5cbiAgICBpZiAoYXRTdGFydE9mQ29udGVudCkge1xuICAgICAgc3RhcnRPZkNvbnRlbnROb2RlID0gU3RhcnRPZkNvbnRlbnROb2RlLmZyb21Ob3RoaW5nKCk7XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHN0YXJ0T2ZDb250ZW50Tm9kZSAhPT0gbnVsbClcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goc3RhcnRPZkNvbnRlbnROb2RlKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBpZiAoY2FsbEFoZWFkICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBzdGFydE9mQ29udGVudDsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0YXJ0T2ZDb250ZW50UGFydCA9IG5ldyBTdGFydE9mQ29udGVudFBhcnQoKTtcblxuICAgIHJldHVybiBzdGFydE9mQ29udGVudFBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFN0YXJ0T2ZDb250ZW50UGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9zdGFydE9mQ29udGVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mQ29udGVudFBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGNhbGxBaGVhZCkge1xuICAgIGNvbnN0IHN0YXJ0T2ZDb250ZW50UGFydCA9IFN0YXJ0T2ZDb250ZW50UGFydC5mcm9tTm90aGluZygpO1xuXG4gICAgcmV0dXJuIHN0YXJ0T2ZDb250ZW50UGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KFN0YXJ0T2ZDb250ZW50UGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBzdGFydE9mQ29udGVudCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZDb250ZW50UGFydERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBzdGFydE9mQ29udGVudCwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgc3RhcnRPZkNvbnRlbnRQYXJ0RGVmaW5pdGlvbiA9IG5ldyBTdGFydE9mQ29udGVudFBhcnREZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBzdGFydE9mQ29udGVudFBhcnREZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgU3RhcnRPZkNvbnRlbnRQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvc3RhcnRPZkNvbnRlbnRQYXJ0XCI7XG5pbXBvcnQgU3RhcnRPZkNvbnRlbnRQYXJ0RGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9zdGFydE9mQ29udGVudFBhcnRcIjtcblxuaW1wb3J0IHsgc3RhcnRPZkNvbnRlbnRQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZDb250ZW50UGFydEJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0YXJ0T2ZDb250ZW50UGFydERlZmluaXRpb24gPSBTdGFydE9mQ29udGVudFBhcnREZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbmFtZSA9IHN0YXJ0T2ZDb250ZW50UGFydFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzdGFydE9mQ29udGVudFBhcnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBTdGFydE9mQ29udGVudFBhcnRCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgc3RhcnRPZkNvbnRlbnRQYXJ0UnVsZSA9IG5ldyBTdGFydE9mQ29udGVudFBhcnRCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHN0YXJ0T2ZDb250ZW50UGFydFJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgUXVhbnRpZmllckJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL3F1YW50aWZpZXJcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHBsdXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbmVPck1vcmVRdWFudGlmaWVyQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgc3BlY2lhbFN5bWJvbCA9IHBsdXMsIC8vL1xuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbi5mcm9tU3BlY2lhbFN5bWJvbChzcGVjaWFsU3ltYm9sKSxcbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gUXVhbnRpZmllckJORk5vZGUsICAvLy9cbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZSA9IG5ldyBPbmVPck1vcmVRdWFudGlmaWVyQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBvbmVPck1vcmVRdWFudGlmaWVyUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGFzdGVyaXNrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVyb09yTW9yZVF1YW50aWZpZXJCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIHNwZWNpYWxTeW1ib2wgPSBhc3RlcmlzaywgLy8vXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbi5mcm9tU3BlY2lhbFN5bWJvbChzcGVjaWFsU3ltYm9sKSxcbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlLCAvLy9cbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgPSBuZXcgWmVyb09yTW9yZVF1YW50aWZpZXJCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5jb25zdCB7IGZpcnN0LCBzZWNvbmQgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFxbKFteXFxdXSspXSQvO1xuXG4gIGdlbmVyYXRlUGFydChjYWxsQWhlYWQpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IHRoaXMuZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQuZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQ7XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VuVHlwZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGU7XG5cblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdHlwZVR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZUJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gdHlwZVR5cGUsICAvLy9cbiAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uLmZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZUJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IGZpcnN0LCBwcnVuZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzQXNTdHJpbmcocnVsZXMsIG11bHRpTGluZSkge1xuICBjb25zdCBtYXhpbXVtUnVsZU5hbWVMZW5ndGggPSBydWxlcy5yZWR1Y2UoKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgcnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgICBvcGFjaXR5ID0gcnVsZS5nZXRPcGFjaXR5KCk7XG5cbiAgICAgICAgbGV0IHJ1bGVOYW1lTGVuZ3RoID0gcnVsZU5hbWUubGVuZ3RoO1xuXG4gICAgICAgIGlmIChvcGFjaXR5ICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgb3BhY2l0eUxlbmd0aCA9IG9wYWNpdHkubGVuZ3RoO1xuXG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGggKz0gb3BhY2l0eUxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1heGltdW1SdWxlTmFtZUxlbmd0aCA9IE1hdGgubWF4KG1heGltdW1SdWxlTmFtZUxlbmd0aCwgcnVsZU5hbWVMZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBtYXhpbXVtUnVsZU5hbWVMZW5ndGg7XG4gICAgICB9LCAwKSxcbiAgICAgIHJ1bGVzU3RyaW5nID0gcnVsZXMucmVkdWNlKChydWxlc1N0cmluZywgcnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlU3RyaW5nID0gcnVsZS5hc1N0cmluZyhtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIG11bHRpTGluZSk7XG5cbiAgICAgICAgcnVsZXNTdHJpbmcgKz0gcnVsZVN0cmluZztcblxuICAgICAgICByZXR1cm4gcnVsZXNTdHJpbmc7XG4gICAgICB9LCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL15cXG5cXG4vLCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBydWxlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgcnVsZU1hcCA9IHt9O1xuXG4gIHJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgcnVsZU1hcFtydWxlTmFtZV0gPSBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZU1hcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBmaXJzdFJ1bGUgPSBmaXJzdChydWxlcyksXG4gICAgICAgIHN0YXJ0UnVsZSA9IGZpcnN0UnVsZTsgIC8vL1xuXG4gIHJldHVybiBzdGFydFJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21TdGFydFJ1bGVBbmRSdWxlTWFwKHN0YXJ0UnVsZSwgcnVsZU1hcCkge1xuICBjb25zdCBydWxlcyA9IE9iamVjdC52YWx1ZXMocnVsZU1hcCksXG4gICAgICAgIHN0YXJ0UnVsZU5hbWUgPSBzdGFydFJ1bGUuZ2V0TmFtZSgpO1xuXG4gIHN0YXJ0UnVsZSA9IHBydW5lKHJ1bGVzLCAocnVsZSkgPT4geyAgLy8vXG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgIGlmIChydWxlTmFtZSAhPT0gc3RhcnRSdWxlTmFtZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBydWxlcy51bnNoaWZ0KHN0YXJ0UnVsZSk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZShydWxlcywgc3RhcnRSdWxlTmFtZSkge1xuICBsZXQgc3RhcnRSdWxlID0gcnVsZXMuZmluZCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBpZiAocnVsZU5hbWUgPT09IHN0YXJ0UnVsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSkgfHwgbnVsbDsgLy8vXG5cbiAgaWYgKHN0YXJ0UnVsZSA9PT0gbnVsbCkge1xuICAgIHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyk7XG4gIH1cblxuICByZXR1cm4gc3RhcnRSdWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJ1bGVzQXNTdHJpbmcsXG4gIHJ1bGVNYXBGcm9tUnVsZXMsXG4gIHN0YXJ0UnVsZUZyb21SdWxlcyxcbiAgcnVsZXNGcm9tU3RhcnRSdWxlQW5kUnVsZU1hcCxcbiAgc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgcGFyc2VyTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvcGFyc2VyXCI7XG5pbXBvcnQgTmFtZUJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL25hbWVcIjtcbmltcG9ydCBQYXJ0Qk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvcGFydFwiO1xuaW1wb3J0IFJ1bGVCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9ydWxlXCI7XG5pbXBvcnQgRXJyb3JCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9lcnJvclwiO1xuaW1wb3J0IEVwc2lsb25CTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9lcHNpbG9uXCI7XG5pbXBvcnQgRG9jdW1lbnRCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9kb2N1bWVudFwiO1xuaW1wb3J0IFJ1bGVOYW1lQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvcnVsZU5hbWVcIjtcbmltcG9ydCBXaWxkY2FyZEJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL3dpbGRjYXJkXCI7XG5pbXBvcnQgRW5kT2ZMaW5lQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgUGFydENob2ljZUJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL3BhcnRDaG9pY2VcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IERlZmluaXRpb25CTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUHJlY2VkZW50c0JORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL3ByZWNlZGVuY2VcIjtcbmltcG9ydCBEZWZpbml0aW9uc0JORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL2RlZmluaXRpb25zXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0Qk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvdGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c0JORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbEJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0Qk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvbm9uVGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgT3BhY2l0eU1vZGlmaWVyQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvb3BhY2l0eU1vZGlmaWVyXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydEJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL25vV2hpdGVzcGFjZVBhcnRcIjtcbmltcG9ydCBDYWxsQWhlYWRNb2RpZmllckJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL2NhbGxBaGVhZE1vZGlmaWVyXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25CTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IE9wdGlvbmFsUXVhbnRpZmllckJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL29wdGlvbmFsUXVhbnRpZmllclwiO1xuaW1wb3J0IFN0YXJ0T2ZDb250ZW50UGFydEJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL3N0YXJ0T2ZDb250ZW50UGFydFwiO1xuaW1wb3J0IE9uZU9yTW9yZVF1YW50aWZpZXJCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9vbmVPck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgWmVyb09yTW9yZVF1YW50aWZpZXJCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi96ZXJvT3JNb3JlUXVhbnRpZmllclwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgcnVsZU1hcEZyb21SdWxlcywgc3RhcnRSdWxlRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZQYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG5cdHJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpIHtcblx0ICBsZXQgcnVsZXM7XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy5wYXJzZSh0b2tlbnMpO1xuXG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gbm9kZS5gKTtcbiAgICB9XG5cbiAgICBydWxlcyA9IG5vZGUuZ2VuZXJhdGVSdWxlcyhSdWxlKTtcblxuICAgIGNvbnN0IHJ1bGVzTGVuZ3RoID0gcnVsZXMubGVuZ3RoO1xuXG4gICAgaWYgKHJ1bGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBydWxlcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lQk5GUnVsZSA9IE5hbWVCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFydEJORlJ1bGUgPSBQYXJ0Qk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHJ1bGVCTkZSdWxlID0gUnVsZUJORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBlcnJvckJORlJ1bGUgPSBFcnJvckJORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBlcHNpbG9uQk5GUnVsZSA9IEVwc2lsb25CTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZG9jdW1lbnRCTkZSdWxlID0gRG9jdW1lbnRCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcnVsZU5hbWVCTkZSdWxlID0gUnVsZU5hbWVCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgd2lsZGNhcmRCTkZSdWxlID0gV2lsZGNhcmRCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZW5kT2ZMaW5lQk5GUnVsZSA9IEVuZE9mTGluZUJORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJ0Q2hvaWNlQk5GUnVsZSA9IFBhcnRDaG9pY2VCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcXVhbnRpZmllckJORlJ1bGUgPSBRdWFudGlmaWVyQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGRlZmluaXRpb25CTkZSdWxlID0gRGVmaW5pdGlvbkJORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwcmVjZWRlbnRzQk5GUnVsZSA9IFByZWNlZGVudHNCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNCTkZSdWxlID0gRGVmaW5pdGlvbnNCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgdGVybWluYWxQYXJ0Qk5GUnVsZSA9IFRlcm1pbmFsUGFydEJORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzQk5GUnVsZSA9IENob2ljZU9mUGFydHNCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xCTkZSdWxlID0gVGVybWluYWxTeW1ib2xCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0Qk5GUnVsZSA9IE5vblRlcm1pbmFsUGFydEJORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNCTkZSdWxlID0gU2VxdWVuY2VPZlBhcnRzQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG9wYWNpdHlNb2RpZmllckJORlJ1bGUgPSBPcGFjaXR5TW9kaWZpZXJCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydEJORlJ1bGUgPSBOb1doaXRlc3BhY2VQYXJ0Qk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uQk5GUnVsZSA9IFJlZ3VsYXJFeHByZXNzaW9uQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGNhbGxBaGVhZE1vZGlmaWVyQk5GUnVsZSA9IENhbGxBaGVhZE1vZGlmaWVyQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllckJORlJ1bGUgPSBPcHRpb25hbFF1YW50aWZpZXJCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgc3RhcnRPZkNvbnRlbnRQYXJ0Qk5GUnVsZSA9IFN0YXJ0T2ZDb250ZW50UGFydEJORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyQk5GUnVsZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJCTkZSdWxlID0gWmVyb09yTW9yZVF1YW50aWZpZXJCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVCTkZSdWxlID0gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcnVsZXMgPSBbXG4gICAgICAgICAgICBkb2N1bWVudEJORlJ1bGUsXG4gICAgICAgICAgICBydWxlQk5GUnVsZSxcbiAgICAgICAgICAgIG5hbWVCTkZSdWxlLFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNCTkZSdWxlLFxuICAgICAgICAgICAgZGVmaW5pdGlvbkJORlJ1bGUsXG4gICAgICAgICAgICBwYXJ0Qk5GUnVsZSxcbiAgICAgICAgICAgIG5vblRlcm1pbmFsUGFydEJORlJ1bGUsXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRCTkZSdWxlLFxuICAgICAgICAgICAgc3RhcnRPZkNvbnRlbnRQYXJ0Qk5GUnVsZSxcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRCTkZSdWxlLFxuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzQk5GUnVsZSxcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNCTkZSdWxlLFxuICAgICAgICAgICAgcGFydENob2ljZUJORlJ1bGUsXG4gICAgICAgICAgICBydWxlTmFtZUJORlJ1bGUsXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZUJORlJ1bGUsXG4gICAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbkJORlJ1bGUsXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbEJORlJ1bGUsXG4gICAgICAgICAgICBwcmVjZWRlbnRzQk5GUnVsZSxcbiAgICAgICAgICAgIGVuZE9mTGluZUJORlJ1bGUsXG4gICAgICAgICAgICB3aWxkY2FyZEJORlJ1bGUsXG4gICAgICAgICAgICBlcHNpbG9uQk5GUnVsZSxcbiAgICAgICAgICAgIHF1YW50aWZpZXJCTkZSdWxlLFxuICAgICAgICAgICAgb3BhY2l0eU1vZGlmaWVyQk5GUnVsZSxcbiAgICAgICAgICAgIGNhbGxBaGVhZE1vZGlmaWVyQk5GUnVsZSxcbiAgICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllckJORlJ1bGUsXG4gICAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyQk5GUnVsZSxcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyQk5GUnVsZSxcbiAgICAgICAgICAgIGVycm9yQk5GUnVsZVxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgYm5mUGFyc2VyID0gbmV3IEJORlBhcnNlcihzdGFydFJ1bGUsIHJ1bGVNYXApO1xuICAgIFxuICAgIHJldHVybiBibmZQYXJzZXI7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihCTkZQYXJzZXIucHJvdG90eXBlLCBwYXJzZXJNaXhpbnMpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICBleHByZXNzaW9ucyAgOjo9ICBleHByZXNzaW9uKyA7XG5cbiAgICBleHByZXNzaW9uICAgOjo9ICA8U1RBUlRfT0ZfQ09OVEVOVD4gdGVybS4uLiBcIi5cIiA7XG4gICAgXG4gICAgdGVybSAgICAgICAgIDo6PSAgdGVybV8gdGVybX4qIDtcbiAgICBcbiAgICBvcGVyYXRvciAgICAgOjo9ICBcIitcIlxuICAgIFxuICAgICAgICAgICAgICAgICAgIHwgIFwiLVwiXG4gICAgXG4gICAgICAgICAgICAgICAgICAgfCAgXCIqXCJcbiAgICBcbiAgICAgICAgICAgICAgICAgICA7XG4gICAgXG4gICAgbnVtYmVyICAgICAgIDo6PSAgL1xcXFxkKy8gO1xuICAgIFxuICAgIHRlcm1fICAgICAgICA6Oj0gIFwiKFwiIHRlcm0gXCIpXCJcbiAgICBcbiAgICAgICAgICAgICAgICAgICB8ICBudW1iZXJcbiAgICBcbiAgICAgICAgICAgICAgICAgICA7XG4gICAgXG4gICAgdGVybX50ZXJtICAgIDo6PSAgb3BlcmF0b3IgdGVybSA7XG4gICAgXG4gICAgdGVybX4gICAgICAgIDo6PSAgdGVybX50ZXJtIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IEJORlBhcnNlciBmcm9tIFwiLi4vYm5mL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBydWxlTWFwRnJvbVJ1bGVzLCBzdGFydFJ1bGVGcm9tUnVsZXMsIHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5cbmNvbnN0IGJuZkxleGVyID0gQk5GTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGJuZlBhcnNlciA9IEJORlBhcnNlci5mcm9tTm90aGluZygpO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tQk5GKGJuZikge1xuICBjb25zdCB0b2tlbnMgPSBibmZMZXhlci50b2tlbnNGcm9tQk5GKGJuZiksXG4gICAgICAgIHJ1bGVzID0gYm5mUGFyc2VyLnJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBwYXJzZXIgPSBuZXcgQ2xhc3Moc3RhcnRSdWxlLCBydWxlTWFwKTtcblxuICByZXR1cm4gcGFyc2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZShDbGFzcywgcnVsZXMsIHN0YXJ0UnVsZU5hbWUpIHtcbiAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZShydWxlcywgc3RhcnRSdWxlTmFtZSksXG4gICAgICAgIHJ1bGVNYXAgPSBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcGFyc2VyID0gbmV3IENsYXNzKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG5cbiAgcmV0dXJuIHBhcnNlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBydWxlc0Zyb21CTkYsXG4gIHBhcnNlckZyb21SdWxlcyxcbiAgcGFyc2VyRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHBhcnNlck1peGlucyBmcm9tIFwiLi4vbWl4aW5zL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBydWxlc0Zyb21CTkYsIHBhcnNlckZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFyc2VyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1vblBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UnVsZSwgcnVsZU1hcCkge1xuICAgIHRoaXMuc3RhcnRSdWxlID0gc3RhcnRSdWxlO1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gIH1cblxuICBnZXRTdGFydFJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRSdWxlO1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XG4gICAgY29uc3QgeyBibmYgfSA9IENsYXNzLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgc3RhdGljIGZyb21CTkYoQ2xhc3MsIGJuZikge1xuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihDb21tb25QYXJzZXIucHJvdG90eXBlLCBwYXJzZXJNaXhpbnMpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IENvbW1vblBhcnNlciBmcm9tIFwiLi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKEJhc2ljUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQmFzaWNQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEJhc2ljUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVwc2lsb25QYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvZXBzaWxvblwiO1xuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgRW5kT2ZMaW5lUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBFcHNpbG9uUGFydCxcbiAgV2lsZGNhcmRQYXJ0LFxuICBFbmRPZkxpbmVQYXJ0LFxuICBUZXJtaW5hbFN5bWJvbFBhcnQsXG4gIFJlZ3VsYXJFeHByZXNzaW9uUGFydCxcbiAgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LFxuICBSdWxlTmFtZVBhcnQsXG4gIE9wdGlvbmFsUGFydFBhcnQsXG4gIFplcm9Pck1vcmVQYXJ0c1BhcnQsXG4gIE9uZU9yTW9yZVBhcnRzUGFydCxcbiAgU2VxdWVuY2VPZlBhcnRzUGFydCxcbiAgQ2hvaWNlT2ZQYXJ0c1BhcnRcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQk5GUGFyc2VyIH0gZnJvbSBcIi4vYm5mL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY1BhcnNlciB9IGZyb20gXCIuL2Jhc2ljL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21tb25QYXJzZXIgfSBmcm9tIFwiLi9jb21tb24vcGFyc2VyXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcnVsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcnVsZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFyc2VyVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhcnNlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJ1bGUgfSBmcm9tIFwiLi9ydWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBhcnRzIH0gZnJvbSBcIi4vcGFydHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFydFR5cGVzIH0gZnJvbSBcIi4vcGFydFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBhcnRDaG9pY2UgfSBmcm9tIFwiLi9wYXJ0Q2hvaWNlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERlZmluaXRpb24gfSBmcm9tIFwiLi9kZWZpbml0aW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVwc2lsb25Ob2RlIH0gZnJvbSBcIi4vbm9kZS90ZXJtaW5hbC9lcHNpbG9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRlcm1pbmFsTm9kZSB9IGZyb20gXCIuL25vZGUvdGVybWluYWxcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICBzdHlsZXNoZWV0ICAgICAgICAgICAgICAgICA6Oj0gKCBtZWRpYSB8IHJ1bGVTZXQgfCBrZXlmcmFtZXMgfCBkZWNsYXJhdGlvbiB8IGVycm9yICkrIDtcblxuXG4gICAgbWVkaWEgICAgICAgICAgICAgICAgICAgICAgOjo9IFwiQG1lZGlhXCIgbWVkaWFRdWVyaWVzIFwie1wiICggcnVsZVNldCB8IGRlY2xhcmF0aW9uICkqIFwifVwiIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgcnVsZVNldCAgICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvcnMgXCJ7XCIgZGVjbGFyYXRpb24qIFwifVwiIDtcbiAgICBcbiAgICBcbiAgICBrZXlmcmFtZXMgICAgICAgICAgICAgICAgICA6Oj0gXCJAa2V5ZnJhbWVzXCIgW2lkZW50aWZpZXJdIFwie1wiIGtleWZyYW1lKyBcIn1cIiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIGRlY2xhcmF0aW9uICAgICAgICAgICAgICAgIDo6PSAgcHJvcGVydHlOYW1lIFwiOlwiIHByb3BlcnR5VmFsdWVzIGltcG9ydGFudD8gXCI7XCIgO1xuXG5cbiAgICBlcnJvci4gICAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5cbiAgICBwcm9wZXJ0eVZhbHVlcyAgICAgICAgICAgICA6Oj0gIHByb3BlcnR5VmFsdWUgKCBcIixcIiBwcm9wZXJ0eVZhbHVlICkqIDtcblxuXG4gICAgbWVkaWFRdWVyaWVzICAgICAgICAgICAgICAgOjo9ICBtZWRpYVF1ZXJ5ICggKCBcIixcIiB8IFwib3JcIiApIG1lZGlhUXVlcnkgKSogO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgc2VsZWN0b3JzICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvciAoIFwiLFwiIHNlbGVjdG9yICkqIDtcblxuXG4gICAga2V5ZnJhbWUgICAgICAgICAgICAgICAgICAgOjo9ICBbcGVyY2VudGFnZV0gXCJ7XCIgZGVjbGFyYXRpb24rIFwifVwiIDtcbiAgICBcbiAgICBcbiAgICBtZWRpYVF1ZXJ5ICAgICAgICAgICAgICAgICA6Oj0gICggXCJub3RcIj8gbWVkaWFUeXBlIFwiYW5kXCIgKT8gbWVkaWFGZWF0dXJlcyBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwibm90XCI/IG1lZGlhVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIG1lZGlhVHlwZSAgICAgICAgICAgICAgICAgIDo6PSAgXCJhbGxcIiB8IFwicHJpbnRcIiB8IFwic2NyZWVuXCIgfCBcInNwZWVjaFwiIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIG1lZGlhRmVhdHVyZXMgICAgICAgICAgICAgIDo6PSAgKCBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGZWF0dXJlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCIoXCIgXCJub3RcIiBtZWRpYUZlYXR1cmUgXCIpXCIgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIFxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFuZFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmVhdHVyZSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCIoXCIgXCJub3RcIiBtZWRpYUZlYXR1cmUgXCIpXCIgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICBtZWRpYUZlYXR1cmUgICAgICAgICAgICAgICA6Oj0gIFwiKFwiIFtpZGVudGlmaWVyXSAoIFwiOlwiIHByb3BlcnR5VmFsdWUgKT8gXCIpXCIgO1xuXG5cbiAgICBwcm9wZXJ0eVZhbHVlICAgICAgICAgICAgICA6Oj0gIHRlcm0gKCBcIixcIj8gdGVybSApKiA7XG5cblxuICAgIHByb3BlcnR5TmFtZSAgICAgICAgICAgICAgIDo6PSAgW2lkZW50aWZpZXJdIDtcblxuXG4gICAgaW1wb3J0YW50ICAgICAgICAgICAgICAgICAgOjo9ICBcIiFpbXBvcnRhbnRcIiA7XG5cblxuICAgIHNlbGVjdG9yICAgICAgICAgICAgICAgICAgIDo6PSAgKCBjbGFzcyB8IHBzZXVkb0NsYXNzIHwgcHNldWRvRWxlbWVudCB8IGF0dHJpYnV0ZSApKyA7XG5cblxuICAgIGNsYXNzICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0NsYXNzICAgICAgICAgICAgICAgIDo6PSAgXCI6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0VsZW1lbnQgICAgICAgICAgICAgIDo6PSAgXCI6OlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwYXJlbnRoZXNpc2VkU2VsZWN0b3IgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKFwiIHNlbGVjdG9yIDxOT19XSElURVNQQUNFPlwiKVwiIDtcblxuXG4gICAgYXR0cmlidXRlICAgICAgICAgICAgICAgICAgOjo9ICBcIltcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCI9XCIgfCBcIn49XCIgfCBcInw9XCIgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW2lkZW50aWZpZXJdIHwgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgdGVybSAgICAgICAgICAgICAgICAgICAgICAgOjo9ICBbcGx1cy1vci1taW51c10/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFtwZXJjZW50YWdlXSB8IFtmcmVxdWVuY3ldIHwgW2ZyYWN0aW9uXSB8IFtsZW5ndGhdIHwgW2FuZ2xlXSB8IFtyZW1zXSB8IFtlbXNdIHwgW3RpbWVdIHwgW251bWJlcl0gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0cmluZy1saXRlcmFsXStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZGVudGlmaWVyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG91cl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIHVyaSAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJ1cmxcIjxOT19XSElURVNQQUNFPlwiKFwiIFtzdHJpbmctbGl0ZXJhbF0gXCIpXCIgO1xuXG5cbiAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXTxOT19XSElURVNQQUNFPlwiKFwiIHByb3BlcnR5VmFsdWUgXCIpXCIgO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKENTU1BhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKENTU1BhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoQ1NTUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCB7IGNsZWFyLCBwdXNoLCBmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoLCBmaWZ0aCwgbGFzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltKGFycmF5LCBzdGFydEluZGV4LCBlbmRJbmRleCkge1xuICBpZiAoc3RhcnRJbmRleCA8IDApIHtcbiAgICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IC8vL1xuXG4gICAgc3RhcnRJbmRleCA9IGxlbmd0aCArIHN0YXJ0SW5kZXg7IC8vL1xuXG4gICAgZW5kSW5kZXggPSBsZW5ndGggKyBlbmRJbmRleDsgLy8vXG4gIH1cblxuICBpZiAoZW5kSW5kZXggIT09IEluZmluaXR5KSB7XG4gICAgY29uc3Qgc3RhcnQgPSBlbmRJbmRleCArIDE7XG5cbiAgICBhcnJheS5zcGxpY2Uoc3RhcnQpO1xuICB9XG5cbiAgY29uc3Qgc3RhcnQgPSAwLFxuICAgICAgICBkZWxldGVDb3VudCA9IHN0YXJ0SW5kZXg7IC8vL1xuXG4gIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIC4uLmVsZW1lbnRzKSB7XG4gIHJldHVybiBlbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBhcnJheS5pbmNsdWRlcyhlbGVtZW50KSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFUlJPUl9SVUxFX05BTUUgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgSU5ERVhfUlVMRV9OQU1FID0gXCJpbmRleFwiO1xuZXhwb3J0IGNvbnN0IFVOSVFVRV9SVUxFX05BTUUgPSBcInVuaXF1ZVwiO1xuZXhwb3J0IGNvbnN0IFNQUkVBRF9SVUxFX05BTUUgPSBcInNwcmVhZFwiO1xuZXhwb3J0IGNvbnN0IEVORF9JTkRFWF9SVUxFX05BTUUgPSBcImVuZEluZGV4XCI7XG5leHBvcnQgY29uc3QgUlVMRV9OQU1FX1JVTEVfTkFNRSA9IFwicnVsZU5hbWVcIjtcbmV4cG9ydCBjb25zdCBUT0tFTl9UWVBFX1JVTEVfTkFNRSA9IFwidG9rZW5UeXBlXCI7XG5leHBvcnQgY29uc3QgU1RBUlRfSU5ERVhfUlVMRV9OQU1FID0gXCJzdGFydEluZGV4XCI7XG5leHBvcnQgY29uc3QgU1VCX0VYUFJFU1NJT05fUlVMRV9OQU1FID0gXCJzdWJFeHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3QgSU5GSU5JVEVfREVTQ0VOVF9SVUxFX05BTUUgPSBcImluZmluaXRlRGVzY2VudFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCB0aGlyZCwgbGFzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IEVSUk9SX1JVTEVfTkFNRSxcbiAgICAgICAgIElOREVYX1JVTEVfTkFNRSxcbiAgICAgICAgIFVOSVFVRV9SVUxFX05BTUUsXG4gICAgICAgICBTUFJFQURfUlVMRV9OQU1FLFxuICAgICAgICAgRU5EX0lOREVYX1JVTEVfTkFNRSxcbiAgICAgICAgIFJVTEVfTkFNRV9SVUxFX05BTUUsXG4gICAgICAgICBTVEFSVF9JTkRFWF9SVUxFX05BTUUsXG4gICAgICAgICBUT0tFTl9UWVBFX1JVTEVfTkFNRSxcbiAgICAgICAgIFNVQl9FWFBSRVNTSU9OX1JVTEVfTkFNRSxcbiAgICAgICAgIElORklOSVRFX0RFU0NFTlRfUlVMRV9OQU1FIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVBhdGhOb2RlKHBhdGhOb2RlKSB7XG4gIGNvbnN0IHNlbGVjdG9yTm9kZXMgPSBzZWxlY3Rvck5vZGVzRnJvbVBhdGhOb2RlKHBhdGhOb2RlKSxcbiAgICAgICAgcnVsZU5hbWVOb2RlcyA9IHNlbGVjdG9yTm9kZXMucmVkdWNlKChydWxlTmFtZU5vZGVzLCBzZWxlY3Rvck5vZGUpID0+IHtcbiAgICAgICAgICBsZXQgbm9uVGVybWluYWxOb2RlO1xuXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gc2VsZWN0b3JOb2RlOyAvLy9cblxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2Rlcyk7XG5cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZTsgLy8vXG5cbiAgICAgICAgICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gUlVMRV9OQU1FX1JVTEVfTkFNRSk7XG5cbiAgICAgICAgICBpZiAocnVsZU5hbWVSdWxlTmFtZVJ1bGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlTmFtZU5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuXG4gICAgICAgICAgICBydWxlTmFtZU5vZGVzLnB1c2gocnVsZU5hbWVOb2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcnVsZU5hbWVOb2RlcztcbiAgICAgICAgfSwgW10pLFxuICAgICAgICBydWxlTmFtZXMgPSBydWxlTmFtZU5vZGVzLm1hcCgocnVsZU5hbWVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gcnVsZU5hbWVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBjb250ZW50O1xuXG4gICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5UeXBlc0Zyb21QYXRoTm9kZShwYXRoTm9kZSkge1xuICBjb25zdCBzZWxlY3Rvck5vZGVzID0gc2VsZWN0b3JOb2Rlc0Zyb21QYXRoTm9kZShwYXRoTm9kZSksXG4gICAgICAgIHRva2VuVFlwZU5vZGVzID0gc2VsZWN0b3JOb2Rlcy5yZWR1Y2UoKHRva2VuVFlwZU5vZGVzLCBzZWxlY3Rvck5vZGUpID0+IHtcbiAgICAgICAgICBsZXQgbm9uVGVybWluYWxOb2RlO1xuXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gc2VsZWN0b3JOb2RlOyAvLy9cblxuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2Rlcyk7XG5cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZTsgLy8vXG5cbiAgICAgICAgICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgIHJ1bGVOYW1lVG9rZW5UeXBlUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IFRPS0VOX1RZUEVfUlVMRV9OQU1FKTtcblxuICAgICAgICAgIGlmIChydWxlTmFtZVRva2VuVHlwZVJ1bGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlblRZcGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cblxuICAgICAgICAgICAgdG9rZW5UWXBlTm9kZXMucHVzaCh0b2tlblRZcGVOb2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdG9rZW5UWXBlTm9kZXM7XG4gICAgICAgIH0sIFtdKSxcbiAgICAgICAgdG9rZW5UeXBlcyA9IHRva2VuVFlwZU5vZGVzLm1hcCgodG9rZW5UeXBlTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRva2VuVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgIHRoaXJkQ2hpbGROb2RlID0gdGhpcmQoY2hpbGROb2RlcyksXG4gICAgICAgICAgICAgICAgdGVybWluYWxOb2RlID0gdGhpcmRDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICAgICAgICB0b2tlblR5cGUgPSBjb250ZW50O1xuXG4gICAgICAgICAgcmV0dXJuIHRva2VuVHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHRva2VuVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZpbml0ZURlc2NlbnRGcm9tUGF0aE5vZGUocGF0aE5vZGUpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBwYXRoTm9kZTsgLy8vXG5cbiAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIHNlY29uZENoaWxkTm9kZSA9IHNlY29uZChjaGlsZE5vZGVzKTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBzZWNvbmRDaGlsZE5vZGU7ICAvLy9cblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICBydWxlTmFtZUluZmluaXRlRGVzY2VudFJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBJTkZJTklURV9ERVNDRU5UX1JVTEVfTkFNRSksXG4gICAgICAgIGluZmluaXRlRGVzY2VudCA9IHJ1bGVOYW1lSW5maW5pdGVEZXNjZW50UnVsZU5hbWU7ICAvLy9cblxuICByZXR1cm4gaW5maW5pdGVEZXNjZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlRnJvbVNwcmVhZE5vZGUoc3ByZWFkTm9kZSkge1xuICBsZXQgdW5pcXVlID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc3ByZWFkTm9kZSwgLy8vXG4gICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKGZpcnN0Q2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgcnVsZU5hbWVVbmlxdWVSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gVU5JUVVFX1JVTEVfTkFNRSk7XG5cbiAgICBpZiAocnVsZU5hbWVVbmlxdWVSdWxlTmFtZSkge1xuICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5pcXVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhGcm9tU3ByZWFkTm9kZShzcHJlYWROb2RlKSB7XG4gIGxldCBpbmRleCA9IG51bGw7XG5cbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc3ByZWFkTm9kZSxcbiAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIGluZGV4Tm9kZSA9IGNoaWxkTm9kZXMuZmluZCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgICAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICBydWxlTmFtZUluZGV4UnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IElOREVYX1JVTEVfTkFNRSk7XG5cbiAgICAgICAgICAgIGlmIChydWxlTmFtZUluZGV4UnVsZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChpbmRleE5vZGUgIT09IG51bGwpIHtcbiAgICBpbmRleCA9IGluZGV4RnJvbUluZGV4Tm9kZShpbmRleE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kSW5kZXhGcm9tU3ByZWFkTm9kZShzcHJlYWROb2RlKSB7XG4gIGxldCBlbmRJbmRleCA9IEluZmluaXR5O1xuXG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHNwcmVhZE5vZGUsXG4gICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBlbmRJbmRleE5vZGUgPSBjaGlsZE5vZGVzLmZpbmQoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgICAgaWYgKGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgcnVsZU5hbWVFbmRJbmRleFJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBFTkRfSU5ERVhfUlVMRV9OQU1FKTtcblxuICAgICAgICAgICAgaWYgKHJ1bGVOYW1lRW5kSW5kZXhSdWxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGVuZEluZGV4Tm9kZSAhPT0gbnVsbCkge1xuICAgIGVuZEluZGV4ID0gaW5kZXhGcm9tSW5kZXhOb2RlKGVuZEluZGV4Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gZW5kSW5kZXg7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0SW5kZXhGcm9tU3ByZWFkTm9kZShzcHJlYWROb2RlKSB7XG4gIGxldCBzdGFydEluZGV4ID0gMDtcblxuICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzcHJlYWROb2RlLCAvLy9cbiAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIHN0YXJ0SW5kZXhOb2RlID0gY2hpbGROb2Rlcy5maW5kKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lU3RhcnRJbmRleFJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBTVEFSVF9JTkRFWF9SVUxFX05BTUUpO1xuXG4gICAgICAgICAgICBpZiAocnVsZU5hbWVTdGFydEluZGV4UnVsZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChzdGFydEluZGV4Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXJ0SW5kZXggPSBpbmRleEZyb21JbmRleE5vZGUoc3RhcnRJbmRleE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0SW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoTm9kZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSkge1xuICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBleHByZXNzaW9uTm9kZSwgLy8vXG4gICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICBwYXRoTm9kZSA9IGZpcnN0Q2hpbGROb2RlOyAgLy8vXG5cbiAgcmV0dXJuIHBhdGhOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ByZWFkTm9kZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSkge1xuICBsZXQgc3ByZWFkTm9kZSA9IG51bGw7XG5cbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZXhwcmVzc2lvbk5vZGUsIC8vL1xuICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gIGlmIChjaGlsZE5vZGVzTGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IHNlY29uZENoaWxkTm9kZSA9IHNlY29uZChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBzZWNvbmRDaGlsZE5vZGVSdWxlTmFtZSA9IHNlY29uZENoaWxkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lU3ByZWFkUnVsZU5hbWUgPSAoc2Vjb25kQ2hpbGROb2RlUnVsZU5hbWUgPT09IFNQUkVBRF9SVUxFX05BTUUpO1xuXG4gICAgaWYgKHJ1bGVOYW1lU3ByZWFkUnVsZU5hbWUpIHtcbiAgICAgIHNwcmVhZE5vZGUgPSBzZWNvbmRDaGlsZE5vZGU7ICAvLy9cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ByZWFkTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yTm9kZXNGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUpIHtcbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZXhwcmVzc2lvbk5vZGUsIC8vL1xuICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgZXJyb3JOb2RlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChlcnJvck5vZGVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lRXJyb3JSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gRVJST1JfUlVMRV9OQU1FKTtcblxuICAgICAgICAgICAgaWYgKHJ1bGVOYW1lRXJyb3JSdWxlTmFtZSkge1xuICAgICAgICAgICAgICBjb25zdCBlcnJvck5vZGUgPSBub25UZXJtaW5hbE5vZGU7ICAvLy9cblxuICAgICAgICAgICAgICBlcnJvck5vZGVzLnB1c2goZXJyb3JOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZXJyb3JOb2RlcztcbiAgICAgICAgfSwgW10pO1xuXG4gIHJldHVybiBlcnJvck5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRXhwcmVzc2lvbk5vZGVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUpIHtcbiAgbGV0IHN1YkV4cHJlc3Npb25Ob2RlID0gbnVsbDtcblxuICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBleHByZXNzaW9uTm9kZSwgLy8vXG4gICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKGNoaWxkTm9kZXNMZW5ndGggPiAxKSB7XG4gICAgY29uc3QgbGFzdENoaWxkTm9kZSA9IGxhc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgbGFzdENoaWxkTm9kZVJ1bGVOYW1lID0gbGFzdENoaWxkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lU3ViRXhwcmVzc2lvblJ1bGVOYW1lID0gKGxhc3RDaGlsZE5vZGVSdWxlTmFtZSA9PT0gU1VCX0VYUFJFU1NJT05fUlVMRV9OQU1FKTtcblxuICAgIGlmIChydWxlTmFtZVN1YkV4cHJlc3Npb25SdWxlTmFtZSkge1xuICAgICAgc3ViRXhwcmVzc2lvbk5vZGUgPSBsYXN0Q2hpbGROb2RlOyAgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YkV4cHJlc3Npb25Ob2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aE5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpIHtcbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc3ViRXhwcmVzc2lvbk5vZGUsIC8vL1xuICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgcGF0aE5vZGUgPSBmaXJzdENoaWxkTm9kZTsgIC8vL1xuXG4gIHJldHVybiBwYXRoTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwcmVhZE5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpIHtcbiAgbGV0IHNwcmVhZE5vZGUgPSBudWxsO1xuXG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHN1YkV4cHJlc3Npb25Ob2RlLCAvLy9cbiAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIGNoaWxkTm9kZXNMZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aDtcblxuICBpZiAoY2hpbGROb2Rlc0xlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBzZWNvbmRDaGlsZE5vZGUgPSBzZWNvbmQoY2hpbGROb2RlcyksXG4gICAgICAgICAgc2Vjb25kQ2hpbGROb2RlUnVsZU5hbWUgPSBzZWNvbmRDaGlsZE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVNwcmVhZFJ1bGVOYW1lID0gKHNlY29uZENoaWxkTm9kZVJ1bGVOYW1lID09PSBTUFJFQURfUlVMRV9OQU1FKTtcblxuICAgIGlmIChydWxlTmFtZVNwcmVhZFJ1bGVOYW1lKSB7XG4gICAgICBzcHJlYWROb2RlID0gc2Vjb25kQ2hpbGROb2RlOyAgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNwcmVhZE5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJFeHByZXNzaW9uTm9kZUZyb21TdWJFeHByZXNzaW9uTm9kZShzdWJFeHByZXNzaW9uTm9kZSkge1xuICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzdWJFeHByZXNzaW9uTm9kZTsgLy8vXG5cbiAgc3ViRXhwcmVzc2lvbk5vZGUgPSBudWxsO1xuXG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKGNoaWxkTm9kZXNMZW5ndGggPiAxKSB7XG4gICAgY29uc3QgbGFzdENoaWxkTm9kZSA9IGxhc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgbGFzdENoaWxkTm9kZVJ1bGVOYW1lID0gbGFzdENoaWxkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lU3ViRXhwcmVzc2lvblJ1bGVOYW1lID0gKGxhc3RDaGlsZE5vZGVSdWxlTmFtZSA9PT0gU1VCX0VYUFJFU1NJT05fUlVMRV9OQU1FKTtcblxuICAgIGlmIChydWxlTmFtZVN1YkV4cHJlc3Npb25SdWxlTmFtZSkge1xuICAgICAgc3ViRXhwcmVzc2lvbk5vZGUgPSBsYXN0Q2hpbGROb2RlOyAgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YkV4cHJlc3Npb25Ob2RlO1xufVxuXG5mdW5jdGlvbiBpbmRleEZyb21JbmRleE5vZGUoaW5kZXhOb2RlKSB7XG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGluZGV4Tm9kZSwgLy8vXG4gICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgaW5kZXggPSBOdW1iZXIoY29udGVudCk7XG5cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rvck5vZGVzRnJvbVBhdGhOb2RlKHBhdGhOb2RlKSB7XG4gIGxldCBjaGlsZE5vZGVzLFxuICAgICAgbm9uVGVybWluYWxOb2RlO1xuXG4gIG5vblRlcm1pbmFsTm9kZSA9IHBhdGhOb2RlOyAvLy9cblxuICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICBjb25zdCBsYXN0Q2hpbGROb2RlID0gbGFzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgc2VsZWN0b3JzTm9kZSA9IGxhc3RDaGlsZE5vZGU7ICAvLy9cblxuICBub25UZXJtaW5hbE5vZGUgPSBzZWxlY3RvcnNOb2RlOyAgLy8vXG5cbiAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgY29uc3Qgc2VsZWN0b3JOb2RlcyA9IGNoaWxkTm9kZXMuZmlsdGVyKChjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHNlbGVjdG9yTm9kZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHJ1bGVOYW1lc0Zyb21QYXRoTm9kZSwgdG9rZW5UeXBlc0Zyb21QYXRoTm9kZSwgaW5maW5pdGVEZXNjZW50RnJvbVBhdGhOb2RlIH0gZnJvbSBcIi4vdXRpbGl0aWVzL25vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGF0aCB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lcywgdG9rZW5UeXBlcywgaW5maW5pdGVEZXNjZW50KSB7XG4gICAgdGhpcy5ydWxlTmFtZXMgPSBydWxlTmFtZXM7XG4gICAgdGhpcy50b2tlblR5cGVzID0gdG9rZW5UeXBlcztcbiAgICB0aGlzLmluZmluaXRlRGVzY2VudCA9IGluZmluaXRlRGVzY2VudDtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZXM7XG4gIH1cblxuICBnZXRUb2tlblR5cGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VuVHlwZXM7XG4gIH1cblxuICBpc0luZmluaXRlRGVzY2VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmZpbml0ZURlc2NlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhdGhOb2RlKHBhdGhOb2RlKSB7XG4gICAgY29uc3QgcnVsZU5hbWVzID0gcnVsZU5hbWVzRnJvbVBhdGhOb2RlKHBhdGhOb2RlKSxcbiAgICAgICAgICB0b2tlblR5cGVzID0gdG9rZW5UeXBlc0Zyb21QYXRoTm9kZShwYXRoTm9kZSksXG4gICAgICAgICAgaW5maW5pdGVEZXNjZW50ID0gaW5maW5pdGVEZXNjZW50RnJvbVBhdGhOb2RlKHBhdGhOb2RlKSxcbiAgICAgICAgICBwYXRoID0gbmV3IFBhdGgocnVsZU5hbWVzLCB0b2tlblR5cGVzLCBpbmZpbml0ZURlc2NlbnQpO1xuXG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgY2xlYXIsIHRyaW0sIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaW5kZXhGcm9tU3ByZWFkTm9kZSxcbiAgICAgICAgIHVuaXF1ZUZyb21TcHJlYWROb2RlLFxuICAgICAgICAgZW5kSW5kZXhGcm9tU3ByZWFkTm9kZSxcbiAgICAgICAgIHN0YXJ0SW5kZXhGcm9tU3ByZWFkTm9kZSB9IGZyb20gXCIuL3V0aWxpdGllcy9ub2RlXCI7XG5cbmNvbnN0IHsgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwcmVhZCB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpIHtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgIHRoaXMuZW5kSW5kZXggPSBlbmRJbmRleDtcbiAgICB0aGlzLnVuaXF1ZSA9IHVuaXF1ZTtcbiAgfVxuXG4gIGFkanVzdE5vZGVzKG5vZGVzKSB7XG4gICAgaWYgKHRoaXMudW5pcXVlKSB7XG4gICAgICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVzTGVuZ3RoID4gMSkge1xuICAgICAgICBjbGVhcihub2Rlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyaW0obm9kZXMsIHRoaXMuc3RhcnRJbmRleCwgdGhpcy5lbmRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSAwLFxuICAgICAgICAgIGVuZEluZGV4ID0gSW5maW5pdHksXG4gICAgICAgICAgdW5pcXVlID0gZmFsc2UsXG4gICAgICAgICAgc3ByZWFkID0gbmV3IFNwcmVhZChzdGFydEluZGV4LCBlbmRJbmRleCwgdW5pcXVlKTtcblxuICAgIHJldHVybiBzcHJlYWQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNwcmVhZE5vZGUoc3ByZWFkTm9kZSkge1xuICAgIGxldCBzdGFydEluZGV4ID0gMCxcbiAgICAgICAgZW5kSW5kZXggPSBJbmZpbml0eSxcbiAgICAgICAgdW5pcXVlID0gZmFsc2U7XG5cbiAgICBpZiAoc3ByZWFkTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgaW5kZXggPSBpbmRleEZyb21TcHJlYWROb2RlKHNwcmVhZE5vZGUpO1xuXG4gICAgICBpZiAoaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4OyAvLy9cblxuICAgICAgICBlbmRJbmRleCA9IGluZGV4OyAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4RnJvbVNwcmVhZE5vZGUoc3ByZWFkTm9kZSk7XG5cbiAgICAgICAgZW5kSW5kZXggPSBlbmRJbmRleEZyb21TcHJlYWROb2RlKHNwcmVhZE5vZGUpO1xuICAgICAgfVxuXG4gICAgICB1bmlxdWUgPSB1bmlxdWVGcm9tU3ByZWFkTm9kZShzcHJlYWROb2RlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcHJlYWQgPSBuZXcgU3ByZWFkKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpO1xuXG4gICAgcmV0dXJuIHNwcmVhZDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3ByZWFkRXhwcmVzc2lvbihzcHJlYWRFeHByZXNzaW9uKSB7XG4gICAgbGV0IHN0YXJ0SW5kZXggPSAwLFxuICAgICAgICBlbmRJbmRleCA9IEluZmluaXR5LFxuICAgICAgICB1bmlxdWUgPSBmYWxzZTtcblxuICAgIGlmIChzcHJlYWRFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiA9PT0gRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIpIHtcbiAgICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IC9cXFsoLT9cXGQrKT8oXFwuXFwuXFwuKT8oLT9cXGQrKT9dLyxcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHNwcmVhZEV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcykgfHwgbnVsbCxcbiAgICAgICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpIHx8IG51bGwsXG4gICAgICAgICAgICAgIGZvdXJ0aE1hdGNoID0gZm91cnRoKG1hdGNoZXMpIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhcnRJbmRleCA9IHBhcnNlSW50KHNlY29uZE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IHN0YXJ0SW5kZXg7ICAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm91cnRoTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICBlbmRJbmRleCA9IHBhcnNlSW50KGZvdXJ0aE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gZW5kSW5kZXg7ICAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcHJlYWQgPSBuZXcgU3ByZWFkKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpO1xuXG4gICAgcmV0dXJuIHNwcmVhZDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUGF0aCBmcm9tIFwiLi9wYXRoXCI7XG5pbXBvcnQgU3ByZWFkIGZyb20gXCIuL3NwcmVhZFwiO1xuXG5pbXBvcnQgeyBwYXRoTm9kZUZyb21TdWJFeHByZXNzaW9uTm9kZSwgc3ByZWFkTm9kZUZyb21TdWJFeHByZXNzaW9uTm9kZSwgc3ViRXhwcmVzc2lvbk5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUgfSBmcm9tIFwiLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJFeHByZXNzaW9uIHtcbiAgY29uc3RydWN0b3IocGF0aCwgc3ByZWFkLCBzdWJFeHByZXNzaW9uKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLnNwcmVhZCA9IHNwcmVhZDtcbiAgICB0aGlzLnN1YkV4cHJlc3Npb24gPSBzdWJFeHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoO1xuICB9XG5cbiAgZ2V0U3ByZWFkKCkge1xuICAgIHJldHVybiB0aGlzLnNwcmVhZDtcbiAgfVxuXG4gIGdldFN1YkV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3ViRXhwcmVzc2lvbjtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lcygpIHsgcmV0dXJuIHRoaXMucGF0aC5nZXRSdWxlTmFtZXMoKTsgfVxuXG4gIGdldFRva2VuVHlwZXMoKSB7IHJldHVybiB0aGlzLnBhdGguZ2V0VG9rZW5UeXBlcygpOyB9XG5cbiAgaXNJbmZpbml0ZURlc2NlbnQoKSB7IHJldHVybiB0aGlzLnBhdGguaXNJbmZpbml0ZURlc2NlbnQoKTsgfVxuXG4gIHN0YXRpYyBmcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpIHtcbiAgICBsZXQgc3ViRXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgICBpZiAoc3ViRXhwcmVzc2lvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhdGhOb2RlID0gcGF0aE5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpLFxuICAgICAgICAgICAgc3ByZWFkTm9kZSA9IHNwcmVhZE5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpO1xuXG4gICAgICBzdWJFeHByZXNzaW9uTm9kZSA9IHN1YkV4cHJlc3Npb25Ob2RlRnJvbVN1YkV4cHJlc3Npb25Ob2RlKHN1YkV4cHJlc3Npb25Ob2RlKTsgIC8vL1xuXG4gICAgICBjb25zdCBwYXRoID0gUGF0aC5mcm9tUGF0aE5vZGUocGF0aE5vZGUpLFxuICAgICAgICAgICAgc3ByZWFkID0gU3ByZWFkLmZyb21TcHJlYWROb2RlKHNwcmVhZE5vZGUpO1xuXG4gICAgICBzdWJFeHByZXNzaW9uID0gU3ViRXhwcmVzc2lvbi5mcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpO1xuXG4gICAgICBzdWJFeHByZXNzaW9uID0gbmV3IFN1YkV4cHJlc3Npb24ocGF0aCwgc3ByZWFkLCBzdWJFeHByZXNzaW9uKTsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YkV4cHJlc3Npb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJzcGVjaWFsXCI6IFwiXig/OkB8IXxcXFxcKnxcXFxcfHxcXFxcL3xcXFxcW3xcXFxcXXxcXFxcLlxcXFwuXFxcXC4pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIl5bYS16QS1aXFwtXStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJudW1iZXJcIjogXCJeWzAtOV0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl4uXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciwgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwcmVzc2lvbkxleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEV4cHJlc3Npb25MZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKEV4cHJlc3Npb25MZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhFeHByZXNzaW9uTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICBleHByZXNzaW9uICAgICAgIDo6PSAgcGF0aCBzcHJlYWQ/IHN1YkV4cHJlc3Npb24/ICAgXG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgIHwgIGVycm9yKyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICA7XG4gIFxuICAgIHBhdGggICAgICAgICAgICAgOjo9ICBcIi9cIiBpbmZpbml0ZURlc2NlbnQ/IHNlbGVjdG9ycyA7XG4gICAgXG4gICAgc3ViRXhwcmVzc2lvbiAgICA6Oj0gIHBhdGggc3ByZWFkPyBzdWJFeHByZXNzaW9uPztcblxuICAgIGluZmluaXRlRGVzY2VudCAgOjo9ICBcIi9cIiA7XG4gICAgXG4gICAgc2VsZWN0b3JzICAgICAgICA6Oj0gIHNlbGVjdG9yICggXCJ8XCIgc2VsZWN0b3IgKSogO1xuXG4gICAgc3ByZWFkICAgICAgICAgICA6Oj0gIHVuaXF1ZVxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICB8ICBcIltcIiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAoIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3RhcnRJbmRleCBcIi4uLlwiIGVuZEluZGV4ICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN0YXJ0SW5kZXggXCIuLi5cIiApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIi4uLlwiIGVuZEluZGV4IClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIl1cIiA7XG5cbiAgICBzZWxlY3RvciAgICAgICAgIDo6PSAgcnVsZU5hbWUgfCB0b2tlblR5cGUgO1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBydWxlTmFtZSAgICAgICAgIDo6PSAgW25hbWVdIHwgXCIqXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICB0b2tlblR5cGUgICAgICAgIDo6PSAgXCJAXCI8Tk9fV0hJVEVTUEFDRT4oIFtuYW1lXSB8IFwiKlwiICkgO1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBzdGFydEluZGV4ICAgICAgIDo6PSAgW251bWJlcl0gO1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBlbmRJbmRleCAgICAgICAgIDo6PSAgW251bWJlcl0gO1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBpbmRleCAgICAgICAgICAgIDo6PSAgW251bWJlcl0gO1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICB1bmlxdWUgICAgICAgICAgIDo6PSAgXCIhXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICBcblxuXG4gICAgZXJyb3IuICAgICAgICAgICA6Oj0gIC4gO1xuICAgIFxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoRXhwcmVzc2lvblBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKEV4cHJlc3Npb25QYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEV4cHJlc3Npb25QYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUGF0aCBmcm9tIFwiLi9wYXRoXCI7XG5pbXBvcnQgU3ByZWFkIGZyb20gXCIuL3NwcmVhZFwiO1xuaW1wb3J0IFN1YkV4cHJlc3Npb24gZnJvbSBcIi4vc3ViRXhwcmVzc2lvblwiO1xuaW1wb3J0IEV4cHJlc3Npb25MZXhlciBmcm9tIFwiLi9leHByZXNzaW9uL2xleGVyXCI7XG5pbXBvcnQgRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9leHByZXNzaW9uL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBwYXRoTm9kZUZyb21FeHByZXNzaW9uTm9kZSxcbiAgICAgICAgIHNwcmVhZE5vZGVGcm9tRXhwcmVzc2lvbk5vZGUsXG4gICAgICAgICBlcnJvck5vZGVzRnJvbUV4cHJlc3Npb25Ob2RlLFxuICAgICAgICAgc3ViRXhwcmVzc2lvbk5vZGVGcm9tRXhwcmVzc2lvbk5vZGUgfSBmcm9tIFwiLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5jb25zdCBleHByZXNzaW9uTGV4ZXIgPSBFeHByZXNzaW9uTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGV4cHJlc3Npb25QYXJzZXIgPSBFeHByZXNzaW9uUGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cHJlc3Npb24ge1xuICBjb25zdHJ1Y3RvcihwYXRoLCBzcHJlYWQsIHN1YkV4cHJlc3Npb24pIHtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuc3ByZWFkID0gc3ByZWFkO1xuICAgIHRoaXMuc3ViRXhwcmVzc2lvbiA9IHN1YkV4cHJlc3Npb247XG4gIH1cblxuICBnZXRQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLnBhdGg7XG4gIH1cblxuICBnZXRTcHJlYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3ByZWFkO1xuICB9XG5cbiAgZ2V0U3ViRXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zdWJFeHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UnVsZU5hbWVzKCkgeyByZXR1cm4gdGhpcy5wYXRoLmdldFJ1bGVOYW1lcygpOyB9XG5cbiAgZ2V0VG9rZW5UeXBlcygpIHsgcmV0dXJuIHRoaXMucGF0aC5nZXRUb2tlblR5cGVzKCk7IH1cblxuICBpc0luZmluaXRlRGVzY2VudCgpIHsgcmV0dXJuIHRoaXMucGF0aC5pc0luZmluaXRlRGVzY2VudCgpOyB9XG5cbiAgc3RhdGljIGZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSkge1xuICAgIGNvbnN0IHBhdGhOb2RlID0gcGF0aE5vZGVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUpLFxuICAgICAgICAgIHNwcmVhZE5vZGUgPSBzcHJlYWROb2RlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSxcbiAgICAgICAgICBzdWJFeHByZXNzaW9uTm9kZSA9IHN1YkV4cHJlc3Npb25Ob2RlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSxcbiAgICAgICAgICBwYXRoID0gUGF0aC5mcm9tUGF0aE5vZGUocGF0aE5vZGUpLFxuICAgICAgICAgIHNwcmVhZCA9IFNwcmVhZC5mcm9tU3ByZWFkTm9kZShzcHJlYWROb2RlKSxcbiAgICAgICAgICBzdWJFeHByZXNzaW9uID0gU3ViRXhwcmVzc2lvbi5mcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpLFxuICAgICAgICAgIGV4cHJlc3Npb24gPSBuZXcgRXhwcmVzc2lvbihwYXRoLCBzcHJlYWQsIHN1YkV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIGV4cHJlc3Npb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZykge1xuICAgIGxldCBleHByZXNzaW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGxleGVyID0gZXhwcmVzc2lvbkxleGVyLCAgLy8vXG4gICAgICAgICAgcGFyc2VyID0gZXhwcmVzc2lvblBhcnNlciwgIC8vL1xuICAgICAgICAgIGNvbnRlbnQgPSBleHByZXNzaW9uU3RyaW5nLCAvLy9cbiAgICAgICAgICB0b2tlbnMgPSBsZXhlci50b2tlbmlzZShjb250ZW50KSxcbiAgICAgICAgICBub2RlID0gcGFyc2VyLnBhcnNlKHRva2Vucyk7XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZXhwcmVzc2lvbk5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIGVycm9yTm9kZXMgPSBlcnJvck5vZGVzRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSxcbiAgICAgICAgICAgIGVycm9yTm9kZXNMZW5ndGggPSBlcnJvck5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKGVycm9yTm9kZXNMZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3QgcGF0aE5vZGUgPSBwYXRoTm9kZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSksXG4gICAgICAgICAgICAgIHNwcmVhZE5vZGUgPSBzcHJlYWROb2RlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSxcbiAgICAgICAgICAgICAgc3ViRXhwcmVzc2lvbk5vZGUgPSBzdWJFeHByZXNzaW9uTm9kZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSksXG4gICAgICAgICAgICAgIHBhdGggPSBQYXRoLmZyb21QYXRoTm9kZShwYXRoTm9kZSksXG4gICAgICAgICAgICAgIHNwcmVhZCA9IFNwcmVhZC5mcm9tU3ByZWFkTm9kZShzcHJlYWROb2RlKSxcbiAgICAgICAgICAgICAgc3ViRXhwcmVzc2lvbiA9IFN1YkV4cHJlc3Npb24uZnJvbVN1YkV4cHJlc3Npb25Ob2RlKHN1YkV4cHJlc3Npb25Ob2RlKTtcblxuICAgICAgICBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb24ocGF0aCwgc3ByZWFkLCBzdWJFeHByZXNzaW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcmVzc2lvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgRXhwcmVzc2lvbiBmcm9tIFwiLi9leHByZXNzaW9uXCI7XG5cbmltcG9ydCB7IHB1c2gsIGNsZWFyLCBpbmNsdWRlcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5jb25zdCB7IFdJTERDQVJEX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlcnkge1xuICBjb25zdHJ1Y3RvcihzcHJlYWQsIHN1YlF1ZXJ5LCBydWxlTmFtZXMsIHRva2VuVHlwZXMsIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcykge1xuICAgIHRoaXMuc3ByZWFkID0gc3ByZWFkO1xuICAgIHRoaXMuc3ViUXVlcnkgPSBzdWJRdWVyeTtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLnRva2VuVHlwZXMgPSB0b2tlblR5cGVzO1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICAgIHRoaXMuaW5maW5pdGVEZXNjZW50ID0gaW5maW5pdGVEZXNjZW50O1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMgPSBpbnRlcm1lZGlhdGVOb2RlcztcbiAgfVxuXG4gIGdldFNwcmVhZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zcHJlYTtcbiAgfVxuXG4gIGdldFN1YlF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLnN1YlF1ZXJ5O1xuICB9XG5cbiAgZ2V0UnVsZU5hbWVzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lcztcbiAgfVxuXG4gIGdldFRva2VuVHlwZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5UeXBlcztcbiAgfVxuXG4gIGdldE1heGltdW1EZXB0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXhpbXVtRGVwdGg7XG4gIH1cblxuICBpc0luZmluaXRlRGVzY2VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmZpbml0ZURlc2NlbnQ7XG4gIH1cblxuICBnZXRJbnRlcm1lZGlhdGVOb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm1lZGlhdGVOb2RlcztcbiAgfVxuXG4gIGV4ZWN1dGUobm9kZSwgZGVwdGggPSAwLCBtYXhpbXVtRGVwdGggPSB0aGlzLm1heGltdW1EZXB0aCkge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICB0aGlzLmZpbmQobm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICB0aGlzLmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGNsZWFyKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICB9XG5cbiAgZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gbWF4aW11bURlcHRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICBsZXQgZm91bmQ7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdHlwZXMgPSB0aGlzLnRva2VuVHlwZXMsICAvLy9cbiAgICAgICAgICAgIHR5cGUgPSB0ZXJtaW5hbE5vZGUuZ2V0VHlwZSgpO1xuXG4gICAgICBmb3VuZCA9IGluY2x1ZGVzKHR5cGVzLCB0eXBlLCBXSUxEQ0FSRF9DSEFSQUNURVIpO1xuICAgIH1cblxuICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy5ydWxlTmFtZXMsIHJ1bGVOYW1lLCBXSUxEQ0FSRF9DSEFSQUNURVIpO1xuICAgIH1cblxuICAgIGlmIChmb3VuZCkge1xuICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLnB1c2goaW50ZXJtZWRpYXRlTm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5maW5pdGVEZXNjZW50KSB7XG4gICAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIHRoaXMuc3ByZWFkLmFkanVzdE5vZGVzKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViUXVlcnkgPT09IG51bGwpIHtcbiAgICAgIHB1c2gobm9kZXMsIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLmZvckVhY2goKGludGVybWVkaWF0ZU5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuY2xlYXIoKTtcblxuICAgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbWF4aW11bURlcHRoID0gSW5maW5pdHkpIHtcbiAgICBjb25zdCBzcHJlYWQgPSBleHByZXNzaW9uLmdldFNwcmVhZCgpLFxuICAgICAgICAgIHN1YlF1ZXJ5ID0gc3ViUXVlcnlGcm9tRXhwcmVzc2lvbihleHByZXNzaW9uKSxcbiAgICAgICAgICBydWxlTmFtZXMgPSBleHByZXNzaW9uLmdldFJ1bGVOYW1lcygpLFxuICAgICAgICAgIHRva2VuVHlwZXMgPSBleHByZXNzaW9uLmdldFRva2VuVHlwZXMoKSxcbiAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSBleHByZXNzaW9uLmlzSW5maW5pdGVEZXNjZW50KCksXG4gICAgICAgICAgaW50ZXJtZWRpYXRlTm9kZXMgPSBbXSxcbiAgICAgICAgICBxdWVyeSA9IG5ldyBRdWVyeShzcHJlYWQsIHN1YlF1ZXJ5LCBydWxlTmFtZXMsIHRva2VuVHlwZXMsIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcyk7XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN1YkV4cHJlc3Npb24oc3ViRXhwcmVzc2lvbikge1xuICAgIGNvbnN0IHNwcmVhZCA9IHN1YkV4cHJlc3Npb24uZ2V0U3ByZWFkKCksXG4gICAgICAgICAgc3ViUXVlcnkgPSBzdWJRdWVyeUZyb21TdWJFeHByZXNzaW9uKHN1YkV4cHJlc3Npb24pLFxuICAgICAgICAgIHJ1bGVOYW1lcyA9IHN1YkV4cHJlc3Npb24uZ2V0UnVsZU5hbWVzKCksXG4gICAgICAgICAgdG9rZW5UeXBlcyA9IHN1YkV4cHJlc3Npb24uZ2V0VG9rZW5UeXBlcygpLFxuICAgICAgICAgIG1heGltdW1EZXB0aCA9IEluZmluaXR5LFxuICAgICAgICAgIGluZmluaXRlRGVzY2VudCA9IHN1YkV4cHJlc3Npb24uaXNJbmZpbml0ZURlc2NlbnQoKSxcbiAgICAgICAgICBpbnRlcm1lZGlhdGVOb2RlcyA9IFtdLFxuICAgICAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHNwcmVhZCwgc3ViUXVlcnksIHJ1bGVOYW1lcywgdG9rZW5UeXBlcywgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nLCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICAgIGxldCBxdWVyeSA9IG51bGw7XG5cbiAgICBjb25zdCBleHByZXNzaW9uID0gRXhwcmVzc2lvbi5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICAgIGlmIChleHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzcHJlYWQgPSBleHByZXNzaW9uLmdldFNwcmVhZCgpLFxuICAgICAgICAgICAgc3ViUXVlcnkgPSBzdWJRdWVyeUZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24pLFxuICAgICAgICAgICAgcnVsZU5hbWVzID0gZXhwcmVzc2lvbi5nZXRSdWxlTmFtZXMoKSxcbiAgICAgICAgICAgIHRva2VuVHlwZXMgPSBleHByZXNzaW9uLmdldFRva2VuVHlwZXMoKSxcbiAgICAgICAgICAgIGluZmluaXRlRGVzY2VudCA9IGV4cHJlc3Npb24uaXNJbmZpbml0ZURlc2NlbnQoKSxcbiAgICAgICAgICAgIGludGVybWVkaWF0ZU5vZGVzID0gW107XG5cbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHNwcmVhZCwgc3ViUXVlcnksIHJ1bGVOYW1lcywgdG9rZW5UeXBlcywgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3ViUXVlcnlGcm9tRXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG4gIGxldCBzdWJRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uZ2V0U3ViRXhwcmVzc2lvbigpO1xuXG4gIGlmIChzdWJFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgcXVlcnkgPSBRdWVyeS5mcm9tU3ViRXhwcmVzc2lvbihzdWJFeHByZXNzaW9uKTtcblxuICAgIHN1YlF1ZXJ5ID0gcXVlcnk7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1YlF1ZXJ5O1xufVxuXG5mdW5jdGlvbiBzdWJRdWVyeUZyb21TdWJFeHByZXNzaW9uKHN1YkV4cHJlc3Npb24pIHtcbiAgbGV0IHN1YlF1ZXJ5ID0gbnVsbDtcblxuICBzdWJFeHByZXNzaW9uID0gc3ViRXhwcmVzc2lvbi5nZXRTdWJFeHByZXNzaW9uKCk7IC8vL1xuXG4gIGlmIChzdWJFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgcXVlcnkgPSBRdWVyeS5mcm9tU3ViRXhwcmVzc2lvbihzdWJFeHByZXNzaW9uKTtcblxuICAgIHN1YlF1ZXJ5ID0gcXVlcnk7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1YlF1ZXJ5O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUXVlcnkgZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgRXhwcmVzc2lvbiBmcm9tIFwiLi4vZXhwcmVzc2lvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUV4cHJlc3Npb25TdHJpbmcobm9kZSwgZXhwcmVzc2lvblN0cmluZywgbWF4aW11bURlcHRoKSB7XG4gIGxldCBub2RlcyA9IG51bGw7XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IEV4cHJlc3Npb24uZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgaWYgKGV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCk7XG5cbiAgICBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcXVlcnlCeUV4cHJlc3Npb25TdHJpbmdcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeHByZXNzaW9uIH0gZnJvbSBcIi4vZXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeHByZXNzaW9uTGV4ZXIgfSBmcm9tIFwiLi9leHByZXNzaW9uL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi9leHByZXNzaW9uL3BhcnNlclwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEVBRCA9IFwiaGVhZFwiO1xuZXhwb3J0IGNvbnN0IFNUWUxFID0gXCJzdHlsZVwiO1xuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIjtcbmV4cG9ydCBjb25zdCBUV09fU1BBQ0VTID0gXCIgIFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRV9MRU5HVEggPSA2O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKHF1ZXJ5LCBub2RlLCB0b2tlbnMpIHtcbiAgbGV0IGNvbnRlbnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICAgIG5vZGUgPSBmaXJzdE5vZGU7IC8vL1xuXG4gICAgY29udGVudCA9IGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2VucyksXG4gICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKTtcblxuICBsZXQgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4OyBpbmRleCA8PSBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdLFxuICAgICAgICAgIHRva2VuQ29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIGNvbnRlbnQgKz0gdG9rZW5Db250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLXF1ZXJ5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORywgVFdPX1NQQUNFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IGltcG9ydGFudFF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoXCIvKi9pbXBvcnRhbnRcIiksXG4gICAgICBwcm9wZXJ0eU5hbWVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiLyovcHJvcGVydHlOYW1lXCIpLFxuICAgICAgcHJvcGVydHlWYWx1ZXNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiLyovcHJvcGVydHlWYWx1ZXNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY2xhcmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJvcGVydHlWYWx1ZXMsIHByb3BlcnR5TmFtZSwgaW1wb3J0YW50KSB7XG4gICAgdGhpcy5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuICAgIHRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgIHRoaXMuaW1wb3J0YW50ID0gaW1wb3J0YW50O1xuICB9XG5cbiAgZ2V0UHJvcGVydHlWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlWYWx1ZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlOYW1lO1xuICB9XG5cbiAgZ2V0SW1wb3J0YW50KCkge1xuICAgIHJldHVybiB0aGlzLmltcG9ydGFudDtcbiAgfVxuXG4gIG1hdGNoUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSAodGhpcy5wcm9wZXJ0eU5hbWUgPT09IHByb3BlcnR5TmFtZSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pIHtcbiAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eU5hbWUoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGhpcy5tYXRjaFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpOyAvLy9cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hEZWNsYXJhdGlvbnMoZGVjbGFyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5zb21lRGVjbGFyYXRpb24oKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5tYXRjaERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKTtcblxuICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIGFzQ1NTKGluZGVudCkge1xuICAgIGluZGVudCA9IGluZGVudCArIFRXT19TUEFDRVM7XG5cbiAgICBjb25zdCBjc3MgPSBgJHtpbmRlbnR9JHt0aGlzLnByb3BlcnR5TmFtZX06ICR7dGhpcy5wcm9wZXJ0eVZhbHVlc30ke3RoaXMuaW1wb3J0YW50fTtcXG5gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBwcm9wZXJ0eVZhbHVlc0NvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2Vucyhwcm9wZXJ0eVZhbHVlc1F1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHByb3BlcnR5TmFtZUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2Vucyhwcm9wZXJ0eU5hbWVRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBpbXBvcnRhbnRDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoaW1wb3J0YW50UXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcHJvcGVydHlWYWx1ZXMgPSBwcm9wZXJ0eVZhbHVlc0NvbnRlbnQsIC8vL1xuICAgICAgICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZUNvbnRlbnQsIC8vL1xuICAgICAgICAgIGltcG9ydGFudCA9IChpbXBvcnRhbnRDb250ZW50ID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIGAgJHtpbXBvcnRhbnRDb250ZW50fWAsXG4gICAgICAgICAgZGVjbGFyYXRpb24gPSBuZXcgRGVjbGFyYXRpb24ocHJvcGVydHlWYWx1ZXMsIHByb3BlcnR5TmFtZSwgaW1wb3J0YW50KTtcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZm9yd2FyZHNGb3JFYWNoLCBiYWNrd2FyZHNGb3JFYWNoIH0gPSBhcnJheVV0aWxpdGllcztcblxuY29uc3QgZGVjbGFyYXRpb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiLyovZGVjbGFyYXRpb25cIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY2xhcmF0aW9ucyB7XG4gIGNvbnN0cnVjdG9yKGFycmF5KSB7XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xuICB9XG5cbiAgc29tZURlY2xhcmF0aW9uKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmFycmF5LnNvbWUoY2FsbGJhY2spOyB9XG5cbiAgZm9yd2FyZHNGb3JFYWNoRGVjbGFyYXRpb24oY2FsbGJhY2spIHsgZm9yd2FyZHNGb3JFYWNoKHRoaXMuYXJyYXksIGNhbGxiYWNrKTsgfVxuXG4gIGJhY2t3YXJkc0ZvckVhY2hEZWNsYXJhdGlvbihjYWxsYmFjaykgeyBiYWNrd2FyZHNGb3JFYWNoKHRoaXMuYXJyYXksIGNhbGxiYWNrKTsgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2hEZWNsYXJhdGlvbigoZGVjbGFyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbi5tYXRjaERlY2xhcmF0aW9ucyh0aGlzKTsgLy8vXG5cbiAgICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQoZGVjbGFyYXRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQpO1xuXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgKz0gZGVjbGFyYXRpb25DU1M7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWNsYXJhdGlvbnNDU1M7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBjc3MgPSAoY2xhc3NOYW1lID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgOiAgLy8vXG4gICAgICAgICAgICAgICAgICAgIGAke2luZGVudH0uJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfSR7aW5kZW50fX1cblxuYDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLXF1ZXJ5XCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IHNlbGVjdG9yc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoXCIvL3NlbGVjdG9yc1wiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9ycywgZGVjbGFyYXRpb25zKSB7XG4gICAgdGhpcy5zZWxlY3RvcnMgPSBzZWxlY3RvcnM7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRTZWxlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0b3JzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldCkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHJ1bGVTZXQuZ2V0RGVjbGFyYXRpb25zKCk7XG5cbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gIH1cblxuICBmaW5kTWF0Y2hpbmdSdWxlU2V0KHJ1bGVTZXRzKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldHMuZmluZCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3JzID0gcnVsZVNldC5nZXRTZWxlY3RvcnMoKSxcbiAgICAgICAgICAgIHNlbGVjdG9yc01hdGNoID0gKHNlbGVjdG9ycyA9PT0gdGhpcy5zZWxlY3RvcnMpLFxuICAgICAgICAgICAgcnVsZVNldHNNYXRjaCA9IHNlbGVjdG9yc01hdGNoOyAvLy9cblxuICAgICAgaWYgKHJ1bGVTZXRzTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDsgLy8vXG5cbiAgICByZXR1cm4gbWF0Y2hpbmdSdWxlU2V0O1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpIHtcbiAgICBsZXQgY3NzID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MobnVsbCwgaW5kZW50KTtcblxuICAgIGlmIChkZWNsYXJhdGlvbnNDU1MgIT09IEVNUFRZX1NUUklORykge1xuICAgICAgIGNzcyA9IGAke2luZGVudH0uJHtjbGFzc05hbWV9JHt0aGlzLnNlbGVjdG9yc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9JHtpbmRlbnR9fVxuXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0ID0gbmV3IFJ1bGVTZXQoc2VsZWN0b3JzLCBkZWNsYXJhdGlvbnMpO1xuXG4gICAgcmV0dXJuIHJ1bGVTZXQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IHNlbGVjdG9yc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoc2VsZWN0b3JzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIHNlbGVjdG9ycyA9IGAke3NlbGVjdG9yc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHNlbGVjdG9ycztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IFJ1bGVTZXQgZnJvbSBcIi4vcnVsZVNldFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHJ1bGVTZXRRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiLyovcnVsZVNldFwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldHMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldHMpIHtcbiAgICBydWxlU2V0cy5mb3JFYWNoKChydWxlU2V0KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ1J1bGVTZXQgPSBydWxlU2V0LmZpbmRNYXRjaGluZ1J1bGVTZXQodGhpcy5hcnJheSk7IC8vL1xuXG4gICAgICAobWF0Y2hpbmdSdWxlU2V0ID09PSBudWxsKSA/XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChydWxlU2V0KSA6XG4gICAgICAgICAgbWF0Y2hpbmdSdWxlU2V0LnVuc2hpZnQocnVsZVNldCk7XG4gICAgfSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgY29uc3QgY3NzID0gdGhpcy5hcnJheS5yZWR1Y2UoKGNzcywgcnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgcnVsZVNldENTUyA9IHJ1bGVTZXQuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpO1xuXG4gICAgICBjc3MgKz0gcnVsZVNldENTUztcblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBydWxlU2V0Tm9kZXMgPSBydWxlU2V0UXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IHJ1bGVTZXROb2Rlcy5tYXAoKHJ1bGVTZXROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gcnVsZVNldE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZVNldCA9IFJ1bGVTZXQuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVsZVNldHMgPSBuZXcgUnVsZVNldHMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIHJ1bGVTZXRzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW0oc3RyaW5nKSB7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9bXFxuXFxyXSQvZywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLXF1ZXJ5XCI7XG5cbmltcG9ydCBSdWxlU2V0cyBmcm9tIFwiLi9ydWxlU2V0c1wiO1xuaW1wb3J0IERlY2xhcmF0aW9ucyBmcm9tIFwiLi9kZWNsYXJhdGlvbnNcIjtcblxuaW1wb3J0IHsgdHJpbSB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBUV09fU1BBQ0VTLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBxdWVyaWVzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhcIi9tZWRpYS9tZWRpYVF1ZXJpZXNcIik7IC8vL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYSB7XG4gIGNvbnN0cnVjdG9yKGRlY2xhcmF0aW9ucywgcnVsZVNldHMsIHF1ZXJpZXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9ucztcbiAgICB0aGlzLnJ1bGVTZXRzID0gcnVsZVNldHM7XG4gICAgdGhpcy5xdWVyaWVzID0gcXVlcmllcztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRSdWxlU2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlU2V0cztcbiAgfVxuXG4gIGdldFF1ZXJpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllcztcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgaW5kZW50ID0gaW5kZW50ICsgVFdPX1NQQUNFUztcblxuICAgIGxldCBjc3MgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICBjb25zdCBydWxlU2V0c0NTUyA9IHRoaXMucnVsZVNldHMuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgIGxldCBydWxlU2V0c0RlY2xhcmF0aW9uc0NTUyA9IGAke2RlY2xhcmF0aW9uc0NTU30ke3J1bGVTZXRzQ1NTfWA7XG5cbiAgICBpZiAocnVsZVNldHNEZWNsYXJhdGlvbnNDU1MgIT09IEVNUFRZX1NUUklORykge1xuICAgICAgcnVsZVNldHNEZWNsYXJhdGlvbnNDU1MgPSB0cmltKHJ1bGVTZXRzRGVjbGFyYXRpb25zQ1NTKTtcblxuICAgICAgY3NzID0gYEBtZWRpYSAke3RoaXMucXVlcmllc30ge1xuJHtydWxlU2V0c0RlY2xhcmF0aW9uc0NTU319XG5cbmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcXVlcmllcyA9IHF1ZXJpZXNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IE1lZGlhKGRlY2xhcmF0aW9ucywgcnVsZVNldHMsIHF1ZXJpZXMpO1xuXG4gICAgcmV0dXJuIG1lZGlhO1xuICB9XG59XG5cbmZ1bmN0aW9uIHF1ZXJpZXNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgcXVlcmllc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocXVlcmllc1F1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICBxdWVyaWVzID0gYCR7cXVlcmllc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHF1ZXJpZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLXF1ZXJ5XCI7XG5cbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9tZWRpYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IG1lZGlhUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhcIi9zdHlsZXNoZWV0L21lZGlhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYXMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQobWVkaWFzKSB7XG4gICAgbWVkaWFzLmZvckVhY2goKG1lZGlhKSA9PiB7XG4gICAgICB0aGlzLmFycmF5LnVuc2hpZnQobWVkaWEpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIG1lZGlhKSA9PiB7XG4gICAgICBjb25zdCBtZWRpYUNTUyA9IG1lZGlhLmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgICAgY3NzICs9IG1lZGlhQ1NTO1xuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhTm9kZXMgPSBtZWRpYVF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBtZWRpYU5vZGVzLm1hcCgobWVkaWFOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbWVkaWFOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIG1lZGlhID0gTWVkaWEuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIG1lZGlhO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1lZGlhcyA9IG5ldyBNZWRpYXMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIG1lZGlhcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBwZXJjZW50YWdlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhcIi8qL0BwZXJjZW50YWdlXCIpLFxuICAgICAgZGVjbGFyYXRpb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiLyovZGVjbGFyYXRpb25cIik7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBLZXlmcmFtZSB7XG4gIGNvbnN0cnVjdG9yKHBlcmNlbnRhZ2UsIGRlY2xhcmF0aW9uKSB7XG4gICAgdGhpcy5wZXJjZW50YWdlID0gcGVyY2VudGFnZTtcbiAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247XG4gIH1cblxuICBnZXRQZXJjZW50YWdlKCkge1xuICAgIHJldHVybiB0aGlzLnBlcmNlbnRhZ2U7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbjtcbiAgfVxuXG4gIGFzQ1NTKGluZGVudCkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uQ1NTID0gdGhpcy5kZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQpLFxuICAgICAgICAgIGNzcyA9IGAke2luZGVudH0ke3RoaXMucGVyY2VudGFnZX0geyBcbiR7ZGVjbGFyYXRpb25DU1N9JHtpbmRlbnR9fVxcbmA7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHBlcmNlbnRhZ2VDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocGVyY2VudGFnZVF1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlQ29udGVudCwgLy8vXG4gICAgICAgICAgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBmaXJzdERlY2xhcmF0aW9uTm9kZSA9IGZpcnN0KGRlY2xhcmF0aW9uTm9kZXMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uTm9kZSA9IGZpcnN0RGVjbGFyYXRpb25Ob2RlOyAvLy9cblxuICAgIG5vZGUgPSBkZWNsYXJhdGlvbk5vZGU7IC8vL1xuXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGtleWZyYW1lID0gbmV3IEtleWZyYW1lKHBlcmNlbnRhZ2UsIGRlY2xhcmF0aW9uKTtcblxuICAgIHJldHVybiBrZXlmcmFtZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuXG5pbXBvcnQgS2V5ZnJhbWUgZnJvbSBcIi4va2V5ZnJhbWVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HLCBUV09fU1BBQ0VTIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRlbnRcIjtcblxuY29uc3Qga2V5ZnJhbWVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiL2tleWZyYW1lcy9rZXlmcmFtZVwiKSxcbiAgICAgIGlkZW50aWZpZXJRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiL2tleWZyYW1lcy9AaWRlbnRpZmllclwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgS2V5ZnJhbWVzIHtcbiAgY29uc3RydWN0b3IoYXJyYXksIGlkZW50aWZpZXIpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gICAgdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjtcbiAgfVxuXG4gIGdldElkZW50aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpZmllcjtcbiAgfVxuXG4gIGFzQ1NTKGluZGVudCkge1xuICAgIGluZGVudCA9IGluZGVudCArIFRXT19TUEFDRVM7XG5cbiAgICBjb25zdCBrZXlmcmFtZXNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoa2V5ZnJhbWVzQ1NTLCBrZXlmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ZnJhbWVDU1MgPSBrZXlmcmFtZS5hc0NTUyhpbmRlbnQpO1xuXG4gICAgICAgICAgICBrZXlmcmFtZXNDU1MgKz0ga2V5ZnJhbWVDU1M7XG5cbiAgICAgICAgICAgIHJldHVybiBrZXlmcmFtZXNDU1M7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBjc3MgPSBgQGtleWZyYW1lcyAke3RoaXMuaWRlbnRpZmllcn0ge1xuJHtrZXlmcmFtZXNDU1N9fVxuXG5gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBrZXlmcmFtZU5vZGVzID0ga2V5ZnJhbWVRdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICAgIGFycmF5ID0ga2V5ZnJhbWVOb2Rlcy5tYXAoKGtleWZyYW1lTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGtleWZyYW1lTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBrZXlmcmFtZSA9IEtleWZyYW1lLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBrZXlmcmFtZTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBpZGVudGlmaWVyQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKGlkZW50aWZpZXJRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckNvbnRlbnQsIC8vL1xuICAgICAgICAgIGtleWZyYW1lcyA9IG5ldyBLZXlmcmFtZXMoYXJyYXksIGlkZW50aWZpZXIpO1xuXG4gICAgcmV0dXJuIGtleWZyYW1lcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuXG5pbXBvcnQgS2V5ZnJhbWVzIGZyb20gXCIuL2tleWZyYW1lc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGtleWZyYW1lc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoXCIvc3R5bGVzaGVldC9rZXlmcmFtZXNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEtleWZyYW1lc3Mge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQoa2V5ZnJhbWVzcykge1xuICAgIC8vL1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIGtleWZyYW1lcykgPT4ge1xuICAgICAgY29uc3Qga2V5ZnJhbWVzQ1NTID0ga2V5ZnJhbWVzLmFzQ1NTKGluZGVudCk7XG5cbiAgICAgIGNzcyArPSBrZXlmcmFtZXNDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qga2V5ZnJhbWVzTm9kZXMgPSBrZXlmcmFtZXNRdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICAgIGFycmF5ID0ga2V5ZnJhbWVzTm9kZXMubWFwKChrZXlmcmFtZXNOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0ga2V5ZnJhbWVzTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBrZXlmcmFtZXMgPSBLZXlmcmFtZXMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIGtleWZyYW1lcztcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBrZXlmcmFtZXNzID0gbmV3IEtleWZyYW1lc3MoYXJyYXkpO1xuXG4gICAgcmV0dXJuIGtleWZyYW1lc3M7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lZGlhcyBmcm9tIFwiLi9zdHlsZS9tZWRpYXNcIjtcbmltcG9ydCBSdWxlU2V0cyBmcm9tIFwiLi9zdHlsZS9ydWxlU2V0c1wiO1xuaW1wb3J0IEtleWZyYW1lc3MgZnJvbSBcIi4vc3R5bGUva2V5ZnJhbWVzc1wiO1xuaW1wb3J0IERlY2xhcmF0aW9ucyBmcm9tIFwiLi9zdHlsZS9kZWNsYXJhdGlvbnNcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBrZXlmcmFtZXNzLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5rZXlmcmFtZXNzID0ga2V5ZnJhbWVzcztcbiAgICB0aGlzLnJ1bGVTZXRzID0gcnVsZVNldHM7XG4gICAgdGhpcy5tZWRpYXMgPSBtZWRpYXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0S2V5ZnJhbWVzcygpIHtcbiAgICByZXR1cm4gdGhpcy5rZXlmcmFtZXNzO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBnZXRNZWRpYXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVkaWFzO1xuICB9XG5cbiAgZXh0ZW5kcyhzdXBlclN0eWxlKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25zID0gc3VwZXJTdHlsZS5nZXREZWNsYXJhdGlvbnMoKSxcbiAgICAgICAgICBrZXlmcmFtZXNzID0gc3VwZXJTdHlsZS5nZXRLZXlmcmFtZXNzKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIGtleWZyYW1lc3MsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIGtleWZyYW1lc3MsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5rZXlmcmFtZXNzLnVuc2hpZnQoa2V5ZnJhbWVzcyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBpbmRlbnQgPSBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpLFxuICAgICAgICAgIGtleWZyYW1lc3NDU1MgPSB0aGlzLmtleWZyYW1lc3MuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpLFxuICAgICAgICAgIHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIGluZGVudCksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpLFxuICAgICAgICAgIGNzcyA9IGAke2RlY2xhcmF0aW9uc0NTU30ke2tleWZyYW1lc3NDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBrZXlmcmFtZXNzID0gS2V5ZnJhbWVzcy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHJ1bGVTZXRzID0gUnVsZVNldHMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYXMgPSBNZWRpYXMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBzdHlsZSA9IG5ldyBTdHlsZShkZWNsYXJhdGlvbnMsIGtleWZyYW1lc3MsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHlsZSBmcm9tIFwiLi4vc3R5bGVcIjtcbmltcG9ydCBDU1NMZXhlciBmcm9tIFwiLi4vY3NzL2xleGVyXCI7XG5pbXBvcnQgQ1NTUGFyc2VyIGZyb20gXCIuLi9jc3MvcGFyc2VyXCI7XG5cbmltcG9ydCB7IEhFQUQsIFNUWUxFLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGNzc0xleGVyID0gQ1NTTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGNzc1BhcnNlciA9IENTU1BhcnNlci5mcm9tTm90aGluZygpO1xuXG5pZiAoIWdsb2JhbFRoaXMuc3R5bGVNYXApIHtcbiAgZ2xvYmFsVGhpcy5zdHlsZU1hcCA9IHt9O1xufVxuXG5jb25zdCB7IHN0eWxlTWFwIH0gPSBnbG9iYWxUaGlzO1xuXG5mdW5jdGlvbiByZW5kZXJTdHlsZShzdHlsZSkge1xuICBjb25zdCBoZWFkRE9NRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoSEVBRCksXG4gICAgICAgIHN0eWxlRE9NRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoU1RZTEUpLFxuICAgICAgICBpbm5lckhUTUwgPSBgICAgICAgICBcbiR7c3R5bGV9XG5gO1xuXG4gIE9iamVjdC5hc3NpZ24oc3R5bGVET01FbGVtZW50LCB7XG4gICAgaW5uZXJIVE1MXG4gIH0pO1xuXG4gIGhlYWRET01FbGVtZW50LmFwcGVuZENoaWxkKHN0eWxlRE9NRWxlbWVudCk7XG5cbiAgcmV0dXJuIHN0eWxlRE9NRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3R5bGVzKCkge1xuICBjb25zdCBzdHlsZXNDU1MgPSByZXRyaWV2ZVN0eWxlc0NTUygpLFxuICAgICAgICBzdHlsZSA9IHN0eWxlc0NTUzsgIC8vL1xuXG4gIHJlbmRlclN0eWxlKHN0eWxlKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTdHlsZShhcmdzLCBjbGFzc05hbWUsIHN1cGVyU3R5bGUgPSBudWxsKSB7XG4gIGNvbnN0IHN0cmluZ3MgPSBhcmdzLnNoaWZ0KCksXHQvLy9cbiAgICAgICAgY29udGVudCA9IHN0cmluZ3MucmVkdWNlKChjb250ZW50LCBzdHJpbmcsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpbmRleF0gfHwgbnVsbDtcblxuICAgICAgICAgIGNvbnRlbnQgPSAoYXJnID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRlbnR9JHtzdHJpbmd9JHthcmd9YDtcblxuICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpLFxuICAgICAgICB0b2tlbnMgPSBjc3NMZXhlci50b2tlbmlzZShjb250ZW50KSxcbiAgICAgICAgbm9kZSA9IGNzc1BhcnNlci5wYXJzZSh0b2tlbnMpLFxuICAgICAgICBzdHlsZSA9IFN0eWxlLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgaWYgKHN1cGVyU3R5bGUgIT09IG51bGwpIHtcbiAgICBzdHlsZS5leHRlbmRzKHN1cGVyU3R5bGUpO1xuICB9XG5cbiAgc3R5bGVNYXBbY2xhc3NOYW1lXSA9IHN0eWxlO1xufVxuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSkge1xuICBjb25zdCBzdHlsZSA9IHN0eWxlTWFwW2NsYXNzTmFtZV0gfHwgbnVsbDtcblxuICByZXR1cm4gc3R5bGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmVuZGVyU3R5bGUsXG4gIHJlbmRlclN0eWxlcyxcbiAgZ2VuZXJhdGVTdHlsZSxcbiAgcmV0cmlldmVTdHlsZVxufTtcblxuZnVuY3Rpb24gcmV0cmlldmVTdHlsZXNDU1MoKSB7XG4gIGNvbnN0IGNsYXNzTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZU1hcCksXG4gICAgICAgIHN0eWxlc0NTUyA9IGNsYXNzTmFtZXMucmVkdWNlKChzdHlsZXNDU1MsIGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0eWxlID0gcmV0cmlldmVTdHlsZShjbGFzc05hbWUpLFxuICAgICAgICAgICAgICAgIHN0eWxlQ1NTID0gc3R5bGUuYXNDU1MoY2xhc3NOYW1lKTtcblxuICAgICAgICAgIHN0eWxlc0NTUyArPSBzdHlsZUNTUztcblxuICAgICAgICAgIHJldHVybiBzdHlsZXNDU1M7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHN0eWxlc0NTUztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ0hBUkFDVEVSUywgRU1QVFlfU1RSSU5HLCBDTEFTU19OQU1FX0xFTkdUSCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgbGVuZ3RoID0gQ0xBU1NfTkFNRV9MRU5HVEgsXG4gICAgICBjaGFyYWN0ZXJzID0gQ0hBUkFDVEVSUyxcbiAgICAgIGNoYXJhY3RlcnNMZW5ndGggPSBjaGFyYWN0ZXJzLmxlbmd0aDtcblxuY29uc3QgY2xhc3NOYW1lcyA9IFtdO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDbGFzc05hbWUoKSB7XG4gIGxldCBjbGFzc05hbWUgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgY291bnQgPSAwOyBjb3VudCA8IGxlbmd0aDsgY291bnQrKykge1xuICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVyc0xlbmd0aCksXG4gICAgICAgICAgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpbmRleF07XG5cbiAgICBjbGFzc05hbWUgKz0gY2hhcmFjdGVyO1xuICB9XG5cbiAgY29uc3QgY2xhc3NOYW1lc0luY2x1ZGVzQ2xhc3NOYW1lID0gY2xhc3NOYW1lcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xuXG4gIGlmICghY2xhc3NOYW1lc0luY2x1ZGVzQ2xhc3NOYW1lKSB7XG4gICAgY2xhc3NOYW1lcy5wdXNoKGNsYXNzTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgY2xhc3NOYW1lID0gZ2VuZXJhdGVDbGFzc05hbWUoKTtcbiAgfVxuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXRyaWV2ZUNsYXNzTmFtZShlbGVtZW50KSB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lIH0gPSBlbGVtZW50LnJlYWN0RnVuY3Rpb24gfHwgZWxlbWVudC5yZWFjdENvbXBvbmVudC5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gY2xhc3NOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdlbmVyYXRlQ2xhc3NOYW1lLFxuICByZXRyaWV2ZUNsYXNzTmFtZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyB0YWdOYW1lcyB9IGZyb20gXCIuL3RhZ05hbWVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTU0xleGVyIH0gZnJvbSBcIi4vY3NzL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTU1BhcnNlciB9IGZyb20gXCIuL2Nzcy9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3R5bGVzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0eWxlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjbGFzc05hbWVVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvY2xhc3NOYW1lXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHN0eWxlc1V0aWxpdGllcyB9IGZyb20gXCIuL2luZGV4XCI7IC8vL1xuXG5jb25zdCB7IGdlbmVyYXRlU3R5bGUsIHJldHJpZXZlU3R5bGUsIHJlbmRlclN0eWxlcyB9ID0gc3R5bGVzVXRpbGl0aWVzO1xuXG5jb25zdCBmaXJhQ29kZUZvbnRNaXhpbiA9IGBcblxuICBmb250LXNpemU6IDEuM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGZvbnQtZmFtaWx5OiBcIkZpcmEgQ29kZVwiO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OyAvKiBGb3JjZSBsaWdhdHVyZXMgZm9yIFdlYmtpdCwgQmxpbmssIEdlY2tvICovXG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJjYWx0XCIgMTsgIC8qIEVuYWJsZSBsaWdhdHVyZXMgZm9yIElFIDEwKywgRWRnZSAqL1xuXG5gO1xuXG5jb25zdCBtb25vc3BhY2VGb250TWl4aW4gPSBgXG5cbiAgZm9udC1zaXplOiAxLjNyZW07XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICAgXG5gO1xuXG5nZW5lcmF0ZVN0eWxlKFtbYFxuXG4gIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG5cbiAgZGlzcGxheTogbm9uZTtcbiAgXG4gIC5hY3RpdmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG4gIFxuICBAa2V5ZnJhbWVzIHJlZGlzaCB7XG4gICAgMCUgeyBjb2xvcjogZGFya3JlZDsgfVxuICAgIDUwJSB7IGNvbG9yOiByZWQ7IH1cbiAgICAxMDAlIHsgY29sb3I6IGxpZ2h0cmVkOyB9XG4gIH1cbiAgXG4gIEBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuXG4gICAgcGFkZGluZy10b3A6IDFyZW07IFxuICAgIFxuICAgIC5tZW51IHtcbiAgICAgIG1hcmdpbjogMDsgICAgXG4gICAgfVxuXG4gIH1cblxuYF1dLCBcImFiY1wiKTtcblxuY29uc3Qgc3VwZXJTdHlsZSA9IHJldHJpZXZlU3R5bGUoXCJhYmNcIik7XG5cbmdlbmVyYXRlU3R5bGUoW1tgXG5cbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiAxMDAlO1xuICBjdXJzb3I6IGF1dG87XG4gIHJlc2l6ZTogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdGFiLXNpemU6IDI7XG4gIGJvcmRlci10b3A6IG5vbmU7XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICBjYXJldC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG4gIG92ZXJmbG93LXdyYXA6IG5vcm1hbDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgQGtleWZyYW1lcyBibHVlaXNoIHtcbiAgICAwJSB7IGNvbG9yOiBkYXJrYmx1ZTsgfVxuICAgIDUwJSB7IGNvbG9yOiBibHVlOyB9XG4gICAgMTAwJSB7IGNvbG9yOiBsaWdodGJsdWU7IH1cbiAgfVxuICBcbiAgOjpzZWxlY3Rpb24geyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICBcbiAgJHttb25vc3BhY2VGb250TWl4aW59XG5cbiAgLmZpcmEtY29kZSB7XG5cbiAgICAke2ZpcmFDb2RlRm9udE1peGlufVxuICAgIFxuICB9XG4gIFxuYF1dLCBcImRlZlwiLCBzdXBlclN0eWxlKTtcblxucmVuZGVyU3R5bGVzKCk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7O0FBQUE7Ozs7O21DQW9CQSxXQUFBOzs7ZUFBQTs7O0FBbEJBLFFBQU0sV0FBVztNQUNmO01BQUs7TUFBUTtNQUFXO01BQVM7TUFDakM7TUFBSztNQUFRO01BQU87TUFBTztNQUFjO01BQVE7TUFBTTtNQUN2RDtNQUFVO01BQVc7TUFBUTtNQUFRO01BQU87TUFDNUM7TUFBUTtNQUFZO01BQU07TUFBTztNQUFXO01BQU87TUFBVTtNQUFPO01BQU07TUFBTTtNQUFNO01BQVM7TUFBWTtNQUFjO01BQVU7TUFBVTtNQUM3STtNQUFNO01BQU07TUFBTTtNQUFNO01BQU07TUFBTTtNQUFRO01BQVU7TUFBTTtNQUM1RDtNQUFLO01BQVU7TUFBTztNQUFTO01BQU87TUFBTztNQUFTO01BQVU7TUFBTTtNQUN0RTtNQUFRO01BQU87TUFBUTtNQUFRO01BQVM7TUFBTztNQUMvQztNQUFVO01BQU07TUFBWTtNQUFVO01BQ3RDO01BQUs7TUFBUztNQUFXO01BQU87TUFDaEM7TUFBSztNQUFNO01BQU07TUFD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
|
|
27074
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3RhZ05hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3N0cmluZy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvYXN5bmNocm9ub3VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hamF4LmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2Jyb3dzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvc3BlY2lhbFN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdXRpbGl0aWVzL3J1bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ibmYvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy91dGlsaXRpZXMvdG9rZW4uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2Jhc2ljL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvcHl0aG9uU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9pbmRleC5qcyIsICJzcmMvY3NzL2VudHJpZXMuanMiLCAic3JjL2Nzcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbWl4aW5zL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy90b2tlbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2hvcml6b250YWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9jaGlsZE5vZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcGFyc2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZU5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL25vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvZXBzaWxvbk5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydENob2ljZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9lbmRPZkxpbmVOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0Q2hvaWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRDaG9pY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL3BhcnRDaG9pY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL3F1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcHJlY2VkZW5jZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wcmVjZWRlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9wcmVjZWRlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi90ZXJtaW5hbFBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvdGVybWluYWxTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9ub25UZXJtaW5hbFBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvb3BhY2l0eU1vZGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvbm9XaGl0ZXNwYWNlTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL29wYWNpdHlNb2RpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL29wYWNpdHlNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9jYWxsQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9jYWxsQWhlYWRNb2RpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL2NhbGxBaGVhZE1vZGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3F1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL29wdGlvbmFsUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3N0YXJ0T2ZDb250ZW50Tm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9zdGFydE9mQ29udGVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9zdGFydE9mQ29udGVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc3RhcnRPZkNvbnRlbnRQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3N0YXJ0T2ZDb250ZW50UGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ibmYvc3RhcnRPZkNvbnRlbnRQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi9vbmVPck1vcmVRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2JuZi96ZXJvT3JNb3JlUXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvaW5kZXguanMiLCAic3JjL2Nzcy9ibmYuanMiLCAic3JjL2Nzcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy9ydWxlTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy91dGlsaXRpZXMvbm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcXVlcnkvc3JjL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy9zcHJlYWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy9zdWJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1xdWVyeS9zcmMvZXhwcmVzc2lvbi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1xdWVyeS9zcmMvZXhwcmVzc2lvbi9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcXVlcnkvc3JjL2V4cHJlc3Npb24vYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1xdWVyeS9zcmMvZXhwcmVzc2lvbi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy9leHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1xdWVyeS9zcmMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXF1ZXJ5L3NyYy9pbmRleC5qcyIsICJzcmMvY29uc3RhbnRzLmpzIiwgInNyYy91dGlsaXRpZXMvY29udGVudC5qcyIsICJzcmMvc3R5bGUvZGVjbGFyYXRpb24uanMiLCAic3JjL3N0eWxlL2RlY2xhcmF0aW9ucy5qcyIsICJzcmMvc3R5bGUvcnVsZVNldC5qcyIsICJzcmMvc3R5bGUvcnVsZVNldHMuanMiLCAic3JjL3V0aWxpdGllcy9zdHJpbmcuanMiLCAic3JjL3N0eWxlL21lZGlhLmpzIiwgInNyYy9zdHlsZS9tZWRpYXMuanMiLCAic3JjL3N0eWxlL2tleWZyYW1lLmpzIiwgInNyYy9zdHlsZS9rZXlmcmFtZXMuanMiLCAic3JjL3N0eWxlL2tleWZyYW1lc3MuanMiLCAic3JjL3N0eWxlLmpzIiwgInNyYy91dGlsaXRpZXMvc3R5bGVzLmpzIiwgInNyYy91dGlsaXRpZXMvY2xhc3NOYW1lLmpzIiwgInNyYy9pbmRleC5qcyIsICJzcmMvZXhhbXBsZS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHRhZ05hbWVzID0gW1xuICBcImFcIiwgXCJhYmJyXCIsIFwiYWRkcmVzc1wiLCBcImFzaWRlXCIsIFwiYXVkaW9cIixcbiAgXCJiXCIsIFwiYmFzZVwiLCBcImJkaVwiLCBcImJkb1wiLCBcImJsb2NrcXVvdGVcIiwgXCJib2R5XCIsIFwiYnJcIiwgXCJidXR0b25cIixcbiAgXCJjYW52YXNcIiwgXCJjYXB0aW9uXCIsIFwiY2l0ZVwiLCBcImNvZGVcIiwgXCJjb2xcIiwgXCJjb2xncm91cFwiLFxuICBcImRhdGFcIiwgXCJkYXRhbGlzdFwiLCBcImRkXCIsIFwiZGVsXCIsIFwiZGV0YWlsc1wiLCBcImRmblwiLCBcImRpYWxvZ1wiLCBcImRpdlwiLCBcImRsXCIsIFwiZHRcIiwgXCJlbVwiLCBcImVtYmVkXCIsIFwiZmllbGRzZXRcIiwgXCJmaWdjYXB0aW9uXCIsIFwiZmlndXJlXCIsIFwiZm9vdGVyXCIsIFwiZm9ybVwiLFxuICBcImgxXCIsIFwiaDJcIiwgXCJoM1wiLCBcImg0XCIsIFwiaDVcIiwgXCJoNlwiLCBcImhlYWRcIiwgXCJoZWFkZXJcIiwgXCJoclwiLCBcImh0bWxcIixcbiAgXCJpXCIsIFwiaWZyYW1lXCIsIFwiaW1nXCIsIFwiaW5wdXRcIiwgXCJpbnNcIiwgXCJrYmRcIiwgXCJsYWJlbFwiLCBcImxlZ2VuZFwiLCBcImxpXCIsIFwibGlua1wiLFxuICBcIm1haW5cIiwgXCJtYXBcIiwgXCJtYXJrXCIsIFwibWV0YVwiLCBcIm1ldGVyXCIsIFwibmF2XCIsIFwibm9zY3JpcHRcIixcbiAgXCJvYmplY3RcIiwgXCJvbFwiLCBcIm9wdGdyb3VwXCIsIFwib3B0aW9uXCIsIFwib3V0cHV0XCIsXG4gIFwicFwiLCBcInBhcmFtXCIsIFwicGljdHVyZVwiLCBcInByZVwiLCBcInByb2dyZXNzXCIsXG4gIFwicVwiLCBcInJwXCIsIFwicnRcIiwgXCJydWJ5XCIsXG4gIFwic1wiLCBcInNhbXBcIiwgXCJzY3JpcHRcIiwgXCJzZWN0aW9uXCIsIFwic2VsZWN0XCIsIFwic21hbGxcIiwgXCJzb3VyY2VcIiwgXCJzcGFuXCIsIFwic3Ryb25nXCIsIFwic3R5bGVcIiwgXCJzdWJcIiwgXCJzdW1tYXJ5XCIsIFwic3VwXCIsIFwic3ZnXCIsXG4gIFwidGFibGVcIiwgXCJ0Ym9keVwiLCBcInRkXCIsIFwidGVtcGxhdGVcIiwgXCJ0ZXh0YXJlYVwiLCBcInRmb290XCIsIFwidGhcIiwgXCJ0aGVhZFwiLCBcInRpbWVcIiwgXCJ0aXRsZVwiLCBcInRyXCIsIFwidHJhY2tcIixcbiAgXCJ1XCIsIFwidWxcIixcbiAgXCJ2YXJcIiwgXCJ2aWRlb1wiLFxuICBcIndiclwiXG5dO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdOYW1lcztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFRSQUNFX0xFVkVMID0gXCJ0cmFjZVwiO1xuZXhwb3J0IGNvbnN0IERFQlVHX0xFVkVMID0gXCJkZWJ1Z1wiO1xuZXhwb3J0IGNvbnN0IElORk9fTEVWRUwgPSBcImluZm9cIjtcbmV4cG9ydCBjb25zdCBXQVJOSU5HX0xFVkVMID0gXCJ3YXJuaW5nXCI7XG5leHBvcnQgY29uc3QgRVJST1JfTEVWRUwgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgRkFUQUxfTEVWRUwgPSBcImZhdGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVFJBQ0VfTEVWRUwsXG4gIERFQlVHX0xFVkVMLFxuICBJTkZPX0xFVkVMLFxuICBXQVJOSU5HX0xFVkVMLFxuICBFUlJPUl9MRVZFTCxcbiAgRkFUQUxfTEVWRUxcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBHRVRfTUVUSE9EID0gXCJHRVRcIjtcbmV4cG9ydCBjb25zdCBQT1NUX01FVEhPRCA9IFwiUE9TVFwiO1xuZXhwb3J0IGNvbnN0IFBBVENIX01FVEhPRCA9IFwiUEFUQ0hcIjtcbmV4cG9ydCBjb25zdCBERUxFVEVfTUVUSE9EID0gXCJERUxFVEVcIjtcbmV4cG9ydCBjb25zdCBPUFRJT05TX01FVEhPRCA9IFwiT1BUSU9OU1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEdFVF9NRVRIT0QsXG4gIFBPU1RfTUVUSE9ELFxuICBQQVRDSF9NRVRIT0QsXG4gIERFTEVURV9NRVRIT0QsXG4gIE9QVElPTlNfTUVUSE9EXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUFJBR01BX0hFQURFUiA9IFwicHJhZ21hXCI7XG5leHBvcnQgY29uc3QgQUNDRVBUX0hFQURFUiA9IFwiYWNjZXB0XCI7XG5leHBvcnQgY29uc3QgTE9DQVRJT05fSEVBREVSID0gXCJsb2NhdGlvblwiO1xuZXhwb3J0IGNvbnN0IFVTRVJfQUdFTlRfSEVBREVSID0gXCJ1c2VyLWFnZW50XCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9UWVBFX0hFQURFUiA9IFwiY29udGVudC10eXBlXCI7XG5leHBvcnQgY29uc3QgQVVUSE9SSVpBVElPTl9IRUFERVIgPSBcImF1dGhvcml6YXRpb25cIjtcbmV4cG9ydCBjb25zdCBDQUNIRV9DT05UUk9MX0hFQURFUiA9IFwiY2FjaGUtY29udHJvbFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfTEVOR1RIX0hFQURFUiA9IFwiY29udGVudC1sZW5ndGhcIjtcbmV4cG9ydCBjb25zdCBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIgPSBcInRyYW5zZmVyLWVuY29kaW5nXCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9ESVNQT1NJVElPTl9IRUFERVIgPSBcImNvbnRlbnQtZGlzcG9zaXRpb25cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfUkVRVUVTVF9NRVRIT0RfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LW1ldGhvZFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFBSQUdNQV9IRUFERVIsXG4gIEFDQ0VQVF9IRUFERVIsXG4gIExPQ0FUSU9OX0hFQURFUixcbiAgVVNFUl9BR0VOVF9IRUFERVIsXG4gIENPTlRFTlRfVFlQRV9IRUFERVIsXG4gIEFVVEhPUklaQVRJT05fSEVBREVSLFxuICBDQUNIRV9DT05UUk9MX0hFQURFUixcbiAgQ09OVEVOVF9MRU5HVEhfSEVBREVSLFxuICBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIsXG4gIENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfSEVBREVSU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUlxufTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUQUJfS0VZX0NPREUgPSA5O1xuZXhwb3J0IGNvbnN0IFNISUZUX0tFWV9DT0RFID0gMTY7XG5leHBvcnQgY29uc3QgRU5URVJfS0VZX0NPREUgPSAxMztcbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZX0NPREUgPSAyNztcbmV4cG9ydCBjb25zdCBERUxFVEVfS0VZX0NPREUgPSA0NjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfS0VZX0NPREUgPSA4O1xuZXhwb3J0IGNvbnN0IEFSUk9XX1VQX0tFWV9DT0RFID0gMzg7XG5leHBvcnQgY29uc3QgQVJST1dfRE9XTl9LRVlfQ09ERSA9IDQwO1xuZXhwb3J0IGNvbnN0IEFSUk9XX0xFRlRfS0VZX0NPREUgPSAzNztcbmV4cG9ydCBjb25zdCBBUlJPV19SSUdIVF9LRVlfQ09ERSA9IDM5O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRBQl9LRVlfQ09ERSxcbiAgU0hJRlRfS0VZX0NPREUsXG4gIEVOVEVSX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZX0NPREUsXG4gIERFTEVURV9LRVlfQ09ERSxcbiAgQkFDS1NQQUNFX0tFWV9DT0RFLFxuICBBUlJPV19VUF9LRVlfQ09ERSxcbiAgQVJST1dfRE9XTl9LRVlfQ09ERSxcbiAgQVJST1dfTEVGVF9LRVlfQ09ERSxcbiAgQVJST1dfUklHSFRfS0VZX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVVEY4X0VOQ09ESU5HID0gXCJ1dGY4XCI7XG5leHBvcnQgY29uc3QgVVRGXzhfRU5DT0RJTkcgPSBcInV0Zi04XCI7XG5leHBvcnQgY29uc3QgQkFTRTY0X0VOQ09ESU5HID0gXCJiYXNlNjRcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBVVEY4X0VOQ09ESU5HLFxuICBVVEZfOF9FTkNPRElORyxcbiAgQkFTRTY0X0VOQ09ESU5HXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVVBfQ0hBUkFDVEVSID0gXCJcdTAwMWJbQVwiO1xuZXhwb3J0IGNvbnN0IEVUWF9DSEFSQUNURVIgPSBcIlxcdTAwMDNcIjtcbmV4cG9ydCBjb25zdCBCQVJfQ0hBUkFDVEVSID0gXCJ8XCI7XG5leHBvcnQgY29uc3QgSEFUX0NIQVJBQ1RFUiA9IFwiXlwiO1xuZXhwb3J0IGNvbnN0IFBMVVNfQ0hBUkFDVEVSID0gXCIrXCI7XG5leHBvcnQgY29uc3QgREFTSF9DSEFSQUNURVIgPSBcIi1cIjtcbmV4cG9ydCBjb25zdCBET1dOX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0JcIjtcbmV4cG9ydCBjb25zdCBMRUZUX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0RcIjtcbmV4cG9ydCBjb25zdCBSSUdIVF9DSEFSQUNURVIgPSBcIlx1MDAxYltDXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IERPTExBUl9DSEFSQUNURVIgPSBcIiRcIjtcbmV4cG9ydCBjb25zdCBDVFJMX0NfQ0hBUkFDVEVSID0gXCJeQ1wiO1xuZXhwb3J0IGNvbnN0IEVTQ0FQRV9DSEFSQUNURVIgPSBcIlxcdTAwMWJcIjtcbmV4cG9ydCBjb25zdCBBU1RFUklTS19DSEFSQUNURVIgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBXSUxEQ0FSRF9DSEFSQUNURVIgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBCQUNLVElDS19ERUxJTUlURVIgPSBcImBcIjtcbmV4cG9ydCBjb25zdCBORVdfTElORV9DSEFSQUNURVIgPSBcIlxcblwiO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBCQUNLU0xBU0hfQ0hBUkFDVEVSID0gXCJcXFxcXCI7XG5leHBvcnQgY29uc3QgQkFDS1NQQUNFX0NIQVJBQ1RFUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTI3KTtcbmV4cG9ydCBjb25zdCBRVUVTVElPTl9NQVJLX0NIQVJBQ1RFUiA9IFwiP1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgT1BFTklOR19CUkFDS0VUX0NIQVJBQ1RFUiA9IFwiKFwiO1xuZXhwb3J0IGNvbnN0IENMT1NJTkdfQlJBQ0tFVF9DSEFSQUNURVIgPSBcIilcIjtcbmV4cG9ydCBjb25zdCBDQVJSSUFHRV9SRVRVUk5fQ0hBUkFDVEVSID0gXCJcXHJcIjtcbmV4cG9ydCBjb25zdCBFWENMQU1BVElPTl9NQVJLX0NIQVJBQ1RFUiA9IFwiIVwiO1xuZXhwb3J0IGNvbnN0IE9QRU5JTkdfQ1VSTFlfQlJBQ0tFVF9DSEFSQUNURVIgPSBcIntcIjtcbmV4cG9ydCBjb25zdCBDTE9TSU5HX0NVUkxZX0JSQUNLRVRfQ0hBUkFDVEVSID0gXCJ9XCI7XG5leHBvcnQgY29uc3QgT1BFTklOR19TUVVBUkVfQlJBQ0tFVF9DSEFSQUNURVIgPSBcIltcIjtcbmV4cG9ydCBjb25zdCBDTE9TSU5HX1NRVUFSRV9CUkFDS0VUX0NIQVJBQ1RFUiA9IFwiXVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFVQX0NIQVJBQ1RFUixcbiAgRVRYX0NIQVJBQ1RFUixcbiAgQkFSX0NIQVJBQ1RFUixcbiAgSEFUX0NIQVJBQ1RFUixcbiAgUExVU19DSEFSQUNURVIsXG4gIERBU0hfQ0hBUkFDVEVSLFxuICBET1dOX0NIQVJBQ1RFUixcbiAgTEVGVF9DSEFSQUNURVIsXG4gIFJJR0hUX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgRE9MTEFSX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgRVNDQVBFX0NIQVJBQ1RFUixcbiAgQVNURVJJU0tfQ0hBUkFDVEVSLFxuICBXSUxEQ0FSRF9DSEFSQUNURVIsXG4gIEJBQ0tUSUNLX0RFTElNSVRFUixcbiAgTkVXX0xJTkVfQ0hBUkFDVEVSLFxuICBBTVBFUlNBTkRfQ0hBUkFDVEVSLFxuICBCQUNLU0xBU0hfQ0hBUkFDVEVSLFxuICBCQUNLU1BBQ0VfQ0hBUkFDVEVSLFxuICBRVUVTVElPTl9NQVJLX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIE9QRU5JTkdfQlJBQ0tFVF9DSEFSQUNURVIsXG4gIENMT1NJTkdfQlJBQ0tFVF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSLFxuICBPUEVOSU5HX0NVUkxZX0JSQUNLRVRfQ0hBUkFDVEVSLFxuICBDTE9TSU5HX0NVUkxZX0JSQUNLRVRfQ0hBUkFDVEVSLFxuICBPUEVOSU5HX1NRVUFSRV9CUkFDS0VUX0NIQVJBQ1RFUixcbiAgQ0xPU0lOR19TUVVBUkVfQlJBQ0tFVF9DSEFSQUNURVJcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBaRVJPXzBfU1RBVFVTX0NPREUgPSAwO1xuZXhwb3J0IGNvbnN0IE9LXzIwMF9TVEFUVVNfQ09ERSA9IDIwMDtcbmV4cG9ydCBjb25zdCBGT1VORF8zMDJfU1RBVFVTX0NPREUgPSAzMDI7XG5leHBvcnQgY29uc3QgQ1JFQVRFRF8yMDFfU1RBVFVTX0NPREUgPSAyMDE7XG5leHBvcnQgY29uc3QgU0VFX09USEVSXzMwM19TVEFUVVNfQ09ERSA9IDMwMztcbmV4cG9ydCBjb25zdCBGT1JCSURERU5fNDAzX1NUQVRVU19DT0RFID0gNDAzO1xuZXhwb3J0IGNvbnN0IE5PVF9GT1VORF80MDRfU1RBVFVTX0NPREUgPSA0MDQ7XG5leHBvcnQgY29uc3QgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX0NPREUgPSAyMDQ7XG5leHBvcnQgY29uc3QgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19DT0RFID0gNTAyO1xuZXhwb3J0IGNvbnN0IEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfQ09ERSA9IDQwMDtcbmV4cG9ydCBjb25zdCBVTkFVVEhPUklaRURfNDAxX1NUQVRVU19DT0RFID0gNDAxO1xuZXhwb3J0IGNvbnN0IFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX0NPREUgPSA0MDg7XG5leHBvcnQgY29uc3QgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19DT0RFID0gNDI5O1xuZXhwb3J0IGNvbnN0IFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19DT0RFID0gNTAzO1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREUgPSA1MDA7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgWkVST18wX1NUQVRVU19DT0RFLFxuICBPS18yMDBfU1RBVFVTX0NPREUsXG4gIEZPVU5EXzMwMl9TVEFUVVNfQ09ERSxcbiAgQ1JFQVRFRF8yMDFfU1RBVFVTX0NPREUsXG4gIFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUsXG4gIEZPUkJJRERFTl80MDNfU1RBVFVTX0NPREUsXG4gIE5PVF9GT1VORF80MDRfU1RBVFVTX0NPREUsXG4gIE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFLFxuICBCQURfR0FURVdBWV81MDJfU1RBVFVTX0NPREUsXG4gIEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfQ09ERSxcbiAgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfQ09ERSxcbiAgUkVRVUVTVF9USU1FT1VUXzQwOF9TVEFUVVNfQ09ERSxcbiAgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19DT0RFLFxuICBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfQ09ERSxcbiAgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfQ09ERVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFRFWFRfSFRNTF9DT05URU5UX1RZUEUgPSBcInRleHQvaHRtbFwiO1xuZXhwb3J0IGNvbnN0IFRFWFRfUExBSU5fQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUgPSBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUgPSBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTl9PQ1RFVF9TVFJFQU1fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjtcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTl9YX1dXV19GT1JNX0VOQ09ERURfQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIjtcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTl9KU09OX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9dXRmLThcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBURVhUX0hUTUxfQ09OVEVOVF9UWVBFLFxuICBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gIFRFWFRfSFRNTF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fT0NURVRfU1RSRUFNX0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVST18wX1NUQVRVU19NRVNTQUdFID0gXCJcIjtcbmV4cG9ydCBjb25zdCBPS18yMDBfU1RBVFVTX01FU1NBR0UgPSBcIk9LXCI7XG5leHBvcnQgY29uc3QgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFID0gXCJGb3VuZFwiO1xuZXhwb3J0IGNvbnN0IENSRUFURURfMjAxX1NUQVRVU19NRVNTQUdFID0gXCJDcmVhdGVkXCI7XG5leHBvcnQgY29uc3QgU0VFX09USEVSXzMwM19TVEFUVVNfTUVTU0FHRSA9IFwiU2VlIG90aGVyXCI7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfTUVTU0FHRSA9IFwiRm9yYmlkZGVuXCI7XG5leHBvcnQgY29uc3QgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfTUVTU0FHRSA9IFwiTm90IGZvdW5kXCI7XG5leHBvcnQgY29uc3QgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX01FU1NBR0UgPSBcIk5vIGNvbnRlbnRcIjtcbmV4cG9ydCBjb25zdCBCQURfR0FURVdBWV81MDJfU1RBVFVTX01FU1NBR0UgPSBcIkJhZCBnYXRld2F5XCI7XG5leHBvcnQgY29uc3QgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19NRVNTQUdFID0gXCJCYWQgcmVxdWVzdFwiO1xuZXhwb3J0IGNvbnN0IFVOQVVUSE9SSVpFRF80MDFfU1RBVFVTX01FU1NBR0UgPSBcIlVuYXV0aG9yaXplZFwiO1xuZXhwb3J0IGNvbnN0IFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX01FU1NBR0UgPSBcIlJlcXVlc3QgdGltZW91dFwiO1xuZXhwb3J0IGNvbnN0IFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfTUVTU0FHRSA9IFwiVG9vIG1hbnkgcmVxdWVzdHNcIjtcbmV4cG9ydCBjb25zdCBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfTUVTU0FHRSA9IFwiU2VydmljZSB1bmF2YWlsYWJsZVwiO1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX01FU1NBR0UgPSBcIkludGVybmFsIHNlcnZlciBlcnJvclwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFpFUk9fMF9TVEFUVVNfTUVTU0FHRSxcbiAgT0tfMjAwX1NUQVRVU19NRVNTQUdFLFxuICBGT1VORF8zMDJfU1RBVFVTX01FU1NBR0UsXG4gIENSRUFURURfMjAxX1NUQVRVU19NRVNTQUdFLFxuICBTRUVfT1RIRVJfMzAzX1NUQVRVU19NRVNTQUdFLFxuICBGT1JCSURERU5fNDAzX1NUQVRVU19NRVNTQUdFLFxuICBOT1RfRk9VTkRfNDA0X1NUQVRVU19NRVNTQUdFLFxuICBOT19DT05URU5UXzIwNF9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19NRVNTQUdFLFxuICBCQURfUkVRVUVTVF80MDBfU1RBVFVTX01FU1NBR0UsXG4gIFVOQVVUSE9SSVpFRF80MDFfU1RBVFVTX01FU1NBR0UsXG4gIFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX01FU1NBR0UsXG4gIFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfTUVTU0FHRSxcbiAgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX01FU1NBR0UsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX01FU1NBR0Vcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBaRVJPID0gXCIwXCI7XG5leHBvcnQgY29uc3QgREFUQSA9IFwiZGF0YVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gXCJudW1iZXJcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVCA9IFwiZGVmYXVsdFwiO1xuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gXCJFTlZJUk9OTUVOVFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9KU09OID0gXCJwYWNrYWdlLmpzb25cIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0KGFycmF5KSB7IHJldHVybiBhcnJheVswXTt9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzFdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZChhcnJheSkgeyByZXR1cm4gYXJyYXlbMl07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbM107IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoKGFycmF5KSB7IHJldHVybiBhcnJheVs0XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc2l4dGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzVdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXZlbnRoKGFycmF5KSB7IHJldHVybiBhcnJheVs2XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZWlnaHRoKGFycmF5KSB7IHJldHVybiBhcnJheVs3XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbmludGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzhdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW50aChhcnJheSkgeyByZXR1cm4gYXJyYXlbOV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0TGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY29uZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA0XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlmdGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA1XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc2l4dGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA2XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gc2V2ZW50aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDddOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBlaWdodGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA4XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbmludGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA5XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBNYXRoLm1heCgxLCBhcnJheS5sZW5ndGggLSAxKSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXlBLCBhcnJheUIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXlBLCBhcnJheUIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNoaWZ0KGFycmF5QSwgYXJyYXlCKSB7IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGFycmF5QSwgYXJyYXlCKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KGFycmF5QSwgZWxlbWVudE9yQXJyYXkyKSB7XG4gIGNvbnN0IGFycmF5QiA9IChlbGVtZW50T3JBcnJheTIgaW5zdGFuY2VvZiBBcnJheSkgP1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50T3JBcnJheTIgOlxuICAgICAgICAgICAgICAgICAgICAgWyBlbGVtZW50T3JBcnJheTIgXTtcbiAgXG4gIHB1c2goYXJyYXlBLCBhcnJheUIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5QSwgYXJyYXlCKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheUIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXlBLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Qik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheUEsIGFycmF5QikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheUEsIGFycmF5Qik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGg7XG5cbiAgaWYgKGFycmF5QUxlbmd0aCA9PT0gYXJyYXlCTGVuZ3RoKSB7XG4gICAgbWF0Y2hlcyA9IGFycmF5QS5ldmVyeSgoZWxlbWVudEEsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50QiA9IGFycmF5QltpbmRleF0sXG4gICAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50QSwgZWxlbWVudEIsIGluZGV4KTtcblxuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZShhcnJheUEsIGFycmF5QiwgY2FsbGJhY2spIHtcbiAgbGV0IGNvdXBsZWQgPSBmYWxzZTtcblxuICBjb25zdCBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoLFxuICAgICAgICBhcnJheUJMZW5ndGggPSBhcnJheUIubGVuZ3RoO1xuXG4gIGlmIChhcnJheUFMZW5ndGggPT09IGFycmF5Qkxlbmd0aCkge1xuICAgIGFycmF5QiA9IFsgIC8vL1xuICAgICAgLi4uYXJyYXlCXG4gICAgXTtcblxuICAgIGNvdXBsZWQgPSBhcnJheUEuZXZlcnkoKGVsZW1lbnRBLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudEIgPSBleHRyYWN0KGFycmF5QiwgKGVsZW1lbnRCKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnRBLCBlbGVtZW50Qik7XG5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuXG4gICAgICBpZiAoZWxlbWVudEIgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY291cGxlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcnJlbGF0ZShhcnJheUEsIGFycmF5QiwgY2FsbGJhY2spIHtcbiAgYXJyYXlCID0gWyAgLy8vXG4gICAgLi4uYXJyYXlCXG4gIF07XG5cbiAgY29uc3QgY29ycmVsYXRlcyA9IGFycmF5QS5ldmVyeSgoZWxlbWVudEEpID0+IHtcbiAgICBjb25zdCBlbGVtZW50QiA9IGV4dHJhY3QoYXJyYXlCLCAoZWxlbWVudEIpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnRBLCBlbGVtZW50Qik7XG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChlbGVtZW50QiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY29ycmVsYXRlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUoYXJyYXlBLCBhcnJheUIsIGNhbGxiYWNrKSB7XG4gIGxldCByZXNvbHZlZDtcblxuICBhcnJheUEgPSBbICAvLy9cbiAgICAuLi5hcnJheUFcbiAgXTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgYXJyYXlBTGVuZ3RoID0gYXJyYXlBLmxlbmd0aDtcblxuICAgIGlmIChhcnJheUFMZW5ndGggPT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlZCA9IGZhbHNlO1xuXG4gICAgYXJyYXlBLmZvckVhY2goKGVsZW1lbnRBKSA9PiB7XG4gICAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50QSk7XG5cbiAgICAgIGlmIChwYXNzZWQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudEIgPSBlbGVtZW50QTsgIC8vL1xuXG4gICAgICAgIGFycmF5Qi5wdXNoKGVsZW1lbnRCKTtcblxuICAgICAgICByZXNvbHZlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc29sdmVkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBmaWx0ZXIoYXJyYXlBLCAoZWxlbWVudEEpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5QkluY2x1ZGVzRWxlbWVudEEgPSBhcnJheUIuaW5jbHVkZXMoZWxlbWVudEEpO1xuXG4gICAgICBpZiAoIWFycmF5QkluY2x1ZGVzRWxlbWVudEEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoO1xuXG4gIHJlc29sdmVkID0gKGFycmF5QUxlbmd0aCA9PT0gMCk7XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgZWxlbWVudHMgPSBbXTtcblxuICBmb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlKGFycmF5LCBlbGVtZW50LCBjYWxsYmFjaykge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgc3RhcnQgPSBpbmRleDsgIC8vL1xuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgaWYgKGZvdW5kKSB7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpY2UoYXJyYXlBLCBzdGFydCwgZGVsZXRlQ291bnQgPSBJbmZpbml0eSwgYXJyYXlCID0gW10pIHtcbiAgY29uc3QgYXJncyA9IFsgc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5hcnJheUIgXSxcbiAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShhcnJheUEsIGFyZ3MpO1xuXG4gIHJldHVybiBkZWxldGVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGRlbGV0ZWRFbGVtZW50cyA9IFtdO1xuICBcbiAgYmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgICAgZmlyc3REZWxldGVkRWxlbWVudCA9IGZpcnN0KGRlbGV0ZWRFbGVtZW50cyk7XG4gICAgICBcbiAgICAgIGRlbGV0ZWRFbGVtZW50cy51bnNoaWZ0KGZpcnN0RGVsZXRlZEVsZW1lbnQpOyAgLy8vXG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBkZWxldGVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgY2FsbGJhY2spIHtcbiAgbGV0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICBcbiAgYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgZGVsZXRlZEVsZW1lbnQgPSBmaXJzdERlbGV0ZWRFbGVtZW50OyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICByZXR1cm4gZGVsZXRlZEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaykge1xuICBsZXQgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuXG4gICAgICBkZWxldGVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZGVsZXRlZEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaChhcnJheSwgZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cblxuICBpZiAoZm91bmQpIHtcbiAgICBhcnJheS5wdXNoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGxldCBpbmRleDEgPSAwLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleDEgPCBsZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50QiA9IGFycmF5W2luZGV4MV07XG5cbiAgICBmb3IgKGxldCBpbmRleDIgPSBsZW5ndGggLSAxOyBpbmRleDIgPiBpbmRleDE7IGluZGV4Mi0tKSB7XG4gICAgICBjb25zdCBlbGVtZW50QSA9IGFycmF5W2luZGV4Ml0sXG4gICAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50QSwgZWxlbWVudEIpO1xuXG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgyLCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluZGV4MSsrO1xuXG4gICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheSA9IFtcbiAgICAuLi5hcnJheUEsXG4gICAgLi4uYXJyYXlCXG4gIF07XG5cbiAgY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnNlKGFycmF5KSB7XG4gIGFycmF5ID0gWyAvLy9cbiAgICAuLi5hcnJheVxuICBdLnJldmVyc2UoKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBhcnJheUIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheUEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGUoYXJyYXksIGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheUEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Qi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlOyAvLy9cblxuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsgLy8vXG5cbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgc2l4dGgsXG4gIHNldmVudGgsXG4gIGVpZ2h0aCxcbiAgbmludGgsXG4gIGZpcnN0TGFzdCxcbiAgc2Vjb25kTGFzdCxcbiAgdGhpcmRMYXN0LFxuICBmb3VydGhMYXN0LFxuICBmaWZ0aExhc3QsXG4gIHNpeHRoTGFzdCxcbiAgc2V2ZW50aExhc3QsXG4gIGVpZ2h0aExhc3QsXG4gIG5pbnRoTGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBtYXRjaCxcbiAgY29tcGFyZSxcbiAgY29ycmVsYXRlLFxuICByZXNvbHZlLFxuICBmaW5kLFxuICByZXBsYWNlLFxuICBzcGxpY2UsXG4gIGZpbHRlcixcbiAgcHJ1bmUsXG4gIGV4dHJhY3QsXG4gIHBhdGNoLFxuICBjb21wcmVzcyxcbiAgY29tYmluZSxcbiAgcmV2ZXJzZSxcbiAgYXVnbWVudCxcbiAgc2VwYXJhdGUsXG4gIGZvcndhcmRzRmluZCxcbiAgYmFja3dhcmRzRmluZCxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCBsYXN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoTmFtZShwYXRoKSB7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAvLy9cblxuICBjb25zdCBwYXRoTmFtZSA9ICgvXFwvLy50ZXN0KHBhdGgpID09PSBmYWxzZSk7XG5cbiAgcmV0dXJuIHBhdGhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoVG9wbW9zdE5hbWUocGF0aCkge1xuICBjb25zdCBwYXRoTmFtZSA9IGlzUGF0aE5hbWUocGF0aCksXG4gICAgICAgIHBhdGhBYnNvbHV0ZVBhdGggPSBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCksXG4gICAgICAgIHBhdGhUb3Btb3N0TmFtZSA9IChwYXRoTmFtZSAmJiBwYXRoQWJzb2x1dGVQYXRoKTtcblxuICByZXR1cm4gcGF0aFRvcG1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoUmVsYXRpdmVQYXRoKHBhdGgpIHtcbiAgY29uc3QgcGF0aFJlbGF0aXZlUGF0aCA9ICEvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aFJlbGF0aXZlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEFic29sdXRlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhBYnNvbHV0ZVBhdGggPSAvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCh0b3Btb3N0TmFtZSwgYWJzb2x1dGVQYXRoKSB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4ke3RvcG1vc3ROYW1lfSg/OlxcXFwvLispPyRgKSxcbiAgICAgICAgdG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCA9IHJlZ0V4cC50ZXN0KGFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgbGV0IGNvbWJpbmVkUGF0aCA9IG51bGw7XG5cbiAgY29uc3QgcGF0aE5hbWVzID0gcGF0aC5zcGxpdCgvXFwvLyksXG4gICAgICAgIHJlbGF0aXZlUGF0aE5hbWVzID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9cXC8vKTtcblxuICBsZXQgbGFzdFBhdGhOYW1lLFxuICAgICAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gIGlmIChmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPT09IFwiLlwiKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgfVxuXG4gIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuXG4gIHdoaWxlICgoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi4uXCIpICYmIChsYXN0UGF0aE5hbWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICByZWxhdGl2ZVBhdGhOYW1lcy5zaGlmdCgpO1xuICAgIHBhdGhOYW1lcy5wb3AoKTtcblxuICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgICBsYXN0UGF0aE5hbWUgPSBsYXN0KHBhdGhOYW1lcyk7XG4gIH1cblxuICBpZiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb21iaW5lZFBhdGhOYW1lcyA9IFtdLmNvbmNhdChwYXRoTmFtZXMpLmNvbmNhdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG5cbiAgICBjb21iaW5lZFBhdGggPSBjb21iaW5lZFBhdGhOYW1lcy5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gIGxldCBjb25jYXRlbmF0ZWRQYXRoO1xuXG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAgLy8vXG5cbiAgY29uY2F0ZW5hdGVkUGF0aCA9IGAke3BhdGh9LyR7cmVsYXRpdmVQYXRofWA7XG5cbiAgY29uc3QgcmVtYWluaW5nQUFyZ3VtZW50c0xlbmd0aCA9IHJlbWFpbmluZ0FyZ3VtZW50cy5sZW5ndGg7XG5cbiAgaWYgKHJlbWFpbmluZ0FBcmd1bWVudHNMZW5ndGggPiAwKSB7XG4gICAgY29uc3QgcGF0aCA9IGNvbmNhdGVuYXRlZFBhdGgsICAvLy9cbiAgICAgICAgICByZWxhdGl2ZVBhdGggPSByZW1haW5pbmdBcmd1bWVudHMuc2hpZnQoKTtcblxuICAgIGNvbmNhdGVuYXRlZFBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBjb25jYXRlbmF0ZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBib3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14uKlxcLyhbXlxcL10rXFwvPykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIGJvdHRvbW1vc3ROYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBib3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgocGF0aCkge1xuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKylcXC9bXlxcL10rXFwvPyQvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlQYXRoID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5UGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKFteXFwvXSspXFwvLiskLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKilcXC9bXlxcL10rXFwvPyQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eW15cXC9dK1xcLyguKykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzZWNvbmRNYXRjaDtcbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzUGF0aE5hbWUsXG4gIGlzUGF0aFRvcG1vc3ROYW1lLFxuICBpc1BhdGhSZWxhdGl2ZVBhdGgsXG4gIGlzUGF0aEFic29sdXRlUGF0aCxcbiAgaXNUb3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoLFxuICBjb21iaW5lUGF0aHMsXG4gIGNvbmNhdGVuYXRlUGF0aHMsXG4gIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCxcbiAgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzZWNvbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDT0xPTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIgfSBmcm9tIFwiLi4vY2hhcmFjdGVyc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb3ZlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgIT09IG51bGwpIHtcbiAgICBoZWFkZXJzW2V4aXN0aW5nTmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBsb3dlckNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBleGlzdGluZ05hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycyksICAvLy9cbiAgICAgICAgZXhpc3RpbmdOYW1lID0gZXhpc3RpbmdOYW1lcy5maW5kKChleGlzdGluZ05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPSBleGlzdGluZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGlmIChleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPT09IGxvd2VyQ2FzZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAoZXhpc3RpbmdOYW1lID09PSBudWxsKSB7XG4gICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3J0RnJvbUhvc3QoaG9zdCkge1xuICBsZXQgcG9ydDtcblxuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW15cXC9dKykvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIGluZGV4ID0gc2Vjb25kTWF0Y2guaW5kZXhPZihDT0xPTl9DSEFSQUNURVIpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICBjb25zdCBzZWN1cmUgPSBzZWN1cmVGcm9tSG9zdChob3N0KTtcblxuICAgIHBvcnQgPSBzZWN1cmUgPyA0NDMgOiA4MDsgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpbmRleCArIDEsXG4gICAgICAgICAgcG9ydFN0cmluZyA9IHNlY29uZE1hdGNoLnN1YnN0cmluZyhzdGFydCk7XG5cbiAgICBwb3J0ID0gTnVtYmVyKHBvcnRTdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN1cmVGcm9tSG9zdChob3N0KSB7XG4gIGNvbnN0IHNlY3VyZSA9IC9eaHR0cHM6XFwvXFwvLy50ZXN0KGhvc3QpO1xuXG4gIHJldHVybiBzZWN1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IGhvc3QubWF0Y2goL15odHRwcz86XFwvXFwvKFteOlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaG9zdG5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgcmV0dXJuIGhvc3RuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpIHtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhxdWVyeSksXG4gICAgICAgIG5hbWVzTGVuZ3RoID0gbmFtZXMubGVuZ3RoLFxuICAgICAgICBsYXN0SW5kZXggPSBuYW1lc0xlbmd0aCAtIDEsXG4gICAgICAgIHF1ZXJ5U3RyaW5nID0gbmFtZXMucmVkdWNlKChxdWVyeVN0cmluZywgbmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W25hbWVdLFxuICAgICAgICAgICAgICAgIGVuY29kZWROYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxuICAgICAgICAgICAgICAgIGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgYW1wZXJzYW5kT3JOb3RoaW5nID0gKGluZGV4ICE9PSBsYXN0SW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNUEVSU0FORF9DSEFSQUNURVIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG4gIFxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke2VuY29kZWROYW1lfT0ke2VuY29kZWRWYWx1ZX0ke2FtcGVyc2FuZE9yTm90aGluZ31gO1xuICBcbiAgICAgICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSB7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpLFxuICAgICAgICB1cmwgPSAocXVlcnlTdHJpbmcgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9YCA6XG4gICAgICAgICAgICAgICAgICBgJHtob3N0fSR7dXJpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvdmVyd3JpdGUsXG4gIHVuZGVyd3JpdGUsXG4gIHBvcnRGcm9tSG9zdCxcbiAgc2VjdXJlRnJvbUhvc3QsXG4gIGhvc3RuYW1lRnJvbUhvc3QsXG4gIHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5LFxuICB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4oc3RyaW5nKSB7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKTtcblxuICBsZXQgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIHdoaWxlICghY2hhcmFjdGVyLmRvbmUpIHtcbiAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICBsZW5ndGgrK1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmNtcChzdHJpbmdBLCBzdHJpbmdCKSB7XG4gIGxldCBkaWZmZXJlbmNlO1xuXG4gIGNvbnN0IGl0ZXJhdG9yQSA9IHN0cmluZ0FbU3ltYm9sLml0ZXJhdG9yXSgpLCAvLy9cbiAgICAgICAgaXRlcmF0b3JCID0gc3RyaW5nQltTeW1ib2wuaXRlcmF0b3JdKCk7IC8vL1xuXG4gIGxldCBjaGFyYWN0ZXJBID0gaXRlcmF0b3JBLm5leHQoKSxcbiAgICAgIGNoYXJhY3RlckIgPSBpdGVyYXRvckIubmV4dCgpLFxuICAgICAgY29kZVBvaW50QSxcbiAgICAgIGNvZGVQb2ludEI7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb2RlUG9pbnRBID0gY2hhcmFjdGVyQS52YWx1ZSA/IC8vL1xuICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckEudmFsdWUuY29kZVBvaW50QXQoMCkgOlxuICAgICAgICAgICAgICAgICAgICAgMDtcbiAgICBjb2RlUG9pbnRCID0gY2hhcmFjdGVyQi52YWx1ZSA/IC8vL1xuICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckIudmFsdWUuY29kZVBvaW50QXQoMCkgOlxuICAgICAgICAgICAgICAgICAgICAgMDtcblxuICAgIGRpZmZlcmVuY2UgPSBjb2RlUG9pbnRCIC0gY29kZVBvaW50QTtcblxuICAgIGlmIChkaWZmZXJlbmNlICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY2hhcmFjdGVyQS5kb25lIHx8IGNoYXJhY3RlckIuZG9uZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hhcmFjdGVyQSA9IGl0ZXJhdG9yQS5uZXh0KCk7XG4gICAgY2hhcmFjdGVyQiA9IGl0ZXJhdG9yQi5uZXh0KCk7XG4gIH1cblxuICByZXR1cm4gZGlmZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2Yoc3RyaW5nLCBzZWFyY2hTdHJpbmcpIHtcbiAgbGV0IGluZGV4ID0gLTEsXG4gICAgICBmb3VuZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHNlYXJjaFN0cmluZ0xlbmd0aCA9IHN0cmxlbihzZWFyY2hTdHJpbmcpO1xuXG4gIGlmIChzZWFyY2hTdHJpbmdMZW5ndGggPiAwKSB7XG4gICAgbGV0IGNoYXJhY3RlcjtcblxuICAgIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKSxcbiAgICAgICAgICBzZWFyY2hJdGVyYXRvciA9IHNlYXJjaFN0cmluZ1tTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgICAgICAgc2VhcmNoQ2hhcmFjdGVyID0gc2VhcmNoSXRlcmF0b3IubmV4dCgpO1xuXG4gICAgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgaW5kZXgrKztcblxuICAgIHdoaWxlICghY2hhcmFjdGVyLmRvbmUpIHtcbiAgICAgIGlmIChjaGFyYWN0ZXIudmFsdWUgPT09IHNlYXJjaENoYXJhY3Rlci52YWx1ZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgc2VhcmNoU3RyaW5nTGVuZ3RoLFxuICAgICAgICAgICAgICBzdWJTdHJpbmcgPSBzdWJzdHJpbmcoc3RyaW5nLCBzdGFydCwgZW5kKSxcbiAgICAgICAgICAgICAgZGlmZmVyZW5jZSA9IHN0cmNtcChzdWJTdHJpbmcsIHNlYXJjaFN0cmluZyk7XG5cbiAgICAgICAgaWYgKGRpZmZlcmVuY2UgPT09IDApIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgIGluZGV4KytcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kKSB7XG4gICAgaW5kZXggPSAtMTtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZyhzdHJpbmcsIHN0YXJ0LCBlbmQgPSBJbmZpbml0eSkge1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gc3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKSxcbiAgICAgICAgY2hhcmFjdGVycyA9IFtdO1xuXG4gIGxldCBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG5cbiAgd2hpbGUgKCFjaGFyYWN0ZXIuZG9uZSkge1xuICAgIGlmIChpbmRleCA9PT0gZW5kKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPj0gc3RhcnQpIHtcbiAgICAgIGNoYXJhY3RlcnMucHVzaChjaGFyYWN0ZXIudmFsdWUpOyAvLy9cbiAgICB9XG5cbiAgICBpbmRleCsrXG5cbiAgICBjaGFyYWN0ZXIgPSBpdGVyYXRvci5uZXh0KCk7XG4gIH1cblxuICBjb25zdCBzdWJzdHJpbmcgPSBjaGFyYWN0ZXJzLmpvaW4oRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3Vic3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN0cmNtcCxcbiAgc3RybGVuLFxuICBpbmRleE9mLFxuICBzdWJzdHJpbmdcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtaWdyYXRlKGpzb24sIG1pZ3JhdGlvbk1hcCwgbGF0ZXN0VmVyc2lvbikge1xuICBsZXQgeyB2ZXJzaW9uIH0gPSBqc29uO1xuXG4gIHdoaWxlICh2ZXJzaW9uICE9PSBsYXRlc3RWZXJzaW9uKSB7XG4gICAgY29uc3QgbWlncmF0ZUZ1bmN0aW9uID0gbWlncmF0aW9uTWFwW3ZlcnNpb25dO1xuXG4gICAganNvbiA9IG1pZ3JhdGVGdW5jdGlvbihqc29uKTtcblxuICAgICh7IHZlcnNpb24gfSA9IGpzb24pO1xuICB9XG5cbiAgcmV0dXJuIGpzb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWlncmF0ZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3aGlsc3Qob3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgIHRlcm1pbmF0ZSA9IG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXZlbnR1YWxseShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlcmF0aW9ucy5mb3JFYWNoKChvcGVyYXRpb24sIGluZGV4KSA9PiB7XHJcbiAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwZWF0ZWRseShvcGVyYXRpb24sIGxlbmd0aCwgZG9uZSwgY29udGV4dCkge1xyXG4gIGxldCBjb3VudCA9IDA7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gbGVuZ3RoO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQtLTtcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IC0xKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICB3aGlsc3QsXHJcbiAgZm9yRWFjaCxcclxuICBzZXF1ZW5jZSxcclxuICBldmVudHVhbGx5LFxyXG4gIHJlcGVhdGVkbHksXHJcbiAgZm9yd2FyZHNGb3JFYWNoLFxyXG4gIGJhY2t3YXJkc0ZvckVhY2hcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBHRVRfTUVUSE9ELCBQT1NUX01FVEhPRCB9IGZyb20gXCIuLi9tZXRob2RzXCI7XG5pbXBvcnQgeyBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSB9IGZyb20gXCIuLi9jb250ZW50VHlwZXNcIjtcbmltcG9ydCB7IEFDQ0VQVF9IRUFERVIsIENPTlRFTlRfVFlQRV9IRUFERVIgfSBmcm9tIFwiLi4vaGVhZGVyc1wiO1xuaW1wb3J0IHsgdW5kZXJ3cml0ZSwgdXJsRnJvbUhvc3RVUklBbmRRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvaHR0cFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBoZWFkZXJzOyAvLy9cbiAgICBoZWFkZXJzID0ge307XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSBHRVRfTUVUSE9ELFxuICAgICAgICBhY2NlcHQgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgICAgICAgY29udGVudCA9IG51bGw7XG5cbiAgdW5kZXJ3cml0ZUFjY2VwdEhlYWRlcihoZWFkZXJzLCBhY2NlcHQpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3N0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBjb250ZW50O1xuICAgIGNvbnRlbnQgPSBoZWFkZXJzO1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IFBPU1RfTUVUSE9ELFxuICAgICAgICBhY2NlcHQgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgICAgICAgY29udGVudFR5cGUgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRTtcblxuICB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgdW5kZXJ3cml0ZUNvbnRlbnRUeXBlSGVhZGVyKGhlYWRlcnMsIGNvbnRlbnRUeXBlKTtcblxuICByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHVybCA9IHVybEZyb21Ib3N0VVJJQW5kUXVlcnkoaG9zdCwgdXJpLCBxdWVyeSksXG4gICAgICAgIGFjY2VwdCA9IGhlYWRlcnNbQUNDRVBUX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgY29udGVudFR5cGUgPSBoZWFkZXJzW0NPTlRFTlRfVFlQRV9IRUFERVJdIHx8IG51bGwsXG4gICAgICAgIHhtbEh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgaWYgKGNvbnRlbnRUeXBlID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgIGNvbnN0IGpzb24gPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xuXG4gICAgY29udGVudCA9IGpzb25TdHJpbmc7ICAvLy9cbiAgfVxuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IHJlYWR5U3RhdGUsIHN0YXR1cywgcmVzcG9uc2UgfSA9IHhtbEh0dHBSZXF1ZXN0LFxuICAgICAgICAgIHN0YXR1c0NvZGUgPSBzdGF0dXM7XG5cbiAgICBpZiAocmVhZHlTdGF0ZSA9PSA0KSB7XG4gICAgICBsZXQgY29udGVudCA9IHJlc3BvbnNlO1xuXG4gICAgICBpZiAoYWNjZXB0ID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG5cbiAgICAgICAgICBjb250ZW50ID0ganNvbjsgIC8vL1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnRlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKGNvbnRlbnQsIHN0YXR1c0NvZGUpO1xuICAgIH1cbiAgfTtcblxuICB4bWxIdHRwUmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsKTtcblxuICBpZiAoYWNjZXB0ICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihBQ0NFUFRfSEVBREVSLCBhY2NlcHQpO1xuICB9XG5cbiAgaWYgKGNvbnRlbnRUeXBlICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihDT05URU5UX1RZUEVfSEVBREVSLCBjb250ZW50VHlwZSk7XG4gIH1cblxuICAoY29udGVudCAhPT0gbnVsbCkgP1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoY29udGVudCkgOlxuICAgICAgeG1sSHR0cFJlcXVlc3Quc2VuZCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCxcbiAgcG9zdCxcbiAgcmVxdWVzdFxufVxuXG5mdW5jdGlvbiB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCkge1xuICBjb25zdCBuYW1lID0gQUNDRVBUX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGFjY2VwdDsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVDb250ZW50VHlwZUhlYWRlcihoZWFkZXJzLCBjb250ZW50VFlwZSkge1xuICBjb25zdCBuYW1lID0gQ09OVEVOVF9UWVBFX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGNvbnRlbnRUWXBlOyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBsZXZlbHMgfSBmcm9tIFwiLi9sZXZlbHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWV0aG9kcyB9IGZyb20gXCIuL21ldGhvZHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaGVhZGVycyB9IGZyb20gXCIuL2hlYWRlcnNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMga2V5Q29kZXMgfSBmcm9tIFwiLi9rZXlDb2Rlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbmNvZGluZ3MgfSBmcm9tIFwiLi9lbmNvZGluZ3NcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2hhcmFjdGVycyB9IGZyb20gXCIuL2NoYXJhY3RlcnNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RhdHVzQ29kZXMgfSBmcm9tIFwiLi9zdGF0dXNDb2Rlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb250ZW50VHlwZXMgfSBmcm9tIFwiLi9jb250ZW50VHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RhdHVzTWVzc2FnZXMgfSBmcm9tIFwiLi9zdGF0dXNNZXNzYWdlc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhdGhVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcGF0aFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBodHRwVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2h0dHBcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RyaW5nVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB2ZXJzaW9uVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3ZlcnNpb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FzeW5jaHJvbm91c1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGFqYXhVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYWpheFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVSA9IFwidVwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgRVNDQVBFRF9BTVBFUlNBTkQgPSBcIiZhbXA7XCI7XG5leHBvcnQgY29uc3QgRVNDQVBFRF9MRVNTX1RIQU4gPSBcIiZsdDtcIjtcbmV4cG9ydCBjb25zdCBFU0NBUEVEX0dSRUFURVJfVEhBTiA9IFwiJmd0O1wiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFU0NBUEVEX0FNUEVSU0FORCwgRVNDQVBFRF9MRVNTX1RIQU4sIEVTQ0FQRURfR1JFQVRFUl9USEFOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpIHtcbiAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgRVNDQVBFRF9BTVBFUlNBTkQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88L2csIEVTQ0FQRURfTEVTU19USEFOKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPi9nLCBFU0NBUEVEX0dSRUFURVJfVEhBTik7XG5cbiAgcmV0dXJuIHNhbml0aXNlZENvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCB0eXBlVHlwZSA9IFwidHlwZVwiO1xuZXhwb3J0IGNvbnN0IG5hbWVUeXBlID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgbnVtYmVyVHlwZSA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgY29tbWVudFR5cGUgPSBcImNvbW1lbnRcIjtcbmV4cG9ydCBjb25zdCBlbmRPZkxpbmVUeXBlID0gXCJlbmQtb2YtbGluZVwiO1xuZXhwb3J0IGNvbnN0IHdoaXRlc3BhY2VUeXBlID0gXCJ3aGl0ZXNwYWNlXCI7XG5leHBvcnQgY29uc3Qgc3RyaW5nTGl0ZXJhbFR5cGUgPSBcInN0cmluZy1saXRlcmFsXCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lQ29tbWVudFR5cGUgPSBgJHtlbmRPZkxpbmVUeXBlfSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3Qgc2luZ2xlTGluZUNvbW1lbnRUeXBlID0gYHNpbmdsZS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCByZWd1bGFyRXhwcmVzc2lvblR5cGUgPSBcInJlZ3VsYXItZXhwcmVzc2lvblwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgZW5kLW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBzdGFydC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYG1pZGRsZS1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICB0eXBlVHlwZSxcbiAgbmFtZVR5cGUsXG4gIG51bWJlclR5cGUsXG4gIGNvbW1lbnRUeXBlLFxuICBlbmRPZkxpbmVUeXBlLFxuICB3aGl0ZXNwYWNlVHlwZSxcbiAgc3RyaW5nTGl0ZXJhbFR5cGUsXG4gIGVuZE9mTGluZUNvbW1lbnRUeXBlLFxuICBzaW5nbGVMaW5lQ29tbWVudFR5cGUsXG4gIHJlZ3VsYXJFeHByZXNzaW9uVHlwZSxcbiAgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlLFxuICBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcywgc3RyaW5nVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBzYW5pdGlzZUNvbnRlbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvY29udGVudFwiO1xuaW1wb3J0IHsgY29tbWVudFR5cGUsIGVuZE9mTGluZVR5cGUsIHdoaXRlc3BhY2VUeXBlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IHN0cmxlbiB9ID0gc3RyaW5nVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNvbnRlbnQsIHNpZ25pZmljYW50KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuICBcbiAgZ2V0Q29udGVudExlbmd0aChuYWl2ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IG5haXZlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQubGVuZ3RoIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbih0aGlzLmNvbnRlbnQpOyAvLy9cblxuICAgIHJldHVybiBjb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgaXNTaWduaWZpY2FudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduaWZpY2FudDtcbiAgfVxuICBcbiAgaXNDb21tZW50VG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZUluY2x1ZGVzQ29tbWVudFR5cGUgPSB0aGlzLnR5cGUuaW5jbHVkZXMoY29tbWVudFR5cGUpLFxuICAgICAgICAgIGNvbW1lbnRUb2tlbiA9IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlOyAvLy9cblxuICAgIHJldHVybiBjb21tZW50VG9rZW47XG4gIH1cblxuICBpc0VuZE9mTGluZVRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVFbmRPZkxpbmVUeXBlID0gKHRoaXMudHlwZS5pbmNsdWRlcyhlbmRPZkxpbmVUeXBlKSksXG4gICAgICAgICAgZW5kT2ZMaW5lVG9rZW4gPSB0eXBlRW5kT2ZMaW5lVHlwZTsgLy8vXG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lVG9rZW47XG4gIH1cblxuICBpc1doaXRlc3BhY2VUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlV2hpdGVzcGFjZVR5cGUgPSAodGhpcy50eXBlID09PSB3aGl0ZXNwYWNlVHlwZSksXG4gICAgICAgICAgd2hpdGVzcGFjZVRva2VuID0gdHlwZVdoaXRlc3BhY2VUeXBlOyAvLy9cblxuICAgIHJldHVybiB3aGl0ZXNwYWNlVG9rZW47XG4gIH1cblxuICBtYXRjaCh0b2tlbikge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBpZiAodG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0b2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgICBjb250ZW50ID0gdG9rZW4uZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgc2lnbmlmaWNhbnQgPSB0b2tlbi5pc1NpZ25pZmljYW50KCk7XG5cbiAgICAgIG1hdGNoZXMgPSAoKHRoaXMudHlwZSA9PT0gdHlwZSkgJiYgKHRoaXMuY29udGVudCA9PT0gY29udGVudCkgJiYgKHRoaXMuc2lnbmlmaWNhbnQgPT09IHNpZ25pZmljYW50KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlLCAvLy9cbiAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KHRoaXMuY29udGVudCksXG4gICAgICAgICAgaHRtbCA9IGA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPiR7c2FuaXRpc2VkQ29udGVudH08L3NwYW4+YDtcblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY2xvbmUoLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgQ2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHR5cGUgPSB0aGlzLnR5cGUsXG4gICAgICAgICAgY29udGVudCA9IHRoaXMuY29udGVudCxcbiAgICAgICAgICBzaWduaWZpY2FudCA9IHRoaXMuc2lnbmlmaWNhbnQsXG4gICAgICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgdG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgeyByZWd1bGFyRXhwcmVzc2lvbiB9ID0gQ2xhc3MsXG4gICAgICAgICAgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2gocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDsgLy8vXG5cbiAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgeyB0eXBlIH0gPSBDbGFzcztcblxuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0eXBlIH0gPSBDbGFzcyxcbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHsgcmV0dXJuIG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG5cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnQgPSB0cnVlLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG5cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnQgPSB0cnVlLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGUgPSBjb250ZW50OyAvLy9cblxuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG5cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnQgPSB0cnVlLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IFUgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCByZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cbiAgXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgbWF0Y2goY29udGVudCkge1xuICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDsgLy8vXG5cbiAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKGNvbnRlbnQsIHRoaXMudHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuICBcbiAgc3RhdGljIGZyb21Ub2tlbihUb2tlbikge1xuICAgIGNvbnN0IHsgdHlwZSwgcmVndWxhckV4cHJlc3Npb24gfSA9IFRva2VuLFxuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZSh0eXBlLCByZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRW50cnkoZW50cnkpIHtcbiAgICBjb25zdCBlbnRyeUtleXMgPSBPYmplY3Qua2V5cyhlbnRyeSksXG4gICAgICAgICAgZmlyc3RFbnRyeUtleSA9IGZpcnN0KGVudHJ5S2V5cyksXG4gICAgICAgICAgdHlwZSA9IGZpcnN0RW50cnlLZXksIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiA9IGVudHJ5W3R5cGVdLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb25Gcm9tUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiksXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcbiAgICAgICAgXG4gICAgcmV0dXJuIHJ1bGU7IFxuICB9XG5cbiAgc3RhdGljIGZyb21UeXBlQW5kUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb25Gcm9tUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiksXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZ3VsYXJFeHByZXNzaW9uRnJvbVJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybihyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pIHtcbiAgY29uc3QgZmxhZ3MgPSBVLCAgLy8vXG4gICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuLCBmbGFncyksXG4gICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gcmVnRXhwOyAvLy9cblxuICByZXR1cm4gcmVndWxhckV4cHJlc3Npb247XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5leHBvcnQgY29uc3QgcGx1cyA9IFwiK1wiO1xyXG5leHBvcnQgY29uc3Qgb3BhcXVlID0gXCIuXCI7XHJcbmV4cG9ydCBjb25zdCBlcHNpbG9uID0gJ1x1MDNCNSc7XHJcbmV4cG9ydCBjb25zdCB3aWxkY2FyZCA9IFwiLlwiO1xyXG5leHBvcnQgY29uc3QgYXN0ZXJpc2sgPSBcIipcIjtcclxuZXhwb3J0IGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuZXhwb3J0IGNvbnN0IHNlcGFyYXRvciA9IFwiOjo9XCI7XHJcbmV4cG9ydCBjb25zdCBzZW1pT3BhcXVlID0gXCIuLlwiO1xyXG5leHBvcnQgY29uc3QgdGVybWluYXRvciA9IFwiO1wiO1xyXG5leHBvcnQgY29uc3QgdmVydGljYWxCYXIgPSBcInxcIjtcclxuZXhwb3J0IGNvbnN0IG9wZW5CcmFja2V0ID0gXCIoXCI7XHJcbmV4cG9ydCBjb25zdCBjbG9zZUJyYWNrZXQgPSBcIilcIjtcclxuZXhwb3J0IGNvbnN0IHF1ZXN0aW9uTWFyayA9IFwiP1wiO1xyXG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lID0gXCI8RU5EX09GX0xJTkU+XCI7XHJcbmV4cG9ydCBjb25zdCBub1doaXRlc3BhY2UgPSBcIjxOT19XSElURVNQQUNFPlwiO1xyXG5leHBvcnQgY29uc3Qgc3RhcnRPZkNvbnRlbnQgPSBcIjxTVEFSVF9PRl9DT05URU5UPlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHBsdXMsXHJcbiAgb3BhcXVlLFxyXG4gIGVwc2lsb24sXHJcbiAgd2lsZGNhcmQsXHJcbiAgYXN0ZXJpc2ssXHJcbiAgZWxsaXBzaXMsXHJcbiAgc2VwYXJhdG9yLFxyXG4gIHNlbWlPcGFxdWUsXHJcbiAgdGVybWluYXRvcixcclxuICB2ZXJ0aWNhbEJhcixcclxuICBvcGVuQnJhY2tldCxcclxuICBjbG9zZUJyYWNrZXQsXHJcbiAgcXVlc3Rpb25NYXJrLFxyXG4gIGVuZE9mTGluZSxcclxuICBub1doaXRlc3BhY2UsXHJcbiAgc3RhcnRPZkNvbnRlbnRcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNBc0VudHJpZXMocnVsZXMpIHtcbiAgY29uc3QgZW50cmllcyA9IHJ1bGVzLm1hcCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gcnVsZUFzRW50cnkocnVsZSk7XG5cbiAgICByZXR1cm4gZW50cnk7XG4gIH0pO1xuXG4gIHJldHVybiBlbnRyaWVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJ1bGVzQXNFbnRyaWVzXG59O1xuXG5mdW5jdGlvbiBydWxlQXNFbnRyeShydWxlKSB7XG4gIGNvbnN0IHR5cGUgPSBydWxlLmdldFR5cGUoKSxcbiAgICAgICAgcmVndWxhckV4cHJlc3Npb24gPSBydWxlLmdldFJlZ3VsYXJFeHByZXNzaW9uKCksXG4gICAgICAgIHsgc291cmNlIH0gPSByZWd1bGFyRXhwcmVzc2lvbixcbiAgICAgICAgZW50cnkgPSB7XG4gICAgICAgICAgW3R5cGVdOiBzb3VyY2VcbiAgICAgICAgfTtcblxuICByZXR1cm4gZW50cnk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21FbnRyaWVzKGVudHJpZXMpIHtcbiAgY29uc3QgcnVsZXMgPSBlbnRyaWVzLm1hcCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBydWxlID0gUnVsZS5mcm9tRW50cnkoZW50cnkpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0pO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxleGVyRnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICBjb25zdCBJbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcyksXG4gICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcbiAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpO1xuXG4gIHJldHVybiBsZXhlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBydWxlc0Zyb21FbnRyaWVzLFxuICBsZXhlckZyb21SdWxlc1xufTtcblxuZnVuY3Rpb24gSW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcykge1xuICBjb25zdCB7IEVuZE9mTGluZUNvbW1lbnRUb2tlbiwgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gPSBDbGFzcztcblxuICBjb25zdCBJbkNvbW1lbnRDbGFzc2VzID0gW1xuICAgIEVuZE9mTGluZUNvbW1lbnRUb2tlbixcbiAgICBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcbiAgICBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlblxuICBdO1xuXG4gIHJldHVybiBJbkNvbW1lbnRDbGFzc2VzO1xufVxuXG5mdW5jdGlvbiBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSB7XG4gIGNvbnN0IHsgRW5kT2ZMaW5lVG9rZW4sXG4gICAgICAgICAgV2hpdGVzcGFjZVRva2VuLFxuICAgICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXG4gICAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcbiAgICAgICAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxuICAgICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcbiAgICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSA9IENsYXNzO1xuXG4gIGNvbnN0IE5vdEluQ29tbWVudENsYXNzZXMgPSBbXG4gICAgRW5kT2ZMaW5lVG9rZW4sXG4gICAgV2hpdGVzcGFjZVRva2VuLFxuICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXG4gICAgU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcbiAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxuICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcbiAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW5cbiAgXTtcblxuICByZXR1cm4gTm90SW5Db21tZW50Q2xhc3Nlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJzcGVjaWFsXCI6IFwiXig/OlxcXFx8fFxcXFwofFxcXFwpfFxcXFw/fFxcXFwqfFxcXFwrfFxcXFwuXFxcXC5cXFxcLnxcXFxcLlxcXFwufFxcXFwufDo6PXw7fFx1MDNCNXw8U1RBUlRfT0ZfQ09OVEVOVD58PE5PX1dISVRFU1BBQ0U+fDxFTkRfT0ZfTElORT4pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwibnVtYmVyXCI6IFwiXig/OjB8WzEtOV1bMC05XSopXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIl5bXFxcXHd+XStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ0eXBlXCI6IFwiXlxcXFxbW15cXFxcXV0rXFxcXF1cIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50KHRva2VuLCBpbkNvbW1lbnQpIHtcbiAgY29uc3QgdG9rZW5Db21tZW50VG9rZW4gPSB0b2tlbi5pc0NvbW1lbnRUb2tlbigpO1xuXG4gIGlmICh0b2tlbkNvbW1lbnRUb2tlbikge1xuICAgIGNvbnN0IGNvbW1lbnRUb2tlbiA9IHRva2VuLCAvLy9cbiAgICAgICAgICBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nID0gY29tbWVudFRva2VuLmlzSW5Db21tZW50UHJlc2VydmluZygpO1xuXG4gICAgaW5Db21tZW50ID0gY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZzsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIGluQ29tbWVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy90b2tlblwiO1xyXG5pbXBvcnQgeyBydWxlc0Zyb21FbnRyaWVzLCBsZXhlckZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvbGV4ZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1vbkxleGVyIHtcclxuICBjb25zdHJ1Y3RvcihydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcykge1xyXG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xyXG4gICAgdGhpcy5JbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3NlcztcclxuICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG4gIFxyXG4gIGdldFJ1bGVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucnVsZXM7XHJcbiAgfVxyXG5cclxuICBnZXRJbkNvbW1lbnRDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuSW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcblxyXG4gIGdldE5vdEluQ29tbWVudENsYXNzZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2UoY29udGVudCwgaW5Db21tZW50ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHRva2VucyA9IFtdO1xyXG5cclxuICAgIHdoaWxlIChjb250ZW50ICE9PSBFTVBUWV9TVFJJTkcpIHtcclxuICAgICAgbGV0IHRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IENsYXNzZXMgPSBpbkNvbW1lbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkluQ29tbWVudENsYXNzZXMgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcztcclxuXHJcbiAgICAgIENsYXNzZXMuc29tZSgoQ2xhc3MpID0+IHtcclxuICAgICAgICBpZiAoQ2xhc3MgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRva2VuID0gQ2xhc3MubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMucnVsZXMuc29tZSgocnVsZSkgPT4ge1xyXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IHJ1bGUubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdG9rZW4gPSBzaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZW50ICcke2NvbnRlbnR9JyBjYW5ub3QgYmUgdG9rZW5pc2VkLmApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XHJcblxyXG4gICAgICBpbkNvbW1lbnQgPSBpbkNvbW1lbnRGcm9tVG9rZW5BbmRJbkNvbW1lbnQodG9rZW4sIGluQ29tbWVudCk7XHJcblxyXG4gICAgICBjb25zdCBuYWl2ZSA9IHRydWUsXHJcbiAgICAgICAgICAgIHRva2VuQ29udGVudExlbmd0aCA9IHRva2VuLmdldENvbnRlbnRMZW5ndGgobmFpdmUpLFxyXG4gICAgICAgICAgICBzdGFydCA9IHRva2VuQ29udGVudExlbmd0aDsgLy8vXHJcblxyXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcclxuICAgIGNvbnN0IHsgZW50cmllcyB9ID0gQ2xhc3MsXHJcbiAgICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUVudHJpZXMoZW50cmllcyksXHJcbiAgICAgICAgICBsZXhlciA9IGxleGVyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcclxuICAgIGNvbnN0IGxleGVyID0gbGV4ZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoQ2xhc3MsIGVudHJpZXMpIHtcclxuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tRW50cmllcyhlbnRyaWVzKSxcclxuICAgICAgICAgIGxleGVyID0gbGV4ZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRva2VuIGZyb20gXCIuLi90b2tlblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25TaWduaWZpY2FudFRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudCA9IGZhbHNlLFxuICAgICAgICAgIG5vblNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpO1xuXG4gICAgcmV0dXJuIG5vblNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudCA9IGZhbHNlLFxuICAgICAgICAgIG5vblNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpO1xuXG4gICAgcmV0dXJuIG5vblNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnQgPSBmYWxzZSxcbiAgICAgICAgICBub25TaWduaWZpY2FudFRva2VuID0gVG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCk7XG5cbiAgICByZXR1cm4gbm9uU2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hpdGVzcGFjZVRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIHN0YXRpYyB0eXBlID0gd2hpdGVzcGFjZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15bXFx0XFx2IF0rLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChXaGl0ZXNwYWNlVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgcmVndWxhckV4cHJlc3Npb25UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgc3RhdGljIHR5cGUgPSByZWd1bGFyRXhwcmVzc2lvblR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oPzpcXFxcW15cXHNdfFteXFwvXFxyXFxuXFxmXSkqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBodG1sID0gY29udGVudDsgLy8vXG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZMaW5lVHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlxcclxcbnxcXHJ8XFxufFxcZikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3RyaW5nVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuY29uc3QgeyBzdWJzdHJpbmcgfSA9IHN0cmluZ1V0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGdldFN0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IHRoaXMuZ2V0Q29udGVudExlbmd0aCgpLFxuICAgICAgICAgIHN0YXJ0ID0gMSxcbiAgICAgICAgICBlbmQgPSBjb250ZW50TGVuZ3RoIC0gMSxcbiAgICAgICAgICBzdHJpbmcgPSBzdWJzdHJpbmcoY29udGVudCwgc3RhcnQsIGVuZCk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi8uLi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFN0cmluZ0xpdGVyYWxUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoPzpcXFxcW15cXHNdfFteXCJcXFxcXFxyXFxuXSkqXCIvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4uZnJvbUNvbnRlbnQoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICB0b2tlbnNGcm9tQk5GKGJuZikge1xyXG4gICAgY29uc3QgY29udGVudCA9IGJuZiwgIC8vL1xyXG4gICAgICAgICAgdG9rZW5zID0gc3VwZXIudG9rZW5pc2UoY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQk5GTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCTkZMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCTkZMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwiZGlnaXRcIjogXCJeXFxcXGQrXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiYnJhY2tldFwiOiBcIl4oPzpcXFxcKHxcXFxcKSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJvcGVyYXRvclwiOiBcIl4oPzpcXFxcK3wtfFxcXFwqfFxcXFwvKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14nKD86XFxcXFteXFxzXXxbXidcXFxcXFxyXFxuXSkqJy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzaW5nbGVMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHNpbmdsZUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXiNbXlxcclxcblxcZl0qLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG58XFxmKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86W15cXHJcXG5cXGZdKz8oPz0jIyMpfFteXFxyXFxuXFxmXSspLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuaW1wb3J0IENvbW1vbkxleGVyIGZyb20gXCIuLi9jb21tb24vbGV4ZXJcIjtcclxuaW1wb3J0IFdoaXRlc3BhY2VUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiO1xyXG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcclxuaW1wb3J0IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xyXG5pbXBvcnQgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZFwiO1xyXG5pbXBvcnQgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZVwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9weXRob25TdHlsZVwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvcHl0aG9uU3R5bGVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2ljTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBSZWd1bGFyRXhwcmVzc2lvblRva2VuO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhCYXNpY0xleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQmFzaWNMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCYXNpY0xleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGh0bWwgPSBjb250ZW50OyAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG58XFxmKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG58XFxmKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcL1teXFxyXFxuXFxmXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXCpcXC8vO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXCovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpbXlxcclxcblxcZl0rPyg/PVxcKlxcLyl8W15cXHJcXG5cXGZdKykvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHlwZXMgfSBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCIuL3NwZWNpYWxTeW1ib2xzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcnVsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcnVsZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV4ZXJVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZMZXhlciB9IGZyb20gXCIuL2JuZi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY0xleGVyIH0gZnJvbSBcIi4vYmFzaWMvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uTGV4ZXIgfSBmcm9tIFwiLi9jb21tb24vbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaGl0ZXNwYWNlVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWd1bGFyRXhwcmVzc2lvblRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcIm1lZGlhXCI6IFwiXkBtZWRpYVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImtleWZyYW1lc1wiOiBcIl5Aa2V5ZnJhbWVzXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiY29sb3VyXCI6IFwiXiMoPzpbMC05YS1mQS1GXXs2fXxbMC05YS1mQS1GXXszfSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJpbXBvcnRhbnRcIjogXCJeIWltcG9ydGFudFwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInBlcmNlbnRhZ2VcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSVcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJmcmVxdWVuY3lcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/Omh6fGtoeilcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJmcmFjdGlvblwiOiBcIl5bMS05XVswLTldKj9mclwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImxlbmd0aFwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86cHh8Y218bW18aW58cHR8cGMpXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiYW5nbGVcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OmRlZ3xyYWR8Z3JhZClcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ0aW1lXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpzfG1zKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKXJlbVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImVtc1wiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspZW1cIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJudW1iZXJcIjogXCJeWzAtOV0rfFswLTldKlxcXFwuWzAtOV0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl47fDo6fDp8XFxcXC58LHxcXFxcfD18fj18PXw+fFxcXFx7fFxcXFx9fFxcXFwofFxcXFwpfFxcXFxbfFxcXFxdXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiaWRlbnRpZmllclwiOiBcIl5bX2EtekEtWjAtOS1dK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImxvZ2ljYWwtb3BlcmF0b3JcIjogXCJeXig/OmFuZHxub3QpJFwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInBsdXMtb3ItbWludXNcIjogXCJeXFxcXCt8LVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciwgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuLCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU1NMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQ1NTTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhDU1NMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhDU1NMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuICAgICAgZG9jdW1lbnQgICAgICAgICAgICAgICAgIDo6PSAgKCBydWxlIHwgZXJyb3IgKSsgO1xuXG4gICAgICBydWxlICAgICAgICAgICAgICAgICAgICAgOjo9ICBuYW1lIG9wYWNpdHlNb2RpZmllcj8gXCI6Oj1cIiBkZWZpbml0aW9ucyBcIjtcIiA7XG5cbiAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIGRlZmluaXRpb25zICAgICAgICAgICAgICA6Oj0gIGRlZmluaXRpb24gKCBcInxcIiBkZWZpbml0aW9uICkqIDtcblxuICAgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgIDo6PSAgcGFydCsgcHJlY2VkZW5jZT8gO1xuIFxuICAgICAgcGFydCAgICAgICAgICAgICAgICAgICAgIDo6PSAgbm9uVGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIG5vblRlcm1pbmFsUGFydCAgICAgICAgICA6Oj0gIGNob2ljZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgc2VxdWVuY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJ1bGVOYW1lIGNhbGxBaGVhZE1vZGlmaWVyP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIHRlcm1pbmFsUGFydCAgICAgICAgICAgICA6Oj0gIHNpZ25pZmljYW50VG9rZW5UeXBlXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcmVndWxhckV4cHJlc3Npb25cbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlcm1pbmFsU3ltYm9sXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZW5kT2ZMaW5lXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgd2lsZGNhcmRcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlcHNpbG9uXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG5vV2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBzdGFydE9mQ29udGVudFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIHNlcXVlbmNlT2ZQYXJ0cyAgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgcGFydCsgXCIpXCIgO1xuXG4gICAgICBjaG9pY2VPZlBhcnRzICAgICAgICAgICAgOjo9ICBcIihcIiBwYXJ0Q2hvaWNlICggXCJ8XCIgcGFydENob2ljZSApKyBcIilcIiA7XG5cbiAgICAgIHBhcnRDaG9pY2UgICAgICAgICAgICAgICA6Oj0gIHBhcnQgcHJlY2VkZW5jZT8gO1xuXG4gICAgICBydWxlTmFtZSAgICAgICAgICAgICAgICAgOjo9ICBbbmFtZV0gO1xuXG4gICAgICBzaWduaWZpY2FudFRva2VuVHlwZSAgICAgOjo9ICBbdHlwZV0gO1xuXG4gICAgICByZWd1bGFyRXhwcmVzc2lvbiAgICAgICAgOjo9ICBbcmVndWxhci1leHByZXNzaW9uXSA7XG5cbiAgICAgIHRlcm1pbmFsU3ltYm9sICAgICAgICAgICA6Oj0gIFtzdHJpbmctbGl0ZXJhbF0gO1xuXG4gICAgICBwcmVjZWRlbmNlICAgICAgICAgICAgICAgOjo9ICBcIihcIiBbbnVtYmVyXT8gXCIpXCIgO1xuICAgICAgXG4gICAgICBlbmRPZkxpbmUgICAgICAgICAgICAgICAgOjo9ICBcIjxFTkRfT0ZfTElORT5cIiA7XG4gICAgICBcbiAgICAgIHdpbGRjYXJkICAgICAgICAgICAgICAgICA6Oj0gIFwiLlwiIDtcblxuICAgICAgZXBzaWxvbiAgICAgICAgICAgICAgICAgIDo6PSAgXCJcdTAzQjVcIiA7XG5cbiAgICAgIG5vV2hpdGVzcGFjZSAgICAgICAgICAgICA6Oj0gIFwiPE5PX1dISVRFU1BBQ0U+XCIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICBzdGFydE9mQ29udGVudCAgICAgICAgICAgOjorICBcIjxTVEFSVF9PRl9DT05URU5UPlwiOyBcbiAgICAgIFxuICAgICAgcXVhbnRpZmllciAgICAgICAgICAgICAgIDo6PSAgb3B0aW9uYWxRdWFudGlmaWVyXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvbmVPck1vcmVRdWFudGlmaWVyXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgemVyb09yTW9yZVF1YW50aWZpZXJcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIG9wYWNpdHlNb2RpZmllciAgICAgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPiggXCIuXCIgfCBcIi4uXCIgKTtcbiAgICAgIFxuICAgICAgY2FsbEFoZWFkTW9kaWZpZXIgICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIuLi5cIiA7XG5cbiAgICAgIG9wdGlvbmFsUXVhbnRpZmllciAgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiP1wiIDtcblxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllciAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIrXCIgO1xuXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllciAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIipcIiA7XG5cbiAgICAgIGVycm9yLiAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IEVTQ0FQRURfQkFDS1NMQVNIID1cIlxcXFxcIjtcbmV4cG9ydCBjb25zdCBFU0NBUEVEX0RPVUJMRV9RVU9URSA9IFwiXFxcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgU1BBQ0VfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKHBhZGRpbmdMZW5ndGgpIHtcbiAgbGV0IHBhZGRpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IHBhZGRpbmdMZW5ndGg7IHBvc2l0aW9uKyspIHtcbiAgICBwYWRkaW5nICs9IFNQQUNFX0NIQVJBQ1RFUjtcbiAgfVxuXG4gIHJldHVybiBwYWRkaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcbmltcG9ydCB7IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuY29uc3QgeyBjbGVhciB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IG9wYXF1ZTogb3BhcXVlU3BlY2lhbFN5bWJvbCwgc2VtaU9wYXF1ZTogc2VtaU9wYXF1ZVNwZWNpYWxTeW1ib2wgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlIHtcbiAgY29uc3RydWN0b3IobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5vcGFjaXR5ID0gb3BhY2l0eTtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRPcGFjaXR5KCkge1xuICAgIHJldHVybiB0aGlzLm9wYWNpdHk7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldE5vblRlcm1pbmFsTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0T3BhY2l0eShvcGFjaXR5KSB7XG4gICAgdGhpcy5vcGFjaXR5ID0gb3BhY2l0eTtcbiAgfVxuXG4gIHNldERlZmluaXRpb25zKGRlZmluaXRpb25zKSB7XG4gICAgdGhpcy5kZWZpbml0aW9ucyA9IGRlZmluaXRpb25zO1xuICB9XG5cbiAgc2V0Tm9uVGVybWluYWxOb2RlKE5vblRlcm1pbmFsTm9kZSkge1xuICAgIHRoaXMuTm9uVGVybWluYWxOb2RlID0gTm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNPcGFxdWUoKSB7XG4gICAgY29uc3Qgb3BhcXVlID0gKHRoaXMub3BhY2l0eSA9PT0gb3BhcXVlU3BlY2lhbFN5bWJvbCk7XG5cbiAgICByZXR1cm4gb3BhcXVlO1xuICB9XG5cbiAgaXNTZW1pT3BhcXVlKCkge1xuICAgIGNvbnN0IHNlbWlPcGFxdWUgPSAodGhpcy5vcGFjaXR5ID09PSBzZW1pT3BhcXVlU3BlY2lhbFN5bWJvbCk7XG5cbiAgICByZXR1cm4gc2VtaU9wYXF1ZTtcbiAgfVxuXG4gIGlzVHJhbnNwYXJlbnQoKSB7XG4gICAgY29uc3Qgc2VtaU9wYXF1ZSA9ICh0aGlzLm9wYWNpdHkgPT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHNlbWlPcGFxdWU7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgb3BhY2l0eSA9IHRoaXMub3BhY2l0eSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgY2hpbGROb2RlcyA9IFtdLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IHRoaXMuTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSxcbiAgICAgICAgICBzYXZlZFByZWNlZGVuY2UgPSBzdGF0ZS5nZXRTYXZlZFByZWNlZGVuY2UoKTtcblxuICAgIGxldCBub2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cblxuICAgIG5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICBwYXJzZWQgPSB0aGlzLmRlZmluaXRpb25zLnNvbWUoKGRlZmluaXRpb24pID0+IHtcbiAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgIGNsZWFyKGNoaWxkTm9kZXMpO1xuXG4gICAgICBjb25zdCBwcmVjZWRlbmNlID0gZGVmaW5pdGlvbi5nZXRQcmVjZWRlbmNlKCk7XG5cbiAgICAgIHN0YXRlLnNldFByZWNlZGVuY2UocHJlY2VkZW5jZSk7XG5cbiAgICAgIGNhbGxiYWNrID0gKCkgPT4geyAgLy8vXG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgY29uc3QgcHJlY2VkZW5jZSA9IHN0YXRlLmdldFByZWNlZGVuY2UoKTtcblxuICAgICAgICBub25UZXJtaW5hbE5vZGUuc2V0UHJlY2VkZW5jZShwcmVjZWRlbmNlKTtcblxuICAgICAgICBwYXJzZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICBub2RlLnNldENoaWxkTm9kZXNQYXJlbnROb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUgPSBub25UZXJtaW5hbE5vZGUucmV3cml0ZSgpO1xuXG4gICAgICAgIGlmIChyZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICBub2Rlcy5wb3AoKTtcblxuICAgICAgICAgICAgbm9kZSA9IHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZTsgLy8vXG5cbiAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgIGNvbnN0IGVtcHR5ID0gbm9kZS5pc0VtcHR5KCk7XG5cbiAgICAgICAgICBpZiAoZW1wdHkpIHtcbiAgICAgICAgICAgIHBhcnNlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICBjb25zdCB1bnByZWNlZGVudGVkID0gbm9kZS5pc1VucHJlY2VkZW50ZWQoKTtcblxuICAgICAgICAgIGlmICh1bnByZWNlZGVudGVkKSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXRQcmVjZWRlbmNlKHNhdmVkUHJlY2VkZW5jZSk7XG5cbiAgICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgbm9kZXMucG9wKCk7XG5cbiAgICAgICAgICAgIG5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuXG4gICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZS5yZXNldENoaWxkTm9kZXNQYXJlbnROb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgfTtcblxuICAgICAgcGFyc2VkID0gZGVmaW5pdGlvbi5wYXJzZShjaGlsZE5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIHN0YXRlLnJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnBvcCgpO1xuICAgIH1cblxuICAgIGlmIChjYWxsQWhlYWQgPT09IG51bGwpIHtcbiAgICAgIHN0YXRlLnJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZyhtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIG11bHRpTGluZSA9IHRydWUpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0xlbmd0aCA9IHRoaXMuZGVmaW5pdGlvbnMubGVuZ3RoO1xuXG4gICAgbXVsdGlMaW5lID0gbXVsdGlMaW5lICYmIChkZWZpbml0aW9uc0xlbmd0aCA+IDEpOyAgLy8vXG5cbiAgICBjb25zdCBtYXhpbXVtUGFkZGluZyA9IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChtYXhpbXVtUnVsZU5hbWVMZW5ndGgpLFxuICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gdGhpcy5kZWZpbml0aW9ucy5yZWR1Y2UoKGRlZmluaXRpb25zU3RyaW5nLCBkZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uU3RyaW5nID0gZGVmaW5pdGlvbi5hc1N0cmluZygpO1xuXG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbnNTdHJpbmcgPT09IEVNUFRZX1NUUklORykge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IGRlZmluaXRpb25TdHJpbmc7IC8vL1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtkZWZpbml0aW9uc1N0cmluZ31cblxuJHttYXhpbXVtUGFkZGluZ30gICB8ICR7ZGVmaW5pdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtkZWZpbml0aW9uc1N0cmluZ30gfCAke2RlZmluaXRpb25TdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb25zU3RyaW5nO1xuICAgICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lTGVuZ3RoID0gcnVsZU5hbWUubGVuZ3RoLFxuICAgICAgICAgIG9wYWNpdHlTdHJpbmcgPSAodGhpcy5vcGFjaXR5ID09PSBudWxsKT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGFjaXR5LCAvLy9cbiAgICAgICAgICBvcGFjaXR5U3RyaW5nTGVuZ3RoID0gb3BhY2l0eVN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZ0xlbmd0aCA9IG1heGltdW1SdWxlTmFtZUxlbmd0aCAtIHJ1bGVOYW1lTGVuZ3RoIC0gb3BhY2l0eVN0cmluZ0xlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKHBhZGRpbmdMZW5ndGgpO1xuXG4gICAgY29uc3Qgc2VtaWNvbG9uU3RyaW5nID0gbXVsdGlMaW5lID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuXG4ke21heGltdW1QYWRkaW5nfSAgIDtgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiA7XCIsXG4gICAgICAgICAgc3RyaW5nID0gYFxuXG4ke3RoaXMubmFtZX0ke29wYWNpdHlTdHJpbmd9JHtwYWRkaW5nfSA6Oj0gJHtkZWZpbml0aW9uc1N0cmluZ30ke3NlbWljb2xvblN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTmFtZU9wYWNpdHlEZWZpbml0aW9uc0FuZE5vblRlcm1pbmFsTm9kZShDbGFzcywgbmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSkge1xuICAgIGlmIChOb25UZXJtaW5hbE5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgTm9uVGVybWluYWxOb2RlID0gZGVmaW5pdGlvbnM7ICAvLy9cblxuICAgICAgZGVmaW5pdGlvbnMgPSBvcGFjaXR5OyAgLy8vXG5cbiAgICAgIG9wYWNpdHkgPSBuYW1lOyAvLy9cblxuICAgICAgbmFtZSA9IENsYXNzOyAvLy9cblxuICAgICAgQ2xhc3MgPSBSdWxlOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0gbmV3IENsYXNzKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGUge1xuICBjb25zdHJ1Y3RvcihpbmRleCwgdG9rZW5zLCBydWxlTWFwLCBwcmVjZWRlbmNlLCBzdGFydE9mQ29udGVudCkge1xuXHRcdHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5zdGFydE9mQ29udGVudCA9IHN0YXJ0T2ZDb250ZW50O1xuICB9XG5cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgZ2V0U3RhcnRPZkNvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRPZkNvbnRlbnQ7XG4gIH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgfVxuXG4gIHNldFJ1bGVNYXAocnVsZU1hcCkge1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gIH1cblxuICBzZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0U3RhcnRPZkNvbnRlbnQoc3RhcnRPZkNvbnRlbnQpIHtcbiAgICB0aGlzLnN0YXJ0T2ZDb250ZW50ID0gc3RhcnRPZkNvbnRlbnQ7XG4gIH1cblxuICBnZXRTYXZlZFByZWNlZGVuY2UoKSB7XG4gICAgY29uc3Qgc2F2ZWRQcmVjZWRlbmNlID0gdGhpcy5wcmVjZWRlbmNlO1xuXG4gICAgcmV0dXJuIHNhdmVkUHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFNhdmVkSW5kZXgoKSB7XG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHRoaXMuaW5kZXg7IC8vL1xuICBcbiAgICByZXR1cm4gc2F2ZWRJbmRleDtcbiAgfVxuXG4gIGdldE5leHRUb2tlbigpIHtcbiAgICBsZXQgbmV4dFRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4KytdO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0VG9rZW47XG4gIH1cblxuICBpc0F0U3RhcnRPZkNvbnRlbnQoKSB7XG4gICAgY29uc3QgYXRTdGFydE9mQ29udGVudCA9IHRoaXMuc3RhcnRPZkNvbnRlbnQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaW5kZXggPT09IDApOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTtcblxuICAgIHJldHVybiBhdFN0YXJ0T2ZDb250ZW50O1xuICB9XG5cbiAgZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSB7XG5cdFx0bGV0IG5leHRTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICBcdGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICBcdHdoaWxlICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gIFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK10sXG5cdFx0XHRcdFx0XHR0b2tlblNpZ25pZmljYW50ID0gdG9rZW4uaXNTaWduaWZpY2FudCgpO1xuXG4gIFx0XHRpZiAodG9rZW5TaWduaWZpY2FudCkge1xuICBcdFx0ICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdG9rZW47IC8vL1xuXG5cdFx0XHRcdG5leHRTaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcdC8vL1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuICBcdH1cblxuXHRcdHJldHVybiBuZXh0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblxuICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gbmV4dFRva2VuLmlzV2hpdGVzcGFjZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG5cdGJhY2t0cmFjayhzYXZlZEluZGV4KSB7XG5cdFx0dGhpcy5pbmRleCA9IHNhdmVkSW5kZXg7ICAvLy9cblx0fVxuXG4gIHJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBzYXZlZFByZWNlZGVuY2U7ICAvLy9cbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW5zUnVsZU1hcEFuZFN0YXJ0T2ZDb250ZW50KHRva2VucywgcnVsZU1hcCwgc3RhcnRPZkNvbnRlbnQpIHtcbiAgICBjb25zdCBpbmRleCA9IDAsXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG5cdFx0XHRcdFx0c3RhdGUgPSBuZXcgU3RhdGUoaW5kZXgsIHRva2VucywgcnVsZU1hcCwgcHJlY2VkZW5jZSwgc3RhcnRPZkNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU3RhdGUgZnJvbSBcIi4uL3N0YXRlXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5mdW5jdGlvbiBwYXJzZSh0b2tlbnMsIHJ1bGUgPSB0aGlzLnN0YXJ0UnVsZSwgc3RhcnRPZkNvbnRlbnQgPSB0cnVlKSB7XG4gIGxldCBub2RlID0gbnVsbDtcblxuICBjb25zdCBub2RlcyA9IFtdLFxuICAgICAgICBzdGF0ZSA9IFN0YXRlLmZyb21Ub2tlbnNSdWxlTWFwQW5kU3RhcnRPZkNvbnRlbnQodG9rZW5zLCB0aGlzLnJ1bGVNYXAsIHN0YXJ0T2ZDb250ZW50KSxcbiAgICAgICAgY2FsbGJhY2sgPSBudWxsLFxuICAgICAgICBjYWxsQWhlYWQgPSBudWxsLFxuICAgICAgICBwYXJzZWQgPSBydWxlLnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgaWYgKHBhcnNlZCkge1xuICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICAgIG5vZGUgPSBmaXJzdE5vZGU7IC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmNvbnN0IHBhcnNlck1peGlucyA9IHtcbiAgcGFyc2Vcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlck1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycywgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGxhc3QgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBORVdfTElORV9DSEFSQUNURVIsIFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlIHtcbiAgY29uc3RydWN0b3IobGluZXMpIHtcbiAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMubGluZXMuc2xpY2UoKSwgIC8vL1xuICAgICAgICAgIHBhcnNlVHJlZSA9IG5ldyBQYXJzZVRyZWUobGluZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGxldCB3aWR0aDtcblxuICAgIGxldCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxpbmVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB3aWR0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxhc3RMaW5lID0gbGFzdCh0aGlzLmxpbmVzKSxcbiAgICAgICAgICAgIGxhc3RMaW5lTGVuZ3RoID0gbGFzdExpbmUubGVuZ3RoO1xuXG4gICAgICB3aWR0aCA9IGxhc3RMaW5lTGVuZ3RoOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXREZXB0aCgpIHtcbiAgICBjb25zdCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoLFxuICAgICAgICAgIGRlcHRoID0gbGluZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBkZXB0aDtcbiAgfVxuXG4gIGZvckVhY2hMaW5lKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5saW5lcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFwcGVuZFRvVG9wKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9MZWZ0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGluZSArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9SaWdodChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgbGluZTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvQm90dG9tKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkVG9wTWFyZ2luKHRvcE1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgdG9wTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIHRvcE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aCh0b3BNYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdG9wTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdCh0b3BNYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgbGVmdE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChsZWZ0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGVmdE1hcmdpblN0cmluZyArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCByaWdodE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChyaWdodE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgcmlnaHRNYXJnaW5TdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgYWRkQm90dG9tTWFyZ2luKGJvdHRvbU1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgYm90dG9tTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIGJvdHRvbU1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChib3R0b21NYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYm90dG9tTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMucHVzaChib3R0b21NYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuICBcbiAgcG9wTGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMucG9wKCk7IH1cbiAgXG4gIHNoaWZ0TGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMuc2hpZnQoKTsgfVxuICBcbiAgcHVzaExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnB1c2gobGluZSk7IH1cbiAgXG4gIHVuc2hpZnRMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpOyB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5saW5lcy5yZWR1Y2UoKHN0cmluZywgbGluZSkgPT4ge1xuICAgICAgc3RyaW5nICs9IGxpbmUgKyBORVdfTElORV9DSEFSQUNURVI7XG5cbiAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKG1hcmdpbldpZHRoLCBzcGFjZUNoYXJhY3Rlcikge1xuICBzcGFjZUNoYXJhY3RlciA9IHNwYWNlQ2hhcmFjdGVyIHx8IFNQQUNFX0NIQVJBQ1RFUjtcblxuICBsZXQgbWFyZ2luU3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXJnaW5XaWR0aDsgaW5kZXgrKykge1xuICAgIG1hcmdpblN0cmluZyArPSBzcGFjZUNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBtYXJnaW5TdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgQkFSX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZXh0ZW5kcyBQYXJzZVRyZWUge1xuICBjb25zdHJ1Y3RvcihsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgIHN1cGVyKGxpbmVzKTtcbiAgICBcbiAgICB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICB9XG4gIFxuICBnZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gIH1cblxuICBhZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCkge1xuICAgIHN1cGVyLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcblxuICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBsZWZ0TWFyZ2luV2lkdGg7IC8vL1xuICB9XG5cbiAgc3RhdGljIGZyb21XaWR0aCh3aWR0aCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEJBUl9DSEFSQUNURVIsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IDAsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSxcbiAgICAgICAgICBsZWZ0TWFyZ2luV2lkdGggPSBNYXRoLmZsb29yKHdpZHRoLzIpLFxuICAgICAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSB3aWR0aCAtIGxlZnRNYXJnaW5XaWR0aCAtIDE7XG5cbiAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG5cbiAgICByZXR1cm4gdmVydGljYWxCcmFuY2hQYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbURlcHRoQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDbGFzcywgZGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pIHtcbiAgICBjb25zdCBsaW5lcyA9IGxpbmVzRnJvbURlcHRoKGRlcHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyBDbGFzcyhsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICByZXR1cm4gdmVydGljYWxCcmFuY2hQYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2xhc3MsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgIGlmICh2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBzdHJpbmc7ICAvLy9cblxuICAgICAgc3RyaW5nID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IFBhcnNlVHJlZTsgIC8vL1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBsaW5lID0gc3RyaW5nLCAvLy9cbiAgICAgICAgICBsaW5lcyA9IFtcbiAgICAgICAgICAgIGxpbmVcbiAgICAgICAgICBdLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gbmV3IENsYXNzKGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsaW5lc0Zyb21EZXB0aChkZXB0aCkge1xuICBjb25zdCBsaW5lcyA9IFtdO1xuXG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGluZGV4IDwgZGVwdGgpIHtcbiAgICBsaW5lc1tpbmRleCsrXSA9IEVNUFRZX1NUUklORztcbiAgfVxuXG4gIHJldHVybiBsaW5lcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVJbmRleEZyb21Ub2tlbkluZGV4QW5kVG9rZW5zKHRva2VuSW5kZXgsIHRva2Vucykge1xuICBsZXQgbGluZUluZGV4ID0gbnVsbDtcblxuICBpZiAodG9rZW5JbmRleCAhPT0gbnVsbCkge1xuICAgIGxpbmVJbmRleCA9IDA7XG5cbiAgICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgICAgZW5kID0gdG9rZW5JbmRleDtcblxuICAgIHRva2VucyA9IHRva2Vucy5zbGljZShzdGFydCwgZW5kKTsgIC8vL1xuXG4gICAgdG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICBjb25zdCB0b2tlbkVuZE9mTGluZVRva2VuID0gdG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgICBpZiAodG9rZW5FbmRPZkxpbmVUb2tlbikge1xuICAgICAgICBsaW5lSW5kZXgrKztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsaW5lSW5kZXg7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnN9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxpbmVJbmRleEZyb21Ub2tlbkluZGV4QW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90b2tlbnNcIjtcblxuY29uc3QgeyBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgb3BhY2l0eSA9IG5vblRlcm1pbmFsTm9kZS5nZXRPcGFjaXR5KCksXG4gICAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub25UZXJtaW5hbE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSxcbiAgICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9uVGVybWluYWxOb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSxcbiAgICAgICAgICBmaXJzdExpbmVJbmRleCA9IGxpbmVJbmRleEZyb21Ub2tlbkluZGV4QW5kVG9rZW5zKGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4LCB0b2tlbnMpLFxuICAgICAgICAgIGxhc3RMaW5lSW5kZXggPSBsaW5lSW5kZXhGcm9tVG9rZW5JbmRleEFuZFRva2VucyhsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4LCB0b2tlbnMpO1xuXG4gICAgbGV0IGxpbmVJbmRleGVzO1xuXG4gICAgaWYgKGZpcnN0TGluZUluZGV4ID09PSBsYXN0TGluZUluZGV4KSB7XG4gICAgICBjb25zdCBsaW5lSW5kZXggPSBmaXJzdExpbmVJbmRleDsgLy8vXG5cbiAgICAgIGlmIChsaW5lSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgbGluZUluZGV4ZXMgPSBFTVBUWV9TVFJJTkc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaW5lSW5kZXhlcyA9IGAgWyR7bGluZUluZGV4fV1gO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgLy8vXG4gICAgICB9IGVsc2UgaWYgKGZpcnN0TGluZUluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIGxpbmVJbmRleGVzID0gYCBbJHtsYXN0TGluZUluZGV4fV1gO1xuICAgICAgfSBlbHNlIGlmIChsYXN0TGluZUluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIGxpbmVJbmRleGVzID0gYCBbJHtmaXJzdExpbmVJbmRleH1dYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmVJbmRleGVzID0gYCBbJHtmaXJzdExpbmVJbmRleH0tJHtsYXN0TGluZUluZGV4fV1gXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHN0cmluZyA9IGAke3J1bGVOYW1lfWA7XG5cbiAgICBpZiAob3BhY2l0eSAhPT0gbnVsbCkge1xuICAgICAgc3RyaW5nID0gYCR7c3RyaW5nfSR7b3BhY2l0eX1gO1xuICAgIH1cblxuICAgIHN0cmluZyA9IGAke3N0cmluZ30ke2xpbmVJbmRleGVzfWA7XG5cbiAgICBsZXQgcHJlY2VkZW5jZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRQcmVjZWRlbmNlKCk7XG5cbiAgICBpZiAocHJlY2VkZW5jZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHByZWNlZGVuY2UgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHByZWNlZGVuY2UgPSBTUEFDRV9DSEFSQUNURVI7XG4gICAgICB9XG5cbiAgICAgIHN0cmluZyA9IGAke3N0cmluZ30gKCR7cHJlY2VkZW5jZX0pYDtcbiAgICB9XG5cbiAgICBjb25zdCBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihSdWxlTmFtZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IERBU0hfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlIGV4dGVuZHMgUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21XaWR0aCh3aWR0aCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHN0cmluZ0Zyb21DaGFyYWN0ZXJzV2lkdGgod2lkdGgsIERBU0hfQ0hBUkFDVEVSKSxcbiAgICAgICAgICBsaW5lID0gc3RyaW5nLCAvLy9cbiAgICAgICAgICBsaW5lcyA9IFtcbiAgICAgICAgICAgIGxpbmVcbiAgICAgICAgICBdLFxuICAgICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKGNoYXJhY3RlcnNXaWR0aCwgY2hhcmFjdGVyKSB7XG4gIGxldCBzdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoYXJhY3RlcnNXaWR0aDsgaW5kZXgrKykge1xuICAgIHN0cmluZyArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5pbXBvcnQgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi9ob3Jpem9udGFsQnJhbmNoXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGlsZE5vZGVzUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbUNoaWxkTm9kZXNBbmRUb2tlbnMoY2hpbGROb2RlcywgdG9rZW5zKSB7XG4gICAgbGV0IGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBudWxsO1xuXG4gICAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gICAgaWYgKGNoaWxkTm9kZXNMZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVzID0gY2hpbGROb2Rlcy5yZWR1Y2UoKGNoaWxkTm9kZVBhcnNlVHJlZXMsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGUuYXNQYXJzZVRyZWUodG9rZW5zKTtcblxuICAgICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLnB1c2goY2hpbGROb2RlUGFyc2VUcmVlKTtcblxuICAgICAgICAgICAgICByZXR1cm4gY2hpbGROb2RlUGFyc2VUcmVlcztcbiAgICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzLmxlbmd0aDtcblxuICAgICAgaWYgKGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBmaXJzdChjaGlsZE5vZGVQYXJzZVRyZWVzKTtcblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWU7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24sXG4gICAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IDAsXG4gICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggPSAwLFxuICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gMDtcblxuICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLmZvckVhY2goKGNoaWxkTm9kZVBhcnNlVHJlZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCk7XG5cbiAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLFxuICAgICAgICAgICAgICAgICAgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgICBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGluZGV4ID09PSBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICAgIGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gbGFzdENoaWxkTm9kZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbmRleCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IDE7XG5cbiAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggPSBNYXRoLm1heChjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgsIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgd2lkdGggPSBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArIDEsXG4gICAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLFxuICAgICAgICAgICAgICByaWdodE1hcmdpbldpZHRoID0gY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoIC0gd2lkdGggLSBsZWZ0TWFyZ2luV2lkdGg7XG5cbiAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG5cbiAgICAgICAgY29uc3QgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbURlcHRoQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDaGlsZE5vZGVzUGFyc2VUcmVlLCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMuZm9yRWFjaCgoY2hpbGROb2RlUGFyc2VUcmVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlID0gY2hpbGROb2RlUGFyc2VUcmVlLmNsb25lKCk7XG5cbiAgICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgcmlnaHRNYXJnaW5XaWR0aCA9IDE7XG5cbiAgICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbU1hcmdpbkRlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoIC0gY2hpbGROb2RlUGFyc2VUcmVlRGVwdGg7XG5cbiAgICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGROb2Rlc1BhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJzZVRyZWUgZnJvbSBcIi4vcnVsZU5hbWVcIjtcbmltcG9ydCBDaGlsZE5vZGVzUGFyc2VUcmVlIGZyb20gXCIuL2NoaWxkTm9kZXNcIjtcbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgbGV0IG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlID0gUnVsZU5hbWVQYXJzZVRyZWUuZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IENoaWxkTm9kZXNQYXJzZVRyZWUuZnJvbUNoaWxkTm9kZXNBbmRUb2tlbnMoY2hpbGROb2RlcywgdG9rZW5zKTtcblxuICAgIGlmIChjaGlsZE5vZGVzUGFyc2VUcmVlID09PSBudWxsKSB7XG4gICAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWVEZXB0aCwgLy8vXG4gICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uOyAvLy9cblxuICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbURlcHRoQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUsIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZURlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQocnVsZU5hbWVQYXJzZVRyZWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICBjb25zdCBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID0gcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG5cbiAgICAgIGxldCBsZWZ0TWFyZ2luV2lkdGg7XG5cbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAvLy9cbiAgICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgICBsZWZ0TWFyZ2luV2lkdGggPSAtdmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlO1xuXG4gICAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID4gMCkge1xuICAgICAgICBsZWZ0TWFyZ2luV2lkdGggPSArdmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlO1xuXG4gICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZVdpZHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgIHdpZHRoc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVdpZHRoIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoO1xuXG4gICAgICBsZXQgcmlnaHRNYXJnaW5XaWR0aDtcblxuICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIC8vL1xuICAgICAgfSBlbHNlIGlmICh3aWR0aHNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgICByaWdodE1hcmdpbldpZHRoID0gLXdpZHRoc0RpZmZlcmVuY2U7XG5cbiAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPiAwKSB7XG4gICAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSArd2lkdGhzRGlmZmVyZW5jZTtcblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgfVxuXG4gICAgICBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgIGNvbnN0IHJ1bGVOYW1lUGFyc2VUcmVlRGVwdGggPSBydWxlTmFtZVBhcnNlVHJlZS5nZXREZXB0aCgpLFxuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGggPSBydWxlTmFtZVBhcnNlVHJlZURlcHRoLCAvLy9cbiAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247IC8vL1xuXG4gICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChydWxlTmFtZVBhcnNlVHJlZSk7XG5cbiAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb0JvdHRvbShjaGlsZE5vZGVzUGFyc2VUcmVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGVcIjtcblxuY29uc3QgeyBmaXJzdCwgbWF0Y2gsIGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IG9wYXF1ZTogb3BhcXVlU3BlY2lhbFN5bWJvbCAsIHNlbWlPcGFxdWU6IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICAgIHRoaXMub3BhY2l0eSA9IG9wYWNpdHk7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgZ2V0UGFyZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xuICB9XG5cbiAgZ2V0Q2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICB9XG5cbiAgZ2V0T3BhY2l0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcGFjaXR5O1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRDaGlsZE5vZGVzKGNoaWxkTm9kZXMpIHtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gMCxcbiAgICAgICAgICBkZWxldGVDb3VudCA9IEluZmluaXR5LFxuICAgICAgICAgIGFkZGVkQ2hpbGROb2RlcyA9IGNoaWxkTm9kZXM7ICAvLy9cblxuICAgIHRoaXMuc3BsaWNlQ2hpbGROb2RlcyhzdGFydEluZGV4LCBkZWxldGVDb3VudCwgYWRkZWRDaGlsZE5vZGVzKTtcbiAgfVxuXG4gIHNldFBhcmVudE5vZGUocGFyZW50Tm9kZSkge1xuICAgIHRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gIH1cblxuICBzZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0T3BhY2l0eShvcGFjaXR5KSB7XG4gICAgdGhpcy5vcGFjaXR5ID0gb3BhY2l0eTtcbiAgfVxuXG4gIGlzT3BhcXVlKCkge1xuICAgIGNvbnN0IG9wYXF1ZSA9ICh0aGlzLm9wYWNpdHkgPT09IG9wYXF1ZVNwZWNpYWxTeW1ib2wpO1xuXG4gICAgcmV0dXJuIG9wYXF1ZTtcbiAgfVxuXG4gIGlzU2VtaU9wYXF1ZSgpIHtcbiAgICBjb25zdCBzZW1pT3BhcXVlID0gKHRoaXMub3BhY2l0eSA9PT0gc2VtaU9wYXF1ZVNwZWNpYWxTeW1ib2wpO1xuXG4gICAgcmV0dXJuIHNlbWlPcGFxdWU7XG4gIH1cblxuICBpc1RyYW5zcGFyZW50KCkge1xuICAgIGNvbnN0IHNlbWlPcGFxdWUgPSAodGhpcy5vcGFjaXR5ID09PSBudWxsKTtcblxuICAgIHJldHVybiBzZW1pT3BhcXVlO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmZvcndhcmRzU29tZUNoaWxkTm9kZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucyk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmJhY2t3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKTtcblxuICAgICAgaWYgKGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5zKHNpZ25pZmljYW50VG9rZW5zID0gW10pIHtcbiAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbnMoc2lnbmlmaWNhbnRUb2tlbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5zO1xuICB9XG5cbiAgZ2V0QW5jZXN0b3JOb2RlcygpIHtcbiAgICBjb25zdCBhbmNlc3Rvck5vZGVzID0gW107XG5cbiAgICBsZXQgcGFyZW50Tm9kZSA9IHRoaXMucGFyZW50Tm9kZTtcblxuICAgIHdoaWxlIChwYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBhbmNlc3Rvck5vZGUgPSBwYXJlbnROb2RlOyAgLy8vXG5cbiAgICAgIGFuY2VzdG9yTm9kZXMucHVzaChhbmNlc3Rvck5vZGUpO1xuXG4gICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXRQYXJlbnROb2RlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9yTm9kZXM7XG4gIH1cblxuICBnZXRNdWx0aXBsaWNpdHkoKSB7XG4gICAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IHRoaXMuY2hpbGROb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgbXVsdGlwbGljaXR5ID0gY2hpbGROb2Rlc0xlbmd0aDsgIC8vL1xuXG4gICAgcmV0dXJuIG11bHRpcGxpY2l0eTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgbXVsdGlwbGljaXR5ID0gdGhpcy5nZXRNdWx0aXBsaWNpdHkoKSxcbiAgICAgICAgICBlbXB0eSA9IChtdWx0aXBsaWNpdHkgPT09IDApO1xuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBtdWx0aXBsaWNpdHkgPSB0aGlzLmdldE11bHRpcGxpY2l0eSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0gKG11bHRpcGxpY2l0eSA9PT0gMSk7XG5cbiAgICByZXR1cm4gc2luZ3VsYXI7XG4gIH1cblxuICBpc0xvd2VyUHJlY2VkZW5jZShydWxlTmFtZSwgcHJlY2VkZW5jZSkge1xuICAgIGxldCBsb3dlclByZWNlZGVuY2U7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcmVjZWRlbmNlID09PSBudWxsKSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJlY2VkZW5jZSA9PT0gSW5maW5pdHkpIHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlID0gZmlyc3QodGhpcy5jaGlsZE5vZGVzKTtcblxuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gZmlyc3RDaGlsZE5vZGUuaXNMb3dlclByZWNlZGVuY2UocnVsZU5hbWUsIHByZWNlZGVuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSAoKHRoaXMucnVsZU5hbWUgPT09IHJ1bGVOYW1lKSAmJiAodGhpcy5wcmVjZWRlbmNlIDwgcHJlY2VkZW5jZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBsb3dlclByZWNlZGVuY2U7XG4gIH1cblxuICBpc1VucHJlY2VkZW50ZWQoKSB7XG4gICAgbGV0IHVucHJlY2VkZW50ZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgIHVucHJlY2VkZW50ZWQgPSB0aGlzLmNoaWxkTm9kZXMuc29tZSgoY2hpbGROb2RlKSA9PiB7ICAvLy9cbiAgICAgICAgY29uc3QgY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlID0gY2hpbGROb2RlLmlzTG93ZXJQcmVjZWRlbmNlKHRoaXMucnVsZU5hbWUsIHRoaXMucHJlY2VkZW5jZSk7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5wcmVjZWRlbnRlZDtcbiAgfVxuXG4gIGlzSW5jbHVkZWRJbihub2RlKSB7XG4gICAgbGV0IGluY2x1ZGVkSW4gPSBmYWxzZTtcblxuICAgIGlmICh0aGlzID09PSBub2RlKSB7XG4gICAgICBpbmNsdWRlZEluID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgIGluY2x1ZGVkSW4gPSBjaGlsZE5vZGVzLnNvbWUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluY2x1ZGVkSW5DaGlsZE5vZGUgPSB0aGlzLmlzSW5jbHVkZWRJbihjaGlsZE5vZGUpO1xuXG4gICAgICAgICAgaWYgKGluY2x1ZGVkSW5DaGlsZE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluY2x1ZGVkSW47XG4gIH1cblxuICBtYXBDaGlsZE5vZGUoY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5tYXAoY2FsbGJhY2spOyB9XG5cbiAgc29tZUNoaWxkTm9kZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLnNvbWUoY2FsbGJhY2spOyB9XG5cbiAgZmluZENoaWxkTm9kZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLmZpbmQoY2FsbGJhY2spOyB9XG5cbiAgZXZlcnlDaGlsZE5vZGUoY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5ldmVyeShjYWxsYmFjayk7IH1cblxuICBmaWx0ZXJDaGlsZE5vZGUoY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5maWx0ZXIoY2FsbGJhY2spOyB9XG5cbiAgcmVkdWNlQ2hpbGROb2RlKGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHsgcmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5yZWR1Y2UoY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSk7IH1cblxuICBmb3JFYWNoQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHRoaXMuY2hpbGROb2Rlcy5mb3JFYWNoKGNhbGxiYWNrKTsgfVxuXG4gIGZvcndhcmRzU29tZUNoaWxkTm9kZShjYWxsYmFjaykgeyByZXR1cm4gZm9yd2FyZHNTb21lKHRoaXMuY2hpbGROb2RlcywgY2FsbGJhY2spOyB9XG5cbiAgYmFja3dhcmRzU29tZUNoaWxkTm9kZShjYWxsYmFjaykgeyByZXR1cm4gYmFja3dhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIGNhbGxiYWNrKTsgfVxuXG4gIHNldENoaWxkTm9kZXNQYXJlbnROb2RlKGNoaWxkTm9kZXMpIHtcbiAgICBpZiAoY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZE5vZGVzID0gW1xuICAgICAgICAuLi50aGlzLmNoaWxkTm9kZXNcbiAgICAgIF07XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXM7XG5cbiAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY2hpbGROb2RlLnNldFBhcmVudE5vZGUocGFyZW50Tm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXNldENoaWxkTm9kZXNQYXJlbnROb2RlKGNoaWxkTm9kZXMpIHtcbiAgICBpZiAoY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZE5vZGVzID0gW1xuICAgICAgICAuLi50aGlzLmNoaWxkTm9kZXNcbiAgICAgIF07XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IG51bGw7XG5cbiAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY2hpbGROb2RlLnNldFBhcmVudE5vZGUocGFyZW50Tm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRDaGlsZE5vZGUoYWRkZWRDaGlsZE5vZGUsIG9mZnNldCkge1xuICAgIGNvbnN0IGFkZGVkQ2hpbGROb2RlcyA9IFtcbiAgICAgICAgYWRkZWRDaGlsZE5vZGVcbiAgICBdO1xuXG4gICAgdGhpcy5hZGRDaGlsZE5vZGVzKGFkZGVkQ2hpbGROb2Rlcywgb2Zmc2V0KTtcbiAgfVxuXG4gIGFkZENoaWxkTm9kZXMoYWRkZWRDaGlsZE5vZGVzLCBvZmZzZXQpIHtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gb2Zmc2V0LCAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IDA7XG5cbiAgICB0aGlzLnNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIC4uLmFkZGVkQ2hpbGROb2Rlcyk7XG4gIH1cblxuICByZW1vdmVDaGlsZE5vZGUocmVtb3ZlZENoaWxkTm9kZSkge1xuICAgIGxldCByZW1vdmVkQ2hpbGROb2RlcztcblxuICAgIHJlbW92ZWRDaGlsZE5vZGVzID0gW1xuICAgICAgcmVtb3ZlZENoaWxkTm9kZVxuICAgIF07XG5cbiAgICByZW1vdmVkQ2hpbGROb2RlcyA9IHRoaXMucmVtb3ZlQ2hpbGROb2RlcyhyZW1vdmVkQ2hpbGROb2Rlcyk7XG5cbiAgICByZXR1cm4gcmVtb3ZlZENoaWxkTm9kZXM7XG4gIH1cblxuICByZW1vdmVDaGlsZE5vZGVzKHJlbW92ZWRDaGlsZE5vZGVzKSB7XG4gICAgaWYgKHJlbW92ZWRDaGlsZE5vZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlbW92ZWRDaGlsZE5vZGVzID0gW1xuICAgICAgICAuLi50aGlzLmNoaWxkTm9kZXNcbiAgICAgIF07XG4gICAgfVxuXG4gICAgY29uc3QgcmVtb3ZlZENoaWxkTm9kZXNMZW5ndGggPSByZW1vdmVkQ2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAocmVtb3ZlZENoaWxkTm9kZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdFJlcGxhY2VkQ2hpbGROb2RlID0gZmlyc3QocmVtb3ZlZENoaWxkTm9kZXMpLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSB0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihmaXJzdFJlcGxhY2VkQ2hpbGROb2RlKSxcbiAgICAgICAgICBzdGFydEluZGV4ID0gZmlyc3RJbmRleCwgLy8vXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSByZW1vdmVkQ2hpbGROb2Rlc0xlbmd0aCwgLy8vXG4gICAgICAgICAgYWRkZWRDaGlsZE5vZGVzID0gW107XG5cbiAgICByZW1vdmVkQ2hpbGROb2RlcyA9IHRoaXMuc3BsaWNlQ2hpbGROb2RlcyhzdGFydEluZGV4LCBkZWxldGVDb3VudCwgYWRkZWRDaGlsZE5vZGVzKTtcblxuICAgIHJldHVybiByZW1vdmVkQ2hpbGROb2RlcztcbiAgfVxuXG4gIHJlcGxhY2VDaGlsZE5vZGUocmVwbGFjZWRDaGlsZE5vZGUsIHJlcGxhY2VtZW50Q2hpbGROb2Rlcykge1xuICAgIGNvbnN0IHJlcGxhY2VkQ2hpbGROb2RlcyA9IFtcbiAgICAgIHJlcGxhY2VkQ2hpbGROb2RlXG4gICAgXTtcblxuICAgIHRoaXMucmVwbGFjZUNoaWxkTm9kZXMocmVwbGFjZWRDaGlsZE5vZGVzLCByZXBsYWNlbWVudENoaWxkTm9kZXMpO1xuICB9XG5cbiAgcmVwbGFjZUNoaWxkTm9kZXMocmVwbGFjZWRDaGlsZE5vZGVzLCByZXBsYWNlbWVudENoaWxkTm9kZXMpIHtcbiAgICBjb25zdCByZXBsYWNlZENoaWxkTm9kZXNMZW5ndGggPSByZXBsYWNlZENoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0UmVwbGFjZWRDaGlsZE5vZGUgPSBmaXJzdChyZXBsYWNlZENoaWxkTm9kZXMpLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSB0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihmaXJzdFJlcGxhY2VkQ2hpbGROb2RlKSxcbiAgICAgICAgICBzdGFydEluZGV4ID0gZmlyc3RJbmRleCwgLy8vXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSByZXBsYWNlZENoaWxkTm9kZXNMZW5ndGg7IC8vL1xuXG4gICAgdGhpcy5zcGxpY2VDaGlsZE5vZGVzKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50LCByZXBsYWNlbWVudENoaWxkTm9kZXMpO1xuICB9XG5cbiAgc3BsaWNlQ2hpbGROb2RlcyhzdGFydEluZGV4LCBkZWxldGVDb3VudCwgYWRkZWRDaGlsZE5vZGVzID0gW10pIHtcbiAgICBjb25zdCByZW1vdmVkQ2hpbGROb2RlcyA9IHRoaXMuY2hpbGROb2Rlcy5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIC4uLmFkZGVkQ2hpbGROb2Rlcyk7XG5cbiAgICB0aGlzLnJlc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUocmVtb3ZlZENoaWxkTm9kZXMpO1xuXG4gICAgdGhpcy5zZXRDaGlsZE5vZGVzUGFyZW50Tm9kZShhZGRlZENoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIHJlbW92ZWRDaGlsZE5vZGVzO1xuICB9XG5cbiAgc2xpY2VDaGlsZE5vZGVzKHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuY2hpbGROb2Rlcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XG5cbiAgICByZXR1cm4gY2hpbGROb2RlcztcbiAgfVxuXG4gIG1hdGNoKG5vZGUsIGRlcHRoID0gSW5maW5pdHksIGV4YWN0bHkgPSBmYWxzZSkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgaWYgKHRoaXMucnVsZU5hbWUgPT09IG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZU9wYWNpdHkgPSBub25UZXJtaW5hbE5vZGUuZ2V0T3BhY2l0eSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wYWNpdHkgPT09IG5vblRlcm1pbmFsTm9kZU9wYWNpdHkpIHtcbiAgICAgICAgICBjb25zdCBwcmVjZWRlbmNlID0gdGhpcy5nZXRQcmVjZWRlbmNlKCksXG4gICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRQcmVjZWRlbmNlKCk7XG5cbiAgICAgICAgICBpZiAocHJlY2VkZW5jZSA9PT0gbm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgZGVwdGgtLTtcblxuICAgICAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgICAgIG1hdGNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoKHRoaXMuY2hpbGROb2Rlcywgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgKGNoaWxkTm9kZSwgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlTWF0Y2hlc05vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSA9IGNoaWxkTm9kZS5tYXRjaChub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUsIGRlcHRoLCBleGFjdGx5KTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgcmV3cml0ZSgpIHtcbiAgICBjb25zdCByZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUgPSBudWxsO1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgY2xvbmUoLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgQ2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHBhcmVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5ydWxlTmFtZSxcbiAgICAgICAgICBjaGlsZE5vZGVzID0gY2xvbmVDaGlsZE5vZGVzKHRoaXMuY2hpbGROb2RlcyksXG4gICAgICAgICAgb3BhY2l0eSA9IHRoaXMub3BhY2l0eSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gdGhpcy5wcmVjZWRlbmNlLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgcGFyZW50Tm9kZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIG5vblRlcm1pbmFsTm9kZS5zZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSgpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmIChvcGFjaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wYWNpdHkgPSBjaGlsZE5vZGVzOyAvLy9cblxuICAgICAgY2hpbGROb2RlcyA9IHJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IE5vblRlcm1pbmFsTm9kZTsgIC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgcGFyZW50Tm9kZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIG5vblRlcm1pbmFsTm9kZS5zZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSgpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9uZUNoaWxkTm9kZXMoY2hpbGROb2Rlcykge1xuICBjaGlsZE5vZGVzID0gY2hpbGROb2Rlcy5tYXAoKGNoaWxkTm9kZSkgPT4geyAgLy8vXG4gICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNsb25lKCk7ICAvLy9cblxuICAgIHJldHVybiBjaGlsZE5vZGU7XG4gIH0pO1xuXG4gIHJldHVybiBjaGlsZE5vZGVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGUsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShOYW1lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZSwgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgbGV0IHBhcnNlZDtcblxuICBjb25zdCBpbmRleCA9IDAsXG4gICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgIHBhcnRcbiAgICAgICAgXTtcblxuICBwYXJzZWQgPSBwYXJzZVBhcnRPZlBhcnRzKGluZGV4LCBwYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMoaW5kZXgsIHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydE9mUGFydHMoaW5kZXgsIHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgbGV0IHBhcnNlZDtcblxuICBjb25zdCBwYXJ0c0xlbmd0aCA9IHBhcnRzLmxlbmd0aDtcblxuICBpZiAoaW5kZXggPT09IHBhcnRzTGVuZ3RoKSB7XG4gICAgcGFyc2VkID0gKGNhbGxiYWNrICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICBjYWxsYmFjaygpIDpcbiAgICAgICAgICAgICAgICAgdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFydHNbaW5kZXhdLFxuICAgICAgICAgIHBhcnRDYWxsQWhlYWQgPSAoY2FsbEFoZWFkID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydC5pc0NhbGxBaGVhZCgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWU7XG5cbiAgICBpbmRleCsrO1xuXG4gICAgcGFyc2VkID0gcGFydENhbGxBaGVhZCA/XG4gICAgICAgICAgICAgICBwYXJzZVBhcnRXaXRoQ2FsbEFoZWFkKHBhcnQsIGluZGV4LCBwYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSA6XG4gICAgICAgICAgICAgICAgIHBhcnNlUGFydFdpdGhvdXRDYWxsQWhlYWQocGFydCwgaW5kZXgsIHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0V2l0aENhbGxBaGVhZChwYXJ0LCBpbmRleCwgcGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICBsZXQgcGFyc2VkO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGNhbGxBaGVhZCA9ICgpID0+IHsgLy8vXG4gICAgbGV0IHBhcnNlZDtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMoaW5kZXgsIHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfTtcblxuICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgaWYgKCFwYXJzZWQpIHtcbiAgICBjb25zdCBzdGFydCA9IG5vZGVzTGVuZ3RoOyAgLy8vXG5cbiAgICBub2Rlcy5zcGxpY2Uoc3RhcnQpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0V2l0aG91dENhbGxBaGVhZChwYXJ0LCBpbmRleCwgcGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICBsZXQgcGFyc2VkO1xuXG4gIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICBpZiAocGFyc2VkKSB7XG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0T2ZQYXJ0cyhpbmRleCwgcGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBwYXJzZVBhcnRzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhcnNlXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJ0cywgcHJlY2VkZW5jZSkge1xuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlO1xuICB9XG5cbiAgZ2V0UGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydHM7XG4gIH1cblxuICBnZXRQcmVjZWRlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnByZWNlZGVuY2U7XG4gIH1cblxuICBwYXJzZShjaGlsZE5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBub2RlcyA9IGNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCk7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHRoaXMucGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBsZXQgc3RyaW5nO1xuXG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZzsgLy8vXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICBzdHJpbmcgPSBwYXJ0c1N0cmluZzsgLy8vXG5cbiAgICBpZiAodGhpcy5wcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcmVjZWRlbmNlID0gKHRoaXMucHJlY2VkZW5jZSA9PT0gSW5maW5pdHkpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQQUNFX0NIQVJBQ1RFUiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlY2VkZW5jZTtcblxuICAgICAgc3RyaW5nID0gYCR7c3RyaW5nfSAoJHtwcmVjZWRlbmNlfSlgO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnRzKENsYXNzLCBwYXJ0cykge1xuICAgIGlmIChwYXJ0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJ0cyA9IENsYXNzOyAgLy8vXG5cbiAgICAgIENsYXNzID0gRGVmaW5pdGlvbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbiA9IG5ldyBDbGFzcyhwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydHNBbmRQcmVjZWRlbmNlKENsYXNzLCBwYXJ0cywgcHJlY2VkZW5jZSkge1xuICAgIGlmIChwcmVjZWRlbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHByZWNlZGVuY2UgPSBwYXJ0czsgLy8vXG5cbiAgICAgIHBhcnRzID0gQ2xhc3M7ICAvLy9cblxuICAgICAgQ2xhc3MgPSBEZWZpbml0aW9uOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBkZWZpbml0aW9uID0gbmV3IENsYXNzKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydCB7XG4gIGlzQ2FsbEFoZWFkKCkge1xuICAgIGNvbnN0IGNhbGxBaGVhZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGNhbGxBaGVhZDtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsUGFydCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlUGFydCgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIGlzU3RhcnRPZkNvbnRlbnRQYXJ0KCkge1xuICAgIGNvbnN0IHN0YXJ0T2ZDb250ZW50UGFydCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHN0YXJ0T2ZDb250ZW50UGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbGluZUluZGV4RnJvbVRva2VuSW5kZXhBbmRUb2tlbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3Rva2Vuc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgdHlwZSA9IHRlcm1pbmFsTm9kZS5nZXRUeXBlKCksXG4gICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdGVybWluYWxOb2RlLmdldFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpLFxuICAgICAgICAgIGxpbmVJbmRleCA9IGxpbmVJbmRleEZyb21Ub2tlbkluZGV4QW5kVG9rZW5zKHNpZ25pZmljYW50VG9rZW5JbmRleCwgdG9rZW5zKTtcblxuICAgIGxldCBsaW5lSW5kZXhlcztcblxuICAgIGlmIChsaW5lSW5kZXggPT09IG51bGwpIHtcbiAgICAgIGxpbmVJbmRleGVzID0gRU1QVFlfU1RSSU5HO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lSW5kZXhlcyA9IGAgWyR7bGluZUluZGV4fV1gO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmluZyA9IGBcIiR7Y29udGVudH1cIlske3R5cGV9XSR7bGluZUluZGV4ZXN9YCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oVGVybWluYWxOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlL3Rlcm1pbmFsTm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGUge1xuICBjb25zdHJ1Y3RvcihwYXJlbnROb2RlLCBzaWduaWZpY2FudFRva2VuKSB7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW4gPSBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0UGFyZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xuICB9XG5cbiAgZ2V0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc2V0UGFyZW50Tm9kZShwYXJlbnROb2RlKSB7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIHNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBpc1N0YXJ0T2ZDb250ZW50Tm9kZSgpIHtcbiAgICBjb25zdCBzdGFydE9mQ29udGVudE5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBzdGFydE9mQ29udGVudE5vZGU7XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGU7XG4gIH1cblxuICBpc0Vwc2lsb25Ob2RlKCkge1xuICAgIGNvbnN0IGVwc2lsb25Ob2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gZXBzaWxvbk5vZGU7XG4gIH1cblxuICBpc1Rlcm1pbmFsTm9kZSgpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSB0cnVlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cblxuICBpc05vblRlcm1pbmFsTm9kZSgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTsgfVxuXG4gIGdldENvbnRlbnQoKSB7IHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpOyB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpICB7XG4gICAgY29uc3QgcHJlY2VkZW5jZSA9IG51bGw7XG5cbiAgICByZXR1cm4gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGlzTG93ZXJQcmVjZWRlbmNlKHBhcmVudFJ1bGVOYW1lLCBwYXJlbnRQcmVjZWRlbmNlKSB7XG4gICAgY29uc3QgbG93ZXJQcmVjZWRlbmNlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbG93ZXJQcmVjZWRlbmNlO1xuICB9XG5cbiAgZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdGhpcy5nZXRTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSxcbiAgICAgICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHNpZ25pZmljYW50VG9rZW5JbmRleDsgLy8vXG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucykge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRoaXMuZ2V0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2VucyksXG4gICAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHNpZ25pZmljYW50VG9rZW5JbmRleDsgLy8vXG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpIHtcbiAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIHNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKHRoaXMuc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5zKHNpZ25pZmljYW50VG9rZW5zID0gW10pIHtcbiAgICBpZiAodGhpcy5zaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBzaWduaWZpY2FudFRva2Vucy5wdXNoKHRoaXMuc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5zO1xuICB9XG5cbiAgZ2V0QW5jZXN0b3JOb2RlcygpIHtcbiAgICBjb25zdCBhbmNlc3Rvck5vZGVzID0gW107XG5cbiAgICBsZXQgcGFyZW50Tm9kZSA9IHRoaXMucGFyZW50Tm9kZTtcblxuICAgIHdoaWxlIChwYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBhbmNlc3Rvck5vZGUgPSBwYXJlbnROb2RlOyAgLy8vXG5cbiAgICAgIGFuY2VzdG9yTm9kZXMucHVzaChhbmNlc3Rvck5vZGUpO1xuXG4gICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXRQYXJlbnROb2RlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9yTm9kZXM7XG4gIH1cblxuICBpc0luY2x1ZGVkSW4obm9kZSkge1xuICAgIGxldCBpbmNsdWRlZEluID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcyA9PT0gbm9kZSkge1xuICAgICAgaW5jbHVkZWRJbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICBpbmNsdWRlZEluID0gY2hpbGROb2Rlcy5zb21lKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbmNsdWRlZEluQ2hpbGROb2RlID0gdGhpcy5pc0luY2x1ZGVkSW4oY2hpbGROb2RlKTtcblxuICAgICAgICAgIGlmIChpbmNsdWRlZEluQ2hpbGROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmNsdWRlZEluO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGggPSBJbmZpbml0eSwgZXhhY3RseSA9IGZhbHNlKSB7XG4gICAgbGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIG1hdGNoZXMgPSBleGFjdGx5ID9cbiAgICAgICAgICAgICAgICAgICh0aGlzLnNpZ25pZmljYW50VG9rZW4gPT09IHNpZ25pZmljYW50VG9rZW4pIDpcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5tYXRjaChzaWduaWZpY2FudFRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBUZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbVRlcm1pbmFsTm9kZUFuZFRva2Vucyh0ZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgcGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgY2xvbmUoLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgQ2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHBhcmVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW4sXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gbmV3IENsYXNzKHBhcmVudE5vZGUsIHNpZ25pZmljYW50VG9rZW4sIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhwYXJlbnROb2RlLCBzaWduaWZpY2FudFRva2VuLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU2lnbmlmaWNhbnRUb2tlbihDbGFzcywgc2lnbmlmaWNhbnRUb2tlbiwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IENsYXNzOyAvLy9cblxuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhwYXJlbnROb2RlLCBzaWduaWZpY2FudFRva2VuLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSA9IHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5UeXBlID09PSB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBpZiAoY2FsbEFoZWFkICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBgWyR7dGhpcy5zaWduaWZpY2FudFRva2VuVHlwZX1dYDtcbiAgICBcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBuYW1lVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IG5hbWVUeXBlLCAgLy8vXG4gICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydC5mcm9tU2lnbmlmaWNhbnRUb2tlblR5cGUoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIG5hbWVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBuYW1lUnVsZU5hbWUgPSBcIm5hbWVcIjtcbmV4cG9ydCBjb25zdCBwYXJ0UnVsZU5hbWUgPSBcInBhcnRcIjtcbmV4cG9ydCBjb25zdCBydWxlUnVsZU5hbWUgPSBcInJ1bGVcIjtcbmV4cG9ydCBjb25zdCBlcnJvclJ1bGVOYW1lID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IGVwc2lsb25SdWxlTmFtZSA9IFwiZXBzaWxvblwiO1xuZXhwb3J0IGNvbnN0IHJ1bGVOYW1lUnVsZU5hbWUgPSBcInJ1bGVOYW1lXCI7XG5leHBvcnQgY29uc3QgZG9jdW1lbnRSdWxlTmFtZSA9IFwiZG9jdW1lbnRcIjtcbmV4cG9ydCBjb25zdCB3aWxkY2FyZFJ1bGVOYW1lID0gXCJ3aWxkY2FyZFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZVJ1bGVOYW1lID0gXCJlbmRPZkxpbmVcIjtcbmV4cG9ydCBjb25zdCBkZWZpbml0aW9uUnVsZU5hbWUgPSBcImRlZmluaXRpb25cIjtcbmV4cG9ydCBjb25zdCBwcmVjZWRlbmNlUnVsZU5hbWUgPSBcInByZWNlZGVuY2VcIjtcbmV4cG9ydCBjb25zdCBxdWFudGlmaWVyUnVsZU5hbWUgPSBcInF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBwYXJ0Q2hvaWNlUnVsZU5hbWUgPSBcInBhcnRDaG9pY2VcIjtcbmV4cG9ydCBjb25zdCBkZWZpbml0aW9uc1J1bGVOYW1lID0gXCJkZWZpbml0aW9uc1wiO1xuZXhwb3J0IGNvbnN0IHRlcm1pbmFsUGFydFJ1bGVOYW1lID0gXCJ0ZXJtaW5hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBjaG9pY2VPZlBhcnRzUnVsZU5hbWUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lID0gXCJ0ZXJtaW5hbFN5bWJvbFwiO1xuZXhwb3J0IGNvbnN0IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lID0gXCJub25UZXJtaW5hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3Qgb3BhY2l0eU1vZGlmaWVyUnVsZU5hbWUgPSBcIm9wYWNpdHlNb2RpZmllclwiO1xuZXhwb3J0IGNvbnN0IG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSA9IFwibm9XaGl0ZXNwYWNlXCI7XG5leHBvcnQgY29uc3QgQ2FsbEFoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IFwiY2FsbEFoZWFkTW9kaWZpZXJcIjtcbmV4cG9ydCBjb25zdCByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lID0gXCJyZWd1bGFyRXhwcmVzc2lvblwiO1xuZXhwb3J0IGNvbnN0IG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lID0gXCJvcHRpb25hbFF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBzdGFydE9mQ29udGVudFBhcnRSdWxlTmFtZSA9IFwic3RhcnRPZkNvbnRlbnRcIjtcbmV4cG9ydCBjb25zdCBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBcIm9uZU9yTW9yZVF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gXCJ6ZXJvT3JNb3JlUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgPSBcInNpZ25pZmljYW50VG9rZW5UeXBlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgTmFtZUJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL25hbWVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5cbmltcG9ydCB7IG5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZUJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWVEZWZpbml0aW9uID0gTmFtZURlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBuYW1lID0gbmFtZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gTmFtZUJORk5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lUnVsZSA9IG5ldyBOYW1lQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBuYW1lUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjYWxsQWhlYWQpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuY2FsbEFoZWFkID0gY2FsbEFoZWFkO1xuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc0NhbGxBaGVhZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWxsQWhlYWQ7XG4gIH1cblxuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFJ1bGVOYW1lUGFydFR5cGUgPSBcInJ1bGVOYW1lUGFydFwiO1xuZXhwb3J0IGNvbnN0IE9wdGlvbmFsUGFydFBhcnRUeXBlID0gXCJvcHRpb25hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBDaG9pY2VPZlBhcnRzUGFydFR5cGUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJvbmVPck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJ6ZXJvT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgUnVsZU5hbWVQYXJ0VHlwZSxcbiAgT3B0aW9uYWxQYXJ0UGFydFR5cGUsXG4gIENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBPcHRpb25hbFBhcnRQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuXG5jb25zdCB7IHF1ZXN0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsUGFydFBhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjYWxsQWhlYWQsIHBhcnQpIHtcbiAgICBzdXBlcih0eXBlLCBjYWxsQWhlYWQpO1xuXG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgcGFyc2VkID0gcGFyc2VPcHRpb25hbFBhcnQodGhpcy5wYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gbm9kZXNMZW5ndGg7ICAvLy9cblxuICAgICAgbm9kZXMuc3BsaWNlKHN0YXJ0KTtcblxuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cGFydFN0cmluZ30ke3F1ZXN0aW9uTWFya31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydChwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IE9wdGlvbmFsUGFydFBhcnRUeXBlLFxuICAgICAgICAgIGNhbGxBaGVhZCA9IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbmFsUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydCh0eXBlLCBjYWxsQWhlYWQsIHBhcnQpO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGFydFBhcnQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3B0aW9uYWxQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsQWhlYWQgPT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cblxuXG5cblxuICAgIHBhcnNlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG5cblxuXG5cblxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5cbmNvbnN0IHsgYXN0ZXJpc2sgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaZXJvT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgY2FsbEFoZWFkLCBwYXJ0KSB7XG4gICAgc3VwZXIodHlwZSwgY2FsbEFoZWFkKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgIHBhcnNlZCA9IHBhcnNlWmVyb09yTW9yZVBhcnRzUGFydCh0aGlzLnBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBub2Rlc0xlbmd0aDsgIC8vL1xuXG4gICAgICBub2Rlcy5zcGxpY2Uoc3RhcnQpO1xuXG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7YXN0ZXJpc2t9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnQocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgICBjYWxsQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQodHlwZSwgY2FsbEFoZWFkLCBwYXJ0KTtcblxuICAgIHJldHVybiB6ZXJvT3JNb3JlUGFydHNQYXJ0O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVplcm9Pck1vcmVQYXJ0c1BhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxBaGVhZCA9PT0gbnVsbCkge1xuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlWmVyb09yTW9yZVBhcnRzUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCAoKSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgcGFyc2VkID0gcGFyc2VaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5pbXBvcnQgeyBwYXJzZVplcm9Pck1vcmVQYXJ0c1BhcnQgfSBmcm9tIFwiLi96ZXJvT3JNb3JlUGFydHNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgY2FsbEFoZWFkLCBwYXJ0KSB7XG4gICAgc3VwZXIodHlwZSwgY2FsbEFoZWFkKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgIHBhcnNlZCA9IHBhcnNlT25lT3JNb3JlUGFydHNQYXJ0KHRoaXMucGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IG5vZGVzTGVuZ3RoOyAgLy8vXG5cbiAgICAgIG5vZGVzLnNwbGljZShzdGFydCk7XG5cbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydFN0cmluZyA9IHRoaXMucGFydC5hc1N0cmluZygpLFxuICAgICAgICAgIHN0cmluZyA9IGAke3BhcnRTdHJpbmd9JHtwbHVzfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21QYXJ0KHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgICBjYWxsQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBvbmVPck1vcmVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHR5cGUsIGNhbGxBaGVhZCwgcGFydCk7XG5cbiAgICByZXR1cm4gb25lT3JNb3JlUGFydHNQYXJ0O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9uZU9yTW9yZVBhcnRzUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbEFoZWFkID09PSBudWxsKSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcGFyc2VaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG4gICAgfVxuXG5cbiAgfSBlbHNlIHtcblxuXG5cbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgKCkgPT4ge1xuICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgIHBhcnNlZCA9IHBhcnNlWmVyb09yTW9yZVBhcnRzUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9KTtcblxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHJ1bGVOYW1lUnVsZU5hbWUsIHF1YW50aWZpZXJSdWxlTmFtZSwgY2FsbEFoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVDaG9pY2VOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVOb0Nob2ljZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgbm9kZU5vQ2hvaWNlTm9kZSA9ICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBcInxcIik7XG4gIH1cblxuICByZXR1cm4gbm9kZU5vQ2hvaWNlTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVJ1bGVOYW1lTm9kZShub2RlKSB7XG4gIGxldCBub2RlUnVsZU5hbWVOb2RlID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgbm9kZU5vblRlcm1pbmFsTm9kZSA9ICFub2RlVGVybWluYWxOb2RlO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgIG5vZGVSdWxlTmFtZU5vZGUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJ1bGVOYW1lUnVsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVSdWxlTmFtZU5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVRdWFudGlmaWVyTm9kZShub2RlKSB7XG4gIGxldCBub2RlUXVhbnRpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVF1YW50aWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gcXVhbnRpZmllclJ1bGVOYW1lKTtcblxuICAgIG5vZGVRdWFudGlmaWVyTm9kZSA9IHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlQ2FsbEFoZWFkTW9kaWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVDYWxsQWhlYWRNb2RpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZUNhbGxBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IGNhbGxBaGVhZE1vZGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZUNhbGxBaGVhZE1vZGlmaWVyTm9kZSA9IHJ1bGVOYW1lQ2FsbEFoZWFkTW9kaWZpZXJSdWxlTmFtZTsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGVDYWxsQWhlYWRNb2RpZmllck5vZGU7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSB7XG4gIGxldCBub25UZXJtaW5hbE5vZGU7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gcXVhbnRpZmllck5vZGU7IC8vL1xuXG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpO1xuXG4gIG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlOyAgLy8vXG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBpc05vZGVRdWFudGlmaWVyTm9kZSwgcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2JuZlwiO1xuaW1wb3J0IHsgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBsYXN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KTsgfVxufVxuXG5mdW5jdGlvbiBwYXJ0RnJvbU5vZGVzKG5vZGVzKSB7XG4gIGxldCBwYXJ0O1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKSxcbiAgICAgICAgICBjYWxsQWhlYWQgPSBmYWxzZTtcblxuICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChjYWxsQWhlYWQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc0xhc3ROb2RlUXVhbnRpZmllck5vZGUobm9kZXMpO1xuXG4gICAgaWYgKGxhc3ROb2RlUXVhbnRpZmllck5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKSxcbiAgICAgICAgICAgIHF1YW50aWZpZXJOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpLFxuICAgICAgICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gY29sbGVjdGlvbk9mUGFydHNQYXJ0RnJvbVBhcnRBbmRSdWxlTmFtZShwYXJ0LCBydWxlTmFtZSk7XG5cbiAgICAgIHBhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7IC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBub2Rlcy5zaGlmdCgpO1xuXG4gICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnQ7XG59XG5cbmZ1bmN0aW9uIGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcykge1xuICBjb25zdCBsYXN0Tm9kZSA9IGxhc3Qobm9kZXMpLFxuICAgICAgICBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlID0gaXNOb2RlUXVhbnRpZmllck5vZGUobGFzdE5vZGUpO1xuXG4gIHJldHVybiBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKSB7XG4gIGxldCBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG5cbiAgc3dpdGNoIChydWxlTmFtZSkge1xuICAgIGNhc2Ugb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3Qgb3B0aW9uYWxQYXJ0UGFydCA9IE9wdGlvbmFsUGFydFBhcnQuZnJvbVBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9wdGlvbmFsUGFydFBhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBPbmVPck1vcmVQYXJ0c1BhcnQuZnJvbVBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9uZU9yTW9yZVBhcnRzUGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gWmVyb09yTW9yZVBhcnRzUGFydC5mcm9tUGFydChwYXJ0KTtcblxuICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gemVyb09yTW9yZVBhcnRzUGFydDsgIC8vL1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gY29sbGVjdGlvbk9mUGFydHNQYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBSdWxlTmFtZVBhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IGVsbGlwc2lzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgY2FsbEFBaGVhZCwgcnVsZU5hbWUpIHtcbiAgICBzdXBlcih0eXBlLCBjYWxsQUFoZWFkKTtcblxuICAgIHRoaXMucnVsZU5hbWUgPSBydWxlTmFtZTtcbiAgfVxuICBcbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxuXG4gIGZpbmRSdWxlKHN0YXRlKSB7XG4gICAgY29uc3QgcnVsZU1hcCA9IHN0YXRlLmdldFJ1bGVNYXAoKSxcbiAgICAgICAgICBydWxlID0gcnVsZU1hcFt0aGlzLnJ1bGVOYW1lXSB8fCBudWxsOyAgLy8vXG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBydWxlID0gdGhpcy5maW5kUnVsZShzdGF0ZSk7XG5cbiAgICBwYXJzZWQgPSAocnVsZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgcnVsZS5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIDpcbiAgICAgICAgICAgICAgICAgZmFsc2U7XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgY2FsbEFBaGVhZCA9IHRoaXMuaXNDYWxsQWhlYWQoKSxcbiAgICAgICAgICBjYWxsQUFoZWFkU3RyaW5nID0gY2FsbEFBaGVhZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICBzdHJpbmcgPSBgJHt0aGlzLnJ1bGVOYW1lfSR7Y2FsbEFBaGVhZFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICBjb25zdCB0eXBlID0gUnVsZU5hbWVQYXJ0VHlwZSxcbiAgICAgICAgICBjYWxsQUFoZWFkID0gZmFsc2UsXG4gICAgICAgICAgcnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydCh0eXBlLCBjYWxsQUFoZWFkLCBydWxlTmFtZSk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21DYWxsQWhlYWRBbmRSdWxlTmFtZShjYWxsQUFoZWFkLCBydWxlTmFtZSkge1xuICAgIGNvbnN0IHR5cGUgPSBSdWxlTmFtZVBhcnRUeXBlLFxuICAgICAgICAgIHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQodHlwZSwgY2FsbEFBaGVhZCwgcnVsZU5hbWUpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHF1YW50aWZpZXJSdWxlTmFtZSwgdGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBxdWFudGlmaWVyUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShxdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUodGVybWluYWxQYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnQgPSBaZXJvT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcXVhbnRpZmllclJ1bGVOYW1lLCBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShub25UZXJtaW5hbFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydCA9IFplcm9Pck1vcmVQYXJ0c1BhcnQuZnJvbVBhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG4gICAgXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgUGFydEJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL3BhcnRcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydEJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBwYXJ0UnVsZU5hbWUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24sXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gUGFydEJORk5vZGUsICAvLy9cbiAgICAgICAgICBwYXJ0UnVsZSA9IG5ldyBQYXJ0Qk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBwYXJ0UnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9kZUZyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgcnVsZU5hbWUpIHtcbiAgbGV0IG5vZGUgPSBudWxsO1xuXG4gIGNoaWxkTm9kZXMuc29tZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgY29uc3QgY2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZVJ1bGVOYW1lID0gKG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID09PSBydWxlTmFtZSk7XG5cbiAgICAgIGlmIChub25UZXJtaW5hbE5vZGVSdWxlTmFtZVJ1bGVOYW1lKSB7XG4gICAgICAgIG5vZGUgPSBjaGlsZE5vZGU7IC8vL1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgcnVsZU5hbWUpIHtcbiAgY29uc3Qgbm9kZXMgPSBjaGlsZE5vZGVzLmZpbHRlcigoY2hpbGROb2RlKSA9PiB7XG4gICAgY29uc3QgY2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZVJ1bGVOYW1lID0gKG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID09PSBydWxlTmFtZSk7XG5cbiAgICAgIGlmIChub25UZXJtaW5hbE5vZGVSdWxlTmFtZVJ1bGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBvcGFjaXR5TW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcbmltcG9ydCB7IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ub2RlXCI7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZExhc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZShSdWxlKSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIG9wYWNpdHkgPSB0aGlzLmdldE9wYWNpdHkoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IHRoaXMuZ2VuZXJhdGVEZWZpbml0aW9ucygpLFxuICAgICAgICAgIHJ1bGUgPSBSdWxlLmZyb21OYW1lT3BhY2l0eURlZmluaXRpb25zQW5kTm9uVGVybWluYWxOb2RlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBnZXRPcGFjaXR5KCkge1xuICAgIGxldCBvcGFjaXR5ID0gbnVsbDtcblxuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBvcGFjaXR5TW9kaWZpZXJCTkZOb2RlID0gbm9kZUZyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2Rlcywgb3BhY2l0eU1vZGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgaWYgKG9wYWNpdHlNb2RpZmllckJORk5vZGUgIT09IG51bGwpIHtcbiAgICAgIG9wYWNpdHkgPSBvcGFjaXR5TW9kaWZpZXJCTkZOb2RlLmdldE9wYWNpdHkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3BhY2l0eTtcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgbmFtZUJORk5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSBuYW1lQk5GTm9kZS5nZXROYW1lKCk7XG4gICAgXG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgXG4gIGdlbmVyYXRlRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHNlY29uZExhc3RDaGlsZE5vZGUgPSBzZWNvbmRMYXN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIGRlZmluaXRpb25zQk5GTm9kZSA9IHNlY29uZExhc3RDaGlsZE5vZGUsIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnNCTkZOb2RlLmdlbmVyYXRlRGVmaW5pdGlvbnMoKTtcbiAgICBcbiAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShSdWxlQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTtcblxuICAgICAgaWYgKGNvbnRlbnQgPT09IHRoaXMuY29udGVudCkge1xuICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG4gIFxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2UoL1xcXFwvLCBcIlxcXFxcXFxcXCIpLFxuICAgICAgICAgIHN0cmluZyA9IGBcIiR7Y29udGVudH1cImA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7XG4gICAgY29uc3QgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KTtcblxuICAgIHJldHVybiB0ZXJtaW5hbFN5bWJvbFBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgbmFtZVJ1bGVOYW1lLCBkZWZpbml0aW9uc1J1bGVOYW1lLCBvcGFjaXR5TW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBzZXBhcmF0b3IsIHRlcm1pbmF0b3IgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gc2VwYXJhdG9yLFxuICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB0ZXJtaW5hdG9yLFxuICAgICAgICAgIG9wYWNpdHlNb2RpZmllclJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUob3BhY2l0eU1vZGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG5hbWVSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKG5hbWVSdWxlTmFtZSksXG4gICAgICAgICAgb3B0aW9uYWxPcGFjaXR5UnVsZU5hbWVQYXJ0UGFydCA9IE9wdGlvbmFsUGFydFBhcnQuZnJvbVBhcnQob3BhY2l0eU1vZGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUoZGVmaW5pdGlvbnNSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudCh0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5hbWVSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvcHRpb25hbE9wYWNpdHlSdWxlTmFtZVBhcnRQYXJ0LFxuICAgICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBydWxlRGVmaW5pdGlvbiA9IG5ldyBSdWxlRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gcnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBSdWxlQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvcnVsZVwiO1xuaW1wb3J0IFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3J1bGVcIjtcblxuaW1wb3J0IHsgcnVsZVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcnVsZURlZmluaXRpb24gPSBSdWxlRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBydWxlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBSdWxlQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIHJ1bGVSdWxlID0gbmV3IFJ1bGVCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGVSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoRXJyb3JCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWxcIjtcblxuY29uc3QgeyB3aWxkY2FyZCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBpZiAoY2FsbEFoZWFkICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB3aWxkY2FyZDsgIC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBuZXcgV2lsZGNhcmRQYXJ0KCk7XG5cbiAgICByZXR1cm4gd2lsZGNhcmRQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRQYXJ0ID0gV2lsZGNhcmRQYXJ0LmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIGVycm9yRGVmaW5pdGlvbiA9IG5ldyBFcnJvckRlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGVycm9yRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBFcnJvckJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL2Vycm9yXCI7XG5pbXBvcnQgRXJyb3JEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL2Vycm9yXCI7XG5cbmltcG9ydCB7IGVycm9yUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgb3BhcXVlIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBlcnJvckRlZmluaXRpb24gPSBFcnJvckRlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBuYW1lID0gZXJyb3JSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgb3BhY2l0eSA9IG9wYXF1ZSwgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBlcnJvckRlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IEVycm9yQk5GTm9kZSwgLy8vXG4gICAgICAgICAgZXJyb3JSdWxlID0gbmV3IEVycm9yQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBlcnJvclJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmNsYXNzIEVwc2lsb25Ob2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gZXBzaWxvbiwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKEVwc2lsb25Ob2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IGVwc2lsb25Ob2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlcHNpbG9uTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVwc2lsb25Ob2RlUGFyc2VUcmVlOyIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgRXBzaWxvbk5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9lcHNpbG9uTm9kZVwiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldFR5cGUoKSB7XG4gICAgY29uc3QgdHlwZSA9IG51bGw7ICAvLy9cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXBzaWxvbjsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpc0Vwc2lsb25Ob2RlKCkge1xuICAgIGNvbnN0IGVwc2lsb25Ob2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBlcHNpbG9uTm9kZTtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IGVwc2lsb25Ob2RlUGFyc2VUcmVlID0gRXBzaWxvbk5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBlcHNpbG9uTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIG1hdGNoKG5vZGUsIGRlcHRoKSB7XG4gICAgbGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdGVybWluYWxOb2RlRXBzaWxvbk5vZGUgPSB0ZXJtaW5hbE5vZGUuaXNFcHNpbG9uTm9kZSgpO1xuXG4gICAgICBpZiAodGVybWluYWxOb2RlRXBzaWxvbk5vZGUpIHtcbiAgICAgICAgbWF0Y2hlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBUZXJtaW5hbE5vZGUuZnJvbU5vdGhpbmcoRXBzaWxvbk5vZGUpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRXBzaWxvbkJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvZXBzaWxvblwiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIGVwc2lsb25CTkZOb2RlID0gRXBzaWxvbkJORk5vZGUuZnJvbU5vdGhpbmcoKTtcblxuICAgIHBhcnNlZCA9IChlcHNpbG9uQk5GTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKGVwc2lsb25CTkZOb2RlKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBpZiAoY2FsbEFoZWFkICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBlcHNpbG9uOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgZXBzaWxvblBhcnQgPSBuZXcgRXBzaWxvblBhcnQoKTtcblxuICAgIHJldHVybiBlcHNpbG9uUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRXBzaWxvblBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvZXBzaWxvblwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChjYWxsQWhlYWQpIHtcbiAgICBjb25zdCBlcHNpbG9uUGFydCA9IEVwc2lsb25QYXJ0LmZyb21Ob3RoaW5nKCk7XG5cbiAgICByZXR1cm4gZXBzaWxvblBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShFcHNpbG9uQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkge1xuICAgIGNvbnN0IHRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxTeW1ib2xEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IEVwc2lsb25CTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9lcHNpbG9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IGVwc2lsb25SdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvbkJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBlcHNpbG9uLCAvLy9cbiAgICAgICAgICBlcHNpbG9uVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gVGVybWluYWxTeW1ib2xEZWZpbml0aW9uLmZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSBlcHNpbG9uUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXBzaWxvblRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gRXBzaWxvbkJORk5vZGUsIC8vL1xuICAgICAgICAgIGVwc2lsb25SdWxlID0gbmV3IEVwc2lsb25CTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGVwc2lsb25SdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbVwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBydWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL25vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlcyhSdWxlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHJ1bGVCTkZOb2RlcyA9IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZUJORk5vZGVzLm1hcCgocnVsZUJORk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlQk5GTm9kZS5nZW5lcmF0ZVJ1bGUoUnVsZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KERvY3VtZW50Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgU1BBQ0VfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0Q2hvaWNlIHtcbiAgY29uc3RydWN0b3IocGFydCwgcHJlY2VkZW5jZSkge1xuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuXG4gIGdldFByZWNlZGVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlY2VkZW5jZTtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGxldCBzdHJpbmc7XG5cbiAgICBjb25zdCBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICBzdHJpbmcgPSBwYXJ0U3RyaW5nOyAgLy8vXG5cbiAgICBpZiAodGhpcy5wcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcmVjZWRlbmNlID0gKHRoaXMucHJlY2VkZW5jZSA9PT0gSW5maW5pdHkpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQQUNFX0NIQVJBQ1RFUiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlY2VkZW5jZTtcblxuICAgICAgc3RyaW5nID0gYCR7c3RyaW5nfSAoJHtwcmVjZWRlbmNlfSlgO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnQocGFydCkge1xuICAgIGNvbnN0IHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHBhcnRDaG9pY2UgPSBuZXcgUGFydENob2ljZShwYXJ0LCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBwYXJ0Q2hvaWNlO1xuICB9XG5cbiAgc3RhdGljIGZyb21QYXJ0QW5kUHJlY2VkZW5jZShwYXJ0LCBwcmVjZWRlbmNlKSB7XG4gICAgY29uc3QgcGFydENob2ljZSA9IG5ldyBQYXJ0Q2hvaWNlKHBhcnQsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHBhcnRDaG9pY2U7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBwYXJzZVBhcnQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3BhcnNlXCI7XG5pbXBvcnQgeyBDaG9pY2VPZlBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgY2FsbEFoZWFkLCBwYXJ0Q2hvaWNlcykge1xuICAgIHN1cGVyKHR5cGUsIGNhbGxBaGVhZCk7XG4gICAgXG4gICAgdGhpcy5wYXJ0Q2hvaWNlcyA9IHBhcnRDaG9pY2VzO1xuICB9XG4gIFxuICBnZXRQYXJ0Q2hvaWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0Q2hvaWNlcztcbiAgfVxuXG4gIGdldFBhcnRzKCkge1xuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5wYXJ0Q2hvaWNlcy5tYXAoKHBhcnRDaG9pY2UpID0+IHtcbiAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0Q2hvaWNlLmdldFBhcnQoKTtcblxuICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGFydHM7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRQcmVjZWRlbmNlID0gc3RhdGUuZ2V0U2F2ZWRQcmVjZWRlbmNlKCk7XG5cbiAgICBwYXJzZWQgPSB0aGlzLnBhcnRDaG9pY2VzLnNvbWUoKHBhcnRDaG9pY2UpID0+IHtcbiAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0Q2hvaWNlLmdldFBhcnQoKSxcbiAgICAgICAgICAgIHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgICBwcmVjZWRlbmNlID0gcGFydENob2ljZS5nZXRQcmVjZWRlbmNlKCksXG4gICAgICAgICAgICBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKHByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGUuc2V0UHJlY2VkZW5jZShwcmVjZWRlbmNlKTtcbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2sgPSAoY2FsbEFoZWFkID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgIG51bGwgOlxuICAgICAgICAgICAgICAgICAgICAgICgpID0+IHsgIC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnNlZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbm9kZXNMZW5ndGg7ICAvLy9cblxuICAgICAgICBub2Rlcy5zcGxpY2Uoc3RhcnQpO1xuXG4gICAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9KTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5yZXNldFByZWNlZGVuY2Uoc2F2ZWRQcmVjZWRlbmNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydENob2ljZXNTdHJpbmcgPSB0aGlzLnBhcnRDaG9pY2VzLnJlZHVjZSgocGFydENob2ljZXNTdHJpbmcsIHBhcnRDaG9pY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRDaG9pY2VTdHJpbmcgPSBwYXJ0Q2hvaWNlLmFzU3RyaW5nKCk7XG4gICAgXG4gICAgICAgICAgICBpZiAocGFydENob2ljZXNTdHJpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcGFydENob2ljZXNTdHJpbmcgPSBwYXJ0Q2hvaWNlU3RyaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFydENob2ljZXNTdHJpbmcgPSBgJHtwYXJ0Q2hvaWNlc1N0cmluZ30gfCAke3BhcnRDaG9pY2VTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHJldHVybiBwYXJ0Q2hvaWNlc1N0cmluZztcbiAgICAgICAgICB9LCBudWxsKSxcbiAgICAgICAgICBzdHJpbmcgPSBgKCAke3BhcnRDaG9pY2VzU3RyaW5nfSApYDtcbiAgICBcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21QYXJ0Q2hvaWNlcyhwYXJ0Q2hvaWNlcykge1xuICAgIGNvbnN0IHR5cGUgPSBDaG9pY2VPZlBhcnRzUGFydFR5cGUsXG4gICAgICAgICAgY2FsbEFoZWFkID0gZmFsc2UsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1BhcnQgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1BhcnQodHlwZSwgY2FsbEFoZWFkLCBwYXJ0Q2hvaWNlcyk7XG5cbiAgICByZXR1cm4gY2hvaWNlT2ZQYXJ0c1BhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBQYXJ0Q2hvaWNlIGZyb20gXCIuLi9wYXJ0Q2hvaWNlXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBydWxlUnVsZU5hbWUsIGVycm9yUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcnVsZVJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocnVsZVJ1bGVOYW1lKSxcbiAgICAgICAgICBlcnJvclJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUoZXJyb3JSdWxlTmFtZSksXG4gICAgICAgICAgcnVsZVJ1bGVOYW1lUGFydENob2ljZSA9IFBhcnRDaG9pY2UuZnJvbVBhcnQocnVsZVJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgZXJyb3JSdWxlTmFtZVBhcnRDaG9pY2UgPSBQYXJ0Q2hvaWNlLmZyb21QYXJ0KGVycm9yUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0Q2hvaWNlcyA9IFtcbiAgICAgICAgICAgIHJ1bGVSdWxlTmFtZVBhcnRDaG9pY2UsXG4gICAgICAgICAgICBlcnJvclJ1bGVOYW1lUGFydENob2ljZVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0ID0gQ2hvaWNlT2ZQYXJ0c1BhcnQuZnJvbVBhcnRDaG9pY2VzKHBhcnRDaG9pY2VzKSxcbiAgICAgICAgICBvbmVPck1vcmVDaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnRzUGFydCA9IE9uZU9yTW9yZVBhcnRzUGFydC5mcm9tUGFydChjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlQ2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0c1BhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbiA9IG5ldyBEb2N1bWVudERlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGRvY3VtZW50RGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IERvY3VtZW50Qk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvZG9jdW1lbnRcIjtcbmltcG9ydCBEb2N1bWVudERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vZG9jdW1lbnRcIjtcblxuaW1wb3J0IHsgZG9jdW1lbnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnRCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBkb2N1bWVudERlZmluaXRpb24gPSBEb2N1bWVudERlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBuYW1lID0gZG9jdW1lbnRSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBEb2N1bWVudEJORk5vZGUsICAvLy9cbiAgICAgICAgICBkb2N1bWVudFJ1bGUgPSBuZXcgRG9jdW1lbnRCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGRvY3VtZW50UnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGNhbGxBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0ZXJtaW5hbE5vZGVDb250ZW50LCAvLy9cbiAgICAgICAgICBydWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbUNhbGxBaGVhZEFuZFJ1bGVOYW1lKGNhbGxBaGVhZCwgcnVsZU5hbWUpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KFJ1bGVOYW1lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vbmFtZVwiO1xuaW1wb3J0IFJ1bGVOYW1lQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lRGVmaW5pdGlvbiA9IE5hbWVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbmFtZSA9IHJ1bGVOYW1lUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5hbWVEZWZpbml0aW9uICAvLy9cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFJ1bGVOYW1lQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lUnVsZSA9IG5ldyBSdWxlTmFtZUJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGNhbGxBaGVhZCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IFdpbGRjYXJkUGFydC5mcm9tTm90aGluZygpO1xuXG4gICAgcmV0dXJuIHdpbGRjYXJkUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KFdpbGRjYXJkQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IFdpbGRjYXJkQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvd2lsZGNhcmRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgd2lsZGNhcmRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB3aWxkY2FyZCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHdpbGRjYXJkLCAvLy9cbiAgICAgICAgICB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbi5mcm9tQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gd2lsZGNhcmRSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFdpbGRjYXJkQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIHdpbGRjYXJkUnVsZSA9IG5ldyBXaWxkY2FyZEJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gd2lsZGNhcmRSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBlbmRPZkxpbmUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gZW5kT2ZMaW5lLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2VuZE9mTGluZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0Q29udGVudChmYWl0aGZ1bCA9IGZhbHNlKSB7XG4gICAgY29uc3QgY29udGVudCA9IGZhaXRoZnVsID9cbiAgICAgICAgICAgICAgICAgICAgICBzdXBlci5nZXRDb250ZW50KCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HOyAvLy9cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSA9IEVuZE9mTGluZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihFbmRPZkxpbmVOb2RlLCBzaWduaWZpY2FudFRva2VuKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IEVuZE9mTGluZU5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5cbmNvbnN0IHsgZW5kT2ZMaW5lIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgZW5kT2ZMaW5lTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzaWduaWZpY2FudFRva2VuRW5kT2ZMaW5lVG9rZW4gPSBzaWduaWZpY2FudFRva2VuLmlzRW5kT2ZMaW5lVG9rZW4oKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5FbmRPZkxpbmVUb2tlbikge1xuICAgICAgICBlbmRPZkxpbmVOb2RlID0gRW5kT2ZMaW5lTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAoZW5kT2ZMaW5lTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKGVuZE9mTGluZU5vZGUpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGlmIChjYWxsQWhlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IGVuZE9mTGluZTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVBhcnQgPSBuZXcgRW5kT2ZMaW5lUGFydCgpO1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lUGFydCA9IEVuZE9mTGluZVBhcnQuZnJvbU5vdGhpbmcoKTtcblxuICAgIHJldHVybiBlbmRPZkxpbmVQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoRW5kT2ZMaW5lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IEVuZE9mTGluZUJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBlbmRPZkxpbmUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZW5kT2ZMaW5lLFxuICAgICAgICAgIGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbi5mcm9tQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gZW5kT2ZMaW5lUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBFbmRPZkxpbmVCTkZOb2RlLCAvLy9cbiAgICAgICAgICBlbmRPZkxpbmVSdWxlID0gbmV3IEVuZE9mTGluZUJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUGFydENob2ljZSBmcm9tIFwiLi4vLi4vcGFydENob2ljZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBub2RlRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvbm9kZVwiO1xuaW1wb3J0IHsgcGFydFJ1bGVOYW1lLCBwcmVjZWRlbmNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnRDaG9pY2VCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0Q2hvaWNlKGNhbGxBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBwYXJ0Qk5GTm9kZSA9IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lKGNoaWxkTm9kZXMsIHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgcHJlY2VkZW5jZUJORk5vZGUgPSBub2RlRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBwcmVjZWRlbmNlUnVsZU5hbWUpO1xuXG4gICAgY2FsbEFoZWFkID0gZmFsc2U7ICAvLy9cblxuICAgIGNvbnN0IHBhcnQgPSBwYXJ0Qk5GTm9kZS5nZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gKHByZWNlZGVuY2VCTkZOb2RlID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2VCTkZOb2RlLmdldFByZWNlZGVuY2UoKSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gUGFydENob2ljZS5mcm9tUGFydEFuZFByZWNlZGVuY2UocGFydCwgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KFBhcnRDaG9pY2VCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuXG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUsIHByZWNlZGVuY2VSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydENob2ljZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgcHJlY2VkZW5jZVJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocHJlY2VkZW5jZVJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbFByZWNlZGVuY2VSdWxlTmFtZVBhcnRQYXJ0ID0gT3B0aW9uYWxQYXJ0UGFydC5mcm9tUGFydChwcmVjZWRlbmNlUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvcHRpb25hbFByZWNlZGVuY2VSdWxlTmFtZVBhcnRQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBwYXJ0Q2hvaWNlRGVmaW5pdGlvbiA9IG5ldyBQYXJ0Q2hvaWNlRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gcGFydENob2ljZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBQYXJ0Q2hvaWNlQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvcGFydENob2ljZVwiO1xuaW1wb3J0IFBhcnRDaG9pY2VEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3BhcnRDaG9pY2VcIjtcblxuaW1wb3J0IHsgcGFydENob2ljZVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0Q2hvaWNlQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IHBhcnRDaG9pY2VSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIHBhcnRDaG9pY2VEZWZpbml0aW9uID0gUGFydENob2ljZURlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHBhcnRDaG9pY2VEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBQYXJ0Q2hvaWNlQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25SdWxlID0gbmV3IFBhcnRDaG9pY2VCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb25SdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBydWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBydWxlTmFtZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvcGFydFwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBxdWFudGlmaWVyUnVsZU5hbWUsIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLCBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1YW50aWZpZXJCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gcXVhbnRpZmllclJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUob25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUoemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFBhcnRCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGUgPSBuZXcgUXVhbnRpZmllckJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcXVhbnRpZmllclJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lLCBwcmVjZWRlbmNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBub2RlRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZSwgbm9kZXNGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ub2RlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBwYXJ0Qk5GTm9kZXMgPSBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgcGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBwcmVjZWRlbmNlQk5GTm9kZSA9IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lKGNoaWxkTm9kZXMsIHByZWNlZGVuY2VSdWxlTmFtZSksXG4gICAgICAgICAgY2FsbEFoZWFkID0gZmFsc2UsICAvLy9cbiAgICAgICAgICBwYXJ0cyA9IHBhcnRCTkZOb2Rlcy5tYXAoKHBhcnRCTkZOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydEJORk5vZGUuZ2VuZXJhdGVQYXJ0KGNhbGxBaGVhZCk7XG4gIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IChwcmVjZWRlbmNlQk5GTm9kZSA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRlbmNlQk5GTm9kZS5nZXRQcmVjZWRlbmNlKCksXG4gICAgICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb24uZnJvbVBhcnRzQW5kUHJlY2VkZW5jZShwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KERlZmluaXRpb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUsIHByZWNlZGVuY2VSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbkRlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgcHJlY2VkZW5jZVJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocHJlY2VkZW5jZVJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVSdWxlTmFtZVBhcnRzUGFydCA9IE9uZU9yTW9yZVBhcnRzUGFydC5mcm9tUGFydChwYXJ0UnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBvcHRpb25hbFByZWNlZGVuY2VSdWxlTmFtZVBhcnRQYXJ0ID0gT3B0aW9uYWxQYXJ0UGFydC5mcm9tUGFydChwcmVjZWRlbmNlUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxQcmVjZWRlbmNlUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbkRlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbkRlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb25EZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbkJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL2RlZmluaXRpb25cIjtcbmltcG9ydCBEZWZpbml0aW9uRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbkJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBkZWZpbml0aW9uUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvbiA9IERlZmluaXRpb25EZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gRGVmaW5pdGlvbkJORk5vZGUsICAvLy9cbiAgICAgICAgICBkZWZpbml0aW9uUnVsZSA9IG5ldyBEZWZpbml0aW9uQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5jb25zdCB7IHNlY29uZCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZWNlZGVuY2VCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICBsZXQgcHJlY2VkZW5jZSA9IEluZmluaXR5O1xuXG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGNoaWxkTm9kZXNMZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aDtcblxuICAgIGlmIChjaGlsZE5vZGVzTGVuZ3RoID09PSAzKSB7XG4gICAgICBjb25zdCBzZWNvbmRDaGlsZE5vZGUgPSBzZWNvbmQoY2hpbGROb2RlcyksXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBzZWNvbmRDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgIGNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgICBwcmVjZWRlbmNlID0gTnVtYmVyKGNvbnRlbnQpOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KFByZWNlZGVuY2VCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMsIHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmNvbnN0IHsgbnVtYmVyVHlwZSB9ID0gdHlwZXMsXG4gICAgICB7IG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcmVjZWRlbmNlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBudW1iZXJUeXBlLCAgLy8vXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbnVtYmVyU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LmZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgb3B0aW9uYWxOdW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnRQYXJ0ID0gT3B0aW9uYWxQYXJ0UGFydC5mcm9tUGFydChudW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBvcHRpb25hbE51bWJlclNpZ25pZmljYW50VG9rZW5UeXBlUGFydFBhcnQsXG4gICAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHByZWNlZGVuY2VEZWZpbml0aW9uID0gbmV3IFByZWNlZGVuY2VEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBwcmVjZWRlbmNlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IFByZWNlZGVuY2VCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9wcmVjZWRlbmNlXCI7XG5pbXBvcnQgUHJlY2VkZW5jZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcHJlY2VkZW5jZVwiO1xuXG5pbXBvcnQgeyBwcmVjZWRlbmNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZWNlZGVuY2VCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gcHJlY2VkZW5jZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgcHJlY2VkZW5jZURlZmluaXRpb24gPSBQcmVjZWRlbmNlRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcHJlY2VkZW5jZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFByZWNlZGVuY2VCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgcHJlY2VkZW5jZVJ1bGUgPSBuZXcgUHJlY2VkZW5jZUJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcHJlY2VkZW5jZVJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBkZWZpbml0aW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL25vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZGVmaW5pdGlvbkJORk5vZGVzID0gbm9kZXNGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lKGNoaWxkTm9kZXMsIGRlZmluaXRpb25SdWxlTmFtZSksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uQk5GTm9kZXMubWFwKChkZWZpbml0aW9uQk5GTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25CTkZOb2RlLmdlbmVyYXRlRGVmaW5pdGlvbigpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZSwgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KERlZmluaXRpb25zQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZSwgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBwYXJzZVBhcnRzIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9wYXJzZVwiO1xuaW1wb3J0IHsgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjYWxsQWhlYWQsIHBhcnRzKSB7XG4gICAgc3VwZXIodHlwZSwgY2FsbEFoZWFkKTtcblxuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgICBjYWxsYmFjayA9IChjYWxsQWhlYWQgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgIG51bGwgOlxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7ICAvLy9cbiAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0cyh0aGlzLnBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gbm9kZXNMZW5ndGg7ICAvLy9cblxuICAgICAgbm9kZXMuc3BsaWNlKHN0YXJ0KTtcblxuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0c1N0cmluZyA9IHRoaXMucGFydHMucmVkdWNlKChwYXJ0c1N0cmluZywgcGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgfSwgbnVsbCksXG4gICAgICAgICAgc3RyaW5nID0gYCggJHtwYXJ0c1N0cmluZ30gKWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21QYXJ0cyhwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgICBjYWxsQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQodHlwZSwgY2FsbEFoZWFkLCBwYXJ0cyk7XG5cbiAgICByZXR1cm4gc2VxdWVuY2VPZlBhcnRzUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IGRlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB2ZXJ0aWNhbEJhciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgbGV0IHBhcnRzO1xuXG4gICAgY29uc3QgY29udGVudCA9IHZlcnRpY2FsQmFyLCAgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUoZGVmaW5pdGlvblJ1bGVOYW1lKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChjb250ZW50KTtcblxuICAgIHBhcnRzID0gW1xuICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0XG4gICAgXTtcblxuICAgIGNvbnN0IHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0LmZyb21QYXJ0cyhwYXJ0cyksXG4gICAgICAgICAgemVyb09yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBaZXJvT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KHNlcXVlbmNlT2ZQYXJ0c1BhcnQpO1xuXG4gICAgcGFydHMgPSBbXG4gICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0LFxuICAgICAgemVyb09yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnRcbiAgICBdO1xuXG4gICAgY29uc3QgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnNEZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25zRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbnNEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IERlZmluaXRpb25zRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uc1wiO1xuXG5pbXBvcnQgeyBkZWZpbml0aW9uc1J1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0JORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zRGVmaW5pdGlvbiA9IERlZmluaXRpb25zRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBkZWZpbml0aW9uc1J1bGVOYW1lLCAvLy9cbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25zRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gRGVmaW5pdGlvbnNCTkZOb2RlLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGUgPSBuZXcgRGVmaW5pdGlvbnNCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb25zUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChjYWxsQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBub2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoVGVybWluYWxQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvcGFydC90ZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBlcHNpbG9uUnVsZU5hbWUsXG4gICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lLFxuICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWUsXG4gICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsXG4gICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUsXG4gICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLFxuICAgICAgICAgc3RhcnRPZkNvbnRlbnRQYXJ0UnVsZU5hbWUsXG4gICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gdGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgZXBzaWxvblJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUoZXBzaWxvblJ1bGVOYW1lKSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUod2lsZGNhcmRSdWxlTmFtZSksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShlbmRPZkxpbmVSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHN0YXJ0T2ZDb250ZW50UGFydFJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUoc3RhcnRPZkNvbnRlbnRQYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lKSxcbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgZXBzaWxvblJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBzdGFydE9mQ29udGVudFBhcnRSdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsUGFydEJORk5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlID0gbmV3IFRlcm1pbmFsUGFydEJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxQYXJ0UnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwYXJ0Q2hvaWNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL25vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnRDaG9pY2VCTkZOb2RlcyA9IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBwYXJ0Q2hvaWNlUnVsZU5hbWUpO1xuXG4gICAgY2FsbEFoZWFkID0gZmFsc2U7ICAvLy9cblxuICAgIGNvbnN0IHBhcnRDaG9pY2VzID0gcGFydENob2ljZUJORk5vZGVzLm1hcCgocGFydENob2ljZUJORk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRDaG9pY2UgPSBwYXJ0Q2hvaWNlQk5GTm9kZS5nZW5lcmF0ZVBhcnRDaG9pY2UoY2FsbEFoZWFkKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRDaG9pY2U7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1BhcnQgPSBDaG9pY2VPZlBhcnRzUGFydC5mcm9tUGFydENob2ljZXMocGFydENob2ljZXMpLFxuICAgICAgICAgIHBhcnQgPSBjaG9pY2VPZlBhcnRzUGFydDsgLy8vXG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KENob2ljZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwYXJ0Q2hvaWNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIsXG4gICAgICAgIG9wZW5CcmFja2V0LFxuICAgICAgICBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgbGV0IHBhcnRzO1xuXG4gICAgY29uc3QgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhciwgLy8vXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBwYXJ0Q2hvaWNlUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShwYXJ0Q2hvaWNlUnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCk7XG5cbiAgICBwYXJ0cyA9IFtcbiAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgcGFydENob2ljZVJ1bGVOYW1lUGFydFxuICAgIF07XG5cbiAgICBjb25zdCBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gU2VxdWVuY2VPZlBhcnRzUGFydC5mcm9tUGFydHMocGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBPbmVPck1vcmVQYXJ0c1BhcnQuZnJvbVBhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCk7XG5cbiAgICBwYXJ0cyA9IFtcbiAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgcGFydENob2ljZVJ1bGVOYW1lUGFydCxcbiAgICAgIG9uZU9yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQsXG4gICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICBdO1xuXG4gICAgY29uc3QgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gPSBuZXcgQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGNob2ljZU9mUGFydHNEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c0JORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9jaG9pY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IGNob2ljZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c0JORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBjaG9pY2VPZlBhcnRzUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGNob2ljZU9mUGFydHNEZWZpbml0aW9uID0gQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBDaG9pY2VPZlBhcnRzQk5GTm9kZSwgLy8vXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUgPSBuZXcgQ2hvaWNlT2ZQYXJ0c0JORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gY2hvaWNlT2ZQYXJ0c1J1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgRVNDQVBFRF9CQUNLU0xBU0gsIEVTQ0FQRURfRE9VQkxFX1FVT1RFIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0LCBzZWNvbmQgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoKD86XFxcXC58W15cIlxcXFxdKSopXCIkLztcblxuICBnZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChjb250ZW50KTtcblxuICAgIHJldHVybiB0ZXJtaW5hbFN5bWJvbFBhcnQ7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGxldCBjb250ZW50O1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBjb250ZW50ID0gc2Vjb25kTWF0Y2g7ICAvLy9cblxuICAgIGNvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCk7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KFRlcm1pbmFsU3ltYm9sQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG5cbmZ1bmN0aW9uIHNhbml0aXNlQ29udGVudChjb250ZW50KSB7XG4gIGNvbnRlbnQgPSBjb250ZW50XG4gICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBFU0NBUEVEX0JBQ0tTTEFTSClcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCBFU0NBUEVEX0RPVUJMRV9RVU9URSk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LmZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbEJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbEJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gc3RyaW5nTGl0ZXJhbFR5cGUsICAvLy9cbiAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uLmZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsU3ltYm9sQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSA9IG5ldyBUZXJtaW5hbFN5bWJvbEJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxTeW1ib2xSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGNhbGxBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBub2RlRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChjYWxsQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICBpZiAoIWNhbGxBaGVhZCkge1xuICAgICAgY29uc3QgY2FsbEFoZWFkTW9kaWZpZXJCTkZOb2RlID0gbm9kZUZyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgY2FsbEFoZWFkTW9kaWZpZXJSdWxlTmFtZSk7XG5cbiAgICAgIGNhbGxBaGVhZCA9IChjYWxsQWhlYWRNb2RpZmllckJORk5vZGUgIT09IG51bGwpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgbm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGNhbGxBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KE5vblRlcm1pbmFsUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5cbmltcG9ydCB7IHJ1bGVOYW1lUnVsZU5hbWUsIGNhbGxBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShydWxlTmFtZVJ1bGVOYW1lKSxcbiAgICAgICAgICBjYWxsQWhlYWRNb2RpZmllclJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUoY2FsbEFoZWFkTW9kaWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgb3B0aW9uYWxDYWxsQWhlYWRSdWxlTmFtZVBhcnRQYXJ0ID0gT3B0aW9uYWxQYXJ0UGFydC5mcm9tUGFydChjYWxsQWhlYWRNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsQ2FsbEFoZWFkUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgcnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvcGFydC9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWUsIGNob2ljZU9mUGFydHNSdWxlTmFtZSwgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydEJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUoY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IE5vblRlcm1pbmFsUGFydEJORk5vZGUsIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUgPSBuZXcgTm9uVGVybWluYWxQYXJ0Qk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbFBhcnRSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL25vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChjYWxsQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcGFydEJORk5vZGVzID0gbm9kZXNGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lKGNoaWxkTm9kZXMsIHBhcnRSdWxlTmFtZSk7XG5cbiAgICBjYWxsQWhlYWQgPSBmYWxzZTsgIC8vL1xuXG4gICAgY29uc3QgcGFydHMgPSBwYXJ0Qk5GTm9kZXMubWFwKChwYXJ0Qk5GTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnRCTkZOb2RlLmdlbmVyYXRlUGFydChjYWxsQWhlYWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gU2VxdWVuY2VPZlBhcnRzUGFydC5mcm9tUGFydHMocGFydHMpLFxuICAgICAgICAgIHBhcnQgPSBzZXF1ZW5jZU9mUGFydHNQYXJ0OyAvLy9cblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0ID0gT25lT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lLCAvLy9cbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uID0gU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSwgLy8vXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSA9IG5ldyBTZXF1ZW5jZU9mUGFydHNCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHNlcXVlbmNlT2ZQYXJ0c1J1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuY29uc3QgeyBzZWNvbmQgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcGFjaXR5TW9kaWZpZXJCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2V0T3BhY2l0eSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgc2Vjb25kQ2hpbGROb2RlID0gc2Vjb25kKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IHNlY29uZENoaWxkTm9kZSwgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgb3BhY2l0eSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7ICAvLy9cblxuICAgIHJldHVybiBvcGFjaXR5O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGUsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShPcGFjaXR5TW9kaWZpZXJCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlLCBvcGFjaXR5KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgbm9XaGl0ZXNwYWNlIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IG5vV2hpdGVzcGFjZSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldFR5cGUoKSB7XG4gICAgY29uc3QgdHlwZSA9IG51bGw7ICAvLy9cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgPSBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIG1hdGNoKG5vZGUsIGRlcHRoKSB7XG4gICAgbGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdGVybWluYWxOb2RlTm9XaGl0ZXNwYWNlTm9kZSA9IHRlcm1pbmFsTm9kZS5pc05vV2hpdGVzcGFjZU5vZGUoKTtcblxuICAgICAgaWYgKHRlcm1pbmFsTm9kZU5vV2hpdGVzcGFjZU5vZGUpIHtcbiAgICAgICAgbWF0Y2hlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBUZXJtaW5hbE5vZGUuZnJvbU5vdGhpbmcoTm9XaGl0ZXNwYWNlTm9kZSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuXG5jb25zdCB7IG5vV2hpdGVzcGFjZSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgbm9XaGl0ZXNwYWNlTm9kZSA9IG51bGw7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IHN0YXRlLmlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCk7XG5cbiAgICBpZiAoIW5leHRUb2tlbldoaXRlc3BhY2VUb2tlbikge1xuICAgICAgbm9XaGl0ZXNwYWNlTm9kZSA9IE5vV2hpdGVzcGFjZU5vZGUuZnJvbU5vdGhpbmcoKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAobm9XaGl0ZXNwYWNlTm9kZSAhPT0gbnVsbClcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2gobm9XaGl0ZXNwYWNlTm9kZSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gbm9XaGl0ZXNwYWNlOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBQYXJ0Q2hvaWNlIGZyb20gXCIuLi9wYXJ0Q2hvaWNlXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgb3BhcXVlLCBzZW1pT3BhcXVlIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3BhY2l0eU1vZGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGxldCBjb250ZW50O1xuXG4gICAgY29udGVudCA9IG9wYXF1ZTsgLy8vXG5cbiAgICBjb25zdCBvcGFxdWVUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY29udGVudCk7XG5cbiAgICBjb250ZW50ID0gc2VtaU9wYXF1ZTsgLy8vXG5cbiAgICBjb25zdCBzZW1pT3BhcXVlVGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpO1xuXG4gICAgY29uc3Qgb3BhcXVlVGVybWluYWxTeW1ib2xQYXJ0Q2hvaWNlID0gUGFydENob2ljZS5mcm9tUGFydChvcGFxdWVUZXJtaW5hbFN5bWJvbFBhcnQpLFxuICAgICAgICAgIHNlbWlPcGFxdWVUZXJtaW5hbFN5bWJvbFBhcnRDaG9pY2UgPSBQYXJ0Q2hvaWNlLmZyb21QYXJ0KHNlbWlPcGFxdWVUZXJtaW5hbFN5bWJvbFBhcnQpLFxuICAgICAgICAgIHBhcnRDaG9pY2VzID0gW1xuICAgICAgICAgICAgb3BhcXVlVGVybWluYWxTeW1ib2xQYXJ0Q2hvaWNlLFxuICAgICAgICAgICAgc2VtaU9wYXF1ZVRlcm1pbmFsU3ltYm9sUGFydENob2ljZVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2hvaWNlT2ZPcGFxdWVUZXJtaW5hbFN5bWJvbEFuZFNlbWlPcGFxdWVUZXJtaW5hbFN5bWJvbFBhcnRzUGFydCA9IENob2ljZU9mUGFydHNQYXJ0LmZyb21QYXJ0Q2hvaWNlcyhwYXJ0Q2hvaWNlcyksXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IE5vV2hpdGVzcGFjZVBhcnQuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQsXG4gICAgICAgICAgICBjaG9pY2VPZk9wYXF1ZVRlcm1pbmFsU3ltYm9sQW5kU2VtaU9wYXF1ZVRlcm1pbmFsU3ltYm9sUGFydHNQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBvcGFjaXR5TW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBPcGFjaXR5TW9kaWZpZXJSdWxlRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gb3BhY2l0eU1vZGlmaWVyUnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBPcGFjaXR5TW9kaWZpZXJCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9vcGFjaXR5TW9kaWZpZXJcIjtcbmltcG9ydCBPcGFjaXR5TW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9vcGFjaXR5TW9kaWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IG9wYWNpdHlNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcGFjaXR5TW9kaWZpZXJCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gb3BhY2l0eU1vZGlmaWVyUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIG9wYWNpdHlNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gT3BhY2l0eU1vZGlmaWVyUnVsZURlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9wYWNpdHlNb2RpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBPcGFjaXR5TW9kaWZpZXJCTkZOb2RlLCAvLy9cbiAgICAgICAgICBvcGFjaXR5TW9kaWZpZXJSdWxlID0gbmV3IE9wYWNpdHlNb2RpZmllckJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gb3BhY2l0eU1vZGlmaWVyUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IE5vV2hpdGVzcGFjZVBhcnQuZnJvbU5vdGhpbmcoKTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBub1doaXRlc3BhY2UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IG5vV2hpdGVzcGFjZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gPSBuZXcgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL25vV2hpdGVzcGFjZVBhcnRcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9ub1doaXRlc3BhY2VQYXJ0XCI7XG5cbmltcG9ydCB7IG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydEJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uID0gTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBuYW1lID0gbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUsICAvLy9cbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0Qk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0UnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhbGxBaGVhZE1vZGlmaWVyQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQ2FsbEFoZWFkKHJ1bGVOYW1lLCBjaGlsZE5vZGUsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQ2FsbEFoZWFkKENhbGxBaGVhZE1vZGlmaWVyQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZSwgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBlbGxpcHNpcyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhbGxBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBlbGxpcHNpcywgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBOb1doaXRlc3BhY2VQYXJ0LmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgY2FsbEFoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBDYWxsQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBjYWxsQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgQ2FsbEFoZWFkTW9kaWZpZXJCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9jYWxsQWhlYWRNb2RpZmllclwiO1xuaW1wb3J0IENhbGxBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vY2FsbEFoZWFkTW9kaWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IGNhbGxBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhbGxBaGVhZE1vZGlmaWVyQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IGNhbGxBaGVhZE1vZGlmaWVyUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGNhbGxBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gPSBDYWxsQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBjYWxsQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBDYWxsQWhlYWRNb2RpZmllckJORk5vZGUsICAvLy9cbiAgICAgICAgICBjYWxsQWhlYWRNb2RpZmllclJ1bGUgPSBuZXcgQ2FsbEFoZWFkTW9kaWZpZXJCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGNhbGxBaGVhZE1vZGlmaWVyUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25QYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocmVndWxhckV4cHJlc3Npb24pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGVudCA9IHNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBpZiAoZmlyc3RNYXRjaCA9PT0gY29udGVudCkge1xuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGlmIChjYWxsQWhlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nID0gdGhpcy5yZWd1bGFyRXhwcmVzc2lvbi50b1N0cmluZygpLFxuXHRcdCAgICAgIHN0cmluZyA9IHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJlZ3VsYXJFeHByZXNzaW9uKHJlZ3VsYXJFeHByZXNzaW9uKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb25QYXJ0ID0gbmV3IFJlZ3VsYXJFeHByZXNzaW9uUGFydChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb25QYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oKD86XFxcXC58W15cXC9dKSopXFwvJC87XG5cbiAgZ2VuZXJhdGVQYXJ0KGNhbGxBaGVhZCkge1xuICAgIGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uID0gdGhpcy5nZXRSZWd1bGFyRXhwcmVzc2lvbigpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGFydCA9IFJlZ3VsYXJFeHByZXNzaW9uUGFydC5mcm9tUmVndWxhckV4cHJlc3Npb24ocmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uUGFydDtcbiAgfVxuXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgcGF0dGVybiA9IHNlY29uZE1hdGNoLCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAocGF0dGVybik7ICAvLy9cblxuICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSByZWd1bGFyRXhwcmVzc2lvblR5cGUsICAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiA9IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbi5mcm9tU2lnbmlmaWNhbnRUb2tlblR5cGUoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUsIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvbkJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb25SdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllckJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShRdWFudGlmaWVyQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tU3BlY2lhbFN5bWJvbChzcGVjaWFsU3ltYm9sKSB7XG4gICAgY29uc3QgY29udGVudCA9IHNwZWNpYWxTeW1ib2wsICAvLy9cbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0ID0gTm9XaGl0ZXNwYWNlUGFydC5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uLy4uL3J1bGVcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFF1YW50aWZpZXJCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBzcGVjaWFsU3ltYm9sID0gcXVlc3Rpb25NYXJrLCAvLy9cbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbi5mcm9tU3BlY2lhbFN5bWJvbChzcGVjaWFsU3ltYm9sKSxcbiAgICAgICAgICBvcGFjaXR5ID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBRdWFudGlmaWVyQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGUgPSBuZXcgT3B0aW9uYWxRdWFudGlmaWVyQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBvcHRpb25hbFF1YW50aWZpZXJSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBzdGFydE9mQ29udGVudCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZDb250ZW50Tm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHN0YXJ0T2ZDb250ZW50LCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oU3RhcnRPZkNvbnRlbnROb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IHN0YXJ0T2ZDb250ZW50Tm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gc3RhcnRPZkNvbnRlbnROb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgU3RhcnRPZkNvbnRlbnROb2RlUGFyc2VUcmVlIGZyb20gXCIuLi8uLi9wYXJzZVRyZWUvc3RhcnRPZkNvbnRlbnROb2RlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhcnRPZkNvbnRlbnROb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlzU3RhcnRPZkNvbnRlbnROb2RlKCkge1xuICAgIGNvbnN0IHN0YXJ0T2ZDb250ZW50Tm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gc3RhcnRPZkNvbnRlbnROb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgc3RhcnRPZkNvbnRlbnROb2RlUGFyc2VUcmVlID0gU3RhcnRPZkNvbnRlbnROb2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gc3RhcnRPZkNvbnRlbnROb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGgpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVTdGFydE9mQ29udGVudE5vZGUgPSB0ZXJtaW5hbE5vZGUuaXNTdGFydE9mQ29udGVudE5vZGUoKTtcblxuICAgICAgaWYgKHRlcm1pbmFsTm9kZVN0YXJ0T2ZDb250ZW50Tm9kZSkge1xuICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tTm90aGluZyhTdGFydE9mQ29udGVudE5vZGUpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgU3RhcnRPZkNvbnRlbnROb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsL3N0YXJ0T2ZDb250ZW50XCI7XG5cbmNvbnN0IHsgc3RhcnRPZkNvbnRlbnQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mQ29udGVudFBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBpc1N0YXJ0T2ZDb250ZW50UGFydCgpIHtcbiAgICBjb25zdCBzdGFydE9mQ29udGVudFBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHN0YXJ0T2ZDb250ZW50UGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgc3RhcnRPZkNvbnRlbnROb2RlID0gbnVsbDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgYXRTdGFydE9mQ29udGVudCA9IHN0YXRlLmlzQXRTdGFydE9mQ29udGVudCgpO1xuXG4gICAgaWYgKGF0U3RhcnRPZkNvbnRlbnQpIHtcbiAgICAgIHN0YXJ0T2ZDb250ZW50Tm9kZSA9IFN0YXJ0T2ZDb250ZW50Tm9kZS5mcm9tTm90aGluZygpO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IChzdGFydE9mQ29udGVudE5vZGUgIT09IG51bGwpXG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHN0YXJ0T2ZDb250ZW50Tm9kZSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gc3RhcnRPZkNvbnRlbnQ7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdGFydE9mQ29udGVudFBhcnQgPSBuZXcgU3RhcnRPZkNvbnRlbnRQYXJ0KCk7XG5cbiAgICByZXR1cm4gc3RhcnRPZkNvbnRlbnRQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBTdGFydE9mQ29udGVudFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvc3RhcnRPZkNvbnRlbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhcnRPZkNvbnRlbnRQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChjYWxsQWhlYWQpIHtcbiAgICBjb25zdCBzdGFydE9mQ29udGVudFBhcnQgPSBTdGFydE9mQ29udGVudFBhcnQuZnJvbU5vdGhpbmcoKTtcblxuICAgIHJldHVybiBzdGFydE9mQ29udGVudFBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShTdGFydE9mQ29udGVudFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgc3RhcnRPZkNvbnRlbnQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mQ29udGVudFBhcnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gc3RhcnRPZkNvbnRlbnQsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHN0YXJ0T2ZDb250ZW50UGFydERlZmluaXRpb24gPSBuZXcgU3RhcnRPZkNvbnRlbnRQYXJ0RGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gc3RhcnRPZkNvbnRlbnRQYXJ0RGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IFN0YXJ0T2ZDb250ZW50UGFydEJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL3N0YXJ0T2ZDb250ZW50UGFydFwiO1xuaW1wb3J0IFN0YXJ0T2ZDb250ZW50UGFydERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vc3RhcnRPZkNvbnRlbnRQYXJ0XCI7XG5cbmltcG9ydCB7IHN0YXJ0T2ZDb250ZW50UGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mQ29udGVudFBhcnRCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdGFydE9mQ29udGVudFBhcnREZWZpbml0aW9uID0gU3RhcnRPZkNvbnRlbnRQYXJ0RGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBzdGFydE9mQ29udGVudFBhcnRSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wYWNpdHkgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc3RhcnRPZkNvbnRlbnRQYXJ0RGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gU3RhcnRPZkNvbnRlbnRQYXJ0Qk5GTm9kZSwgIC8vL1xuICAgICAgICAgIHN0YXJ0T2ZDb250ZW50UGFydFJ1bGUgPSBuZXcgU3RhcnRPZkNvbnRlbnRQYXJ0Qk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBzdGFydE9mQ29udGVudFBhcnRSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vLi4vcnVsZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9xdWFudGlmaWVyXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUXVhbnRpZmllckJORlJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIHNwZWNpYWxTeW1ib2wgPSBwbHVzLCAvLy9cbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBRdWFudGlmaWVyUnVsZURlZmluaXRpb24uZnJvbVNwZWNpYWxTeW1ib2woc3BlY2lhbFN5bWJvbCksXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGUgPSBuZXcgT25lT3JNb3JlUXVhbnRpZmllckJORlJ1bGUobmFtZSwgb3BhY2l0eSwgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gb25lT3JNb3JlUXVhbnRpZmllclJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgUXVhbnRpZmllckJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvYm5mL3F1YW50aWZpZXJcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBhc3RlcmlzayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFplcm9Pck1vcmVRdWFudGlmaWVyQk5GUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBzcGVjaWFsU3ltYm9sID0gYXN0ZXJpc2ssIC8vL1xuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBRdWFudGlmaWVyUnVsZURlZmluaXRpb24uZnJvbVNwZWNpYWxTeW1ib2woc3BlY2lhbFN5bWJvbCksXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBRdWFudGlmaWVyQk5GTm9kZSwgLy8vXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IFplcm9Pck1vcmVRdWFudGlmaWVyQk5GUnVsZShuYW1lLCBvcGFjaXR5LCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBmaXJzdCwgc2Vjb25kIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcWyhbXlxcXV0rKV0kLztcblxuICBnZW5lcmF0ZVBhcnQoY2FsbEFoZWFkKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0aGlzLmdldFNpZ25pZmljYW50VG9rZW5UeXBlKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LmZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0O1xuICB9XG5cbiAgZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZSA9IHNlY29uZE1hdGNoOyAvLy9cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRPcGFjaXR5KFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHkpOyB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlO1xuXG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi8uLi9ydWxlXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL2JuZi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHR5cGVUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IHR5cGVUeXBlLCAgLy8vXG4gICAgICAgICAgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiA9IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbi5mcm9tU2lnbmlmaWNhbnRUb2tlblR5cGUoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgb3BhY2l0eSA9IG51bGwsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUsICAvLy9cbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZSdWxlKG5hbWUsIG9wYWNpdHksIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaXJzdCwgcHJ1bmUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0FzU3RyaW5nKHJ1bGVzLCBtdWx0aUxpbmUpIHtcbiAgY29uc3QgbWF4aW11bVJ1bGVOYW1lTGVuZ3RoID0gcnVsZXMucmVkdWNlKChtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgb3BhY2l0eSA9IHJ1bGUuZ2V0T3BhY2l0eSgpO1xuXG4gICAgICAgIGxldCBydWxlTmFtZUxlbmd0aCA9IHJ1bGVOYW1lLmxlbmd0aDtcblxuICAgICAgICBpZiAob3BhY2l0eSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IG9wYWNpdHlMZW5ndGggPSBvcGFjaXR5Lmxlbmd0aDtcblxuICAgICAgICAgIHJ1bGVOYW1lTGVuZ3RoICs9IG9wYWNpdHlMZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBtYXhpbXVtUnVsZU5hbWVMZW5ndGggPSBNYXRoLm1heChtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIHJ1bGVOYW1lTGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gbWF4aW11bVJ1bGVOYW1lTGVuZ3RoO1xuICAgICAgfSwgMCksXG4gICAgICBydWxlc1N0cmluZyA9IHJ1bGVzLnJlZHVjZSgocnVsZXNTdHJpbmcsIHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZVN0cmluZyA9IHJ1bGUuYXNTdHJpbmcobWF4aW11bVJ1bGVOYW1lTGVuZ3RoLCBtdWx0aUxpbmUpO1xuXG4gICAgICAgIHJ1bGVzU3RyaW5nICs9IHJ1bGVTdHJpbmc7XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzU3RyaW5nO1xuICAgICAgfSwgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9eXFxuXFxuLywgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gcnVsZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSB7XG4gIGNvbnN0IHJ1bGVNYXAgPSB7fTtcblxuICBydWxlcy5mb3JFYWNoKChydWxlKSA9PiB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgIHJ1bGVNYXBbcnVsZU5hbWVdID0gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVNYXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgZmlyc3RSdWxlID0gZmlyc3QocnVsZXMpLFxuICAgICAgICBzdGFydFJ1bGUgPSBmaXJzdFJ1bGU7ICAvLy9cblxuICByZXR1cm4gc3RhcnRSdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tU3RhcnRSdWxlQW5kUnVsZU1hcChzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgY29uc3QgcnVsZXMgPSBPYmplY3QudmFsdWVzKHJ1bGVNYXApLFxuICAgICAgICBzdGFydFJ1bGVOYW1lID0gc3RhcnRSdWxlLmdldE5hbWUoKTtcblxuICBzdGFydFJ1bGUgPSBwcnVuZShydWxlcywgKHJ1bGUpID0+IHsgIC8vL1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBpZiAocnVsZU5hbWUgIT09IHN0YXJ0UnVsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcnVsZXMudW5zaGlmdChzdGFydFJ1bGUpO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUocnVsZXMsIHN0YXJ0UnVsZU5hbWUpIHtcbiAgbGV0IHN0YXJ0UnVsZSA9IHJ1bGVzLmZpbmQoKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgaWYgKHJ1bGVOYW1lID09PSBzdGFydFJ1bGVOYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pIHx8IG51bGw7IC8vL1xuXG4gIGlmIChzdGFydFJ1bGUgPT09IG51bGwpIHtcbiAgICBzdGFydFJ1bGUgPSBzdGFydFJ1bGVGcm9tUnVsZXMocnVsZXMpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0UnVsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBydWxlc0FzU3RyaW5nLFxuICBydWxlTWFwRnJvbVJ1bGVzLFxuICBzdGFydFJ1bGVGcm9tUnVsZXMsXG4gIHJ1bGVzRnJvbVN0YXJ0UnVsZUFuZFJ1bGVNYXAsXG4gIHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IHBhcnNlck1peGlucyBmcm9tIFwiLi4vbWl4aW5zL3BhcnNlclwiO1xuaW1wb3J0IE5hbWVCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9uYW1lXCI7XG5pbXBvcnQgUGFydEJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL3BhcnRcIjtcbmltcG9ydCBSdWxlQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvcnVsZVwiO1xuaW1wb3J0IEVycm9yQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvZXJyb3JcIjtcbmltcG9ydCBFcHNpbG9uQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvZXBzaWxvblwiO1xuaW1wb3J0IERvY3VtZW50Qk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvZG9jdW1lbnRcIjtcbmltcG9ydCBSdWxlTmFtZUJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL3J1bGVOYW1lXCI7XG5pbXBvcnQgV2lsZGNhcmRCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi93aWxkY2FyZFwiO1xuaW1wb3J0IEVuZE9mTGluZUJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL2VuZE9mTGluZVwiO1xuaW1wb3J0IFBhcnRDaG9pY2VCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9wYXJ0Q2hvaWNlXCI7XG5pbXBvcnQgUXVhbnRpZmllckJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL3F1YW50aWZpZXJcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFByZWNlZGVudHNCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9wcmVjZWRlbmNlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IFRlcm1pbmFsUGFydEJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL3Rlcm1pbmFsUGFydFwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydEJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL25vblRlcm1pbmFsUGFydFwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c0JORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE9wYWNpdHlNb2RpZmllckJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL29wYWNpdHlNb2RpZmllclwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgQ2FsbEFoZWFkTW9kaWZpZXJCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9jYWxsQWhlYWRNb2RpZmllclwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBPcHRpb25hbFF1YW50aWZpZXJCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9vcHRpb25hbFF1YW50aWZpZXJcIjtcbmltcG9ydCBTdGFydE9mQ29udGVudFBhcnRCTkZSdWxlIGZyb20gXCIuLi9ydWxlL2JuZi9zdGFydE9mQ29udGVudFBhcnRcIjtcbmltcG9ydCBPbmVPck1vcmVRdWFudGlmaWVyQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvb25lT3JNb3JlUXVhbnRpZmllclwiO1xuaW1wb3J0IFplcm9Pck1vcmVRdWFudGlmaWVyQk5GUnVsZSBmcm9tIFwiLi4vcnVsZS9ibmYvemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZUJORlJ1bGUgZnJvbSBcIi4uL3J1bGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHJ1bGVNYXBGcm9tUnVsZXMsIHN0YXJ0UnVsZUZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuXHRydWxlc0Zyb21Ub2tlbnModG9rZW5zKSB7XG5cdCAgbGV0IHJ1bGVzO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMucGFyc2UodG9rZW5zKTtcblxuICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIG5vZGUuYCk7XG4gICAgfVxuXG4gICAgcnVsZXMgPSBub2RlLmdlbmVyYXRlUnVsZXMoUnVsZSk7XG5cbiAgICBjb25zdCBydWxlc0xlbmd0aCA9IHJ1bGVzLmxlbmd0aDtcblxuICAgIGlmIChydWxlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gcnVsZXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZUJORlJ1bGUgPSBOYW1lQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnRCTkZSdWxlID0gUGFydEJORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBydWxlQk5GUnVsZSA9IFJ1bGVCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZXJyb3JCTkZSdWxlID0gRXJyb3JCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZXBzaWxvbkJORlJ1bGUgPSBFcHNpbG9uQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGRvY3VtZW50Qk5GUnVsZSA9IERvY3VtZW50Qk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHJ1bGVOYW1lQk5GUnVsZSA9IFJ1bGVOYW1lQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHdpbGRjYXJkQk5GUnVsZSA9IFdpbGRjYXJkQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGVuZE9mTGluZUJORlJ1bGUgPSBFbmRPZkxpbmVCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFydENob2ljZUJORlJ1bGUgPSBQYXJ0Q2hvaWNlQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHF1YW50aWZpZXJCTkZSdWxlID0gUXVhbnRpZmllckJORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBkZWZpbml0aW9uQk5GUnVsZSA9IERlZmluaXRpb25CTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcHJlY2VkZW50c0JORlJ1bGUgPSBQcmVjZWRlbnRzQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGRlZmluaXRpb25zQk5GUnVsZSA9IERlZmluaXRpb25zQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHRlcm1pbmFsUGFydEJORlJ1bGUgPSBUZXJtaW5hbFBhcnRCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c0JORlJ1bGUgPSBDaG9pY2VPZlBhcnRzQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sQk5GUnVsZSA9IFRlcm1pbmFsU3ltYm9sQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydEJORlJ1bGUgPSBOb25UZXJtaW5hbFBhcnRCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzQk5GUnVsZSA9IFNlcXVlbmNlT2ZQYXJ0c0JORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBvcGFjaXR5TW9kaWZpZXJCTkZSdWxlID0gT3BhY2l0eU1vZGlmaWVyQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRCTkZSdWxlID0gTm9XaGl0ZXNwYWNlUGFydEJORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbkJORlJ1bGUgPSBSZWd1bGFyRXhwcmVzc2lvbkJORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBjYWxsQWhlYWRNb2RpZmllckJORlJ1bGUgPSBDYWxsQWhlYWRNb2RpZmllckJORlJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJCTkZSdWxlID0gT3B0aW9uYWxRdWFudGlmaWVyQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHN0YXJ0T2ZDb250ZW50UGFydEJORlJ1bGUgPSBTdGFydE9mQ29udGVudFBhcnRCTkZSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllckJORlJ1bGUgPSBPbmVPck1vcmVRdWFudGlmaWVyQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyQk5GUnVsZSA9IFplcm9Pck1vcmVRdWFudGlmaWVyQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlQk5GUnVsZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHJ1bGVzID0gW1xuICAgICAgICAgICAgZG9jdW1lbnRCTkZSdWxlLFxuICAgICAgICAgICAgcnVsZUJORlJ1bGUsXG4gICAgICAgICAgICBuYW1lQk5GUnVsZSxcbiAgICAgICAgICAgIGRlZmluaXRpb25zQk5GUnVsZSxcbiAgICAgICAgICAgIGRlZmluaXRpb25CTkZSdWxlLFxuICAgICAgICAgICAgcGFydEJORlJ1bGUsXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRCTkZSdWxlLFxuICAgICAgICAgICAgdGVybWluYWxQYXJ0Qk5GUnVsZSxcbiAgICAgICAgICAgIHN0YXJ0T2ZDb250ZW50UGFydEJORlJ1bGUsXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0Qk5GUnVsZSxcbiAgICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0JORlJ1bGUsXG4gICAgICAgICAgICBjaG9pY2VPZlBhcnRzQk5GUnVsZSxcbiAgICAgICAgICAgIHBhcnRDaG9pY2VCTkZSdWxlLFxuICAgICAgICAgICAgcnVsZU5hbWVCTkZSdWxlLFxuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVCTkZSdWxlLFxuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25CTkZSdWxlLFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xCTkZSdWxlLFxuICAgICAgICAgICAgcHJlY2VkZW50c0JORlJ1bGUsXG4gICAgICAgICAgICBlbmRPZkxpbmVCTkZSdWxlLFxuICAgICAgICAgICAgd2lsZGNhcmRCTkZSdWxlLFxuICAgICAgICAgICAgZXBzaWxvbkJORlJ1bGUsXG4gICAgICAgICAgICBxdWFudGlmaWVyQk5GUnVsZSxcbiAgICAgICAgICAgIG9wYWNpdHlNb2RpZmllckJORlJ1bGUsXG4gICAgICAgICAgICBjYWxsQWhlYWRNb2RpZmllckJORlJ1bGUsXG4gICAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJCTkZSdWxlLFxuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllckJORlJ1bGUsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllckJORlJ1bGUsXG4gICAgICAgICAgICBlcnJvckJORlJ1bGVcbiAgICAgICAgICBdLFxuICAgICAgICAgIHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICAgIGJuZlBhcnNlciA9IG5ldyBCTkZQYXJzZXIoc3RhcnRSdWxlLCBydWxlTWFwKTtcbiAgICBcbiAgICByZXR1cm4gYm5mUGFyc2VyO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oQk5GUGFyc2VyLnByb3RvdHlwZSwgcGFyc2VyTWl4aW5zKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG4gICAgZXhwcmVzc2lvbnMgIDo6PSAgZXhwcmVzc2lvbisgO1xuXG4gICAgZXhwcmVzc2lvbiAgIDo6PSAgPFNUQVJUX09GX0NPTlRFTlQ+IHRlcm0uLi4gXCIuXCIgO1xuICAgIFxuICAgIHRlcm0gICAgICAgICA6Oj0gIHRlcm1fIHRlcm1+KiA7XG4gICAgXG4gICAgb3BlcmF0b3IgICAgIDo6PSAgXCIrXCJcbiAgICBcbiAgICAgICAgICAgICAgICAgICB8ICBcIi1cIlxuICAgIFxuICAgICAgICAgICAgICAgICAgIHwgIFwiKlwiXG4gICAgXG4gICAgICAgICAgICAgICAgICAgO1xuICAgIFxuICAgIG51bWJlciAgICAgICA6Oj0gIC9cXFxcZCsvIDtcbiAgICBcbiAgICB0ZXJtXyAgICAgICAgOjo9ICBcIihcIiB0ZXJtIFwiKVwiXG4gICAgXG4gICAgICAgICAgICAgICAgICAgfCAgbnVtYmVyXG4gICAgXG4gICAgICAgICAgICAgICAgICAgO1xuICAgIFxuICAgIHRlcm1+dGVybSAgICA6Oj0gIG9wZXJhdG9yIHRlcm0gO1xuICAgIFxuICAgIHRlcm1+ICAgICAgICA6Oj0gIHRlcm1+dGVybSA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQk5GTGV4ZXIgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBCTkZQYXJzZXIgZnJvbSBcIi4uL2JuZi9wYXJzZXJcIjtcblxuaW1wb3J0IHsgcnVsZU1hcEZyb21SdWxlcywgc3RhcnRSdWxlRnJvbVJ1bGVzLCBzdGFydFJ1bGVGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlc1wiO1xuXG5jb25zdCBibmZMZXhlciA9IEJORkxleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBibmZQYXJzZXIgPSBCTkZQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbUJORihibmYpIHtcbiAgY29uc3QgdG9rZW5zID0gYm5mTGV4ZXIudG9rZW5zRnJvbUJORihibmYpLFxuICAgICAgICBydWxlcyA9IGJuZlBhcnNlci5ydWxlc0Zyb21Ub2tlbnModG9rZW5zKTtcblxuICByZXR1cm4gcnVsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHJ1bGVNYXAgPSBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcGFyc2VyID0gbmV3IENsYXNzKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG5cbiAgcmV0dXJuIHBhcnNlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlckZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUoQ2xhc3MsIHJ1bGVzLCBzdGFydFJ1bGVOYW1lKSB7XG4gIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUocnVsZXMsIHN0YXJ0UnVsZU5hbWUpLFxuICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHBhcnNlciA9IG5ldyBDbGFzcyhzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gIHJldHVybiBwYXJzZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcnVsZXNGcm9tQk5GLFxuICBwYXJzZXJGcm9tUnVsZXMsXG4gIHBhcnNlckZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBwYXJzZXJNaXhpbnMgZnJvbSBcIi4uL21peGlucy9wYXJzZXJcIjtcblxuaW1wb3J0IHsgcnVsZXNGcm9tQk5GLCBwYXJzZXJGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25QYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xuICAgIGNvbnN0IHsgYm5mIH0gPSBDbGFzcyxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUJORihibmYpLFxuICAgICAgICAgIHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKENsYXNzLCBibmYpIHtcbiAgICBjb25zdCBydWxlcyA9IHJ1bGVzRnJvbUJORihibmYpLFxuICAgICAgICAgIHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gICAgY29uc3QgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oQ29tbW9uUGFyc2VyLnByb3RvdHlwZSwgcGFyc2VyTWl4aW5zKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcbmltcG9ydCBDb21tb25QYXJzZXIgZnJvbSBcIi4uL2NvbW1vbi9wYXJzZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhCYXNpY1BhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKEJhc2ljUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhCYXNpY1BhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFcHNpbG9uUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgRXBzaWxvblBhcnQsXG4gIFdpbGRjYXJkUGFydCxcbiAgRW5kT2ZMaW5lUGFydCxcbiAgVGVybWluYWxTeW1ib2xQYXJ0LFxuICBSZWd1bGFyRXhwcmVzc2lvblBhcnQsXG4gIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCxcbiAgUnVsZU5hbWVQYXJ0LFxuICBPcHRpb25hbFBhcnRQYXJ0LFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0LFxuICBPbmVPck1vcmVQYXJ0c1BhcnQsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnQsXG4gIENob2ljZU9mUGFydHNQYXJ0XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORlBhcnNlciB9IGZyb20gXCIuL2JuZi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFzaWNQYXJzZXIgfSBmcm9tIFwiLi9iYXNpYy9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHJ1bGVzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnNlclV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0cyB9IGZyb20gXCIuL3BhcnRzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnRUeXBlcyB9IGZyb20gXCIuL3BhcnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0Q2hvaWNlIH0gZnJvbSBcIi4vcGFydENob2ljZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFcHNpbG9uTm9kZSB9IGZyb20gXCIuL25vZGUvdGVybWluYWwvZXBzaWxvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL3Rlcm1pbmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCIuL25vZGUvbm9uVGVybWluYWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG4gICAgc3R5bGVzaGVldCAgICAgICAgICAgICAgICAgOjo9ICggbWVkaWEgfCBydWxlU2V0IHwga2V5ZnJhbWVzIHwgZGVjbGFyYXRpb24gfCBlcnJvciApKyA7XG5cblxuICAgIG1lZGlhICAgICAgICAgICAgICAgICAgICAgIDo6PSBcIkBtZWRpYVwiIG1lZGlhUXVlcmllcyBcIntcIiAoIHJ1bGVTZXQgfCBkZWNsYXJhdGlvbiApKiBcIn1cIiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIHJ1bGVTZXQgICAgICAgICAgICAgICAgICAgIDo6PSAgc2VsZWN0b3JzIFwie1wiIGRlY2xhcmF0aW9uKiBcIn1cIiA7XG4gICAgXG4gICAgXG4gICAga2V5ZnJhbWVzICAgICAgICAgICAgICAgICAgOjo9IFwiQGtleWZyYW1lc1wiIFtpZGVudGlmaWVyXSBcIntcIiBrZXlmcmFtZSsgXCJ9XCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgICA6Oj0gIHByb3BlcnR5TmFtZSBcIjpcIiBwcm9wZXJ0eVZhbHVlcyBpbXBvcnRhbnQ/IFwiO1wiIDtcblxuXG4gICAgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuXG4gICAgcHJvcGVydHlWYWx1ZXMgICAgICAgICAgICAgOjo9ICBwcm9wZXJ0eVZhbHVlICggXCIsXCIgcHJvcGVydHlWYWx1ZSApKiA7XG5cblxuICAgIG1lZGlhUXVlcmllcyAgICAgICAgICAgICAgIDo6PSAgbWVkaWFRdWVyeSAoICggXCIsXCIgfCBcIm9yXCIgKSBtZWRpYVF1ZXJ5ICkqIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIHNlbGVjdG9ycyAgICAgICAgICAgICAgICAgIDo6PSAgc2VsZWN0b3IgKCBcIixcIiBzZWxlY3RvciApKiA7XG5cblxuICAgIGtleWZyYW1lICAgICAgICAgICAgICAgICAgIDo6PSAgW3BlcmNlbnRhZ2VdIFwie1wiIGRlY2xhcmF0aW9uKyBcIn1cIiA7XG4gICAgXG4gICAgXG4gICAgbWVkaWFRdWVyeSAgICAgICAgICAgICAgICAgOjo9ICAoIFwibm90XCI/IG1lZGlhVHlwZSBcImFuZFwiICk/IG1lZGlhRmVhdHVyZXMgXG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBcIm5vdFwiPyBtZWRpYVR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICBtZWRpYVR5cGUgICAgICAgICAgICAgICAgICA6Oj0gIFwiYWxsXCIgfCBcInByaW50XCIgfCBcInNjcmVlblwiIHwgXCJzcGVlY2hcIiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYUZlYXR1cmVzICAgICAgICAgICAgICA6Oj0gICggXG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmVhdHVyZSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFwiKFwiIFwibm90XCIgbWVkaWFGZWF0dXJlIFwiKVwiICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhbmRcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZlYXR1cmUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFwiKFwiIFwibm90XCIgbWVkaWFGZWF0dXJlIFwiKVwiICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgbWVkaWFGZWF0dXJlICAgICAgICAgICAgICAgOjo9ICBcIihcIiBbaWRlbnRpZmllcl0gKCBcIjpcIiBwcm9wZXJ0eVZhbHVlICk/IFwiKVwiIDtcblxuXG4gICAgcHJvcGVydHlWYWx1ZSAgICAgICAgICAgICAgOjo9ICB0ZXJtICggXCIsXCI/IHRlcm0gKSogO1xuXG5cbiAgICBwcm9wZXJ0eU5hbWUgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXSA7XG5cblxuICAgIGltcG9ydGFudCAgICAgICAgICAgICAgICAgIDo6PSAgXCIhaW1wb3J0YW50XCIgO1xuXG5cbiAgICBzZWxlY3RvciAgICAgICAgICAgICAgICAgICA6Oj0gICggY2xhc3MgfCBwc2V1ZG9DbGFzcyB8IHBzZXVkb0VsZW1lbnQgfCBhdHRyaWJ1dGUgKSsgO1xuXG5cbiAgICBjbGFzcyAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwiLlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwc2V1ZG9DbGFzcyAgICAgICAgICAgICAgICA6Oj0gIFwiOlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwc2V1ZG9FbGVtZW50ICAgICAgICAgICAgICA6Oj0gIFwiOjpcIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSBwYXJlbnRoZXNpc2VkU2VsZWN0b3I/IDtcblxuXG4gICAgcGFyZW50aGVzaXNlZFNlbGVjdG9yICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIihcIiBzZWxlY3RvciA8Tk9fV0hJVEVTUEFDRT5cIilcIiA7XG5cblxuICAgIGF0dHJpYnV0ZSAgICAgICAgICAgICAgICAgIDo6PSAgXCJbXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFwiPVwiIHwgXCJ+PVwiIHwgXCJ8PVwiIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFtpZGVudGlmaWVyXSB8IFtzdHJpbmctbGl0ZXJhbF0gKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl1cIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIHRlcm0gICAgICAgICAgICAgICAgICAgICAgIDo6PSAgW3BsdXMtb3ItbWludXNdP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBbcGVyY2VudGFnZV0gfCBbZnJlcXVlbmN5XSB8IFtmcmFjdGlvbl0gfCBbbGVuZ3RoXSB8IFthbmdsZV0gfCBbcmVtc10gfCBbZW1zXSB8IFt0aW1lXSB8IFtudW1iZXJdIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHJpbmctbGl0ZXJhbF0rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvdXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICB1cmkgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwidXJsXCI8Tk9fV0hJVEVTUEFDRT5cIihcIiBbc3RyaW5nLWxpdGVyYWxdIFwiKVwiIDtcblxuXG4gICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl08Tk9fV0hJVEVTUEFDRT5cIihcIiBwcm9wZXJ0eVZhbHVlIFwiKVwiIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU1NQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhDU1NQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihDU1NQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKENTU1BhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFUlJPUl9SVUxFX05BTUUgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgSU5ERVhfUlVMRV9OQU1FID0gXCJpbmRleFwiO1xuZXhwb3J0IGNvbnN0IFVOSVFVRV9SVUxFX05BTUUgPSBcInVuaXF1ZVwiO1xuZXhwb3J0IGNvbnN0IFNQUkVBRF9SVUxFX05BTUUgPSBcInNwcmVhZFwiO1xuZXhwb3J0IGNvbnN0IEVORF9JTkRFWF9SVUxFX05BTUUgPSBcImVuZEluZGV4XCI7XG5leHBvcnQgY29uc3QgUlVMRV9OQU1FX1JVTEVfTkFNRSA9IFwicnVsZU5hbWVcIjtcbmV4cG9ydCBjb25zdCBUT0tFTl9UWVBFX1JVTEVfTkFNRSA9IFwidG9rZW5UeXBlXCI7XG5leHBvcnQgY29uc3QgU1RBUlRfSU5ERVhfUlVMRV9OQU1FID0gXCJzdGFydEluZGV4XCI7XG5leHBvcnQgY29uc3QgU1VCX0VYUFJFU1NJT05fUlVMRV9OQU1FID0gXCJzdWJFeHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3QgSU5GSU5JVEVfREVTQ0VOVF9SVUxFX05BTUUgPSBcImluZmluaXRlRGVzY2VudFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFUlJPUl9SVUxFX05BTUUsXG4gICAgICAgICBJTkRFWF9SVUxFX05BTUUsXG4gICAgICAgICBVTklRVUVfUlVMRV9OQU1FLFxuICAgICAgICAgU1BSRUFEX1JVTEVfTkFNRSxcbiAgICAgICAgIEVORF9JTkRFWF9SVUxFX05BTUUsXG4gICAgICAgICBSVUxFX05BTUVfUlVMRV9OQU1FLFxuICAgICAgICAgVE9LRU5fVFlQRV9SVUxFX05BTUUsXG4gICAgICAgICBTVEFSVF9JTkRFWF9SVUxFX05BTUUsXG4gICAgICAgICBTVUJfRVhQUkVTU0lPTl9SVUxFX05BTUUsXG4gICAgICAgICBJTkZJTklURV9ERVNDRU5UX1JVTEVfTkFNRSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGluZGV4RnJvbUluZGV4Tm9kZShpbmRleE5vZGUpIHtcbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gaW5kZXhOb2RlLCAvLy9cbiAgICAgICAgaW5kZXggPSBmcm9tRmlyc3RDaGlsZE5vZGUobm9uVGVybWluYWxOb2RlLCAoZmlyc3RDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICAgICAgaW5kZXggPSBOdW1iZXIoY29udGVudCk7XG5cbiAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBpbmRleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21QYXRoTm9kZShwYXRoTm9kZSkge1xuICBjb25zdCBzZWxlY3Rvck5vZGVzID0gc2VsZWN0b3JOb2Rlc0Zyb21QYXRoTm9kZShwYXRoTm9kZSksXG4gICAgICAgIHJ1bGVOYW1lTm9kZXMgPSBzZWxlY3Rvck5vZGVzLnJlZHVjZSgocnVsZU5hbWVOb2Rlcywgc2VsZWN0b3JOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc2VsZWN0b3JOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBydWxlTmFtZU5vZGUgPSBmcm9tRmlyc3RDaGlsZE5vZGUobm9uVGVybWluYWxOb2RlLCAoZmlyc3RDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBydWxlTmFtZU5vZGUgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBSVUxFX05BTUVfUlVMRV9OQU1FKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHJ1bGVOYW1lUnVsZU5hbWVSdWxlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZU5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gcnVsZU5hbWVOb2RlO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHJ1bGVOYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcnVsZU5hbWVOb2Rlcy5wdXNoKHJ1bGVOYW1lTm9kZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lTm9kZXM7XG4gICAgICAgIH0sIFtdKSxcbiAgICAgICAgcnVsZU5hbWVzID0gcnVsZU5hbWVOb2Rlcy5tYXAoKHJ1bGVOYW1lTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHJ1bGVOYW1lTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBmcm9tRmlyc3RDaGlsZE5vZGUobm9uVGVybWluYWxOb2RlLCAoZmlyc3RDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gY29udGVudDsgLy8vXG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlTmFtZTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBydWxlTmFtZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVOYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRva2VuVHlwZXNGcm9tUGF0aE5vZGUocGF0aE5vZGUpIHtcbiAgY29uc3Qgc2VsZWN0b3JOb2RlcyA9IHNlbGVjdG9yTm9kZXNGcm9tUGF0aE5vZGUocGF0aE5vZGUpLFxuICAgICAgICB0b2tlblRZcGVOb2RlcyA9IHNlbGVjdG9yTm9kZXMucmVkdWNlKCh0b2tlblRZcGVOb2Rlcywgc2VsZWN0b3JOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc2VsZWN0b3JOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICB0b2tlblR5cGVOb2RlID0gZnJvbUZpcnN0Q2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgKGZpcnN0Q2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgdG9rZW5UWXBlTm9kZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlTmFtZVRva2VuVHlwZVJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBUT0tFTl9UWVBFX1JVTEVfTkFNRSk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChydWxlTmFtZVRva2VuVHlwZVJ1bGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuVFlwZU5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5UWXBlTm9kZTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh0b2tlblR5cGVOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0b2tlblRZcGVOb2Rlcy5wdXNoKHRva2VuVHlwZU5vZGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0b2tlblRZcGVOb2RlcztcbiAgICAgICAgfSwgW10pLFxuICAgICAgICB0b2tlblR5cGVzID0gdG9rZW5UWXBlTm9kZXMubWFwKCh0b2tlblR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdG9rZW5UeXBlTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgIHRva2VuVHlwZSA9IGZyb21UaGlyZENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsICh0aGlyZENoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gdGhpcmRDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5UeXBlID0gY29udGVudDsgIC8vL1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5UeXBlO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdG9rZW5UeXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdG9rZW5UeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdG9yTm9kZXNGcm9tUGF0aE5vZGUocGF0aE5vZGUpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBwYXRoTm9kZTsgLy8vXG5cbiAgY29uc3Qgc2VsZWN0b3JzTm9kZSA9IGZyb21MYXN0Q2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgKGxhc3RDaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RvcnNOb2RlID0gbGFzdENoaWxkTm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHNlbGVjdG9yc05vZGU7XG4gIH0pO1xuXG4gIG5vblRlcm1pbmFsTm9kZSA9IHNlbGVjdG9yc05vZGU7ICAvLy9cblxuICBjb25zdCBzZWxlY3Rvck5vZGVzID0gbm9uVGVybWluYWxOb2RlLmZpbHRlckNoaWxkTm9kZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgY29uc3QgY2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzZWxlY3Rvck5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5maW5pdGVEZXNjZW50RnJvbVBhdGhOb2RlKHBhdGhOb2RlKSB7XG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHBhdGhOb2RlLCAvLy9cbiAgICAgICAgaW5maW5pdGVEZXNjZW50ID0gZnJvbVNlY29uZENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsIChzZWNvbmRDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzZWNvbmRDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgIHJ1bGVOYW1lSW5maW5pdGVEZXNjZW50UnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IElORklOSVRFX0RFU0NFTlRfUlVMRV9OQU1FKSxcbiAgICAgICAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSBydWxlTmFtZUluZmluaXRlRGVzY2VudFJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgICAgICByZXR1cm4gaW5maW5pdGVEZXNjZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gaW5maW5pdGVEZXNjZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlRnJvbVNwcmVhZE5vZGUoc3ByZWFkTm9kZSkge1xuICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzcHJlYWROb2RlLFxuICAgICAgICB1bmlxdWUgPSBmcm9tRmlyc3RDaGlsZE5vZGUobm9uVGVybWluYWxOb2RlLCAoZmlyc3RDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBsZXQgdW5pcXVlID0gZmFsc2U7XG5cbiAgICAgICAgICBjb25zdCBmaXJzdENoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgICAgICBpZiAoZmlyc3RDaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICBydWxlTmFtZVVuaXF1ZVJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBVTklRVUVfUlVMRV9OQU1FKTtcblxuICAgICAgICAgICAgaWYgKHJ1bGVOYW1lVW5pcXVlUnVsZU5hbWUpIHtcbiAgICAgICAgICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdW5pcXVlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdW5pcXVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhGcm9tU3ByZWFkTm9kZShzcHJlYWROb2RlKSB7XG4gIGxldCBpbmRleCA9IG51bGw7XG5cbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc3ByZWFkTm9kZSwgLy8vXG4gICAgICAgIGluZGV4Tm9kZSA9IG5vblRlcm1pbmFsTm9kZS5maW5kQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lSW5kZXhSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gSU5ERVhfUlVMRV9OQU1FKTtcblxuICAgICAgICAgICAgaWYgKHJ1bGVOYW1lSW5kZXhSdWxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGluZGV4Tm9kZSAhPT0gbnVsbCkge1xuICAgIGluZGV4ID0gaW5kZXhGcm9tSW5kZXhOb2RlKGluZGV4Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRJbmRleEZyb21TcHJlYWROb2RlKHNwcmVhZE5vZGUpIHtcbiAgbGV0IGVuZEluZGV4ID0gSW5maW5pdHk7XG5cbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc3ByZWFkTm9kZSwgLy8vXG4gICAgICAgIGVuZEluZGV4Tm9kZSA9IG5vblRlcm1pbmFsTm9kZS5maW5kQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lRW5kSW5kZXhSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gRU5EX0lOREVYX1JVTEVfTkFNRSk7XG5cbiAgICAgICAgICAgIGlmIChydWxlTmFtZUVuZEluZGV4UnVsZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChlbmRJbmRleE5vZGUgIT09IG51bGwpIHtcbiAgICBlbmRJbmRleCA9IGluZGV4RnJvbUluZGV4Tm9kZShlbmRJbmRleE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIGVuZEluZGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRJbmRleEZyb21TcHJlYWROb2RlKHNwcmVhZE5vZGUpIHtcbiAgbGV0IHN0YXJ0SW5kZXggPSAwO1xuXG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHNwcmVhZE5vZGUsIC8vL1xuICAgICAgICBzdGFydEluZGV4Tm9kZSA9IG5vblRlcm1pbmFsTm9kZS5maW5kQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lU3RhcnRJbmRleFJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBTVEFSVF9JTkRFWF9SVUxFX05BTUUpO1xuXG4gICAgICAgICAgICBpZiAocnVsZU5hbWVTdGFydEluZGV4UnVsZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChzdGFydEluZGV4Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXJ0SW5kZXggPSBpbmRleEZyb21JbmRleE5vZGUoc3RhcnRJbmRleE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0SW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoTm9kZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSkge1xuICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBleHByZXNzaW9uTm9kZSwgLy8vXG4gICAgICAgIHBhdGhOb2RlID0gZnJvbUZpcnN0Q2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgKGZpcnN0Q2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aE5vZGUgPSBmaXJzdENoaWxkTm9kZTsgIC8vL1xuXG4gICAgICAgICAgcmV0dXJuIHBhdGhOb2RlO1xuICAgICAgICB9KVxuXG4gIHJldHVybiBwYXRoTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwcmVhZE5vZGVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUpIHtcbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZXhwcmVzc2lvbk5vZGUsIC8vL1xuICAgICAgICBzcHJlYWROb2RlID0gZnJvbVNlY29uZENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsIChzZWNvbmRDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBsZXQgc3ByZWFkTm9kZSA9IG51bGw7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzZWNvbmRDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgIHJ1bGVOYW1lU3ByZWFkUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IFNQUkVBRF9SVUxFX05BTUUpO1xuXG4gICAgICAgICAgaWYgKHJ1bGVOYW1lU3ByZWFkUnVsZU5hbWUpIHtcbiAgICAgICAgICAgIHNwcmVhZE5vZGUgPSBzZWNvbmRDaGlsZE5vZGU7ICAvLy9cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3ByZWFkTm9kZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHNwcmVhZE5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvck5vZGVzRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSB7XG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAvLy9cbiAgICAgICAgZXJyb3JOb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5yZWR1Y2VDaGlsZE5vZGUoKGVycm9yTm9kZXMsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgICAgaWYgKGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgcnVsZU5hbWVFcnJvclJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBFUlJPUl9SVUxFX05BTUUpO1xuXG4gICAgICAgICAgICBpZiAocnVsZU5hbWVFcnJvclJ1bGVOYW1lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yTm9kZSA9IG5vblRlcm1pbmFsTm9kZTsgIC8vL1xuXG4gICAgICAgICAgICAgIGVycm9yTm9kZXMucHVzaChlcnJvck5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBlcnJvck5vZGVzO1xuICAgICAgICB9LCBbXSk7XG5cbiAgcmV0dXJuIGVycm9yTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJFeHByZXNzaW9uTm9kZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSkge1xuICBsZXQgc3ViRXhwcmVzc2lvbk5vZGUgPSBudWxsO1xuXG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAvLy9cbiAgICAgICAgbXVsdGlwbGljaXR5ID0gbm9uVGVybWluYWxOb2RlLmdldE11bHRpcGxpY2l0eSgpO1xuXG4gIGlmIChtdWx0aXBsaWNpdHkgPiAxKSB7XG4gICAgc3ViRXhwcmVzc2lvbk5vZGUgPSBmcm9tTGFzdENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsIChsYXN0Q2hpbGROb2RlKSA9PiB7XG4gICAgICBsZXQgc3ViRXhwcmVzc2lvbk5vZGUgPSBudWxsO1xuXG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBsYXN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgcnVsZU5hbWVTdWJFeHByZXNzaW9uUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IFNVQl9FWFBSRVNTSU9OX1JVTEVfTkFNRSk7XG5cbiAgICAgIGlmIChydWxlTmFtZVN1YkV4cHJlc3Npb25SdWxlTmFtZSkge1xuICAgICAgICBzdWJFeHByZXNzaW9uTm9kZSA9IGxhc3RDaGlsZE5vZGU7ICAvLy9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1YkV4cHJlc3Npb25Ob2RlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN1YkV4cHJlc3Npb25Ob2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aE5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpIHtcbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc3ViRXhwcmVzc2lvbk5vZGUsIC8vL1xuICAgICAgICBwYXRoTm9kZSA9IGZyb21GaXJzdENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsIChmaXJzdENoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGhOb2RlID0gZmlyc3RDaGlsZE5vZGU7ICAvLy9cblxuICAgICAgICAgIHJldHVybiBwYXRoTm9kZTtcbiAgICAgICAgfSlcblxuICByZXR1cm4gcGF0aE5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcHJlYWROb2RlRnJvbVN1YkV4cHJlc3Npb25Ob2RlKHN1YkV4cHJlc3Npb25Ob2RlKSB7XG4gIGxldCBzcHJlYWROb2RlID0gbnVsbDtcblxuICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzdWJFeHByZXNzaW9uTm9kZSwgLy8vXG4gICAgICAgIG11bHRpcGxpY2l0eSA9IG5vblRlcm1pbmFsTm9kZS5nZXRNdWx0aXBsaWNpdHkoKTtcblxuICBpZiAobXVsdGlwbGljaXR5ID4gMSkge1xuICAgIHNwcmVhZE5vZGUgPSBmcm9tU2Vjb25kQ2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgKHNlY29uZENoaWxkTm9kZSkgPT4ge1xuICAgICAgbGV0IHNwcmVhZE5vZGUgPSBudWxsO1xuXG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzZWNvbmRDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBydWxlTmFtZVNwcmVhZFJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBTUFJFQURfUlVMRV9OQU1FKTtcblxuICAgICAgaWYgKHJ1bGVOYW1lU3ByZWFkUnVsZU5hbWUpIHtcbiAgICAgICAgc3ByZWFkTm9kZSA9IHNlY29uZENoaWxkTm9kZTsgIC8vL1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3ByZWFkTm9kZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzcHJlYWROb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRXhwcmVzc2lvbk5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpIHtcbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc3ViRXhwcmVzc2lvbk5vZGU7IC8vL1xuXG4gIHN1YkV4cHJlc3Npb25Ob2RlID0gbnVsbDtcblxuICBjb25zdCBtdWx0aXBsaWNpdHkgPSBub25UZXJtaW5hbE5vZGUuZ2V0TXVsdGlwbGljaXR5KCk7XG5cbiAgaWYgKG11bHRpcGxpY2l0eSA+IDEpIHtcbiAgICBzdWJFeHByZXNzaW9uTm9kZSA9IGZyb21MYXN0Q2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgKGxhc3RDaGlsZE5vZGUpID0+IHtcbiAgICAgIGxldCBzdWJFeHByZXNzaW9uTm9kZSA9IG51bGw7XG5cbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9lID0gbGFzdENoaWxkTm9kZSwgLy8vXG4gICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9lLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBydWxlTmFtZVN1YkV4cHJlc3Npb25SdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gU1VCX0VYUFJFU1NJT05fUlVMRV9OQU1FKTtcblxuICAgICAgaWYgKHJ1bGVOYW1lU3ViRXhwcmVzc2lvblJ1bGVOYW1lKSB7XG4gICAgICAgIHN1YkV4cHJlc3Npb25Ob2RlID0gbGFzdENoaWxkTm9kZTsgIC8vL1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3ViRXhwcmVzc2lvbk5vZGU7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gc3ViRXhwcmVzc2lvbk5vZGU7XG59XG5cbmZ1bmN0aW9uIGZyb21GaXJzdENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsIGNhbGxiYWNrKSB7XG4gIGxldCByZXN1bHQ7XG5cbiAgY29uc3QgZmlyc3RJbmRleCA9IDA7XG5cbiAgbm9uVGVybWluYWxOb2RlLmZvcndhcmRzU29tZUNoaWxkTm9kZSgoY2hpbGROb2RlLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gZmlyc3RJbmRleCkge1xuICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGUgPSBjaGlsZE5vZGU7IC8vL1xuXG4gICAgICByZXN1bHQgPSBjYWxsYmFjayhmaXJzdENoaWxkTm9kZSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZnJvbVNlY29uZENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsIGNhbGxiYWNrKSB7XG4gIGxldCByZXN1bHQ7XG5cbiAgY29uc3Qgc2Vjb25kSW5kZXggPSAxO1xuXG4gIG5vblRlcm1pbmFsTm9kZS5mb3J3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPT09IHNlY29uZEluZGV4KSB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkTm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGZpcnN0Q2hpbGROb2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmcm9tVGhpcmRDaGlsZE5vZGUobm9uVGVybWluYWxOb2RlLCBjYWxsYmFjaykge1xuICBsZXQgcmVzdWx0O1xuXG4gIGNvbnN0IHRoaXJkSW5kZXggPSAyO1xuXG4gIG5vblRlcm1pbmFsTm9kZS5mb3J3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPT09IHRoaXJkSW5kZXgpIHtcbiAgICAgIGNvbnN0IHRoaXJkQ2hpbGROb2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgICAgcmVzdWx0ID0gY2FsbGJhY2sodGhpcmRDaGlsZE5vZGUpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGZyb21MYXN0Q2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgY2FsbGJhY2spIHtcbiAgbGV0IHJlc3VsdDtcblxuICBjb25zdCBtdWx0aXBsaWNpdHkgPSBub25UZXJtaW5hbE5vZGUuZ2V0TXVsdGlwbGljaXR5KCksXG4gICAgICAgIGxhc3RJbmRleCA9IG11bHRpcGxpY2l0eSAtIDE7XG5cbiAgbm9uVGVybWluYWxOb2RlLmJhY2t3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPT09IGxhc3RJbmRleCkge1xuICAgICAgY29uc3QgdGhpcmRDaGlsZE5vZGUgPSBjaGlsZE5vZGU7IC8vL1xuXG4gICAgICByZXN1bHQgPSBjYWxsYmFjayh0aGlyZENoaWxkTm9kZSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVzRnJvbVBhdGhOb2RlLCB0b2tlblR5cGVzRnJvbVBhdGhOb2RlLCBpbmZpbml0ZURlc2NlbnRGcm9tUGF0aE5vZGUgfSBmcm9tIFwiLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXRoIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWVzLCB0b2tlblR5cGVzLCBpbmZpbml0ZURlc2NlbnQpIHtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLnRva2VuVHlwZXMgPSB0b2tlblR5cGVzO1xuICAgIHRoaXMuaW5maW5pdGVEZXNjZW50ID0gaW5maW5pdGVEZXNjZW50O1xuICB9XG5cbiAgZ2V0UnVsZU5hbWVzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lcztcbiAgfVxuXG4gIGdldFRva2VuVHlwZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5UeXBlcztcbiAgfVxuXG4gIGlzSW5maW5pdGVEZXNjZW50KCkge1xuICAgIHJldHVybiB0aGlzLmluZmluaXRlRGVzY2VudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGF0aE5vZGUocGF0aE5vZGUpIHtcbiAgICBjb25zdCBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tUGF0aE5vZGUocGF0aE5vZGUpLFxuICAgICAgICAgIHRva2VuVHlwZXMgPSB0b2tlblR5cGVzRnJvbVBhdGhOb2RlKHBhdGhOb2RlKSxcbiAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSBpbmZpbml0ZURlc2NlbnRGcm9tUGF0aE5vZGUocGF0aE5vZGUpLFxuICAgICAgICAgIHBhdGggPSBuZXcgUGF0aChydWxlTmFtZXMsIHRva2VuVHlwZXMsIGluZmluaXRlRGVzY2VudCk7XG5cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgY2xlYXIsIHB1c2gsIGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoLCBsYXN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW0oYXJyYXksIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gIGlmIChzdGFydEluZGV4IDwgMCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgLy8vXG5cbiAgICBzdGFydEluZGV4ID0gbGVuZ3RoICsgc3RhcnRJbmRleDsgLy8vXG5cbiAgICBlbmRJbmRleCA9IGxlbmd0aCArIGVuZEluZGV4OyAvLy9cbiAgfVxuXG4gIGlmIChlbmRJbmRleCAhPT0gSW5maW5pdHkpIHtcbiAgICBjb25zdCBzdGFydCA9IGVuZEluZGV4ICsgMTtcblxuICAgIGFycmF5LnNwbGljZShzdGFydCk7XG4gIH1cblxuICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gc3RhcnRJbmRleDsgLy8vXG5cbiAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgLi4uZWxlbWVudHMpIHtcbiAgcmV0dXJuIGVsZW1lbnRzLnNvbWUoKGVsZW1lbnQpID0+IGFycmF5LmluY2x1ZGVzKGVsZW1lbnQpKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgY2xlYXIsIHRyaW0sIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaW5kZXhGcm9tU3ByZWFkTm9kZSxcbiAgICAgICAgIHVuaXF1ZUZyb21TcHJlYWROb2RlLFxuICAgICAgICAgZW5kSW5kZXhGcm9tU3ByZWFkTm9kZSxcbiAgICAgICAgIHN0YXJ0SW5kZXhGcm9tU3ByZWFkTm9kZSB9IGZyb20gXCIuL3V0aWxpdGllcy9ub2RlXCI7XG5cbmNvbnN0IHsgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwcmVhZCB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpIHtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgIHRoaXMuZW5kSW5kZXggPSBlbmRJbmRleDtcbiAgICB0aGlzLnVuaXF1ZSA9IHVuaXF1ZTtcbiAgfVxuXG4gIGFkanVzdE5vZGVzKG5vZGVzKSB7XG4gICAgaWYgKHRoaXMudW5pcXVlKSB7XG4gICAgICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVzTGVuZ3RoID4gMSkge1xuICAgICAgICBjbGVhcihub2Rlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyaW0obm9kZXMsIHRoaXMuc3RhcnRJbmRleCwgdGhpcy5lbmRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSAwLFxuICAgICAgICAgIGVuZEluZGV4ID0gSW5maW5pdHksXG4gICAgICAgICAgdW5pcXVlID0gZmFsc2UsXG4gICAgICAgICAgc3ByZWFkID0gbmV3IFNwcmVhZChzdGFydEluZGV4LCBlbmRJbmRleCwgdW5pcXVlKTtcblxuICAgIHJldHVybiBzcHJlYWQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNwcmVhZE5vZGUoc3ByZWFkTm9kZSkge1xuICAgIGxldCBzdGFydEluZGV4ID0gMCxcbiAgICAgICAgZW5kSW5kZXggPSBJbmZpbml0eSxcbiAgICAgICAgdW5pcXVlID0gZmFsc2U7XG5cbiAgICBpZiAoc3ByZWFkTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgaW5kZXggPSBpbmRleEZyb21TcHJlYWROb2RlKHNwcmVhZE5vZGUpO1xuXG4gICAgICBpZiAoaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4OyAvLy9cblxuICAgICAgICBlbmRJbmRleCA9IGluZGV4OyAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4RnJvbVNwcmVhZE5vZGUoc3ByZWFkTm9kZSk7XG5cbiAgICAgICAgZW5kSW5kZXggPSBlbmRJbmRleEZyb21TcHJlYWROb2RlKHNwcmVhZE5vZGUpO1xuICAgICAgfVxuXG4gICAgICB1bmlxdWUgPSB1bmlxdWVGcm9tU3ByZWFkTm9kZShzcHJlYWROb2RlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcHJlYWQgPSBuZXcgU3ByZWFkKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpO1xuXG4gICAgcmV0dXJuIHNwcmVhZDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3ByZWFkRXhwcmVzc2lvbihzcHJlYWRFeHByZXNzaW9uKSB7XG4gICAgbGV0IHN0YXJ0SW5kZXggPSAwLFxuICAgICAgICBlbmRJbmRleCA9IEluZmluaXR5LFxuICAgICAgICB1bmlxdWUgPSBmYWxzZTtcblxuICAgIGlmIChzcHJlYWRFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiA9PT0gRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIpIHtcbiAgICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IC9cXFsoLT9cXGQrKT8oXFwuXFwuXFwuKT8oLT9cXGQrKT9dLyxcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHNwcmVhZEV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcykgfHwgbnVsbCxcbiAgICAgICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpIHx8IG51bGwsXG4gICAgICAgICAgICAgIGZvdXJ0aE1hdGNoID0gZm91cnRoKG1hdGNoZXMpIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhcnRJbmRleCA9IHBhcnNlSW50KHNlY29uZE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IHN0YXJ0SW5kZXg7ICAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm91cnRoTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICBlbmRJbmRleCA9IHBhcnNlSW50KGZvdXJ0aE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gZW5kSW5kZXg7ICAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcHJlYWQgPSBuZXcgU3ByZWFkKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpO1xuXG4gICAgcmV0dXJuIHNwcmVhZDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUGF0aCBmcm9tIFwiLi9wYXRoXCI7XG5pbXBvcnQgU3ByZWFkIGZyb20gXCIuL3NwcmVhZFwiO1xuXG5pbXBvcnQgeyBwYXRoTm9kZUZyb21TdWJFeHByZXNzaW9uTm9kZSwgc3ByZWFkTm9kZUZyb21TdWJFeHByZXNzaW9uTm9kZSwgc3ViRXhwcmVzc2lvbk5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUgfSBmcm9tIFwiLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJFeHByZXNzaW9uIHtcbiAgY29uc3RydWN0b3IocGF0aCwgc3ByZWFkLCBzdWJFeHByZXNzaW9uKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLnNwcmVhZCA9IHNwcmVhZDtcbiAgICB0aGlzLnN1YkV4cHJlc3Npb24gPSBzdWJFeHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoO1xuICB9XG5cbiAgZ2V0U3ByZWFkKCkge1xuICAgIHJldHVybiB0aGlzLnNwcmVhZDtcbiAgfVxuXG4gIGdldFN1YkV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3ViRXhwcmVzc2lvbjtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lcygpIHsgcmV0dXJuIHRoaXMucGF0aC5nZXRSdWxlTmFtZXMoKTsgfVxuXG4gIGdldFRva2VuVHlwZXMoKSB7IHJldHVybiB0aGlzLnBhdGguZ2V0VG9rZW5UeXBlcygpOyB9XG5cbiAgaXNJbmZpbml0ZURlc2NlbnQoKSB7IHJldHVybiB0aGlzLnBhdGguaXNJbmZpbml0ZURlc2NlbnQoKTsgfVxuXG4gIHN0YXRpYyBmcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpIHtcbiAgICBsZXQgc3ViRXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgICBpZiAoc3ViRXhwcmVzc2lvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhdGhOb2RlID0gcGF0aE5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpLFxuICAgICAgICAgICAgc3ByZWFkTm9kZSA9IHNwcmVhZE5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpO1xuXG4gICAgICBzdWJFeHByZXNzaW9uTm9kZSA9IHN1YkV4cHJlc3Npb25Ob2RlRnJvbVN1YkV4cHJlc3Npb25Ob2RlKHN1YkV4cHJlc3Npb25Ob2RlKTsgIC8vL1xuXG4gICAgICBjb25zdCBwYXRoID0gUGF0aC5mcm9tUGF0aE5vZGUocGF0aE5vZGUpLFxuICAgICAgICAgICAgc3ByZWFkID0gU3ByZWFkLmZyb21TcHJlYWROb2RlKHNwcmVhZE5vZGUpO1xuXG4gICAgICBzdWJFeHByZXNzaW9uID0gU3ViRXhwcmVzc2lvbi5mcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpO1xuXG4gICAgICBzdWJFeHByZXNzaW9uID0gbmV3IFN1YkV4cHJlc3Npb24ocGF0aCwgc3ByZWFkLCBzdWJFeHByZXNzaW9uKTsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YkV4cHJlc3Npb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJzcGVjaWFsXCI6IFwiXig/OkB8IXxcXFxcKnxcXFxcfHxcXFxcL3xcXFxcW3xcXFxcXXxcXFxcLlxcXFwuXFxcXC4pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIl5bYS16QS1aXFwtXStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJudW1iZXJcIjogXCJeWzAtOV0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl4uXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciwgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwcmVzc2lvbkxleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEV4cHJlc3Npb25MZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKEV4cHJlc3Npb25MZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhFeHByZXNzaW9uTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICBleHByZXNzaW9uICAgICAgIDo6PSAgcGF0aCBzcHJlYWQ/IHN1YkV4cHJlc3Npb24/ICAgXG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgIHwgIGVycm9yKyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICA7XG4gIFxuICAgIHBhdGggICAgICAgICAgICAgOjo9ICBcIi9cIiBpbmZpbml0ZURlc2NlbnQ/IHNlbGVjdG9ycyA7XG4gICAgXG4gICAgc3ViRXhwcmVzc2lvbiAgICA6Oj0gIHBhdGggc3ByZWFkPyBzdWJFeHByZXNzaW9uPztcblxuICAgIGluZmluaXRlRGVzY2VudCAgOjo9ICBcIi9cIiA7XG4gICAgXG4gICAgc2VsZWN0b3JzICAgICAgICA6Oj0gIHNlbGVjdG9yICggXCJ8XCIgc2VsZWN0b3IgKSogO1xuXG4gICAgc3ByZWFkICAgICAgICAgICA6Oj0gIHVuaXF1ZVxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICB8ICBcIltcIiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAoIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3RhcnRJbmRleCBcIi4uLlwiIGVuZEluZGV4ICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN0YXJ0SW5kZXggXCIuLi5cIiApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIi4uLlwiIGVuZEluZGV4IClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIl1cIiA7XG5cbiAgICBzZWxlY3RvciAgICAgICAgIDo6PSAgcnVsZU5hbWUgfCB0b2tlblR5cGUgO1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBydWxlTmFtZSAgICAgICAgIDo6PSAgW25hbWVdIHwgXCIqXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICB0b2tlblR5cGUgICAgICAgIDo6PSAgXCJAXCI8Tk9fV0hJVEVTUEFDRT4oIFtuYW1lXSB8IFwiKlwiICkgO1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBzdGFydEluZGV4ICAgICAgIDo6PSAgW251bWJlcl0gO1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBlbmRJbmRleCAgICAgICAgIDo6PSAgW251bWJlcl0gO1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBpbmRleCAgICAgICAgICAgIDo6PSAgW251bWJlcl0gO1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICB1bmlxdWUgICAgICAgICAgIDo6PSAgXCIhXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICBcblxuXG4gICAgZXJyb3IuICAgICAgICAgICA6Oj0gIC4gO1xuICAgIFxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoRXhwcmVzc2lvblBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKEV4cHJlc3Npb25QYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEV4cHJlc3Npb25QYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUGF0aCBmcm9tIFwiLi9wYXRoXCI7XG5pbXBvcnQgU3ByZWFkIGZyb20gXCIuL3NwcmVhZFwiO1xuaW1wb3J0IFN1YkV4cHJlc3Npb24gZnJvbSBcIi4vc3ViRXhwcmVzc2lvblwiO1xuaW1wb3J0IEV4cHJlc3Npb25MZXhlciBmcm9tIFwiLi9leHByZXNzaW9uL2xleGVyXCI7XG5pbXBvcnQgRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9leHByZXNzaW9uL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBwYXRoTm9kZUZyb21FeHByZXNzaW9uTm9kZSxcbiAgICAgICAgIHNwcmVhZE5vZGVGcm9tRXhwcmVzc2lvbk5vZGUsXG4gICAgICAgICBlcnJvck5vZGVzRnJvbUV4cHJlc3Npb25Ob2RlLFxuICAgICAgICAgc3ViRXhwcmVzc2lvbk5vZGVGcm9tRXhwcmVzc2lvbk5vZGUgfSBmcm9tIFwiLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5jb25zdCBleHByZXNzaW9uTGV4ZXIgPSBFeHByZXNzaW9uTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGV4cHJlc3Npb25QYXJzZXIgPSBFeHByZXNzaW9uUGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cHJlc3Npb24ge1xuICBjb25zdHJ1Y3RvcihwYXRoLCBzcHJlYWQsIHN1YkV4cHJlc3Npb24pIHtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuc3ByZWFkID0gc3ByZWFkO1xuICAgIHRoaXMuc3ViRXhwcmVzc2lvbiA9IHN1YkV4cHJlc3Npb247XG4gIH1cblxuICBnZXRQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLnBhdGg7XG4gIH1cblxuICBnZXRTcHJlYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3ByZWFkO1xuICB9XG5cbiAgZ2V0U3ViRXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zdWJFeHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UnVsZU5hbWVzKCkgeyByZXR1cm4gdGhpcy5wYXRoLmdldFJ1bGVOYW1lcygpOyB9XG5cbiAgZ2V0VG9rZW5UeXBlcygpIHsgcmV0dXJuIHRoaXMucGF0aC5nZXRUb2tlblR5cGVzKCk7IH1cblxuICBpc0luZmluaXRlRGVzY2VudCgpIHsgcmV0dXJuIHRoaXMucGF0aC5pc0luZmluaXRlRGVzY2VudCgpOyB9XG5cbiAgc3RhdGljIGZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSkge1xuICAgIGNvbnN0IHBhdGhOb2RlID0gcGF0aE5vZGVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUpLFxuICAgICAgICAgIHNwcmVhZE5vZGUgPSBzcHJlYWROb2RlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSxcbiAgICAgICAgICBzdWJFeHByZXNzaW9uTm9kZSA9IHN1YkV4cHJlc3Npb25Ob2RlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSxcbiAgICAgICAgICBwYXRoID0gUGF0aC5mcm9tUGF0aE5vZGUocGF0aE5vZGUpLFxuICAgICAgICAgIHNwcmVhZCA9IFNwcmVhZC5mcm9tU3ByZWFkTm9kZShzcHJlYWROb2RlKSxcbiAgICAgICAgICBzdWJFeHByZXNzaW9uID0gU3ViRXhwcmVzc2lvbi5mcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpLFxuICAgICAgICAgIGV4cHJlc3Npb24gPSBuZXcgRXhwcmVzc2lvbihwYXRoLCBzcHJlYWQsIHN1YkV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIGV4cHJlc3Npb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZykge1xuICAgIGxldCBleHByZXNzaW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGxleGVyID0gZXhwcmVzc2lvbkxleGVyLCAgLy8vXG4gICAgICAgICAgcGFyc2VyID0gZXhwcmVzc2lvblBhcnNlciwgIC8vL1xuICAgICAgICAgIGNvbnRlbnQgPSBleHByZXNzaW9uU3RyaW5nLCAvLy9cbiAgICAgICAgICB0b2tlbnMgPSBsZXhlci50b2tlbmlzZShjb250ZW50KSxcbiAgICAgICAgICBub2RlID0gcGFyc2VyLnBhcnNlKHRva2Vucyk7XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZXhwcmVzc2lvbk5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIGVycm9yTm9kZXMgPSBlcnJvck5vZGVzRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSxcbiAgICAgICAgICAgIGVycm9yTm9kZXNMZW5ndGggPSBlcnJvck5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKGVycm9yTm9kZXNMZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3QgcGF0aE5vZGUgPSBwYXRoTm9kZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSksXG4gICAgICAgICAgICAgIHNwcmVhZE5vZGUgPSBzcHJlYWROb2RlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSxcbiAgICAgICAgICAgICAgc3ViRXhwcmVzc2lvbk5vZGUgPSBzdWJFeHByZXNzaW9uTm9kZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSksXG4gICAgICAgICAgICAgIHBhdGggPSBQYXRoLmZyb21QYXRoTm9kZShwYXRoTm9kZSksXG4gICAgICAgICAgICAgIHNwcmVhZCA9IFNwcmVhZC5mcm9tU3ByZWFkTm9kZShzcHJlYWROb2RlKSxcbiAgICAgICAgICAgICAgc3ViRXhwcmVzc2lvbiA9IFN1YkV4cHJlc3Npb24uZnJvbVN1YkV4cHJlc3Npb25Ob2RlKHN1YkV4cHJlc3Npb25Ob2RlKTtcblxuICAgICAgICBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb24ocGF0aCwgc3ByZWFkLCBzdWJFeHByZXNzaW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcmVzc2lvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgRXhwcmVzc2lvbiBmcm9tIFwiLi9leHByZXNzaW9uXCI7XG5cbmltcG9ydCB7IHB1c2gsIGNsZWFyLCBpbmNsdWRlcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5jb25zdCB7IFdJTERDQVJEX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlcnkge1xuICBjb25zdHJ1Y3RvcihzcHJlYWQsIHN1YlF1ZXJ5LCBydWxlTmFtZXMsIHRva2VuVHlwZXMsIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcykge1xuICAgIHRoaXMuc3ByZWFkID0gc3ByZWFkO1xuICAgIHRoaXMuc3ViUXVlcnkgPSBzdWJRdWVyeTtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLnRva2VuVHlwZXMgPSB0b2tlblR5cGVzO1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICAgIHRoaXMuaW5maW5pdGVEZXNjZW50ID0gaW5maW5pdGVEZXNjZW50O1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMgPSBpbnRlcm1lZGlhdGVOb2RlcztcbiAgfVxuXG4gIGdldFNwcmVhZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zcHJlYTtcbiAgfVxuXG4gIGdldFN1YlF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLnN1YlF1ZXJ5O1xuICB9XG5cbiAgZ2V0UnVsZU5hbWVzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lcztcbiAgfVxuXG4gIGdldFRva2VuVHlwZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5UeXBlcztcbiAgfVxuXG4gIGdldE1heGltdW1EZXB0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXhpbXVtRGVwdGg7XG4gIH1cblxuICBpc0luZmluaXRlRGVzY2VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmZpbml0ZURlc2NlbnQ7XG4gIH1cblxuICBnZXRJbnRlcm1lZGlhdGVOb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm1lZGlhdGVOb2RlcztcbiAgfVxuXG4gIGV4ZWN1dGUobm9kZSwgZGVwdGggPSAwLCBtYXhpbXVtRGVwdGggPSB0aGlzLm1heGltdW1EZXB0aCkge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICB0aGlzLmZpbmQobm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICB0aGlzLmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGNsZWFyKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICB9XG5cbiAgZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gbWF4aW11bURlcHRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICBsZXQgZm91bmQ7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdHlwZXMgPSB0aGlzLnRva2VuVHlwZXMsICAvLy9cbiAgICAgICAgICAgIHR5cGUgPSB0ZXJtaW5hbE5vZGUuZ2V0VHlwZSgpO1xuXG4gICAgICBmb3VuZCA9IGluY2x1ZGVzKHR5cGVzLCB0eXBlLCBXSUxEQ0FSRF9DSEFSQUNURVIpO1xuICAgIH1cblxuICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy5ydWxlTmFtZXMsIHJ1bGVOYW1lLCBXSUxEQ0FSRF9DSEFSQUNURVIpO1xuICAgIH1cblxuICAgIGlmIChmb3VuZCkge1xuICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLnB1c2goaW50ZXJtZWRpYXRlTm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5maW5pdGVEZXNjZW50KSB7XG4gICAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgICAgIG5vblRlcm1pbmFsTm9kZS5mb3JFYWNoQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICB0aGlzLmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICB0aGlzLnNwcmVhZC5hZGp1c3ROb2Rlcyh0aGlzLmludGVybWVkaWF0ZU5vZGVzKTtcblxuICAgIGlmICh0aGlzLnN1YlF1ZXJ5ID09PSBudWxsKSB7XG4gICAgICBwdXNoKG5vZGVzLCB0aGlzLmludGVybWVkaWF0ZU5vZGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5mb3JFYWNoKChpbnRlcm1lZGlhdGVOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGVOb25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgICAgaWYgKGludGVybWVkaWF0ZU5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gaW50ZXJtZWRpYXRlTm9kZTsgLy8vXG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmNsZWFyKCk7XG5cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUuZm9yRWFjaENoaWxkTm9kZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbWF4aW11bURlcHRoID0gSW5maW5pdHkpIHtcbiAgICBjb25zdCBzcHJlYWQgPSBleHByZXNzaW9uLmdldFNwcmVhZCgpLFxuICAgICAgICAgIHN1YlF1ZXJ5ID0gc3ViUXVlcnlGcm9tRXhwcmVzc2lvbihleHByZXNzaW9uKSxcbiAgICAgICAgICBydWxlTmFtZXMgPSBleHByZXNzaW9uLmdldFJ1bGVOYW1lcygpLFxuICAgICAgICAgIHRva2VuVHlwZXMgPSBleHByZXNzaW9uLmdldFRva2VuVHlwZXMoKSxcbiAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSBleHByZXNzaW9uLmlzSW5maW5pdGVEZXNjZW50KCksXG4gICAgICAgICAgaW50ZXJtZWRpYXRlTm9kZXMgPSBbXSxcbiAgICAgICAgICBxdWVyeSA9IG5ldyBRdWVyeShzcHJlYWQsIHN1YlF1ZXJ5LCBydWxlTmFtZXMsIHRva2VuVHlwZXMsIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcyk7XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN1YkV4cHJlc3Npb24oc3ViRXhwcmVzc2lvbikge1xuICAgIGNvbnN0IHNwcmVhZCA9IHN1YkV4cHJlc3Npb24uZ2V0U3ByZWFkKCksXG4gICAgICAgICAgc3ViUXVlcnkgPSBzdWJRdWVyeUZyb21TdWJFeHByZXNzaW9uKHN1YkV4cHJlc3Npb24pLFxuICAgICAgICAgIHJ1bGVOYW1lcyA9IHN1YkV4cHJlc3Npb24uZ2V0UnVsZU5hbWVzKCksXG4gICAgICAgICAgdG9rZW5UeXBlcyA9IHN1YkV4cHJlc3Npb24uZ2V0VG9rZW5UeXBlcygpLFxuICAgICAgICAgIG1heGltdW1EZXB0aCA9IEluZmluaXR5LFxuICAgICAgICAgIGluZmluaXRlRGVzY2VudCA9IHN1YkV4cHJlc3Npb24uaXNJbmZpbml0ZURlc2NlbnQoKSxcbiAgICAgICAgICBpbnRlcm1lZGlhdGVOb2RlcyA9IFtdLFxuICAgICAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHNwcmVhZCwgc3ViUXVlcnksIHJ1bGVOYW1lcywgdG9rZW5UeXBlcywgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nLCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICAgIGxldCBxdWVyeSA9IG51bGw7XG5cbiAgICBjb25zdCBleHByZXNzaW9uID0gRXhwcmVzc2lvbi5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICAgIGlmIChleHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzcHJlYWQgPSBleHByZXNzaW9uLmdldFNwcmVhZCgpLFxuICAgICAgICAgICAgc3ViUXVlcnkgPSBzdWJRdWVyeUZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24pLFxuICAgICAgICAgICAgcnVsZU5hbWVzID0gZXhwcmVzc2lvbi5nZXRSdWxlTmFtZXMoKSxcbiAgICAgICAgICAgIHRva2VuVHlwZXMgPSBleHByZXNzaW9uLmdldFRva2VuVHlwZXMoKSxcbiAgICAgICAgICAgIGluZmluaXRlRGVzY2VudCA9IGV4cHJlc3Npb24uaXNJbmZpbml0ZURlc2NlbnQoKSxcbiAgICAgICAgICAgIGludGVybWVkaWF0ZU5vZGVzID0gW107XG5cbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHNwcmVhZCwgc3ViUXVlcnksIHJ1bGVOYW1lcywgdG9rZW5UeXBlcywgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3ViUXVlcnlGcm9tRXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG4gIGxldCBzdWJRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uZ2V0U3ViRXhwcmVzc2lvbigpO1xuXG4gIGlmIChzdWJFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgcXVlcnkgPSBRdWVyeS5mcm9tU3ViRXhwcmVzc2lvbihzdWJFeHByZXNzaW9uKTtcblxuICAgIHN1YlF1ZXJ5ID0gcXVlcnk7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1YlF1ZXJ5O1xufVxuXG5mdW5jdGlvbiBzdWJRdWVyeUZyb21TdWJFeHByZXNzaW9uKHN1YkV4cHJlc3Npb24pIHtcbiAgbGV0IHN1YlF1ZXJ5ID0gbnVsbDtcblxuICBzdWJFeHByZXNzaW9uID0gc3ViRXhwcmVzc2lvbi5nZXRTdWJFeHByZXNzaW9uKCk7IC8vL1xuXG4gIGlmIChzdWJFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgcXVlcnkgPSBRdWVyeS5mcm9tU3ViRXhwcmVzc2lvbihzdWJFeHByZXNzaW9uKTtcblxuICAgIHN1YlF1ZXJ5ID0gcXVlcnk7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1YlF1ZXJ5O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUXVlcnkgZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgRXhwcmVzc2lvbiBmcm9tIFwiLi4vZXhwcmVzc2lvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUV4cHJlc3Npb25TdHJpbmcobm9kZSwgZXhwcmVzc2lvblN0cmluZywgbWF4aW11bURlcHRoKSB7XG4gIGxldCBub2RlcyA9IG51bGw7XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IEV4cHJlc3Npb24uZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgaWYgKGV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCk7XG5cbiAgICBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcXVlcnlCeUV4cHJlc3Npb25TdHJpbmdcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeHByZXNzaW9uIH0gZnJvbSBcIi4vZXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeHByZXNzaW9uTGV4ZXIgfSBmcm9tIFwiLi9leHByZXNzaW9uL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi9leHByZXNzaW9uL3BhcnNlclwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEVBRCA9IFwiaGVhZFwiO1xuZXhwb3J0IGNvbnN0IFNUWUxFID0gXCJzdHlsZVwiO1xuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIjtcbmV4cG9ydCBjb25zdCBUV09fU1BBQ0VTID0gXCIgIFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRV9MRU5HVEggPSA2O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKHF1ZXJ5LCBub2RlLCB0b2tlbnMpIHtcbiAgbGV0IGNvbnRlbnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICAgIG5vZGUgPSBmaXJzdE5vZGU7IC8vL1xuXG4gICAgY29udGVudCA9IGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2VucyksXG4gICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKTtcblxuICBsZXQgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4OyBpbmRleCA8PSBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdLFxuICAgICAgICAgIHRva2VuQ29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIGNvbnRlbnQgKz0gdG9rZW5Db250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLXF1ZXJ5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORywgVFdPX1NQQUNFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IGltcG9ydGFudFF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoXCIvKi9pbXBvcnRhbnRcIiksXG4gICAgICBwcm9wZXJ0eU5hbWVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiLyovcHJvcGVydHlOYW1lXCIpLFxuICAgICAgcHJvcGVydHlWYWx1ZXNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiLyovcHJvcGVydHlWYWx1ZXNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY2xhcmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJvcGVydHlWYWx1ZXMsIHByb3BlcnR5TmFtZSwgaW1wb3J0YW50KSB7XG4gICAgdGhpcy5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuICAgIHRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgIHRoaXMuaW1wb3J0YW50ID0gaW1wb3J0YW50O1xuICB9XG5cbiAgZ2V0UHJvcGVydHlWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlWYWx1ZXM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlOYW1lO1xuICB9XG5cbiAgZ2V0SW1wb3J0YW50KCkge1xuICAgIHJldHVybiB0aGlzLmltcG9ydGFudDtcbiAgfVxuXG4gIG1hdGNoUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSAodGhpcy5wcm9wZXJ0eU5hbWUgPT09IHByb3BlcnR5TmFtZSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pIHtcbiAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eU5hbWUoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGhpcy5tYXRjaFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpOyAvLy9cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hEZWNsYXJhdGlvbnMoZGVjbGFyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5zb21lRGVjbGFyYXRpb24oKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5tYXRjaERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKTtcblxuICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIGFzQ1NTKGluZGVudCkge1xuICAgIGluZGVudCA9IGluZGVudCArIFRXT19TUEFDRVM7XG5cbiAgICBjb25zdCBjc3MgPSBgJHtpbmRlbnR9JHt0aGlzLnByb3BlcnR5TmFtZX06ICR7dGhpcy5wcm9wZXJ0eVZhbHVlc30ke3RoaXMuaW1wb3J0YW50fTtcXG5gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBwcm9wZXJ0eVZhbHVlc0NvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2Vucyhwcm9wZXJ0eVZhbHVlc1F1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHByb3BlcnR5TmFtZUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2Vucyhwcm9wZXJ0eU5hbWVRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBpbXBvcnRhbnRDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoaW1wb3J0YW50UXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcHJvcGVydHlWYWx1ZXMgPSBwcm9wZXJ0eVZhbHVlc0NvbnRlbnQsIC8vL1xuICAgICAgICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZUNvbnRlbnQsIC8vL1xuICAgICAgICAgIGltcG9ydGFudCA9IChpbXBvcnRhbnRDb250ZW50ID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIGAgJHtpbXBvcnRhbnRDb250ZW50fWAsXG4gICAgICAgICAgZGVjbGFyYXRpb24gPSBuZXcgRGVjbGFyYXRpb24ocHJvcGVydHlWYWx1ZXMsIHByb3BlcnR5TmFtZSwgaW1wb3J0YW50KTtcblxuICAgIHJldHVybiBkZWNsYXJhdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZm9yd2FyZHNGb3JFYWNoLCBiYWNrd2FyZHNGb3JFYWNoIH0gPSBhcnJheVV0aWxpdGllcztcblxuY29uc3QgZGVjbGFyYXRpb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiLyovZGVjbGFyYXRpb25cIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY2xhcmF0aW9ucyB7XG4gIGNvbnN0cnVjdG9yKGFycmF5KSB7XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xuICB9XG5cbiAgc29tZURlY2xhcmF0aW9uKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmFycmF5LnNvbWUoY2FsbGJhY2spOyB9XG5cbiAgZm9yd2FyZHNGb3JFYWNoRGVjbGFyYXRpb24oY2FsbGJhY2spIHsgZm9yd2FyZHNGb3JFYWNoKHRoaXMuYXJyYXksIGNhbGxiYWNrKTsgfVxuXG4gIGJhY2t3YXJkc0ZvckVhY2hEZWNsYXJhdGlvbihjYWxsYmFjaykgeyBiYWNrd2FyZHNGb3JFYWNoKHRoaXMuYXJyYXksIGNhbGxiYWNrKTsgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2hEZWNsYXJhdGlvbigoZGVjbGFyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbi5tYXRjaERlY2xhcmF0aW9ucyh0aGlzKTsgLy8vXG5cbiAgICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQoZGVjbGFyYXRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQpO1xuXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgKz0gZGVjbGFyYXRpb25DU1M7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWNsYXJhdGlvbnNDU1M7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBjc3MgPSAoY2xhc3NOYW1lID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgOiAgLy8vXG4gICAgICAgICAgICAgICAgICAgIGAke2luZGVudH0uJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfSR7aW5kZW50fX1cblxuYDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLXF1ZXJ5XCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IHNlbGVjdG9yc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoXCIvL3NlbGVjdG9yc1wiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9ycywgZGVjbGFyYXRpb25zKSB7XG4gICAgdGhpcy5zZWxlY3RvcnMgPSBzZWxlY3RvcnM7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRTZWxlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0b3JzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldCkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHJ1bGVTZXQuZ2V0RGVjbGFyYXRpb25zKCk7XG5cbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gIH1cblxuICBmaW5kTWF0Y2hpbmdSdWxlU2V0KHJ1bGVTZXRzKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldHMuZmluZCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3JzID0gcnVsZVNldC5nZXRTZWxlY3RvcnMoKSxcbiAgICAgICAgICAgIHNlbGVjdG9yc01hdGNoID0gKHNlbGVjdG9ycyA9PT0gdGhpcy5zZWxlY3RvcnMpLFxuICAgICAgICAgICAgcnVsZVNldHNNYXRjaCA9IHNlbGVjdG9yc01hdGNoOyAvLy9cblxuICAgICAgaWYgKHJ1bGVTZXRzTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDsgLy8vXG5cbiAgICByZXR1cm4gbWF0Y2hpbmdSdWxlU2V0O1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpIHtcbiAgICBsZXQgY3NzID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MobnVsbCwgaW5kZW50KTtcblxuICAgIGlmIChkZWNsYXJhdGlvbnNDU1MgIT09IEVNUFRZX1NUUklORykge1xuICAgICAgIGNzcyA9IGAke2luZGVudH0uJHtjbGFzc05hbWV9JHt0aGlzLnNlbGVjdG9yc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9JHtpbmRlbnR9fVxuXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0ID0gbmV3IFJ1bGVTZXQoc2VsZWN0b3JzLCBkZWNsYXJhdGlvbnMpO1xuXG4gICAgcmV0dXJuIHJ1bGVTZXQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IHNlbGVjdG9yc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoc2VsZWN0b3JzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIHNlbGVjdG9ycyA9IGAke3NlbGVjdG9yc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHNlbGVjdG9ycztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IFJ1bGVTZXQgZnJvbSBcIi4vcnVsZVNldFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHJ1bGVTZXRRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiLyovcnVsZVNldFwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldHMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldHMpIHtcbiAgICBydWxlU2V0cy5mb3JFYWNoKChydWxlU2V0KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ1J1bGVTZXQgPSBydWxlU2V0LmZpbmRNYXRjaGluZ1J1bGVTZXQodGhpcy5hcnJheSk7IC8vL1xuXG4gICAgICAobWF0Y2hpbmdSdWxlU2V0ID09PSBudWxsKSA/XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChydWxlU2V0KSA6XG4gICAgICAgICAgbWF0Y2hpbmdSdWxlU2V0LnVuc2hpZnQocnVsZVNldCk7XG4gICAgfSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgY29uc3QgY3NzID0gdGhpcy5hcnJheS5yZWR1Y2UoKGNzcywgcnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgcnVsZVNldENTUyA9IHJ1bGVTZXQuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpO1xuXG4gICAgICBjc3MgKz0gcnVsZVNldENTUztcblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBydWxlU2V0Tm9kZXMgPSBydWxlU2V0UXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IHJ1bGVTZXROb2Rlcy5tYXAoKHJ1bGVTZXROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gcnVsZVNldE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZVNldCA9IFJ1bGVTZXQuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVsZVNldHMgPSBuZXcgUnVsZVNldHMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIHJ1bGVTZXRzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW0oc3RyaW5nKSB7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9bXFxuXFxyXSQvZywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLXF1ZXJ5XCI7XG5cbmltcG9ydCBSdWxlU2V0cyBmcm9tIFwiLi9ydWxlU2V0c1wiO1xuaW1wb3J0IERlY2xhcmF0aW9ucyBmcm9tIFwiLi9kZWNsYXJhdGlvbnNcIjtcblxuaW1wb3J0IHsgdHJpbSB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBUV09fU1BBQ0VTLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBxdWVyaWVzUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhcIi9tZWRpYS9tZWRpYVF1ZXJpZXNcIik7IC8vL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYSB7XG4gIGNvbnN0cnVjdG9yKGRlY2xhcmF0aW9ucywgcnVsZVNldHMsIHF1ZXJpZXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9ucztcbiAgICB0aGlzLnJ1bGVTZXRzID0gcnVsZVNldHM7XG4gICAgdGhpcy5xdWVyaWVzID0gcXVlcmllcztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRSdWxlU2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlU2V0cztcbiAgfVxuXG4gIGdldFF1ZXJpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllcztcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgaW5kZW50ID0gaW5kZW50ICsgVFdPX1NQQUNFUztcblxuICAgIGxldCBjc3MgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICBjb25zdCBydWxlU2V0c0NTUyA9IHRoaXMucnVsZVNldHMuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgIGxldCBydWxlU2V0c0RlY2xhcmF0aW9uc0NTUyA9IGAke2RlY2xhcmF0aW9uc0NTU30ke3J1bGVTZXRzQ1NTfWA7XG5cbiAgICBpZiAocnVsZVNldHNEZWNsYXJhdGlvbnNDU1MgIT09IEVNUFRZX1NUUklORykge1xuICAgICAgcnVsZVNldHNEZWNsYXJhdGlvbnNDU1MgPSB0cmltKHJ1bGVTZXRzRGVjbGFyYXRpb25zQ1NTKTtcblxuICAgICAgY3NzID0gYEBtZWRpYSAke3RoaXMucXVlcmllc30ge1xuJHtydWxlU2V0c0RlY2xhcmF0aW9uc0NTU319XG5cbmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcXVlcmllcyA9IHF1ZXJpZXNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IE1lZGlhKGRlY2xhcmF0aW9ucywgcnVsZVNldHMsIHF1ZXJpZXMpO1xuXG4gICAgcmV0dXJuIG1lZGlhO1xuICB9XG59XG5cbmZ1bmN0aW9uIHF1ZXJpZXNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgcXVlcmllc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocXVlcmllc1F1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICBxdWVyaWVzID0gYCR7cXVlcmllc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHF1ZXJpZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLXF1ZXJ5XCI7XG5cbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9tZWRpYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IG1lZGlhUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhcIi9zdHlsZXNoZWV0L21lZGlhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYXMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQobWVkaWFzKSB7XG4gICAgbWVkaWFzLmZvckVhY2goKG1lZGlhKSA9PiB7XG4gICAgICB0aGlzLmFycmF5LnVuc2hpZnQobWVkaWEpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIG1lZGlhKSA9PiB7XG4gICAgICBjb25zdCBtZWRpYUNTUyA9IG1lZGlhLmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgICAgY3NzICs9IG1lZGlhQ1NTO1xuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhTm9kZXMgPSBtZWRpYVF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBtZWRpYU5vZGVzLm1hcCgobWVkaWFOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbWVkaWFOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIG1lZGlhID0gTWVkaWEuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIG1lZGlhO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1lZGlhcyA9IG5ldyBNZWRpYXMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIG1lZGlhcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBwZXJjZW50YWdlUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhcIi8qL0BwZXJjZW50YWdlXCIpLFxuICAgICAgZGVjbGFyYXRpb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiLyovZGVjbGFyYXRpb25cIik7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBLZXlmcmFtZSB7XG4gIGNvbnN0cnVjdG9yKHBlcmNlbnRhZ2UsIGRlY2xhcmF0aW9uKSB7XG4gICAgdGhpcy5wZXJjZW50YWdlID0gcGVyY2VudGFnZTtcbiAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247XG4gIH1cblxuICBnZXRQZXJjZW50YWdlKCkge1xuICAgIHJldHVybiB0aGlzLnBlcmNlbnRhZ2U7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbjtcbiAgfVxuXG4gIGFzQ1NTKGluZGVudCkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uQ1NTID0gdGhpcy5kZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQpLFxuICAgICAgICAgIGNzcyA9IGAke2luZGVudH0ke3RoaXMucGVyY2VudGFnZX0geyBcbiR7ZGVjbGFyYXRpb25DU1N9JHtpbmRlbnR9fVxcbmA7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHBlcmNlbnRhZ2VDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocGVyY2VudGFnZVF1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlQ29udGVudCwgLy8vXG4gICAgICAgICAgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBmaXJzdERlY2xhcmF0aW9uTm9kZSA9IGZpcnN0KGRlY2xhcmF0aW9uTm9kZXMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uTm9kZSA9IGZpcnN0RGVjbGFyYXRpb25Ob2RlOyAvLy9cblxuICAgIG5vZGUgPSBkZWNsYXJhdGlvbk5vZGU7IC8vL1xuXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGtleWZyYW1lID0gbmV3IEtleWZyYW1lKHBlcmNlbnRhZ2UsIGRlY2xhcmF0aW9uKTtcblxuICAgIHJldHVybiBrZXlmcmFtZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuXG5pbXBvcnQgS2V5ZnJhbWUgZnJvbSBcIi4va2V5ZnJhbWVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HLCBUV09fU1BBQ0VTIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRlbnRcIjtcblxuY29uc3Qga2V5ZnJhbWVRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiL2tleWZyYW1lcy9rZXlmcmFtZVwiKSxcbiAgICAgIGlkZW50aWZpZXJRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKFwiL2tleWZyYW1lcy9AaWRlbnRpZmllclwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgS2V5ZnJhbWVzIHtcbiAgY29uc3RydWN0b3IoYXJyYXksIGlkZW50aWZpZXIpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gICAgdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjtcbiAgfVxuXG4gIGdldElkZW50aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpZmllcjtcbiAgfVxuXG4gIGFzQ1NTKGluZGVudCkge1xuICAgIGluZGVudCA9IGluZGVudCArIFRXT19TUEFDRVM7XG5cbiAgICBjb25zdCBrZXlmcmFtZXNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoa2V5ZnJhbWVzQ1NTLCBrZXlmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ZnJhbWVDU1MgPSBrZXlmcmFtZS5hc0NTUyhpbmRlbnQpO1xuXG4gICAgICAgICAgICBrZXlmcmFtZXNDU1MgKz0ga2V5ZnJhbWVDU1M7XG5cbiAgICAgICAgICAgIHJldHVybiBrZXlmcmFtZXNDU1M7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBjc3MgPSBgQGtleWZyYW1lcyAke3RoaXMuaWRlbnRpZmllcn0ge1xuJHtrZXlmcmFtZXNDU1N9fVxuXG5gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBrZXlmcmFtZU5vZGVzID0ga2V5ZnJhbWVRdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICAgIGFycmF5ID0ga2V5ZnJhbWVOb2Rlcy5tYXAoKGtleWZyYW1lTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGtleWZyYW1lTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBrZXlmcmFtZSA9IEtleWZyYW1lLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBrZXlmcmFtZTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBpZGVudGlmaWVyQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKGlkZW50aWZpZXJRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckNvbnRlbnQsIC8vL1xuICAgICAgICAgIGtleWZyYW1lcyA9IG5ldyBLZXlmcmFtZXMoYXJyYXksIGlkZW50aWZpZXIpO1xuXG4gICAgcmV0dXJuIGtleWZyYW1lcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuXG5pbXBvcnQgS2V5ZnJhbWVzIGZyb20gXCIuL2tleWZyYW1lc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGtleWZyYW1lc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoXCIvc3R5bGVzaGVldC9rZXlmcmFtZXNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEtleWZyYW1lc3Mge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQoa2V5ZnJhbWVzcykge1xuICAgIC8vL1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIGtleWZyYW1lcykgPT4ge1xuICAgICAgY29uc3Qga2V5ZnJhbWVzQ1NTID0ga2V5ZnJhbWVzLmFzQ1NTKGluZGVudCk7XG5cbiAgICAgIGNzcyArPSBrZXlmcmFtZXNDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qga2V5ZnJhbWVzTm9kZXMgPSBrZXlmcmFtZXNRdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICAgIGFycmF5ID0ga2V5ZnJhbWVzTm9kZXMubWFwKChrZXlmcmFtZXNOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0ga2V5ZnJhbWVzTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBrZXlmcmFtZXMgPSBLZXlmcmFtZXMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIGtleWZyYW1lcztcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBrZXlmcmFtZXNzID0gbmV3IEtleWZyYW1lc3MoYXJyYXkpO1xuXG4gICAgcmV0dXJuIGtleWZyYW1lc3M7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lZGlhcyBmcm9tIFwiLi9zdHlsZS9tZWRpYXNcIjtcbmltcG9ydCBSdWxlU2V0cyBmcm9tIFwiLi9zdHlsZS9ydWxlU2V0c1wiO1xuaW1wb3J0IEtleWZyYW1lc3MgZnJvbSBcIi4vc3R5bGUva2V5ZnJhbWVzc1wiO1xuaW1wb3J0IERlY2xhcmF0aW9ucyBmcm9tIFwiLi9zdHlsZS9kZWNsYXJhdGlvbnNcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBrZXlmcmFtZXNzLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5rZXlmcmFtZXNzID0ga2V5ZnJhbWVzcztcbiAgICB0aGlzLnJ1bGVTZXRzID0gcnVsZVNldHM7XG4gICAgdGhpcy5tZWRpYXMgPSBtZWRpYXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0S2V5ZnJhbWVzcygpIHtcbiAgICByZXR1cm4gdGhpcy5rZXlmcmFtZXNzO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBnZXRNZWRpYXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVkaWFzO1xuICB9XG5cbiAgZXh0ZW5kcyhzdXBlclN0eWxlKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25zID0gc3VwZXJTdHlsZS5nZXREZWNsYXJhdGlvbnMoKSxcbiAgICAgICAgICBrZXlmcmFtZXNzID0gc3VwZXJTdHlsZS5nZXRLZXlmcmFtZXNzKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIGtleWZyYW1lc3MsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIGtleWZyYW1lc3MsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5rZXlmcmFtZXNzLnVuc2hpZnQoa2V5ZnJhbWVzcyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBpbmRlbnQgPSBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpLFxuICAgICAgICAgIGtleWZyYW1lc3NDU1MgPSB0aGlzLmtleWZyYW1lc3MuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpLFxuICAgICAgICAgIHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIGluZGVudCksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpLFxuICAgICAgICAgIGNzcyA9IGAke2RlY2xhcmF0aW9uc0NTU30ke2tleWZyYW1lc3NDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBrZXlmcmFtZXNzID0gS2V5ZnJhbWVzcy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHJ1bGVTZXRzID0gUnVsZVNldHMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYXMgPSBNZWRpYXMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBzdHlsZSA9IG5ldyBTdHlsZShkZWNsYXJhdGlvbnMsIGtleWZyYW1lc3MsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHlsZSBmcm9tIFwiLi4vc3R5bGVcIjtcbmltcG9ydCBDU1NMZXhlciBmcm9tIFwiLi4vY3NzL2xleGVyXCI7XG5pbXBvcnQgQ1NTUGFyc2VyIGZyb20gXCIuLi9jc3MvcGFyc2VyXCI7XG5cbmltcG9ydCB7IEhFQUQsIFNUWUxFLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGNzc0xleGVyID0gQ1NTTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGNzc1BhcnNlciA9IENTU1BhcnNlci5mcm9tTm90aGluZygpO1xuXG5pZiAoIWdsb2JhbFRoaXMuc3R5bGVNYXApIHtcbiAgZ2xvYmFsVGhpcy5zdHlsZU1hcCA9IHt9O1xufVxuXG5jb25zdCB7IHN0eWxlTWFwIH0gPSBnbG9iYWxUaGlzO1xuXG5mdW5jdGlvbiByZW5kZXJTdHlsZShzdHlsZSkge1xuICBjb25zdCBoZWFkRE9NRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoSEVBRCksXG4gICAgICAgIHN0eWxlRE9NRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoU1RZTEUpLFxuICAgICAgICBpbm5lckhUTUwgPSBgICAgICAgICBcbiR7c3R5bGV9XG5gO1xuXG4gIE9iamVjdC5hc3NpZ24oc3R5bGVET01FbGVtZW50LCB7XG4gICAgaW5uZXJIVE1MXG4gIH0pO1xuXG4gIGhlYWRET01FbGVtZW50LmFwcGVuZENoaWxkKHN0eWxlRE9NRWxlbWVudCk7XG5cbiAgcmV0dXJuIHN0eWxlRE9NRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3R5bGVzKCkge1xuICBjb25zdCBzdHlsZXNDU1MgPSByZXRyaWV2ZVN0eWxlc0NTUygpLFxuICAgICAgICBzdHlsZSA9IHN0eWxlc0NTUzsgIC8vL1xuXG4gIHJlbmRlclN0eWxlKHN0eWxlKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTdHlsZShhcmdzLCBjbGFzc05hbWUsIHN1cGVyU3R5bGUgPSBudWxsKSB7XG4gIGNvbnN0IHN0cmluZ3MgPSBhcmdzLnNoaWZ0KCksXHQvLy9cbiAgICAgICAgY29udGVudCA9IHN0cmluZ3MucmVkdWNlKChjb250ZW50LCBzdHJpbmcsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpbmRleF0gfHwgbnVsbDtcblxuICAgICAgICAgIGNvbnRlbnQgPSAoYXJnID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRlbnR9JHtzdHJpbmd9JHthcmd9YDtcblxuICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpLFxuICAgICAgICB0b2tlbnMgPSBjc3NMZXhlci50b2tlbmlzZShjb250ZW50KSxcbiAgICAgICAgbm9kZSA9IGNzc1BhcnNlci5wYXJzZSh0b2tlbnMpLFxuICAgICAgICBzdHlsZSA9IFN0eWxlLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgaWYgKHN1cGVyU3R5bGUgIT09IG51bGwpIHtcbiAgICBzdHlsZS5leHRlbmRzKHN1cGVyU3R5bGUpO1xuICB9XG5cbiAgc3R5bGVNYXBbY2xhc3NOYW1lXSA9IHN0eWxlO1xufVxuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSkge1xuICBjb25zdCBzdHlsZSA9IHN0eWxlTWFwW2NsYXNzTmFtZV0gfHwgbnVsbDtcblxuICByZXR1cm4gc3R5bGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmVuZGVyU3R5bGUsXG4gIHJlbmRlclN0eWxlcyxcbiAgZ2VuZXJhdGVTdHlsZSxcbiAgcmV0cmlldmVTdHlsZVxufTtcblxuZnVuY3Rpb24gcmV0cmlldmVTdHlsZXNDU1MoKSB7XG4gIGNvbnN0IGNsYXNzTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZU1hcCksXG4gICAgICAgIHN0eWxlc0NTUyA9IGNsYXNzTmFtZXMucmVkdWNlKChzdHlsZXNDU1MsIGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0eWxlID0gcmV0cmlldmVTdHlsZShjbGFzc05hbWUpLFxuICAgICAgICAgICAgICAgIHN0eWxlQ1NTID0gc3R5bGUuYXNDU1MoY2xhc3NOYW1lKTtcblxuICAgICAgICAgIHN0eWxlc0NTUyArPSBzdHlsZUNTUztcblxuICAgICAgICAgIHJldHVybiBzdHlsZXNDU1M7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHN0eWxlc0NTUztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ0hBUkFDVEVSUywgRU1QVFlfU1RSSU5HLCBDTEFTU19OQU1FX0xFTkdUSCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgbGVuZ3RoID0gQ0xBU1NfTkFNRV9MRU5HVEgsXG4gICAgICBjaGFyYWN0ZXJzID0gQ0hBUkFDVEVSUyxcbiAgICAgIGNoYXJhY3RlcnNMZW5ndGggPSBjaGFyYWN0ZXJzLmxlbmd0aDtcblxuY29uc3QgY2xhc3NOYW1lcyA9IFtdO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDbGFzc05hbWUoKSB7XG4gIGxldCBjbGFzc05hbWUgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgY291bnQgPSAwOyBjb3VudCA8IGxlbmd0aDsgY291bnQrKykge1xuICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVyc0xlbmd0aCksXG4gICAgICAgICAgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpbmRleF07XG5cbiAgICBjbGFzc05hbWUgKz0gY2hhcmFjdGVyO1xuICB9XG5cbiAgY29uc3QgY2xhc3NOYW1lc0luY2x1ZGVzQ2xhc3NOYW1lID0gY2xhc3NOYW1lcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xuXG4gIGlmICghY2xhc3NOYW1lc0luY2x1ZGVzQ2xhc3NOYW1lKSB7XG4gICAgY2xhc3NOYW1lcy5wdXNoKGNsYXNzTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgY2xhc3NOYW1lID0gZ2VuZXJhdGVDbGFzc05hbWUoKTtcbiAgfVxuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXRyaWV2ZUNsYXNzTmFtZShlbGVtZW50KSB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lIH0gPSBlbGVtZW50LnJlYWN0RnVuY3Rpb24gfHwgZWxlbWVudC5yZWFjdENvbXBvbmVudC5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gY2xhc3NOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdlbmVyYXRlQ2xhc3NOYW1lLFxuICByZXRyaWV2ZUNsYXNzTmFtZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyB0YWdOYW1lcyB9IGZyb20gXCIuL3RhZ05hbWVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTU0xleGVyIH0gZnJvbSBcIi4vY3NzL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTU1BhcnNlciB9IGZyb20gXCIuL2Nzcy9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3R5bGVzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0eWxlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjbGFzc05hbWVVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvY2xhc3NOYW1lXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHN0eWxlc1V0aWxpdGllcyB9IGZyb20gXCIuL2luZGV4XCI7IC8vL1xuXG5jb25zdCB7IGdlbmVyYXRlU3R5bGUsIHJldHJpZXZlU3R5bGUsIHJlbmRlclN0eWxlcyB9ID0gc3R5bGVzVXRpbGl0aWVzO1xuXG5jb25zdCBmaXJhQ29kZUZvbnRNaXhpbiA9IGBcblxuICBmb250LXNpemU6IDEuM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGZvbnQtZmFtaWx5OiBcIkZpcmEgQ29kZVwiO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OyAvKiBGb3JjZSBsaWdhdHVyZXMgZm9yIFdlYmtpdCwgQmxpbmssIEdlY2tvICovXG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJjYWx0XCIgMTsgIC8qIEVuYWJsZSBsaWdhdHVyZXMgZm9yIElFIDEwKywgRWRnZSAqL1xuXG5gO1xuXG5jb25zdCBtb25vc3BhY2VGb250TWl4aW4gPSBgXG5cbiAgZm9udC1zaXplOiAxLjNyZW07XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICAgXG5gO1xuXG5nZW5lcmF0ZVN0eWxlKFtbYFxuXG4gIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG5cbiAgZGlzcGxheTogbm9uZTtcbiAgXG4gIC5hY3RpdmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG4gIFxuICBAa2V5ZnJhbWVzIHJlZGlzaCB7XG4gICAgMCUgeyBjb2xvcjogZGFya3JlZDsgfVxuICAgIDUwJSB7IGNvbG9yOiByZWQ7IH1cbiAgICAxMDAlIHsgY29sb3I6IGxpZ2h0cmVkOyB9XG4gIH1cbiAgXG4gIEBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuXG4gICAgcGFkZGluZy10b3A6IDFyZW07IFxuICAgIFxuICAgIC5tZW51IHtcbiAgICAgIG1hcmdpbjogMDsgICAgXG4gICAgfVxuXG4gIH1cblxuYF1dLCBcImFiY1wiKTtcblxuY29uc3Qgc3VwZXJTdHlsZSA9IHJldHJpZXZlU3R5bGUoXCJhYmNcIik7XG5cbmdlbmVyYXRlU3R5bGUoW1tgXG5cbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiAxMDAlO1xuICBjdXJzb3I6IGF1dG87XG4gIHJlc2l6ZTogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdGFiLXNpemU6IDI7XG4gIGJvcmRlci10b3A6IG5vbmU7XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICBjYXJldC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG4gIG92ZXJmbG93LXdyYXA6IG5vcm1hbDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgQGtleWZyYW1lcyBibHVlaXNoIHtcbiAgICAwJSB7IGNvbG9yOiBkYXJrYmx1ZTsgfVxuICAgIDUwJSB7IGNvbG9yOiBibHVlOyB9XG4gICAgMTAwJSB7IGNvbG9yOiBsaWdodGJsdWU7IH1cbiAgfVxuICBcbiAgOjpzZWxlY3Rpb24geyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICBcbiAgJHttb25vc3BhY2VGb250TWl4aW59XG5cbiAgLmZpcmEtY29kZSB7XG5cbiAgICAke2ZpcmFDb2RlRm9udE1peGlufVxuICAgIFxuICB9XG4gIFxuYF1dLCBcImRlZlwiLCBzdXBlclN0eWxlKTtcblxucmVuZGVyU3R5bGVzKCk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7O0FBQUE7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
|